学习笔记分享之汇编—2.汇编指令/语法

学习内容:汇编指令/语法:

  1. 拷贝源操作数到目标操作数:

    mov 目标操作数,源操作数

    • 源操作数可以是任意单元(r/m/sr/imm) (sr:Segment Register)

    • 目标操作数可以是除了立即数之外的任意单元(r/m/sr)

    • 操作数的宽度必须前后一致

    • 源操作数和目标操作数不能同时为内存单元

  2. 加/减/与/或/异或:

    🞕 add/sub/and/or/xor 目标操作数,源操作数

    • 源操作数可以是r/m/imm

    • 目标操作数可以是r/m

    • 操作数的宽度除了源操作数是立即数的情况之外(即:立即数可以是任意位)必须前后一致

    🞕 非:

    • not r/m8   not r/m16   not r/m32
  3. 从指定内存中写入/读取数据:

    mov dword ptr ds:[m],imm   //写

    mov r,dword ptr ds:[r]      //读

    ptr: Point 代表后面是一个指针 (指针即里面存的不是普通的值,而是个地址)
    
    在8086中设置4个16位的段寄存器,用于管理4种段:
    ①数据段---ds(Data Segment):数据段寄存器
    ②代码段---cs(Code Segment):代码段寄存器
    ③堆栈段---ss(Stack Segment):堆栈段寄存器
    ④附加段---es(Extra Segment):附加段寄存器
    
    BYTE 字节 = 8(BIT)
    
    WORD 字  =  16(BIT)
    
    DWORD 双字 =  32(BIT)
    
    1KB = 1024 BYTE
    
  4. 寻址公式

    (LEA与MOV的区别在于MOV是取地址中的值,而LEA是取地址)

    ①[imm]形式

    读取内存的值 向内存中写数据 读取内存编号
    mov r,dword ptr ds:[m] mov dword ptr ds:[m],r/imm lea r,dword ptr ds:[m]

    ②[r]形式

    读取内存的值 向内存中写数据 读取内存编号
    mov r’,imm
    mov r”,dword ptr ds:[r’]
    mov r,imm
    mov dword ptr ds:[r],imm
    lea r’,dword ptr ds:[r”]
    mov r’,dword ptr ds:[r”]

    ③[r+imm]形式

    读取内存的值 向内存中写数据 读取内存编号
    mov r’,imm 
    mov r”,dword ptr ds:[r’+imm]