代码执行条件错误?
Code executes condition wrong?
这里是基本问题,
我写了以下块:
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
。 IF(1) 任何其他(等于或小于)执行,mov ax, 0
.
如何做到这一点?如果条件为真,我编写的代码将执行两条指令。
啊,Turbo 汇编程序 "Ideal" 模式;自从我上次看到它已经有一段时间了。我喜欢理想模式。它经过深思熟虑,比 Microsoft Assembler 的语法更有意义。
好吧,发生的事情是两个指令都被执行了。
首先,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
是一种很好的形式。
你也必须跳过Var1Greater
才能跳过mov ax, 1
指令。作为替代方案,您可以这样做:
mov ax, [Var1]
cmp ax, [Var2]
mov ax, 1
jg skip0
mov ax, 0
skip0:
这里是基本问题,
我写了以下块:
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
。 IF(1) 任何其他(等于或小于)执行,mov ax, 0
.
如何做到这一点?如果条件为真,我编写的代码将执行两条指令。
啊,Turbo 汇编程序 "Ideal" 模式;自从我上次看到它已经有一段时间了。我喜欢理想模式。它经过深思熟虑,比 Microsoft Assembler 的语法更有意义。
好吧,发生的事情是两个指令都被执行了。
首先,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
是一种很好的形式。
你也必须跳过Var1Greater
才能跳过mov ax, 1
指令。作为替代方案,您可以这样做:
mov ax, [Var1]
cmp ax, [Var2]
mov ax, 1
jg skip0
mov ax, 0
skip0: