8086指令系统是在8位微处理器8080/8085的指令系统基础上设计的,它兼容了8080/8085的全部指令,与8位微处理器具有 兼容性的指令往往是处理字节(8位)上午。此外,8086还有自己所特有的对字或字符串的处理指令,以及对带符号数的运算指令、中断指令和协处理器指令。
指令系统中有一类指令叫转移指令,还有一类叫调用指令,这两类指令涉及转移地址或者调用地址的提供方式,一般也称为指令地址的寻址方式。
1、了解8086的寻址方式
2、熟练掌握8086的各种指令,并掌握它们的作用
§8086的寻址方式
§标志寄存器
§8086指令系统
§练习题
§自测题
3.1 8086的寻址方式
3.2 数据传送指令
3.3 算术运算指令
3.4 逻辑运算和移位指令
3.5 串操作指令
3.6 控制转移指令
3.7 处理器控制指令
1、思路清晰地理解各种寻址方式;
2、自己多写一些小程序或多做些相关的练习题。
寻址方式 指令系统 标志
1、《微型计算机技术及应用》,戴梅萼等编著,第二版,清华大学出版社
2、《微型计算机原理》,季维法等编著,第一版,电子科技大学出版社
3、《微型计算机原理—常见题型解析及模拟题》,武自芳主编,西北工业大学出版社
4、《80X86/80X87汇编语言程序设计》,洪志全等编著,电子科技大学出版社
§3.1 8086的寻址方式
计算机中无论是什么指令,其操作的对象都是数据,指令必须指出操作数的值是多少或指出操作数存放在什么地方。形成操作数存放地址的方法,称为寻址方式。寻址方式要涉及到寄存器、存储器、外设接口电路。
1、 寄存器寻址
操作数存放在CPU的寄存器中,指令以寄存器名代表该操作数。
2、 立即寻址
操作数为常数,指令中直接写出该常数值。
3、 直接寻址
操作数在内存中,指令给出存储单元的有效地址EA(Effective Address,16位地址偏移量称为有效地址)。存储单元的段地址值缺省为DS寄存器的值。
在指令中,也可直接指定存储单元的段地址
"CS:"放在有效地址前,替换了缺省的DS段,称为"段替换前缀"。
一般说来,在程序设计中,把全部数据集中放在一个或几个数据段中,在程序的开始,把当前要使用的数据段的基地址送给DS寄存器,然后用缺省段地址的寻址方式使用该段中的数据。如果要使用另一个数据段,再把要使用的数据段的基地址送给DS寄存器,然后用缺省段地址的寻址方式使用新数据段中的数据。很少使用段替换前缀。如图3-1所示。
4、 寄存器间接寻址
当操作数在内存中时,内存单元的有效地址也可以用某些寄存器的 值来表示。可以使用的寄存器及其缺省的段如下表:
寄存器间接寻址方式中,内存单元的有效地址EA还可以用以下两种方式来表示。
(1) BX/BP/SI/DI的值加上一个8位常数(称为8位位移量)或16位常数(称为16位位移量),如图3-2所示。
(2) BX/BP/SI/DI中的两个寄存器的值之和,或者再加上一个8位位移量或16位位移量,但不能同时出现BP和BX,也不能同时出现SI和DI。如图3-3所示。
当两个寄存器中有一个是
BP时,段地址缺省为SS。否则,段地址缺省为DS。
§3.2 标志寄存器
8086CPU内部有一个16位标志寄存器,其中只使用了9位,每一位表示一个标志,如图3-4。有6位状态标志,表示CPU运算结果的特征。有3位控制标志,用来控制CPU的行为。
在文字说明中,标志寄存器可用符号FLAGS或PSW(Program Status Word,程序状态字)来表示,但这些符号不能出现在指令中,例如,"MOV AX,FLAGS"不是合法的指令。
1、 进位标志CF(Carry)
在运算指令执行后,当最高位(字节运算时,最高位是D7位;字运算时,最高位是D15位)上有进位或借位时,CF置1,否则置0。循环和移位指令操作也能把存储单元或寄存器中的最高位或最低位移入CF中。
2、 奇偶校验标志PF(Parity)
在运算指令执行后,结果的低8位中含1的位数为偶数时,PF标志置1,否则置0。
3、 辅助进位标志AF(Auxiliary Carry)
在运算指令执行后,当Bit3向Bit4有进位,或Bit3向Bit4有借位,AF标志置1,否则置0。
4、 零标志ZF(Zero)
在运算指令执行后,结果为0,则ZF标志置1,否则置0。
5、 符号标志SF(Sign)
在运算指令执行后,最高位为1,则SF标志置1,否则置0。
6、 溢出标志OF(Overflow)
在有符号数加、减运算中,运算结果超出了表示范围。
如: 有符号字节运算的结果超出了-128 ~ +127;
有符号字运算的结果超出了-32768 ~ +32767。
则OF标志置1,否则置0。当运算结果超出了表示范围,运算结果是错误的。
使用双高位来判别OF标志。所谓双高位判别,即规定符号位(用CS表示)有进位时,CS=1,否则 CS=0。数值部分最高位(CP表示)有进位时CP=1,否则 CS=0。若CS⊕CP=1("异或"运算),则有溢出产生。
注意:
(1) 上述CF和CS的值是相同的,对于无符号数称为CF ,对于有符号数,由于最高位代表符号,故称为CS。
(2) 除法运算(无符号数和有符号数)溢出时,产生"除数为0"中断,不能用上述方法或其他方法判别除法运算溢出。
(3) 乘法运算始终不会溢出。
DEBUG命令中,标志位的表示(《MS-DOS 6.22参考手册》p185)
7、 跟踪标志TF(Trap)
若TF置1,则CPU进入"单步运行方式"。在单步运行方式中,CPU每执行一条指令,则产生一个类型码为1的内部中断(称为单步中断),单步中断处理程序执行完后,再执行下一条指令。单步中断处理程序可以作为调试程序,如图3-5所示。
8、 中断允许标志IF(Interrupt Enable)
若IF置1,允许CPU响应可屏蔽中断请求INTR;若IF=0,禁止CPU响应可屏蔽中断请求INTR。该标志不影响NMI中断和内部中断。
该标志用于字符串处理指令中。
字符串是一中数据类型,它占用一个或多个连续内存单元,如图3-6所示。
字符串指令执行时,操作数(源字符串和目的字符串)的地址会自动改变。方向标志用于指定地址改变的方向,当DF=0时,地址增加(从低地址向高地址处理);当DF=1时,地址减少(从高地址向低地址处理)。
标志寄存器的各标志位可以用指令来修改。