21

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

它的较低级别(机器代码)是什么?我们还能再低一点吗?一旦我们到达比特级别,会发生什么?它是如何用 0 和 1 表示的?

4

8 回答 8

16

在 TASM(x86 程序集)中,它可能如下所示:

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

在这种情况下,它比较我们临时存储在寄存器 B 的较高和较低部分的两个 8 位数字。或者,您也可以考虑使用jbe(if BL <= BH) 或jge/ jae(if BL >= BH)。

希望有人觉得它有帮助:)

于 2013-09-07T07:02:55.793 回答
12

首先调用 CMP(比较)指令,然后调用以下指令之一:

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

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

于 2009-07-14T04:18:33.953 回答
9

它因汇编程序而异。大多数机器提供寄存器,其符号名称如 R1 或 EAX(Intel x86),指令名称如“CMP”用于比较。对于比较指令,您需要另一个操作数,有时是寄存器,有时是文字。汇编程序通常允许在指令右侧添加注释。

指令行如下所示:

<opcode>   <register> <operand>   ; comment

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

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

CMP EAX,23;将寄存器 EAX 与常数 23 进行比较

或者

CMP EAX, XYZ ; 将寄存器 EAX 与名为 XYZ 的内存位置的内容进行比较

通常可以在操作数字段中编写复杂的“表达式”,使指令(如果有能力)能够以各种方式寻址内存。但我认为这回答了你的问题。

于 2009-07-14T04:20:21.797 回答
7

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

; Compare r1 and r2
    CMP $r1, $r2
    JLT lessthan
greater_or_equal:
    ; print "r1 >= r2" somehow
    JMP l1
lessthan:
    ; print "r1 < r2" somehow
l1:
于 2009-07-14T04:19:28.133 回答
4

这完全取决于您正在谈论的处理器,但它往往是以下形式:

cmp r1, r2
ble label7

换句话说,设置相关标志的比较指令,然后是取决于这些标志的条件分支。

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

于 2009-07-14T04:19:32.440 回答
1

如前所述,通常比较是通过减法完成的。
例如,X86 汇编/控制流

在硬件层面,有专门的数字电路来进行计算,比如加法器

于 2009-07-14T04:41:49.930 回答
1

比较两个数字。如果等于“Y”,则在不等于时在屏幕上打印“否”“N”。我正在使用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

在此处输入图像描述

于 2016-11-30T20:30:38.930 回答
-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 
于 2014-09-07T06:18:34.363 回答