学习过程中要重点掌握对标志寄存器的影响
数据传送类指令(不影响标志位)
一:MOV指令
先要知道图片中这几个英文表示什么
立即数(immediaate operand)
寄存器(register)
内存(memory)
段寄存器(segment)
规则
1:两个操作数类型必须一致
MOV AX,BL 错误
2:至少1个操作数的类型要明确
MOV [BX],10 错误 带有括号的这种本身不具备类型。
MOV BYTE PTR [BX],10 正确
3:代码段寄存器CS和立即数不能作为目的操作数
4: 源操作数和目的操作数不能同为存储器操作数(内存单元)
例如你定义了两个DB类型变量 var1,var2
MOV VAR1,VAR2 错误
那怎么实现呢,通过这两句话
MOV AL,VAR2
MOV VAR1,AL
5:立即数,不含变量名的地址表达式的类型不明确。立即数送存储器的指令中,若存储器操作数是不含变量名的地址表达式,则必须用PTR来明确一个操作数的类型。也就是可以将立即数送内存单元,但是内存单元必须有类型
6: IP不能作为MOV指令的操作数
7:立即数不允许送段寄存器
二: 数据交换指令XCHG(用的比较少)
规则:1:dest,src不允许是段寄存器,立即数或者IP寄存器
2:两个存储器单元不能直接交换数据
3:不影响标志位
记住以后数据段定义的东西,最好拿到CPU寄存器中去算。汇编程序主战场是CPU,别在内存汇总瞎搞。
来个简单的例题
;用XCHG
MOV AX,W1
XCHG AX,W2
MOV W1,AX
;用MOV指令
MOV AX,W1
MOV BX,W2
MOV W1,BX
MOV W2,AX