序言:
文章主要内容包括了一些基本汇编语句的含义和一些实例,通过这篇文章可以实现读懂和写出一般的汇编代码。
1.
汇编的时候会把伪指令提换成如:nop 换成:mov r0, r0
2.
流程图如下:
程序如下:
area RESET, code,readonly
code32
entry
start
mov r0, #9
mov r1, #15
loop
cmp r0,r1 ;判断两个寄存器值是否相等
beq stop ;如果相等,结束程序
cmp r0,r1 ;判断两个寄存器值
subgt r0,r0,r1 ;如果大于,则执行r0=r0-r1
sublt r1,r1,r0 ;如果小于,则执行r1=r1-r0
bloop ;跳转到loop标号继续执行
stop
end
解析:b:跳转指令,bloop:跳转到loop标号的位置执行。gt:表示如果大于,lt:小于,subgt r0,r0,r1 :表示大于时执行r0=r0-r1
cmp:比较两个寄存器所存的值。
3.
ldr r0,=0x12345678 ;将数写去r0
str r0,[r1] ;将r0的值写入r1寄存器内数值为地址的内存。
ldr r2,[r1] ;将r1指向地址的值放入r2中。
4. 给你一个运算单元,两个寄存器,一个cpu,没有rom,ram.怎么交换两个寄存器的值?
当时一直纠结直接操作寄存器去了。
我的答案是:
ldr p1,=100
ldr p2,=200
add p1,p1,p2 ;p1=p1+p2
sub p2,p1-p2 ;p2 = p1-p2 ,p2 = 100
sub p1,p1-p2 ;p1 = p1-p2, p1= 200
当时有的语句写错了,这一种会出现数据比较大时,两个数相加会出现越界问题。还有一种方法。
ldr p1,=0x12345678
ldr p2,=0x22345678
xor p1,p1,p2 ;p1^=p2
xor p2,p2,p1 ;p2^=p1
xor p1,p1,p2 ;p1^=p2