【发布时间】:2022-01-02 16:36:40
【问题描述】:
我正在尝试在 macOS 上的程序集 x86_64 中打印一个整数。我已经知道大约有 3/4 的答案,但我无法解决我的问题。
现在,我很乐意将其向后打印。 所以,这是代码:
section .bss
3 number_back resb 3
4 number_right resb 3
5
6 section .text
7 global _main
8 _main:
9 mov rax, 123
10 call _get_backwards
11
12 mov rax, 0x2000004
13 mov rdi, 1
14 mov rsi, number_back
15 mov rdx, 3
16 syscall
17
18 mov rax, 0x2000001
19 xor rdi, rdi
20 syscall
21
22 _get_backwards:
23 xor rdx, rdx
24 mov rcx, 10
25 div rcx
26 add rdx, 48
27 mov [rel number_back], rdx
28
29 loop:
30 inc number_back
31 cmp rax, 0
32 jne _get_backwards
33 ret
说明
- mov rax, 123 ;将号码移入 rax 寄存器
- 调用 get_backwards 过程
- 除法和乘法需要 2 个寄存器,一个用于商,一个用于余数。Xor 余数,所以我摆脱了所有的垃圾
- mov into rcx, 10 这样我就可以得到与数字的最后一位对应的余数,在这种情况下为 3
- 将 rax 除以 rcx
- 获取int的ascii码
- 将rdx寄存器的内容移动到指针number_back持有的内存地址中
- 这是导致问题的部分。我想做类似 number_back[0] = 3, number_back[1] = 2 ... 之类的事情。我认为将指针增加一个会很有趣,但我不正确。我收到此错误
error: invalid combination of opcode and operands
- 如果 rax 为 0,则退出,否则循环
提前谢谢你。
【问题讨论】: