ARM Development Suite v1.2
ARM 동작 모드
ARM 레지스터
Program Status Register N Z C V I F T M Reserved 31 30 29 28 27 8 7 6 5 4 Control field Extension field Status field Flag field Condition Code Flags N Negative result from ALU Z Zero result from ALU C ALU operation caused Carry V ALU operation oVerflowed Mode bits M[4:0] Mode 0b10000 User 0b11111 System 0b10001 FIQ 0b10010 IRQ 0b10011 Supervisor 0b10111 Abort 0b11011 Undefined Control bits I 1: disables IRQ F 1: disables FIQ T 1: Thumb, 0: ARM
Flag field N (Negative/Less Than Flag) Z (Zero Flag) 연산 결과가 음수 1, 양수 0 Z (Zero Flag) 연산 결과가 0 1, 0이 아니면 0 C (Carry/Borrow/Extend Flag) 자리 올림이나 내림이 발생한 경우, Shift 연산 등에서 사용 덧셈 명령 (CMN 포함): 캐리 발생시 1 뺄셈 명령 (CMP 포함): borrow 발생시 0 Shift 명령 : 마지막으로 쉬프트되어 나온 비트 V (Overflow Flag) 연산의 결과 (덧셈, 뺄셈)가 오버플로우 되었을 경우 1
Conditional Instruction
CMN – 음수이면 C,Z set TEQ – 같으면 Z set TST – 1이 아니면 Z set
ARM 명령어 실습 CodeWarrior 에서 ’03’ New Project 생성 새로운 파일 생성 파일이름.s AREA ARMex, CODE, READONLY ENTRY start … stop B . END
ARM 명령어 실습1 실습 1 start LDR R2, =0x12345678 LDR R3, =0xAABBCCDD MOV R0, R2, LSR #24 ORR R3, R0, R3, LSL #8 stop
ARM 명령어 실습2 실습 2 start LDR R0, =0xFFFFFFFE LDR R1, =0x0 LDR R2, =0xFFFFFFFF LDR R3, =0x0 add64 ADDS R0, R0, R2 ADC R1, R1, R3 aub64 SUBS R0, R0, R2 SBC R1, R1, R3 stop
ARM 명령어 실습 (과제) if ( x >= y ) R0 = R0 * 100 + R1 의 연산을 수행하기 위한 어셈블리어를 작성하고 실습한다.(단, MUL명령어 사용 금지) 다음과 같은 C 언어 코드를 수행하는 어셈블리어를 작성한다. x, y 의 값을 다양하게 변경한 결과를 첨부한다. if ( x >= y ) x = x – y; 제출양식 표지 1. 문제정의 2. 해결방법 3. 소스 4. 결과(실행화면-Register상태값 캡쳐) 5. 느낀점