【发布时间】:2018-04-06 12:01:21
【问题描述】:
我正在用 C 和 Assembly x86-64 位编写代码,我使用 NASM 和 gcc 在 Ubuntu 16.04 上编译。
我在程序集中有一个名为 _sum 的标签。 我调用 _sum 并发送一个仅包含数字的 char*(例如:“87”),它由寄存器“rdi”接收。 当我执行以下操作时:
mov rbx, [rdi]
inc rdi
mov rcx, [rdi]
我注意到寄存器 rbx 包含链接在一起的所有数字的十六进制值(在前面的示例中:rbx 有 0x3738,rcx 有 0x37)。 我怎样才能使每次 [rdi] 只包含当前数字的值(0x38)而不是所有链接的数字?
【问题讨论】:
-
如果您检查较小的寄存器
BL和CL,它们将分别包含一个字节。 -
你的
char类型是 8 位宽的,所以使用 8 位宽的指令来处理它。mov bl,[rdi]或movzx ebx, byte [rdi],取决于您想要以什么结尾(8 位值或 64 位值)。