2014-04-25 3 views
0

키보드에서이 코드의 입력으로 1을 입력하면 rbx가 a31h로 변경됩니다. 그러나 숫자 '1'의 ASCII 값은 30h입니다. 왜 rbx가 30h가 되었습니까? 당신이 read 콜이 바이트를 얻는 것을 의미 길이로 1024을 지정했기 때문에ASCII 및 64 비트 레지스터 어셈블리

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 

답변

4

, 문자 '1'과 줄 바꿈을 나타내는 0ah를 나타내는 31h.

을 : 당신은 단지 하나 개의 문자를 원하는 경우에 당신이 rbx으로 전체 폭을 얻기 위해 시도하는 경우

만, 이후 상위 비트 밖으로 분명 당신을 위해, 같은 것을, 하나 개의 문자를하지 1024

을 물어 더 나은 솔루션은 아마이지만

mov rbx, [num] 
and rbx, 0ffh 

단지 제로 확장자 바이트를로드 :

당신이 코드 예제를 제공하기 때문에
movzx rbx, byte [num] 
+1

, 당신은 m로 할 수 있습니다 'movzx'도 너무 많아 사람들이 실수로'와'방법이 최선이라고 생각하지 않을 것입니다. – Jester

+1

@Jester, 감사합니다. OP가 어떻게했는지에 대한 경고였습니다. _best_ 방법에 대해 너무 열심히 생각하지 않았습니다. 그러나 귀하의 충고에 따라 추가했습니다. – paxdiablo

+0

아이디어가 있습니다. 도움을 주셔서 감사합니다. – Rashintha

관련 문제