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