思考题 1、如何强行重新编译ADS1.2工程的所有文件? 答:Project -> Remove Object Code... 删除工程中的*.obj文件 2、LDR伪指令与LDR加载指令的功能和应用有何区别,举例说明? 答:LDR加载指令用于从内存中读取数据到寄存器中,例如: LDR r1,[r3] LDR伪指令用于加载32位的立即数或一个地址值到指定的寄存器中,例如: LDR r0,#0xff123456 3、在AXD调试时如何复位程序? 答:File -> Reload Current Image 重新加载映象文件 4、指令MOV R0,#0x12345678是否正确?为什么?如何解决? 答:不正确。因为ARM是RISC结构,数据从内存到CPU之间的移动只能通过LDR/STR指令完成,而MOV只能在寄存器之间移动数据,不能干这个活,因此正确的写法是: LDR r0,#0X12345678 另外,还可以用LDR伪指令,后面跟一个“=”,LDR r0,=0x12345678,LDR伪指令和MOV是比较相似的,只不过MOV命令限制了立即数的长度为8为,也就是不要超过512,而LDR没有限制。如果 LDR后面的立即数没有超过8位,那么计算机在处理的过程中,该 LDR伪指令会被转化成MOV来执行的。 5、使用MOV、ADD指令实现:R8=R3=X+Y且 X与Y是8位图数据 答:x equ 1 y equ 2 mov r0,#x mov r1,#y add r3,r0,r1 mov r8,r3 6、使用MOV、MVN、SUB指令实现:R5=0x5FFFFFF8 - R8 * 8(乘法除法用移位解决) 答:MVN R0,#0xA0000007 ;MOV R8,#0x1 SUB R5,R0,R8,LSL #3 7、使用CMP指令判断(5*Y/2)>(2*X)吗?若大于则 R5=R5&0xFFFF0000,否则 R5=R5|0x000000FF 答:X EQU 1 //顶格写 5*Y-->ADD R2,R1,R1,LSL #2 //R1=Y,Y+4Y=5Y Y EQU 2 START MOV R1,#Y MOV R2,#X ADD R3,R1,R1,LSL #2 MOV R4,R3,LSR #1 MOV R6,R2,LSL #1 CMP R4,R6 LDR R7,=0xFFFF0000 ANDGT R5,R5,R7 ORRLE R5,R5,0x000000FF 8、如何实现 64位加法运算(R6、R5)=(R6、R5)+(R3、R2) 答: ADDS R5,R5,R2 ADC R6,R6,R3 9、如何使用ARM汇编指令实现结构化程序编程_1 if(x > y)z = 100; else z = 50; 答: X EQU 1 Y EQU 2 Z EQU 0 MOV R0,#X MOV R1,#Y MOV R2,#Z CMP R0,R1 MOVGT R2,#100 MOV R2,#50 10、如何使用 ARM汇编指令实现结构化程序编程_2 for(i = 0; i < 10; i++) { x++; } //i、x均为无符号整数 答: x equ 0 i equ 0 area test,code,readonly entry start mov r1,#x...