1、ARM嵌入式系统结构与编程习题答11ARM 嵌入式系统结构与编程习题答案 第1章 ?1. ?“?”? ?:?:?,?,? ?,?,?,?,?,? ?, ?, ? ? ? “? ?”? 2.?,? ?: ? 20 ? 70 ?, ? ?,? 30 ? ?Intel ? 1971 ? 4 ? ? 4004, ? 80 ? 8051 ? ?20 ? 80 ?,?“?” ,? ?,?20 ? 90 ? ? 21 ?,?,MCU ? ?,? ARM ?,? ?,? 3?,?,? ?:? Linux ? uC/OS-II ? Linux ? Linux ?, ? ?,?:?,? ?,?,?,?,? uC/
2、OS ?,?:?,?,? ?,?,?,?,?,? 4.? ?:?, “?”? ?:?,?,?,?, ? 5? ?:?:1.?,? ?2.?,?,? ?3.?4.? ?5.? ? 2 ? ARM ? ARM ?1.? ARM ? ?:ARM ? ETM(Embedded Trace Macro) ,? ARM ?ARM ? JTAG(Joint Test Action Group ?1 2?)? Embedded ICE ? ARM ?,? ? CPU ?,? ?,? CPU ?ETM ?,? CPU ?,? TAP(Test Access Port)?(?) ,? ARM ?,ETM,? IC
3、E ? 2. ? ARM7TDMI-S ? ?:ARM7 T D M I S ? ARM ? Advanced RISC Machines ? 7 ?; T:? 16 ? Thumb ?; D:? JTAG ?; M:?(64 ?)ARM ?,?; ; I:? ETM,?; S:?,? ? EDA ? 3. ARM ?,?,?,? ? ?:ARM ? ARM ?,? ?, ?, ? ? ? 1.?:?,?,? ?,?,? ?,?,? ? 2.FIQ ?:?,?,? ?(fast)? ? 3.IRQ ?:?,:?(normal)? ? ? IRQ ? ? 4.SVC ?:?,? ?2 3? 5.
4、?:?,? ? ? 6.?:?,? ?,?,? ? ? 7.?:? User ?,? ? ? ? 7 ?,?,? 6 ?, ?,?,? ? ? ? 6 ?,? 5 ?,? ?4. ?(PSR)?,? C,Z,N,V ? ? ?:? ?: ? N = 1-?, 0-? 0 ? Z = 1-? 0, 0-? 0 ? C =1-?, 0-? ? V =1-?, 0 ? ? Q ?: ? ? ARM 5TE/J ? ? ? DSP ? ? ?: ? I = 1: ? IRQ. ? F = 1: ? FIQ. ? T Bit ? ? ARM xT ? ? T = 0: ? ARM ? ? T = 1:
5、? Thumb ? ? Mode ?(?): ? 0b10000 User ? 0b10001 FIQ ? 0b10010 IRQ ? 0b10011 Supervisor 3 4? 0b10111 ? 0b11011 ? 0b11111 Abort Undefined System 5. ? ARM ? ?: ?, ? ? ?,ARM7TDMI ?,? ?,? ? ? ? ? ?BL SWI MOV PC,R14 SVC UND ABT FIQ IRQ ABT SVC 6 6 5 3 4 2 1 0x00000008 0x00000004 0x0000000C 0x0000001C 0x00
6、000018 0x00000010 0x00000000 MOVS PC,R14_svc? MOVS PC,R14_und ? ? ? ? ? SUBS PC,R14_abt,#4 SUBS PC,R14_fiq,#4 SUBS PC,R14_irq,#4 SUBS PC,R14_abt,#8 ? ?,ARM7TDMI ?: 1.? LR ? 2.? CPSR ? SPSR ?; 3. ? CPSR ?; 4.? PC ? ARM7TDMI ?,? ?:? ARM ? Thumb ?,? ? PC ?,? ARM ? ?,?: 1.? LR ? PC,?; 2.? SPSR ? CPSR; 3
7、.? ?:? CPSR ? T?F ? I ? 6. ARM ? ?:ARM7TDMI ? ? ?(Big-endian)4 5? ?(Little-endian) ?: ?, ? ? 0 ?70? ? ?: ?, ? ? 0 ? 3124? 7. ? (LDR) ?, ? ?:? LDR ? ?,?, ?,? ? LDR ? LDR ?,?,?(? 3 ?) ? MOV ? ? 8. ? ARM9 ? 5 ? ?:ARM920 ? 5 ? . ?:? Cache ? ?: ?, ? ?:? ALU ?,?,? ALU ? ? ?:?,?(? Cache) ? ?:? 9. ?,? ?:?:?
8、,?,? ?,?,?5 6? ORR ? LDR ? R4 ?,? ORR ? ? ? ? 3 ? ARM ?1.?,?,?,? ?:? 4 ?,? 15 ? ? 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 ? ? EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL NV Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1,Z=0 C=0,Z=1 N=V N!=V Z=0,N=V Z=1,N!=V ? ? ?
9、? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( ? ?) ?(?)2. ?,V ? 1? ?:V? ?, ?, V=1 ?6 7?,? V ? 3. ? ARM ?, ?, ? ?(? 8 ? 4 ?) 0x5430 0x108 0x304 0x501 0xfb10000 0x334000 0x3FC000 0x1FE0000 0x5580000 0x7F800 0x39C000 0x1FE80000 ?:? 1 ? 8 ? 32 ?,? ? 4 ? ? 8 ? 2*rotate_4 ? (? 0,2,4, ? ? ? 30)? 0X5430 0000,0000,0000,00
10、00,0101,0100,0011,0000 ? 0X108 0000,0000,0000,0000,0000,0001,0000,1000 0x42 ? 30 ? (rotate_4=0xF) 0X304 0000,0000,0000,0000,0000,0011,0000,0100 0xC1 ? 30 ? (rotate_4=0xF) 0x501 0000,0000,0000,0000,0000,0101,0000,0001 ? 0xfb10000 0000,1111,1011,0001,0000,0000,0000,0000 ? 0x334000 0000,0000,0011,0011,
11、0100,0000,0000,0000 0Xcd ? 18 ?(rotate_4=0x9) 0x3FC000 0000,0000,0011,1111,1100,0000,0000,0000 0XFF ? 18 ?(rotate_4=0x9) 0x1FE0000 0000,0001,1111,1110,0000,0000,0000,0000 ? 0x5580000 0000,0101,0101,1000,0000,0000,0000,0000 ? 0x7F800 0000,0000,0000,0111,1111,1000,0000,0000 ? 0x39C000 0000,0000,0011,1
12、001,1100,0000,0000,0000 0XE7 ? 18 ?(rotate_4=0x9) 0x1FE80000 0001,1111,1110,1000,0000,0000,0000,0000 ? 4.?,?,?,? ?:LSL ? :31 0 0 LSR ? :31 0 0 ASR ? :7 8 31 0 ROR ? :31 0 RRX ?:31 C 0 5.ARM ?, ? PC ?, ? ? ?:? 5 ?: 1)? 2)? 3)? ? 5 ? 4)? 5)? ? RRX ? PC (R15)?,? ? 6.? Load/Store ?,?,? Load/Store ?,? ?,
13、? ?:? Load/Store ?, ?,? Load/Store ? 3 ?: 1)Addressing_mode ? 2)Addressing_mode ? 3)Addressing_mode ? ?,? Load/Store ? 2 ?: 1)Addressing_mode ? 2)Addressing_mode ? 7.? Load/Store ?,? ?,? ?:? Load/Store ?,? ? 4 ?: ? ? IA (Increment After) :? 4; ? ? IB (Increment Before) :? 4 ; ? ? DA (Decrement After
14、) :? 4 ; ? ? DB (Decrement Before) :? 4 ; 8.?,?,? ? Load/Store ? ?:?,? 4 ?: ? FA:?,? ? FD:?,? ? EA:?,?8 9? ED:?,?9.?/? ? ?: ?/?, ? LDR/STR ?Addressing_mode ? 8 ? ? 3 ?: ?:,#+/-*4 ? Rn ?/? imm_offset8 ? 4 ?,? ? 4,?,? ?: ,#+/-*4! ? Rn ?/? imm_offset8 ? 4 ?,? ? 4,?,? ?,?寄存器。 后变址回写形式: ,#+/-*4 内存地址为基址寄存器
15、 Rn 的值,当存储器操作完成后,将基地址寄存器 Rn 值加上/减 去 imm_offset8 的 4 倍,后续的每一个地址是前一个内存地址加 4,直到协处理器发出 信号,结束本次数据传输为止。最后将 Rn 值加上/减去 imm_offset8 的 4 倍写回到基址 寄存器 Rn(更新基地址寄存器) 。 10.写出下列指令的机器码,并分析指令操作功能。 MOV R0,R1 MOV R1,,0X198 ADDEQS R1,R2,,0xAB CMP R2,#0Xab LDR R0,R1,#4 STR R0,R1,R1,LSL #2! LDRH R0,R1,#4 LDRSB R0,R2,#-2! S
16、TRB R1,R2,#0Xa0 9 10 LDMIA R0,R1,R2,R8 STMDB R0!,R1-R5,R10,R11 STMED SP!R0-R3,LR 答:机器码部分略。 MOV R0,R1 ;R0-R1 MOV R1,,0X198 ;R0-0X198 ADDEQS R1,R2,,0xAB ;当 Z=1 时,R1-R2+0xAB 并影响标志位 CMP R2,#0Xab ;R2-0xAB,并影响标志位 LDR R0,R1,#4 ;R0-【R1+4】 STR R0,R1,R1,LSL #2! ; 【R1+R1*4】 -R0,R1=R1+R1*4 LDRH R0,R1,#4 ;R0-【R1
17、+4】半字,R0 的高 16 位清零 LDRSB R0,R2,#-2! ;R0-【R2-2】字节,R0 有符号扩展为 32 位,R2=R2-2 STRB R1,R2,#0Xa0 ; 【R2+0Xa0】 -R1 低 8 位, LDMIA R0,R1,R2,R8 ;将内存单元【R0】【R+11】以字为单位读取到 R1,R2,R8 中 STMDB R0!,R1-R5,R10,R11 将寄存器 R1R5,R10,R11 的值以字为单位依次写入【R0】中,每写一个字之前 R0=R0-4 STMED SP!R0-R3,LR 将寄存器 R0R3,LR 的的值以字为单位依次写入【SP】中,每写一个字之后 SP
18、=SP-4第 4 章 ARM 指令集系统1.ARM 指令可分为哪几类?说出哪几条指令是无条件执行的。 答:ARM 微处理器的指令集可以分为:数据处理指令,分支指令,加载/存储指令,批量加 载/存储指令,交换指令,程序状态寄存器(PSR)处理指令,协处理器操作指令和异常产 生指令八大类。 几乎所有的 ARM 指令都是可以有条件执行的。 带链接和状态切换的跳转指令 BLX, 当目标 地址由程序标号给出时,即:BLX 由于指令码中是没有条件编码位的,所以指令是无条件执行的。 2.如何实现两个 64 位数的加法操作,如何实现两个 64 位数的减法操作,如何求一个 64 位 数的负数? 答:1)使用 A
19、DC 实现 64 位加法,结果存于 R1、R0 中: ADDS R0,R0,R2 ;R0 等于低 32 位相加,并影响标志位 ADC R1,R1,R3 ;R1 等于高 32 位相加,并加上低位进位 2)使用 SBC 实现 64 位减法,结果存于 R1、R0 中: SUBS R0,R0,R2 ; 低 32 位相减,并影响标志位 SBC R1,R1,R3 ;高 32 位相减,并减去低位借位 3)使用 RSC 指令实现求 64 位数值的负数 : RSBS R2,R0,#0 RSC R3,R1,#0 3.写出 LDRB 指令与 LDRSB 指令的二进制编码格式,并指出它们之间的区别。 答:LDRB 指令的二进制编码格式:10 11 LDRSB ?:LDRB ? 8 ? 8 ?, ? ? 24 ? LDRSB ? 8 ? 8 ?,? ? 24 ? 4.?,?
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1