欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

4.1数据传送指令

4.1数据传送指令

知识点:
 2.操作数类型
  立即操作数,寄存器操作数,内存操作数
 
   r8   8位通用寄存器
   r16  16位通用寄存器
   r32  32位通用寄存器
   reg  寄存器
   sreg  16位段寄存器
   imm   8,16,32位立即数
   imm8
   imm16
   imm32
   r/m8  8位寄存器/内存 操作数
   r/m16
   r/m32
   mem   8,16,32 内存操作数
 
 3.直接内存操作数
   
   mov eax,val1      
   mov eax,[val1]  ;不常用
 
 4 MOV 指令
   
   1.操作数尺寸必须一致
   2.不能同时为内存操作数
   3.目的操作数不能使CS,EIP,IP
   4.立即数不能直接送到段寄存器
 
    mov reg,reg
    mov mem,reg
    mov reg,mem
    mov mem,imm
    mov reg,imm
 
    内存数据的移动,要通过寄存器转移,不能直接mov 两个内存操作数。
 
5.整数的零/符号扩展
 
   当将16位数据送入EAX的时候,虽然MOV 指令必须要用 AX作为操作数,但是要考虑AX高16位旧数据的问题。
 
    .data 
 
     var1 WORD 1
 
     .CODE
      mov eax,0   ; 因此最好在之前将eax 清零
      mov ax,var
 
      但是针对赋值,不能直接清0,要用FFFFFFFFH填充。
 
      movzx 0 扩展指令
 
      movzx r32,r/m16
      movzx r32,r/m8
      movzx r16,r/m8
 
      因为是用0扩展最高有效位,所以只能用于无符号数
 
      movsx  符号位扩展
 
       movsx r32,r/m16 
       movsx r32,r/m8
       movsx r16,r/m8
 
 6.LAHF,SAHF
 
   LOAD STATUS FLAGS INTO AH
   STORE AH INTO EFLAGS
   AH<---->EFLAG 低字节
 
 7.XCHG
 
   数据交换指令  
 
   XCHG REG,REG
   XCHG REG,MEM
   XCHG MEM,REG
 
8.直接偏移操作数
 
     变量偏移地址 + 常数
 
     array BYTE 10H,20H,30H,40H
 
     MOV AL,[array + 1] ; al= 20h
     MOV AL,array + 1 ;  两条语句等价
     
     MASM并不对数组的下标进行检查,所以程序员要保证数组下标不越界。
 
    字和双字节数组:
 
    .data
     arrayW WORD 100h,200h,300h
     mov AX,[array + 2] ;偏移量按照字节计算,所以双字就要+4
 
    例子程序:
 
   

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功