控制总线:
BHE/S7:表示高8位数据有效,T1输出。
RD:存储器或I/O口读信号,输出,低电平有效,T2~T3有效。
READY:准备就绪信号,输入,高电平有效。READY=1时,表示CPU访问的存储器或I/O端口已准备好传送数据,马上可以进行读/写操作。 TEST:测试信号,输入,低电平有效。
INTR:可屏蔽中断请求信号,输入,电平触发,高电平有效。 CPU每执行完一条指令,即检查INTR,为“1”表示有中断清求,为“0”,则没有。是否响应受标志寄存器中IF的控制 NMI:不可屏蔽中断请求信号,输入,上升沿触发。
RESET:复位信号,输入,高电平有效。CPU复位后,从FFFF0H单元开始读取指令。 电源线和地线: VCC,GND
五、8086系统的最小/最大工作方式 最小工作方式:
① INTA:中断响应信号,输出,低电平有效。 ② ALE:地址锁存允许信号,输出,高电平有效。 ③ DEN:数据允许信号,三态输出,低电平有效。 ④ DT/R:数据发送/接收控制信号,三态输出。 ⑤ M/IO:存储器或I/O端口选择信号,三态输出。M/IO=1,表示当前CPU正在访问存储器;M/IO=0,表示当前CPU正在访问I/O端口。
⑥ WR:写信号,三态、输出。当WR=0低电平有效时,表示当前CPU正在对存储器或I/O端口进行写操作。
⑦ HOLD:总线保持请求信号,输入,高电平有效。 ⑧ HLDA:总线请求响应信号,输出,高电平有效。 最大工作方式:
在最大方式系统中,外加有8288总线控制器,一般包含2个或多个处理器。 8282:地址锁存器,8286:数据收发器 第四章 计算机指令系统 一、计算机指令编码
8086与8088的指令系统完全相同,主要特点:
(1) 采用可变长指令,机器指令格式由1~6字节组成,比较复杂,最短8位,最长48位。 (2) 寻址方式多样灵活,处理数据的能力比较强,可处理字节或字、带符号或无符号的二进制数据以及压缩型/非压缩型的十进制数据。
(3) 有重复指令和乘、除运算指令。扩充了条件转移、移位/循环指令。 (4) 为加强软件中断功能和支持多处理器系统的工作,增设了有关的指令。 1.指令的编码
指令:直接控制电路实现特定功能的信息。
机器指令:面向机器,0和1表示机器是否可接受并执行指令。 汇编指令:面向人,符号表示,必须翻译才能执行。 汇编指令的格式:
一般格式:操作码 操作数
具体格式:标号:操作码(空格分隔符)目的操作数(存放结果),(逗号分隔符)源操作数;注释
一条指令可以无操作数,必须有操作码,不同的机器,操作数个数不同。 2.机器指令主体的编码
6
(1)机器指令的主体格式 (2)B1字节编码
决定指令的功能:OP——指令操作码,决定指令操作的基本功能(传送、加法、减法等)。 决定操作数传送方向:D:D=1,REG字段所确定的寄存器操作数为目标;D=0,为源。 决定操作数类型(长度):W:W=1为字(16位),W=0,为字节(8位)。 (3)B2字节编码 决定寻址方式
REG:寄存器操作数地址编码。
MOD和R/M:另一操作数地址的编码。 3.汇编指令与机器指令的关系
(1)MOV BYTE PTR[BX+5678H],23H 将5678H拆成两部分:56,78 (2)MOV BYTE PTR[BX+78H],23H 4.操作数类型 按物理位置分(有存储功能的地方):寄存器操作数,存储器操作数,I/O端口操作数。
5.计算机寻址概念
指令的寻址=>CS:IP(不用表示,固定的) 二、指令掌握要点
1.指令功能:产生的状态—>状态标志位是否受影响,以及如何影响。
2.指令格式:符号,分隔符,说明符号。 3.操作数寻址方式 4.操作数数据类型:字节、字型、双字型.
5.使用规则:非法使用规则,指令约定设置,要求与之的参数,隐含使用的寄存器等。 三、8086指令寻址方式 1.操作数寻址方式
操作数位置在指令中的表达方式,以及寻找实现方式。 2.寻址方式分类
固定寻址(隐含寻址):操作数位置固定(寄存器或存储器),在指令中不表示。 立即数寻址:直接写在指令上的数据,在存储器的程序(代码)段中。 寄存器寻址:操作数放在寄存器中,源/目的操作数都可。 存储器寻址:对存储器操作数而言 I/O端口寻址
数据串寻址(串操作指令寻址) 转移寻址
3.存储器寻址的划分
存储器地址=物理地址=段地址*10H+偏移地址
操作数的偏移地址=有效地址(EA)=基址值(BX/BP)+变址值(SI/DI)+偏移量(0/8/16) (1)直接寻址方式:位移量=有效地址 (2)寄存器间接寻址方式:有效地址(EA)=基址值(BX/BP)+变址值(SI/DI)+偏移量(0/8/16)
7
(3)基址寻址方式:有效地址(EA)=基址值(BX/BP)+偏移量(0/8/16) (4)变址寻址方式:有效地址(EA)=变址值(SI/DI)+偏移量(0/8/16) (5)基址加变址寻址方式:有效地址(EA)=基址值(BX/BP)+变址值(SI/DI)+偏移量(0/8/16) (6)寄存器相对间接寻址:
(7)相对基址加变址寻址:操作数的默认段为SS
设DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量DISP=1618H,试判断下列指令的寻址方式,并求出在各种寻址方式下,这些寄存器与位移量所产生的有效地址EA和实际地址(物理地址)PA。说明指令执行的结果。 ① MOV AX,[0618H]
这是一条直接寻址方式的指令。 EA=0618H
PA=12000H+0618H=12618H
该指令执行的结果是将数据段的实际地址为12618H和12619H两单元中的内容取出送AX。 ② MOV AX,[BX]
这是一条以数据段基址寄存器BX间接寻址的指令。 EA=05A6H
PA=12000H+05A6H=125A6H
该指令执行的结果是将数据段的125A6H和125A7H两单元的字内容取出送AX。 ③ MOV AX,[BP]
这是一条以堆栈段基址寄存器BP间接寻址的指令。由于寻址时用上了BP寄存器,则操作数所默认的段寄存器就是SS。 EA=40A0H
PA=50000H+40A0H=540A0H该指令执行的结果是将堆栈段的540A0H和540A1H两单元的字内容取出送AX。 ④ MOV AX,[DI]
这是一条变址寻址的指令。 EA=3000H
PA=12000H+3000H=15000H
该指令执行的结果是将数据段的15000H和15001H两单元的字内容取出送AX。 ⑤ MOV AX,[BX+DI]
这是一条基址加变址寻址的指令。 EA=05A6H+3000H=35A6H PA=12000H+35A6H=155A6H
该指令执行的结果是将数据段的155A6H和155A7H两单元的字内容取出送AX。 ⑥ MOV AX,[BP+SI+DISP]
这是一条带位移量的基址加变址寻址的指令,又叫相对基址加变址寻址的指令,且操作数的默认段为SS。
EA=40A0H+2000H+1618H=76B8H PA=50000H+76B8H=576B8H
该指令执行的结果是将堆栈段的576B8H和576B9H两单元的字内容取出送AX。 4.I/O端口寻址
寻址空间:64KB;用于输入指令IN,输出指令OUT中。寻址方式分别为: 直接端口寻址:端口地址为8位(地址<=255),端口地址直接写在指令上。 间接端口寻址:端口地址为16位(地址<=65535),端口地址放在DX中,DX寄存器作为I/O
8
端口的地址指针。 5.数据串寻址
仅用于串操作时,使用变址寄存器,且使用其自动递增或自动递减的功能。 将A块10个数据转移至B块空间中,源序数—>SI,目的序数—>DI。
串操作指令使用的是隐含寻址方式,有自动处理功能,在重复串操作时,8086/8088能自动修改SI和DI的内容。 6.转移寻址
用于控制转移类指令。
实质:控制转移类指令通过改变IP和CS值,从新位置开始执行指令。 转移寻址分成2种类型:段内转移和段间转移。 条件转移指令只允许实现段内转移,而且是段内短转移,由指令中直接给出8位地址位移量 无条件转移和调用指令又可分为段内短转移、段内直接转移、段内间接转移、段间直接转移和段间间接转移等5种不同的寻址方式。 段间转移=远转移。 四、指令分类
8086/8088的指令按功能可分为6类:数据传送、算术运算、逻辑运算、串操作、程序控制和CPU控制。
1.数据传送类指令
数据传送类指令可完成寄存器与寄存器之间、寄存器与存储器之间、寄存器与I/O端口之间的字节或字传送,共同特点是不影响标志寄存器的内容,分成4种类型。 (1通用数据传送指令
(1)MOV d,s;d←s,即将由源s指定的源操作数送到目标d
源操作数(s)可以是8/16位寄存器、存储器的某个字节/字或者是8/16位立即数;目标操作数(d)不允许为立即数;两者不能同时为存储器操作数。 基本传送指令MOV d,s的类型有以下7种。 ① MOV mem/reg1,mem/reg2
由mem/reg2所指定的存储单元或寄存器中的8位数据或16位数据传送到由mem/reg1所指定的存储单元或寄存器中,但不允许从存储器传送到存储器。 ② MOV mem/reg,data
将8位或16位立即数data传送到由mem/reg所指定的存储单元或寄存器中。 ③ MOV reg,data
将8位或16位立即数data传送到由reg所指定的寄存器中。 ④ MOV ac,mem
将存储单元中的8位或16位数据传送到累加器ac中。 ⑤ MOV mem,ac
将累加器AL(8位)或AX(16位)中的数据传送到由mem所指定的存储单元中。 使用MOV指令时要注意的问题: CS不能做目的操作数
不能直接从存储器到存储器之间数据传送 2条伪指令:
WORD PTR表示字数据类型 BYTE PTR表示字节数据类型
9
(2)PUSH和POP
PUSH s:将源操作数(16位)压入堆栈
POP d:将堆栈中当前栈顶两相邻单元的数据字弹出到d
压栈指令PUSH AX:将AX(16位)中的数据压入栈,AX是源操作数,栈顶是目的操作数,由(SS:SP)指向。 出栈指令POP AX:将栈顶信息弹出到AX中,AX是目的操作数,栈顶是源操作数,由(SS:SP)指向。
设当前CS=1000H,IP=0020H,SS=1600H,SP=004CH,则该指令执行时,将当前栈顶两相邻单元1604CH与1604DH中的数据字弹出并传送到CX中,同时修改堆栈指针,SP+2→SP,使之指向新栈顶1604EH。
堆栈是内存中开辟的一个段,存放需要保护的信息(数据、地址)。堆栈操作时应遵循的5点原则:
堆栈的存取操作每次必须是一个字(即2个字节)。
执行压栈指令时,总是从高位地址向低位地址存放数据,而不象内存中的其他段,总是从低地址向高地址存放;执行出栈指令时,从堆栈中弹出数据则正好相反。
堆栈段在内存中的物理地址由SS和SP或SS和BP决定,其中,SS是堆栈段寄存器,它是栈区的最低地址,称为堆栈的段地址;SP是进栈或出栈指令隐含的堆栈地址指针,它的起始值是堆栈应达到的最大偏移量,即指向栈顶地址。堆栈段的范围是SS×16至SS×16+SP的起始值。每执行一次压栈指令,则SP-2,推入堆栈的数据放在栈顶;而每执行一次弹出指令时,则SP+2。BP寄存器用于对堆栈中的数据块进行随机存取,例如,MOV AX,[BP][SI]指令执行后,将把偏移量为BP+SI的存储单元的内容装入AX。
堆栈指令中的操作数只能是寄存器或存储器操作数,而不能是立即数。
对CS段寄存器可以使用压栈指令PUSH CX,但却不能使用POP CS这种无效指令。 (3)XCHG d,s
该指令功能是将源操作数与目标操作数(字节或字)相互对应交换位置。交换可以在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但不能在两个存储单元之间交换,段寄存器与IP也不能作为一个源或目的操作数。 (4)XLAT
这是一条用于实现字节翻译功能的指令,又称为代码转换指令。具体地说,它可以将AL寄存器中设定的一个字节数值变换为内存一段连续表格中的另一个相应的代码,以实现编码制的转换。
2)目标地址传送指令 专用于传送地址码的指令,可传送存储器的逻辑地址(即存储器操作数的段地址或偏移地址)至指定寄存器中,共包含3条指令:LEA、LDS和LES。 (1) LEA d,s 取有效地址指令。功能:把用于指定源操作数(它必须是存储器操作数)的16位偏移地址(即有效地址)传送到一个指定的16位通用寄存器中。 (2) LDS d,s
取某变量的32位地址指针指令。功能:从由指令的源s所指定的存储单元开始,由4个连续存储单元中取出某变量的地址指针(共4个字节),将其前两个字节(即变量的偏移地址)传送到由指令的目标d所指定的某16位通用寄存器,后两字节(即变量的段地址)传送到DS段寄存器中。 (3) LES d,s 这条指令与LDS d,s指令的操作基本相同,其区别仅在于将把由源所指定的某变量的地址指
10