第4章 数据传递.寻址和算术运算

Mov操作规则:
  1.两个操作数的尺寸必须一致
  2.两个操作数不能同时为内存操作数
  3.目的操作数不能是CS,EIP和IP
  4.立即数不能自己送至寄存器
MovZx(零扩展传送)指令:无符号整数使用
  eg:
  mov bl,11111111b
  mov eax,bl
  MOVSX(符号扩展传送)前面补0

LAHF:将EFLAGS的低字节复制到AH寄存器
SAHF:将AH寄存器的值恢复到EFLAGS中
xCHG:交换两个数,不支持立即数

直接偏移操作数:
  eg:
  var1 byte 1ah,2ah

  .code
  mov ah,var1 1ah
  mov ah,var1+1 2ah
加法减法:
  inc/dec
  inc reg/mem
  dec reg/mem
ADD dec,source 只能操作相同尺寸的操作数
Sub dec,source 同上,结果存储在dec中
neg 得到操作数的补码

CF(进位标志位) inc和Dec指令不影响进位标志位,neg总是改变cf
AC(辅助标志位) 最低字节的第3位向第4位进位,则设置

加法测试:
在两个有符号整数相加的时候,以下情况说明发生了溢出
  1.两个正数相加的和是负数
  2.两个负数相加的和是正数
CPU是如何检测溢出的:
  使用进位标志 xor 结果的最高有效位

4.3 和数据相关的操作符合伪指令
  1.OFFSET 返回数据标号的偏移地址
  2.PTR 重载操作数的默认尺寸
  eg:
    .data varb dword 01aah
    .code mov ax,word ptr varb
  eg.将较小值送较大的目的操作数
    .data vara word 1h,2h
    .code mov eax,dword ptr vara
3.TYPE 按字节计算单个元素大小
4.LENGTHOF 计算数组元素的数目
5.SIZEOF 返回TYPE*LENGTHOF
6.ALIGN 将变量的位置按字节,字,双字或段边界对齐

TYPDEF 允许创建自定义类型
  eg: pbyte typdef ptr byte 声明在数据段之前
JMP:
  jmp 目的地址
LOOP:
  loop 目的地址
步骤:
  首先,ecx减1,接着与0相比较,不能与0就跳转到目标标号处

 

原文地址:https://www.cnblogs.com/student-note/p/8619503.html