nasm x86 找到最大和最小值并存储在寄存器中
nasm x86 find largest and smallest and store in a register
至此我明白了如何获取最大的数并将其存储在寄存器中,但我不确定如何继续获取最小的数?任何帮助将不胜感激,甚至是一种更有效的方式来做我目前正在做的事情。我试图在 ax 中存储最大数,在 dx
中存储最小数
section .data
A dw 1
B dw 3
C dw 8
D dw 5
section .bss
section .text
global _start
_start: mov eax,0 ;clear registers
mov ecx,3
mov esi,A
mov ax, [esi]
add esi,2
again: cmp ax,[esi]
jg cont
mov ax,[esi]
cont: add esi,2
dec ecx
cmp ecx,0
jnz again
exit: mov eax,1
mov ebx,0
int 80h
我的做法是在测试后添加另一个比较
如果当前值大于当前最大值(存储在 ax 中),则将测试当前元素是否小于当前最小值(存储在 dx 中)。您还需要最初将 dx 设置为与第一个元素相同。
我添加了 dx 寄存器的初始设置和一个额外的部分 "isSmaller",它执行检查并在当前检查的值小于 dx 中存储的值时设置 dx 寄存器。
section .data
A dw 1
B dw 3
C dw 8
D dw 5
section .text
global _start
_start: mov eax,0 ;clear registers
mov ecx,3
mov esi,A
mov ax, [esi] ; Initially set largest
mov dx, [esi] ; and initial smallest
add esi,2
again: cmp ax,[esi]
jg isSmaller
mov ax,[esi]
isSmaller: cmp dx, [esi]
jl cont
mov dx, [esi]
cont: add esi,2
dec ecx
cmp ecx,0
jnz again
exit: mov eax,1
mov ebx,0
int 80h
至此我明白了如何获取最大的数并将其存储在寄存器中,但我不确定如何继续获取最小的数?任何帮助将不胜感激,甚至是一种更有效的方式来做我目前正在做的事情。我试图在 ax 中存储最大数,在 dx
中存储最小数 section .data
A dw 1
B dw 3
C dw 8
D dw 5
section .bss
section .text
global _start
_start: mov eax,0 ;clear registers
mov ecx,3
mov esi,A
mov ax, [esi]
add esi,2
again: cmp ax,[esi]
jg cont
mov ax,[esi]
cont: add esi,2
dec ecx
cmp ecx,0
jnz again
exit: mov eax,1
mov ebx,0
int 80h
我的做法是在测试后添加另一个比较 如果当前值大于当前最大值(存储在 ax 中),则将测试当前元素是否小于当前最小值(存储在 dx 中)。您还需要最初将 dx 设置为与第一个元素相同。
我添加了 dx 寄存器的初始设置和一个额外的部分 "isSmaller",它执行检查并在当前检查的值小于 dx 中存储的值时设置 dx 寄存器。
section .data
A dw 1
B dw 3
C dw 8
D dw 5
section .text
global _start
_start: mov eax,0 ;clear registers
mov ecx,3
mov esi,A
mov ax, [esi] ; Initially set largest
mov dx, [esi] ; and initial smallest
add esi,2
again: cmp ax,[esi]
jg isSmaller
mov ax,[esi]
isSmaller: cmp dx, [esi]
jl cont
mov dx, [esi]
cont: add esi,2
dec ecx
cmp ecx,0
jnz again
exit: mov eax,1
mov ebx,0
int 80h