汇编来比较两个数字

时间:2009-07-14 04:13:41

标签: assembly x86 compare machine-code

确定两个数字中哪一个更大的汇编语法是什么?

它的较低级别(机器代码)是什么?我们可以走得更低吗?一旦我们达到位水平,会发生什么?它如何用0和1来表示?

8 个答案:

答案 0 :(得分:6)

首先调用CMP(比较)指令然后执行以下操作之一:

jle - 如果小于或等于
则跳转到行 jge - 如果大于或等于

,则跳转到行

最低的汇编程序是字节,而不是位(直接无论如何)。如果你想了解位逻辑,你需要看一下电路设计。

答案 1 :(得分:6)

基本技术(在大多数现代系统上)是减去两个数字,然后检查结果的符号位,即查看结果是否大于/等于/小于零。在汇编代码中,而不是直接获得结果(进入寄存器),通常只需根据状态进行分支:

; Compare r1 and r2
    CMP $r1, $r2
    JLT lessthan
greater_or_equal:
    ; print "r1 >= r2" somehow
    JMP l1
lessthan:
    ; print "r1 < r2" somehow
l1:

答案 2 :(得分:6)

它从汇编程序到汇编程序各不相同。 大多数机器都提供具有符号名称的寄存器 像R1,或EAX(英特尔x86),并有指令 像“CMP”这样的名字用于比较。并进行比较 指令,你需要另一个操作数 寄存器,有时是文字。通常是装配工 允许对教学权进行评论。

指令行如下:

<opcode>   <register> <operand>   ; comment

您的汇编程序可能会有所不同。

对于Microsoft X86汇编程序,您可以编写:

CMP EAX,23;比较寄存器EAX和常数23

CMP EAX,XYZ;将寄存器EAX与名为XYZ

的内存位置的内容进行比较

通常人们可以在操作数字段中编写复杂的“表达式” 启用指令(如果有能力)进行寻址 记忆有多种方式。但我认为这回答了你的问题。

答案 3 :(得分:4)

这完全取决于您所谈论的处理器,但它往往具有以下形式:

cmp r1, r2
ble label7

换句话说,用于设置相关标志的比较指令,后跟根据这些标志的条件分支。

这通常与编程所需的一样低。如果你正在编写汇编程序,你只需要知道它的机器语言,如果你正在构建处理器,你只需要知道微代码和/或电路设计。

答案 4 :(得分:3)

在TASM(x86程序集)中,它看起来像这样:

cmp BL, BH
je EQUAL       ; BL = BH
jg GREATER     ; BL > BH
jmp LESS       ; BL < BH

在这种情况下,它比较了我们临时存储在寄存器B的上部和下部的两个8位数字。或者您也可以考虑使用jbe(如果BL <= BH)或{{1 } / jge(如果BL&gt; = BH)。

希望有人发现它有用:)

答案 5 :(得分:1)

如前所述,通常比较是通过减法完成的 例如,X86 Assembly/Control Flow

在硬件级别,有用于进行计算的特殊数字电路,如adders

答案 6 :(得分:0)

比较两个数字。如果等于是&#34; Y&#34;,则打印No&#34; N&#34;在屏幕上如果不相等。我正在使用emu8086。您可以使用SUB或CMP命令。

MOV AX,5h
MOV BX,5h
SUB AX,BX 
JZ EQUALS
JNZ NOTEQUALS

EQUALS:
MOV CL,'Y'
JMP PRINT

NOTEQUALS:
MOV CL,'N'

PRINT:
MOV AH,2
MOV DL,CL
INT 21H

RET

enter image description here

答案 7 :(得分:-3)

input password program
.modle small
.stack 100h
.data
s pasword db 34
input pasword db "enter pasword","$"
valid db ?
invalid db?
.code
mov ax, @ data 
mov db, ax
mov ah,09h
mov dx, offest s pasword
int 21h
mov ah, 01h
cmp al, s pasword
je v
jmp nv
v:
mov ah, 09h
mov dx, offset valid 
int 21h
nv:
mov ah, 09h
mov dx, offset invalid 
int 21h
mov ah, 04ch 
int 21
end