确定两个数字中哪一个更大的汇编语法是什么?
它的较低级别(机器代码)是什么?我们可以走得更低吗?一旦我们达到位水平,会发生什么?它如何用0和1来表示?
答案 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
答案 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