Assembly MOV指令的区别是什么
我已经开始学习asm,我想知道这两种将Assembly MOV指令的区别是什么,assembly,x86,mov,Assembly,X86,Mov,我已经开始学习asm,我想知道这两种将MOV指令用于AL的不同方式之间有什么区别: 第一: MOV AL,5H 第二: MOV SI,5H MOV AL,[SI] 只需将AL寄存器的值设置为5H 首先,它将SI寄存器设置为5H 然后,它将SI解引用的值移动到AL中(即,内存地址5H中的任何内容现在都移动到AL中) 在使用索引寄存器(如SI)时,也可以应用非零基偏移,例如: MOV AL,[BX + SI] 首先将BX设置为适当的基址偏移地址。这两种方法的作用不同 ; let me use
MOV
指令用于AL
的不同方式之间有什么区别:
第一:
MOV AL,5H
第二:
MOV SI,5H
MOV AL,[SI]
MOV AL,[BX + SI]
首先将BX设置为适当的基址偏移地址。这两种方法的作用不同
; let me use friendlier syntax; IMHO, lower case and 0x5 instead of 5h is more
; readable in case of assembly
mov al, 0x5 ; al = 0x5
mov si, 0x5 ; si = 0x5
mov al, [si] ; al = *si; that is, al is now what was in memory at address 0x5
有一本关于x86程序集的简单的wikibook,可以更好地向您解释概念和语法:。汇编通常是一种简单的语言,但最好只遵循有关它的教程/书籍,首先完全理解语法,然后——也只有这样——跳入汇编阅读和写作的疯狂世界
另外,对于其他资源,您可以查看。我认为使用
[si]
寻址形式比使用任何其他间接寻址形式更不寻常[si]
是隐式使用的,例如在scas
和cmps
中,以及在rep scasb/rep scasw/rep scasd
或rep cmpsb/rep cmpsw/rep cmpsd
结束后,您可能需要检查它停止的位置的值(例如在字符串处理或regex代码中).我相信你的话-我已经有一段时间了:)