我已经开始学习汇编,但我对示例程序有些困难。
我写了一个宏,可以找到数组中的最小值:
%macro min 3
mov ecx, dword[%2]
mov r12, 0
lea rbx, [%1]
movsx eax, word[rbx+r12*4] ; inizializza il minimo con il primo elemento dell'array
%%minLoop:
cmp eax, [rbx+r12*4]
jl %%notNewMin
movsx eax, word[rbx+r12*4]
%%notNewMin:
inc r12
loop %%minLoop
mov [%3], eax
%endmacro
section .data
EXIT_SUCCESS equ 0
SYS_exit equ 60
list1 dd 4, 5, 2, -3, 1
len1 dd 5
min1 dd 0
section .text
global _start
_start:
min list1, len1, min1
last:
mov rax, SYS_exit ; exit
mov rdi, EXIT_SUCCESS ; success
syscall
该程序成功编译,但是当我调试它(使用 DDD)时,在eax
寄存器中我0xFFFFFFFD
有4294967293
.
但是,如果我使用计算器,这0xFFFFFFFD
确实-3
是正确的值。
在您看来,我的程序是否正确?
提前感谢您的回答。