基本问题,
我写了以下块:
IDEAL
MODEL small
STACK 100h
DATASEG
Var1 db 4
Var2 db 2
CODESEG
start:
mov ax, @data
mov ds, ax
xor ax, ax
mov al, [Var1]
cmp al, [Var2]
jg Var1Greater
mov ax, 1
Var1Greater:
mov ax, 0
我是集会的新手。
我想创建一个将[Var1]与[Var2]进行比较的代码。
IF(!)[Var1]大于[Var2],执行mov ax, 1
。如果(1)其他任何事物(等于或少于),则mov ax, 0
。
如何做到这一点?如果条件为真,我写的代码会执行两个指令。
答案 0 :(得分:3)
嗯,发生的事情是 两个 指令都会被执行。
首先,mov ax, 0
会被执行,然后控件会转到下一个语句mov ax, 1
,所以ax
中剩下的就是1
。
汇编语言中的标签不会神奇地导致控件跳转到别处。它们不会导致汇编程序发出任何指令。它们只存在,以便您可以指示另一个跳转指令的目标。
所以,你需要的是:
...
cmp al, [Var2]
jg Var1Greater
mov ax, 0
jmp skip
Var1Greater:
mov ax, 1
skip:
此外,在编写汇编语言以使用xor ax, ax
而不是mov ax, 0
时,这是一种很好的形式。
答案 1 :(得分:2)
您也必须跳过Var1Greater
以跳过mov ax, 1
指令。作为替代方案,您可以这样做:
mov ax, [Var1]
cmp ax, [Var2]
mov ax, 1
jg skip0
mov ax, 0
skip0: