ARM汇编语言

2024-11-16 10:21:31
推荐回答(2个)
回答(1):

0x800是地址吧, 后移取出0x804指向地址的数值放到R0,如果R0不等于0再执行一遍LOOP 。 这次就不知道取到什么了,因为不知道0X804这个地址里面是什么,感觉程序要跑飞

你这个程序明显是错误的,抄程序的时候可能把LDRNE R0, [R0], #4抄成LDRNE r0, [r0,#0x4] , 即使是LDRNE R0, [R0], #4一般我都用不同的寄存器。
要是我就这样写
mov r0, # 0x800
mov r1, # 0
loop

cmp r3, # 0
ldrne r2, [r0]
addne r1, r1, r2
ldrne r3, [r0], # 4
bne loop
这个程序实现从0X800开始取出数组的数值与0比较,每执行一次R0指向数组的地址自赠4,直到碰上0元素的数值然后跳出LOOP

回答(2):

while(p != NULL)的意思
r0是指针,不是内容
p = p->next是LDRNE r0, [r0,#0x4]