在 TASM(x86 程序集)中,它看起来像这样:
cmp BL, BH
je EQUAL ; BL = BH
jg GREATER ; BL > BH
jmp LESS ; BL < BH
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它比较我们临时存储在寄存器 B 的高位和低位的两个 8 位数字。或者,您也可以考虑使用jbe(if BL <= BH) 或jge/ jae(if BL >= BH)。
希望有人觉得它有帮助:)
它从汇编程序到汇编程序各不相同.大多数机器都提供寄存器,这些寄存器具有符号名称,如R1或EAX(Intel x86),并具有类似"CMP"的指令名称用于比较.对于比较指令,您需要另一个操作数,有时是寄存器,有时是文字.装配工通常允许对指令权进行评论.
指令行如下所示:
<opcode> <register> <operand> ; comment
Run Code Online (Sandbox Code Playgroud)
您的汇编程序可能会有所不同.
对于Microsoft X86汇编程序,您可以编写:
CMP EAX,23; 将寄存器EAX与常数23进行比较
要么
CMP EAX,XYZ; 比较寄存器EAX与名为XYZ的内存位置的内容
通常,人们可以在操作数字段中编写复杂的"表达式",如果有能力,则可以以各种方式寻址存储器.但我认为这回答了你的问题.
首先调用CMP(比较)指令然后执行以下操作之一:
jle - 如果小于或等于
jge则跳转到行 - 如果大于或等于则跳转到行
最低的汇编程序是字节,而不是位(直接无论如何).如果你想了解位逻辑,你需要看一下电路设计.
基本技术(在大多数现代系统上)是减去两个数字,然后检查结果的符号位,即查看结果是否大于/等于/小于零.在汇编代码中,而不是直接获得结果(到寄存器中),通常只需根据状态进行分支:
; Compare r1 and r2
CMP $r1, $r2
JLT lessthan
greater_or_equal:
; print "r1 >= r2" somehow
JMP l1
lessthan:
; print "r1 < r2" somehow
l1:
Run Code Online (Sandbox Code Playgroud)