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

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -