我是汇编编程的初学者,想澄清一些在解释这段代码时引起的疑惑
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro exit 0
mov rax,60
mov rdi,0
syscall
%endmacro
%macro accept 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
section .data
a dw 123AH
section .bss
b resb 2;
buff resb 2;
section .code
global _start
_start:
accept b,2
mov rsi,a ;3
mov rbx,[rsi] ;6
call hextoascii
mov rsi,buff
exit
hextoascii:
mov rcx,4
mov rsi,buff
back:
rol bx,4
mov al,bl
and al,0Fh
cmp al,09H
jbe add30h
add al,7h
add30h:
add al,30h
mov [rsi],al
inc rsi ;4
loop back
print buff,2 ;7
ret
我有几个问题要问:
指令:mov rsi,a(a = 1234H) ' a'到哪个内存位置? rsi指向吗? ie-它是否存储地址4或地址1。
如果我增加rsi那么它会指向变量a的下一个数字吗?我该如何解释" inc rsi"在代码的第4行? 假设rsi当前指向" a"的基地址,则rsi增加多少位置。 ?并且增量是否取决于它指向的变量的大小?
' a'存在于记忆中? ie- 1是出现在最低地址还是出现在最高地址相对于其他数字?
在说明中:mov rbx,[rsi] 多少' a'进入rbx,' a'的最大限制是什么? rbx可以存储在里面吗?
答案 0 :(得分:2)
34h
。inc rsi
递增1,当用作地址时为1个字节。rbx
这是一个64位的寄存器,这就是您将获得多少。