13、汇编语言与高级语言的交互实践

汇编语言与高级语言的交互实践

1. 状态保存与恢复

在汇编代码中,为了避免函数调用过程中寄存器的值被意外修改,需要对可能被使用或被 printf 函数改变的寄存器(如 X0 - X18 LR )进行保存和恢复操作。由于每条指令一次只能保存或恢复两个寄存器,而这里有19个可被修改的寄存器加上 LR ,所以需要十条指令来将这些寄存器的值压入栈中,同样也需要十条指令将它们从栈中弹出。

2. 调用 printf 函数

调用 printf 函数时,使用如下参数:

printf("R%c = %32ld, 0x%016lx\n", reg, Rreg, Rreg);

这里有四个参数,需要将它们设置到 X0 - X3 寄存器中。 printf 函数中,以百分号 % 开头的字符串会获取下一个参数,并根据紧随其后的字母进行格式化:
| 符号 | 含义 |
| ---- | ---- |
| c | 字符 |
| d | 十进制数 |
| x | 十六进制数 |
| 0 | 用0填充 |
| l | 长整型(64位) |
| 数字 | 指定打印字段的长度 |

注意,在打印 X0

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值