ARM汇编语言
发布网友
发布时间:2022-04-24 17:11
我来回答
共2个回答
热心网友
时间:2023-09-06 16:44
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
热心网友
时间:2023-09-06 16:45
while(p != NULL)的意思
r0是指针,不是内容
p = p->next是LDRNE r0, [r0,#0x4]追问但是r0不可能为0呀,因为下面的后变址寻址里R0<-R0+4了呀
追答怎么就不可能?
链表最后一个节点的next,难道不是赋值为NULL?
这是链表循环的终止条件
r0在最后一次LDRNE r0, [r0,#0x4]后,就为0.