基础
-r
查看寄存器内容
-r ip
:0
将IP改为0000
-t 单步执行
-d 查看内存内容(几个字节)
-e 改写偏移地址
-u 将机器码编译为汇编指令
-a 以汇编语言的形式写入程序
MASA中
move ax , [0] 将al的值赋值为0
move ax , ds:[0] 将偏移地址为0的内存单元的内容放进ax中
move ax , [bx] 将bx的内容放进ax中
dw 定义字形数据 //数据以字为单位,而非字节
dw 定义字形数据
数据以字为单位,而非字节
dw定义 字 类型变量,一个字数据占2个字节单dao元,读完一个,偏移量加2
db定义 字节 类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1。
dd定义 双字类 型变量,一个双字数据占4个字节单元,读完一个,偏移量加4。
AX的 低八位是AH寄存器, 高八位是AX 寄存器
dup 3(0)定义三个字节: 0,0,0
offset 取标号的偏移地址 // start : mov ax , offset start ;相当于 mov ax , 0
mul bl
//al与 bl 相乘结果保存至 ax
div
被除数:默认放在AX或DX和AX,如果除数为8位,被除数则为16位,默认在AX中存放;
如果除数 为16位, 被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;
如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。
inc 自增 1
dec 自减 1
jump 跳转
jcxz cx==0 时跳转
call
sp=sp-2
((ss)*16+(sp))=ip
ip=ip+十六位位移
push ip
jump near ptr 标号
ip=ip+十六位位移
**call far ptr 标号 **
push cs
push ip
jump far ptr 标号
ret
pop ip
retf
pop ip
pop cs
可以 call 和 ret 的配合使用
**标志寄存器 **
ZF (零标志位)
记录指令执行后结果是否为0
结果=0,ZF=1 ; 结果!=0 ,ZF=0
PF (奇偶标志位)
1的个数为偶数,PF=1 ;
1的个数为奇数,PF=0 ;
SF (符号标志位)
结果为负,sf=1 ;
结果为正,sf=0 ;
CF (进位标志位)
在无符号运算中,记录运算结果是否向更高位进位。
记录进位或借位值 。
OF (溢出)
在有符号运算中
有溢出,of=1;
无溢出,of=0;

adc指令
格式:adc 操作对象1 , 操作对象2
如
adc ax , bx
功能(ax)=(ax)+(bx)+cf
sbb (借位减法指令)
指令格式: sbb 操作对象1 , 操作对象2
功能 : 对象1 = 对象1 - 对象2 -cf
如
sbb ax , bx
(ax)=(ax)-(bx)-cf
cmp (比较指令)
格式: cmp 对象1 , 对象2
功能: 计算对象1 - 对象2 ,结果不保存,仅改变标志寄存器。
用于比较大小时,若有溢出,结果不一定正确。
检测比较结果的条件转移指令

df标志和传送指令
df=0 操作后 si di 递增
df=1 操作后 si di 递减
↑(用于指明传送方向)↑
格式 movsb
功能:传送字节
(1)
((es)*16+(di))=((ds))*16+(si))
(2)
如果df=0则: (si)=(si)+1 ; (di)=(di)+1
如果df=1则: (si)=(si)-1 ; (di)=(di)-1
♤
格式 movsw
功能:传送字
(1)
((es)*16+(di))=((ds))*16+(si))
(2)
如果df=0则: (si)=(si)+2 ; (di)=(di)+2
如果df=1则: (si)=(si)-2 ; (di)=(di)-2
pushf : 将标志寄存器的值压栈
popf :从栈处弹出数据送入标志寄存器
内中断
过程
(1)取得中断码N ;
(2)pushf
(3)TF=0, IF=0
(4)push cs ; push ip
(5)(ip)=(N4) , (cs)=(N4)+2
最后cpu开始执行程序员编写的中断处理程序
iret 指令
功能:
pop IP
pop CS
popf
int
格式 int n
功能 :
(1)取中断类型码n
(2)标志寄存器,IF=0,TF=0
(3)CS,IP入栈
(4)(ip)=(n4),(cs)=(n4+2)
端口
读写端口指令
in ax , 21h ;
out ax , 21h ;
逻辑移位指令
shl : 将寄存器或内存单元的数据左移一位,将最后移出的一位写入CF中。其他用0补足。
shr : 与shl相反。
外中断(外设引发的中断)
cpu检测到可屏蔽中断,如果IF=1.执行完当前指令后,执行中断;
如果 IF-0 . 不执行中断。
不可屏蔽中断过程
标志寄存器入栈,IF=0,TF=0;
cs,ip入栈;
(ip)=(8),(cs)=(OAH)
如图

相当于
for(i=1000 ; i>0 ; i--)
{
for(j=10000 ; j>0 ; j--)
{
}
}
seg
取标号处段地址。




