两个数中的较大数
下面的代码比较了 EAX 和 EBX 中的两个无符号整数,并且把其中较大的数送入 EDX:
mov edx, eax ;假设EAX存放较大的数
cmp eax, ebx ;若 EAX ≥ EBX
jae L1 ;跳转到 L1
mov edx, ebx ;否则,将 EBX 的值送入 EDX
L1:
以上代码个人认为写成这样更直观,但却变得臃肿,并不可取。
mov eax, 1
mov ebx, 2
cmp eax, ebx
jbe L1 ;如果eax<=ebx
ja L2 ;如果eax>ebx
L1: mov edx, eax
jmp finish
L2: mov edx, edx
jmp finish
finish:
三个数中的最小数
下面的代码比较了分别存放于三个变量 VI、V2 和 V3 的无符号 16 位数值,并且把其中最小的数送入AX。理解的重点,jbe L1是if的第一个分支,下面紧接的其它指令其实是另一个if分支。这与高级语言的if……then……else……结构一样的道理,但是高级语言的写法容易理解。
.data
V1 WORD 1
V2 WORD 2
V3 WORD 3
.code
mov ax, V1 ;假设 V1 是最小值
cmp ax, V2 ;如果 AX ≤ V2
jbe L1 ;跳转到 L1