assembly - Why can't I move directly a byte to a 64 bit register? -
why can't directly move byte memory 64-bit register in intel x86-64 assembly?
for instance, code:
extern printf global main segment .text main: enter 2, 0 mov byte [rbp - 1], 'a' mov byte [rbp - 2], 'b' mov r12, [rbp - 1] mov r13, [rbp - 2] xor rax, rax mov rdi, format mov rsi, r12 mov rdx, r13 call printf leave ret segment .data format: db "%d %d", 10, 0
prints:
65 16706
i need change move byte registers r12 , r13 in order make code work properly:
xor rax, rax mov al, byte [rbp - 1] mov r12, rax xor rax, rax mov al, byte [rbp - 2] mov r13, rax
now, prints intended:
65 66
why need this?
is there simpler way of doing this?
thanks.
use move 0 or sign extension appropriate.
for example: movzx rax, byte [rbp - 1]
Comments
Post a Comment