基础

-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

取标号处段地址。