x86汇编语言mov、movzx、movsx、sizeof、lengthof等指令

本文详细介绍了x86汇编语言中的关键指令,包括mov、movzx、movsx的使用规则及注意事项,并通过实例展示了指令的应用。此外,还涉及LAHF/SAHF、XCHG、add、inc/dec、sub、neg等指令,以及offset运算符、ALIGN伪指令、PTR运算符、TYPE、LENGTHOF和SIZEOF运算符的用法,最后提到了TYPEDEF运算符在类型定义中的作用。
摘要由CSDN通过智能技术生成
  1. mov指令

    1. 语法格式如下

      mov dest, source ; 将原操作数移动到目标操作数, 或者说是给目标赋值
      ; 标准格式如下  reg代表寄存器, mem代表内存, imm代表立即数
      mov reg, reg
      mov mem, reg
      mov reg, mem
      mov mem, imm
      mov reg, imm
      
    2. 注意点

      • 两个操作数的大小必须是一样的

        ;例如 如下代码eax是32寄存器, bx是16位寄存器,大小不一样则会编译失败, 报 instruction operands must be the same size错误
        mov eax, bx 
        
      • 两个操作数不能同时为内存操作数

        ;例如如下代码val1,val2两个都是内存操作数,报 invaild instruction operands错误
        .data
        	val1 BYTE 1
        	val2 BYTE 2
        .code
        main PROC
        	mov val1, val2
        	INVOKE ExitProcess, 0
        main ENDP
        END main
        
      • 指令寄存器(IP、EIP、RIP)不能做操作数

        ;例如如下代码给eip赋值,报 undefined symbol: eip错误
        mov eip, eax
        
  2. movzx指令

    1. 语法格式如下

      movzx dest, source ; 和mov有所不同, mov操作符要求源操作数和目标操作数的大小相同, 而movzx则要求源操作数的位数小于目标操作数,且目标不能为立即数。执行movzx之后目标操作数的高位全部置为0
      ; 标准格式如下
      movzx reg32, reg/mem ; 将8位或16位的寄存器或内存移动到32位的寄存器中, 低位赋值,高位置为0
      movzx reg16, reg/mem ; 将8位寄存器或内存移动到16位的寄存器中, 低位赋值,高位置为0
      
    2. 注意点

      • 指令寄存器(IP、EIP)不能做操作数

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

13岁的少年相当白帽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值