当我从键盘输入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
答案 0 :(得分:4)
因为您已指定1024作为长度,这意味着read
系统调用正在获取两个字节,31h
代表字符'1'
,并且代表换行符的0ah
。
如果您只需要一个字符,则只需要一个字符,而不是1024。
并且,如果您尝试将全宽度放入rbx
,请确保在之后清除高位,例如:
mov rbx, [num]
and rbx, 0ffh
虽然更好的解决方案可能只是加载一个零扩展的字节:
movzx rbx, byte [num]