汇编 bios 发送指令文档_堆栈


第一章 汇编语言基础知识(中)

写在前面:这一部分开始接触编写汇编语言程序需要大量运用的寄存器、标志等。如有错误欢迎指正,感谢!

1.8086的通用寄存器

16位通用寄存器:AX BX CX DX SI DI BP SP

其中前四个数据寄存器还可以分成高8位和低8位两个独立的寄存器

即8086的8位通用寄存器:

AH AL BH BL CH CL DH DL

2.数据寄存器

用来存放计算的结果和操作数,每个寄存器也可以存放地址。

  • AX:累加器,使用频率最高,用于算术、逻辑运算以及与外设传送信息等;
  • BX:基址寄存器,常用作存放存储器地址、数组首地址,默认段地址DS;
  • CX:计数器,作为循环和串操作等指令中的隐含计数器;
  • DX:数据寄存器,常用来存放双字长数据的高16位,或存放外设端口地址。

3.变址寄存器

用于存储器寻址时提供地址。串操作类指令中,SI、DI具有特别的功能。

  • SI:源变址寄存器
  • DI:目的变址寄存器

4.指针寄存器

用于寻址内存堆栈内的数据。SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址。

  • SP:堆栈指针寄存器,用于指示栈顶的偏移地址。具有专用目的,不能在用于其他目的。
  • BP:基址指针寄存器,表示数据在堆栈段中的基地址,默认段地址SS,用法类似BX。

5.指令指针寄存器

  • IP:指示代码段中指令的偏移地址,与代码段寄存器CS联用,确定下一条指令的物理地址,是一个专用寄存器。

6.标志寄存器

标志(Flag)用于反映指令执行结果或控制指令执行形式。各种标志形成了一个16位的标志寄存器FLAGS。

状态标志:CF ZF SF PF OF AF 控制标志:DF IF TF


汇编 bios 发送指令文档_堆栈_02

各个标志在标志寄存器中的位置


7.进位标志CF

无符号数,当加法或减法运算结果的最高有效位有进位或者借位时,CF=1(CY),否则CF=0(NC)。


;在dosbox用-a写代码时不要加h,dosbox只认得十六进制。
mov al,3ah
mov dl,7ch
add al,dl   ;al=b6h,CF=0

mov al,aah
mov dl,7ch
add al,dl   ;al=26h,CF=1

mov al,4ah
mov dl,3ah
sub al,dl   ;al=10h,CF=0

mov al,3ah
mov dl,4ah
sub al,dl   ;al=f0h,CF=0


8.零标志ZF

当运算结果为0时,ZF=1(ZR),否则ZF=0(NZ)。

PS:cmp指令,同样会引起ZF变化。


mov dl,7ch

mov al,3ah
cmp al,dl   ;ZF=0
add al,dl   ;al=00h,ZF=0

mov al,84h
cmp al,dl   ;ZF=1
add al,dl   ;al=00h,ZF=1


9.符号标志位SF

运算结果的最高位为1(即为负数),则SF=1(NG),否则SF=0(PL)。


mov dl,7ch

mov al,3ah
add al,dl   ;al=b6h(1011 0100B),SF=1
mov al,84h
add al,dl   ;al=00h,SF=0


10.奇偶标志位PF

当运算结果最低字节(即最低8位)中“1”的个数为0或偶数时,PF=1(PE),否则PF=0(PO)。


mov dl,7ch

mov al,3ah
add al,dl   ;al=b6h(1011 0110B),PF=0


11.溢出标志OF

有符号数,若算术结果有溢出,则OF=1(OV),否则OF=0(NV)。!注意是有符号数,与CF区别


mov dl,7ch

mov al,3ah
add al,dl   ;al=b6h,CF=0,OF=1


12*.辅助进位标志AF

运算时D3位有进位或借位时,AF=1,否则AF=0。这个标志主要由处理器内部使用,用于十进制算术运算调整指令中,用户一般不必关心。

13.方向标志DF

用于串操作指令中,控制地址的变化方向。

  • CLD指令设置DF=0时,存储器地址自动增加。
  • STD指令设置DF=1时,存储器地址自动减少。

14.允许中断标志IF

用于控制外部可屏蔽中断是否可以被处理器响应。

  • CLI指令设置IF=0时,禁止中断。
  • STI指令设置IF=1时,允许中断。

15.陷阱表示TF

用于控制处理器进入单步操作方式。

  • 设置TF=0,处理器正常工作。
  • 设置TF=1,处理器单步执行指令。

单步执行指令:处理器在每条指令执行结束时,便产生一个编号为1的内部中断,这种内部中断也叫单步中断,所以TF也叫单步标志。