回答
从汇编器到汇编器各不相同。 大多数机器都提供寄存器,它们的符号名称为 ,如R1或EAX(Intel x86),并且指令 名称(如“CMP”)用于比较。而对于 指令的比较,则需要另一个操作数,有时候是 一个寄存器,有时是一个文字。经常汇编器 允许评论的权利的指示。
一个指令行的样子:
<opcode> <register> <operand> ; comment
你的汇编程序可能会有所变化。
对于微软X86汇编程序,你可以写:
CMP EAX,23;比较寄存器EAX与常数23
或
CMP EAX,XYZ;将寄存器EAX与名为XYZ的存储器位置的内容进行比较。通常,人们可以在操作数字段 中编写复杂的“表达式”,使得该指令能够以多种方式寻址内存地址 。但我认为这回答你的问题。
比较之后,汇编程序通常会做什么?它会返回一个可用的值,和/或将值存储在某个寄存器中吗? – 2016-09-17 23:58:46
执行CMP指令时,在大多数机器上产生一个结果,例如“less”,“greater”,“equal”并将其放入特殊的“条件”寄存器中。程序员通常会写入一条CMP指令,然后写入“JMP on condition”(例如“JE”或“jmp equal”),检查条件寄存器并在条件为真时使程序流程改变为jmp指令的tarfet 。汇编器必须做任何事情;程序的责任是一个接一个地写指令。汇编器仅将每个指令源代码行转换为二进制代码。 – 2016-09-18 04:01:38
啊好的!感谢您的解释。这使得我想要做的事比我想象的要容易 – 2016-09-19 12:54:48
首先一个CMP(比较)指令被称为然后执行下列操作之一:
JLE - 跳转到行,如果小于或等于
JGE - 跳转到行,如果大于或等于
最低的汇编程序使用的是字节,而不是位(直接)。如果你想了解位逻辑,你需要看看电路设计。
不要忘记做跳跃前做CMP寄存器1,寄存器2。 MOV AX,1; MOVE BX,2; CMP AX,BX; JLE在某处.. – 2009-07-14 04:19:54
基本技术(在大多数现代系统上)是减去两个数字,然后检查结果的符号位,即查看结果是否大于/等于/小于零。在汇编代码,而不是直接得到结果(到寄存器),你通常只是分支取决于状态:
; Compare r1 and r2
CMP $r1, $r2
JLT lessthan
greater_or_equal:
; print "r1 >= r2" somehow
JMP l1
lessthan:
; print "r1 < r2" somehow
l1:
这些`JLT`和`JMP`运营商之间有任何性能差异吗? – rejnev 2016-07-27 09:21:59
这完全取决于你在谈论的处理器上,但它往往是的形式:
cmp r1, r2
ble label7
换句话说,一个比较指令来设置相关的标志,后面跟着一个条件分支根据这些标志。
这通常与您需要编程时一样低。如果你正在编写汇编器,你只需要知道机器语言,如果你正在构建处理器,你只需要知道微代码和/或电路设计。
如前所述,通常是比较是通过减法完成的。
例如,X86 Assembly/Control Flow。
在硬件层面有用于计算的特殊数字电路,如adders。
在TASM(x86汇编),它可以是这样的:
cmp BL, BH
je EQUAL ; BL = BH
jg GREATER ; BL > BH
jmp LESS ; BL < BH
在这种情况下比较,我们暂时在较高和寄存器B的下部或者你可以存储2个8位数字也考虑使用jbe
(如果BL < = BH)或jge
/jae
(如果BL> = BH)。
希望有人发现它有帮助:)
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
- 1. 比较两个数据集
- 2. 比较两个数字
- 3. C#如何比较两个有序集?
- 4. 比较两个集合
- 5. 比较两个数据集SQL SSRS 2005
- 6. 比较Pig中的两个数据集
- 7. 比较SSRS中的两个数据集
- 8. 图形和比较两个数据集
- 9. 比较两个集合数据彼此
- 10. 比较字符(ARM程序集)
- 11. 程序比较两个xml文件
- 12. 比较两个文件的程序
- 13. 命令逐行比较两个程序
- 14. 如何比较x86程序集中的两个地址?
- 15. 比较两个字符串[]
- 16. 比较两个字符串
- 17. BuildPredicate比较两个字段
- 18. 比较两个字典
- 19. 比较两个字符串?
- 20. 比较两个序列
- 21. 在PHP中比较两个数字
- 22. 比较两个字节数组? (Java)
- 23. ng消息比较两个数字
- 24. 无法正确比较两个数字
- 25. 使用MapReduce编程模型比较两个大型数据集
- 26. 比较两个整数
- 27. angularjs比较两个数组
- 28. PHP比较两个数组?
- 29. 比较两个数组?
- 30. 比较两个数组
汇编语法和机器代码取决于您使用的计算机体系结构... – Stobor 2009-07-14 04:38:43