Assembly MOV指令的区别是什么

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

我已经开始学习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 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代码中).我相信你的话-我已经有一段时间了:)