小编Neb*_*vic的帖子

ARM程序集 - stmfd/ldmfd

我正在为UNI做一个项目并遇到问题.我们正在学习如何在调用子程序时将寄存器推送到堆栈.我需要编写一个子程序,将十进制数0-15转换为相应的十六进制ASCII码,并保留除r0之外的所有寄存器的值,其中应存储结果.我有一个ASCII码表,基本上只需要将数字*4添加到ASCII表的起始地址,然后将值存回r0.我得到了正确的结果,但子程序循环.它不断从"ldmfd"命令跳到"sub".知道为什么吗?

main:
adr r0,num
adr r1,ascii
ldr r2,[r0]
bl  sub
sub:  stmfd sp!,{r1-r2,lr}
      ldr r0,[r1,r2,LSL #2]
      ldmfd sp!,{r1-r2,pc}

/* variables here */
num:    .word 15
ascii:  .word 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46
/* end variables */
Run Code Online (Sandbox Code Playgroud)

assembly arm

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

arm ×1

assembly ×1