ASCII和64位寄存器汇编

时间:2014-04-25 13:30:28

标签: assembly 64-bit ascii cpu-registers

当我从键盘输入1作为此代码的输入时,rbx变为a31h。但是数字'1'的ASCII值是30h。那么为什么rbx变成a30h?

section .text

global _start

_start:

mov rax,1
mov rdi,1
mov rsi,msg
mov rdx,len
syscall

mov rax,0
mov rdi,0
mov rsi,num
mov rdx,1024
syscall

mov rbx,[num]

mov rax,60
mov rdi,0
syscall

section .data

msg: db 0Ah,"Enter here:",0
len: equ $ - msg

section .bss

num: resb 10

1 个答案:

答案 0 :(得分:4)

因为您已指定1024作为长度,这意味着read系统调用正在获取两个字节,31h代表字符'1',并且代表换行符的0ah

如果您只需要一个字符,则只需要一个字符,而不是1024。

并且,如果您尝试将全宽度放入rbx,请确保在之后清除高位,例如:

mov rbx, [num]
and rbx, 0ffh

虽然更好的解决方案可能只是加载一个零扩展的字节:

movzx rbx, byte [num]