我在 NASM(x86 程序集)中做一个程序,其中要求用户输入三个 32 位十六进制数字(8 位),这些数字进一步存储在一个数组中,程序显示其中最大的数字。该程序运行良好,即它显示了三个数字中最大的一个。但问题是,它仅显示 16 位(4 位数字)作为输出。例如,如果我给出三个数字 11111111h、22222222h 和 10000000h,则输出结果仅为 2222。这就是代码。
section .data
msg db "Enter the number : ",10d,13d
msglen equ $-msg
show db "The greatest number is : ",10d,13d
showlen equ $-show
%macro display 2
mov eax,4
mov ebx,1
mov ecx,%1
mov edx,%2
int 80h
%endmacro
%macro input 2
mov eax,3
mov ebx,0
mov ecx,%1
mov edx,%2
int 80h
%endmacro
section .bss
large resd 12
num resd 3
section .text
global _start
_start:
mov esi,num
mov edi,3
; Now taking input
nxt_num:
display msg,msglen
input esi,12
add esi,12
dec edi
jnz nxt_num
mov esi,num
mov edi,3
add: mov eax,[esi]
jmp check
next: add esi,12
mov ebx,[esi]
CMP ebx,eax
jg add
check: dec edi
jnz next
mov [large],eax
display show,showlen
display large,12
;exit
mov eax,1
mov ebx,0
int 80h
我什至尝试将数组的保留大小从双字节更改为四字节。但结果还是一样。
此外,当我在 NASM x86_64 程序集中执行相同的代码时,仅更改了寄存器和系统调用(即 eax 到 rax,ebx 到 rcx,int 80h 到 syscall 等)输出为 32 位(8 位)。为什么这样?我需要帮助。谢谢你。:)