文章目录
绪论
- 冯诺依曼结构的计算机由哪几部分组成?大致是如何工作的?
由存储器、运算器、控制器、输入设备、输出设备组成。
将编写好的程序和要处理的原始数通过输入设备送到计算机的存储器中存放好。每个存储单元有一个编号,称之为地址,指令和数据按一定的顺序存放在存储器中。计算机开始执行程序,即从程序指定的存储器地址开始逐条取出指令,送到控制器,经译码分析后产生各种控制信号,送到其它部件,自动执行指令规定的操作。控制器可以向存储器发读/写命令,允许从存储器中取出数据(读),送往运算器进行运算,也可以将运算结果或中间结果送回存储器的指定单元(写),运算完成后将最终结果送到输出设备。 - 计算机的硬件和软件分别指什么?
计算机软件指的是计算机上可以运行的所有指令(应用程序)的集合,计算机硬件指的是组建计算机的所有物理设备。 - 微型计算机系统由哪几部分组成?
微型计算机的软件和硬件合在一起称为微型计算机系统。
8086CPU
-
8086CPU具有16根数据总线,20根地址总线。内存空间 2 20 = 1 M B 2^{20}=1MB 220=1MB
-
内部寄存器
▶ \blacktriangleright ▶▶ \blacktriangleright ▶指令指针IP用来存放将要执行的下一条指令在现任代码段中的偏移地址,它和CS一起,形成将要取出指令的物理地址。
▶ \blacktriangleright ▶与后面寻址方式结合起来:
例如:基址BX(此时段址寄存器为DS)、BP(此时段址寄存器为SS);变址:SI、DI
只有BX、BP、SI、DI可以出现在[]内,它们可以单独出现,也可以有几个寄存器组合起来(只能相加),或以寄存器与常数相加的方式出现,但BX和BP寄存器不允许出现在同一个[]内,SI和DI也不能同时出现。 -
偶存储体 A 0 = 0 A_0=0 A0=0、奇存储体 B ‾ H E = 0 \overline BHE=0 BHE=0 P 34 P_{34} P34图
-
堆栈
▶ \blacktriangleright ▶先进后出
▶ \blacktriangleright ▶以字为单位传输
▶ \blacktriangleright ▶是特定的数据区域,但没有固定地址 -
最小模式系统(考研复试)
-
总线周期/指令周期/时钟周期
▶ \blacktriangleright ▶CPU读写一次存储器或UO端口的时间叫总线周期。
▶ \blacktriangleright ▶执行1条指令的时间称为指令周期。
▶ \blacktriangleright ▶ 1个指令周期可包含1个或几个总线周期。
▶ \blacktriangleright ▶ 1个总线周期需要4个系统时钟周期(T1~T4),时钟周期也称为T周期或T状态,它为时钟频率的倒数,是8086 CPU动作的最小单位。
▶ \blacktriangleright ▶ 8086工作时钟为5MHz,即T周期为200ns,总线周期为800ns。则CPU与内存或IO接口间传送数据的最大速率可达每秒125万次。8086-1的频率为10MHz,每秒最多可执行250万条指令,运算速度达2.5MIPS(百万指令/秒)。 -
8086CPU由哪两部分组成?它们大致是如何工作的?
▶ \blacktriangleright ▶ 8086 CPU由两部分组成:总线接口单元(Bus Interface Unit,BIU)和指令执行单元(Execution Unit,EU)
▶ \blacktriangleright ▶ BIU 负责CPU与内存和IO端口间的数据交换:
BIU先从指定内存单元中取出指令,送到指令队列中排队,等待执行。执行指令时所需的操作数,也可由BIU从指定的内存单元或I/O端口中获取,再送到EU去执行。执行完指令后,可通过BIU 将数据传送到内存或IO端口中。指令执行单元(Execution Unit,EU)
▶ \blacktriangleright ▶ EU负责执行指令:
它先从BIU的指令队列中取出指令,送到EU控制器,经译码分析后执行指令。EU的算术逻辑单元(Arithmetic Logic Unit,ALU)完成各种运算。 -
已知段地址:偏移地址分别为如下数值,它们的物理地址各是什么?
20位物理地址=段基地址×16+16位偏移量
▶ \blacktriangleright ▶ 1200:3500H→15500H
▶ \blacktriangleright ▶ FF00:0458H→FF458H
▶ \blacktriangleright ▶ 3A60:0100H→3A700H
注:H不能省略 -
段基地址装入如下数值,则每段的起始地址和偏移地址分别是什么?
▶ \blacktriangleright ▶ 1200H→起始地址:12000H,结束地址:120FFH
▶ \blacktriangleright ▶ 3F05H→起始地址:3F050H,结束地址:4F04FH
▶ \blacktriangleright ▶ 0FFEH→起始地址:0FFE0H,结束地址:1FFDFH -
已知:CS: IP=3456:0210H,CPU要执行的下条指令的物理地址是什么?
34770H
注:指令指针IP用来存放将要执行的下一条指令在现任代码段中的偏移地址,它和CS一起,形成将要取出指令的物理地址。 -
什么叫堆栈?它有什么用处?如何设置堆栈?
▶ \blacktriangleright ▶堆栈是在存储器里开辟出来的一个特定的数据区域,称为堆栈段。
▶ \blacktriangleright ▶它用来存放需要保存的数据,如调用子程序的返回地址,中断处理点的断点及现场信息等。
▶ \blacktriangleright ▶堆栈的位置和长度由堆栈寄存器SS和堆栈指针SP来指定,给定了SS:SP,就设置了一个堆栈,其最大容量为64KB。
8086寻址方式和指令系统
-
简答:有哪些寻址方式?
-
分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。
▶ \blacktriangleright ▶MOV AX,2408H
目的操作数:寄存器寻址,源操作数:立即寻址
▶ \blacktriangleright ▶MOV CL,0FFH
目的操作数:寄存器寻址,源操作数:立即寻址
▶ \blacktriangleright ▶MOV BX,[SI]
目的操作数:寄存器寻址,源操作数:寄存器间接寻址
▶ \blacktriangleright ▶MOV 5[BX],BL
目的操作数:寄存器相对寻址,源操作数:寄存器寻址
▶ \blacktriangleright ▶MOV [BP+100H],AX
目的操作数:寄存器相对寻址,源操作数:寄存器寻址
▶ \blacktriangleright ▶ MOV [BX+DI],’$’
目的操作数:基址变址寻址,源操作数:立即寻址
▶ \blacktriangleright ▶ MOV DX,ES:[BX+SI]
目的操作数:寄存器寻址,源操作数:基址变址寻址
▶ \blacktriangleright ▶ MOV VAL[BP+DI],DX
目的操作数:相对基址变址寻址,源操作数:寄存器寻址
▶ \blacktriangleright ▶IN AL,05H
目的操作数:寄存器寻址,源操作数:直接寻址
▶ \blacktriangleright ▶MOV DS,AX
目的操作数:寄存器寻址,源操作数:寄存器寻址 -
已知:DS=1000H,BX=0200H,SI=02H,内存10200H~10205H单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX寄存器的内容各是什么?
(1)MOV AX,0200H→AX=0200H
(2)MOV AX,[200H]→AX=2A10H
(3)MOV AX,BX→AX=0200H
(4)MOV AX,3[BX]→AX=5946H
(5)MOV AX,[BX+SI]→AX=463CH
(6)MOV AX,2[BX+SI]→AX=6B59H
注:在给定代码段中如果题目要求写出程序执行结果,一定看清是AH、AL还是AX,AH、AL只能传送8位数据,AX传送16位数据 -
设 DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,数据段中变量名为VAL的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什么?物理地址值是多少?
(1)MOV AX,[100H]→直接寻址,10100H
(2)MOV AX,VAL→直接寻址,10030H
(3)MOV AX,[BX]→寄存器间接寻址,10100H
(4)MOV AX,ES:[BX]→寄存器间接寻址,20100H
(5)MOV AX,[SI]→寄存器间接寻址,100A0H
(6)MOV AX,[BX+10H]→寄存器相对寻址,10110H
(7)MOV AX,[BP]→寄存器间接寻址,35200H
(8)MOV AX,VAL[BP+SI]→相对基址变址寻址,352D0H
(9)MOV AX,VAL[BX+DI]→相对基址变址寻址,10154H
(10)MOV AX,[BP+DI]→基址变址寻址,35224H -
已知程序的数据段为:
DATA SEGMENT
A DB ‘$’,10H
B DB ‘COMPUTER’
C DW 1234H,0FFH
D DB 5DUP(?)
E DD1200459AH
DATA ENDS
求下列程序段执行后的结果是什么。
MOV AL,A
MOV DX,C
XCHG DL,A
MOV BX,OFFSET B
MOV CX,3[BX]
LEA BX,D
LDS SI,E
LES DI,E
解:
AL=24H
DX=1234H
DL=24H,A=34H
BX=2
CX=5550H
BX=000EH
DS=1200H,SI=459AH
ES=1200H,DI=459AH -
指出下列指令中哪些是错误的,错在什么地方。(提示:仅第(8)题是正确的。)
(1)MOV DL,AX
(2)MOV 8650H, AX
(3)MOV DS,0200H
(4)MOV [BX], [1200H]
(5)MOV IP,0FFH
(6)MOV [BX+SI+3],IP
(7)MOV AX,[BX+BP]
(8)MOV AL,ES:[BP]
(9)MOV DL,[SI+DI]
(10)MOV AX,OFFSET 0A20H
(11)MOV AL,OFFSET TABLE
(12)XCHG AL, 50H
(13)IN BL,05H
(14)OUT AL,0FFEH
解:
(1)错,长度不匹配,寄存器寻址方式中,目的操作数与源操作数长度必须一致。
(2)错,目的操作数不可以是立即数。
(3)错,MOV指令不允许将立即数传入段寄存器。
(4)错,MOV指令的两个操作数不能同时为存储器。
(5)错,IP不能作为MOV指令的目的操作数。
(6)错,IP不能作为MOV指令的源操作数。
(7)错,BX与BP不可以同时出现在源操作数当中。
(8)对
(9)错,SI与DI是两个变址寄存器,不可以同时出现在源操作数中。
(10)错,OFFSET后面跟的应该是符号地址,再把符号地址的值作为操作数。
(11)错,TABLE的偏移地址是16位,目的与源长度不一致。
(12)错,交换指令可以在寄存器之间,寄存器和存储器之间进行,不可以是立即数。
(13)错,BL不能作为IN指令的目的操作数,只能用AL或AX。
(14)错,端口地址0FFEH应用DX间接寻址,同时源操作数和目标操作数的位置颠倒了,应改为OUT DX, AL。 -
已知当前数据段中有一个十进制数字0~9的7段代码表,其数值依次为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。要求用XLAT指令将十进制数57转换成相应的7段代码值,存到BX寄存器中,试写出相应的程序段。(参考例3.31,注意5和7要分别进行转换。)
解:程序段如下
TABEL DB 40H,79H,24H,30H,19H ;七段码表格
DB 12H,02H,78H,00H,18H
⋮ \vdots ⋮
MOV AL,5 ;AL←数字5的位移量
MOV BX,OFFSET TABLE ;BX←表格首地址
XLAT TABLE ;查表得AL=12H
MOV CL,AL
MOV AL,7
XLAT TABLE
MOV BL,AL
MOV BH,CL -
如在下列程序段的括号中分别填入以下指令:
(1)LOOP NEXT
(2)LOOPE NEXT
(3)LOOPNE NEXT
试说明在这三种情况下,程序段执行完后,AX、BX,CX,DX寄存器的内容分别是什么。
START:MOV AX,01H
MOV BX,02H
MOV DX,03H
MOV CX,04H
NEXT:INC,AX
ADD BX,AX
SHR DX,1
()
解:DX=00000011B
(1)AX=0005H BX=0010H CX=0000H
(2)AX=0002H BX=0004H CX=0003H
(3)AX=0003H BX=0007H CX=0002H
注:化为二进制算,十进制算很可能出错。
汇编程序语言设计
- 伪指令语句的作用是什么?它与指令语句的主要区别是什么?
伪指令语句作用是在汇编过程中完成特定的功能,指令语句和伪指令语句区别在于是否让CPU执行。 - 画出示意图,说明下列变量在内存中如何存放?
Al DB 12H,34H
A2 DB ‘Right.’
A3 DW 5678H
A4 DB 3 DUP (?)
解:
别忘记Right后的点
存储器
-
分类
-
存储容量:地址单元*位数
▶ \blacktriangleright ▶ 8086用20根地址线寻址1MB。
▶ \blacktriangleright ▶ 地址单元—取决于存储器地址线的位数n;
▶ \blacktriangleright ▶ 位数——取决于存储器数据线位数m。
▶ \blacktriangleright ▶ 常用单位:KB、MB、GB、TB其中:1KB= 2 10 2^{10} 210B
1MB= 2 10 2^{10} 210kB= 2 20 2^{20} 220B
1GB= 2 10 2^{10} 210MB = 2 30 2^{30} 230B
1TB= 2 10 2^{10} 210GB 2 40 2^{40} 240B -
存储空间扩展
▶ \blacktriangleright ▶位扩展:(不需地址线),用8片64K×1的DRAM芯片并联,就可以实现这种从1位宽度到1字节宽度的扩展。
▶ \blacktriangleright ▶字扩展:“字”的含义就是内存中存放的一个数据,可以是8、16或32位宽度。
▶ \blacktriangleright ▶字位扩展:存储器芯片的容量和位都需要进行扩展。 -
在一个有20位地址线的系统中,采用2K×4位的SRAM芯片构成容量为8KB的8位存储器,要求采用全译码方式,请画出该存储器系统的示意图,并回答:共需要 8 \color{Red}{8} 8块RAM芯片,必须将地址线 A 0 ∼ A 10 \color{Red}{A_0\sim A_{10}} A0∼A10直接连到每个存储器芯片上,并用地址线 A 11 ∼ A 19 \color{Red}{A_{11}\sim A_{19}} A11∼A19作为地址译码器的输入,需要译码器产生 4 \color{Red}{4} 4个片选信号。(参考图5.19和图5.21)
-
用若干2K×8的RAM存储器芯片,扩展成8K×8的存储器,画出扩展后的存储器示意图。(参考例5.3。)
-
用8K×8的 RAM存储器芯片,构成32K×8的存储器,存储器的起始地址为18000H,要求各存储器芯片的地址连续,用74LSl38作译码器,系统中只用到了地址总线 A 18 ~ A 0 A_{18}~A_0 A18~A0,采用部分译码法设计译码器电路。试画出硬件连线图,并列表说明每块芯片的地址范围。(参考例5.7。)
解:18000H=0001 1000 0000 0000 0000
I/O接口和并行接口芯片8255A
- 什么叫I/O端口?一般的接口电路中可以设置哪些端口?计算机对I/О端口编址时采用哪两种方法?在8086/8088 CPU中一般采用哪种编址方法?
▶ \blacktriangleright ▶CPU与外设通信时,传送的信息主要包括数据信息、状态信息和控制信息。在接口电路中,这些信息分别进入不同的寄存器,通常将这些寄存器和它们的控制逻辑统称为I/O端口,CPU可对端口中的信息直接进行读写。
▶ \blacktriangleright ▶在一般的接口电路中都要设置以下几种端口:
①数据端口:用来存放外设送往CPU 的数据以及CPU要输出到外设去的数据。数据端口主要起数据缓冲的作用。
②状态端口:主要用来指示外设的当前状态。每种状态用1位表示,每个外设可以有几个状态位,它们可由CPU 读取,以测试或检查外设的状态,决定程序的流程。
③命令端口:也称为控制端口,它用来存放 CPU 向接口发出的各种命令和控制字,以便控制接口或设备的动作。
▶ \blacktriangleright ▶IO端口的编址方式有两种:分别称为存储器映象寻址方式和 IO指令寻址方式。
①存储器映象寻址方式:把系统中的每个IO端口都看作一个存储单元,并与存储单元一样统一编址,这样访问存储器的所有指令均可用来访问I/O端口,不用设置专门的IO指令。
②IO指令寻址方式:对系统中的输入输出端口地址单独编址,构成一个IO空间,它们不占用存储空间,而是用专门的IN指令和 OUT 指令来访问这种具有独立地址空间的端口。
▶ \blacktriangleright ▶ 8086/8088CPU 采用IO指令寻址方式,用地址总线的低16位(A15~AO)来寻址IO端口,最多可以访问216-65536个输入或输出端口。 - CPU与外设间传送数据主要有哪几种方式?
在微型机系统中,CPU与外设之间的数据传送方式主要有程序控制方式、中断方式和DMA方式三种。
▶ \blacktriangleright ▶程序控制传送方式是指CPU与外设之间的数据传送是在程序控制下完成的,它又可以分成无条件传送和条件传送两种方式。无条件传送方式也称为同步传送方式,主要用于对简单外设进行操作,或者外设的定时是固定的或已知的场合。条件传送方式也称为查询式传送方式。在开始传送前,必须先确认外设已处于准备传送数据的状态,才能进行传送,于是就提出了查询式传送方式。
▶ \blacktriangleright ▶采用中断方式后,CPU平时可以执行主程序,只有当输入设备将数据准备好了,或者输出端口的数据缓冲器已空时,才向CPU发中断请求。CPU响应中断后,暂停执行当前的程序,转去执行管理外设的中断服务程序。在中断服务程序中,用输入或输出指令在CPU和外设之间进行一次数据交换。等输入或输出操作完成之后,CPU又回去执行原来的程序。
▶ \blacktriangleright ▶当外设需要利用DMA方式进行数据传送时,接口电路可以向CPU提出请求,要求CPU让出对于总线的控制权,用一种称为 DMA 控制器的专用硬件接口电路来取代CPU,临时接管总线,控制外设和存储器之间直接进行高速的数据传送。这种控制器能给出访问内存所需要的地址信息,并且能够自动修改地址指针,也能够设定和修改传送的字节数,还能够向存储器和外设发出相应的读/写控制信号。在DMA传送结束后,它能释放总线,把对总线的控制权又交还给CPU。 - 设8255A的A口、B口、C口和控制字寄存器的端口地址分别为80H,82H,84H和86H。要求A口工作在方式0输出,B口工作在方式0输入,C口高4位输入,低4位输出,试编写8255A的初始化程序。
解:
MOV AL,10001010B(B不要忘记写)
OUT 86H,AL - 8255A 的口地址为80H~83H,A口接8个开关
K
7
∼
K
0
K_7\sim K_0
K7∼K0,B口接8个指示灯
L
E
D
0
∼
L
E
D
0
LED_0\sim LED_0
LED0∼LED0,用来显示开关的状态,当开关合上时相应的0指示灯点亮,断开时灯灭。试画出硬件连线图(含具体的译码电路),并编写实现这种功能的程序段。要求每隔20秒钟读一次,延时20秒的子程序名为DEIAY_20S。(参考图6.21及相关程序,但不用考虑奇偶地址。)
解:
MOV DX,83H
MOV AL,1001000B
OUT DX,AL
MOV DX,80H
IN AL,DX
CALL DELAY_20S
MOV DX,81H
NOT AL
OUT DX,AL
JMP A
DELAY_20S
可编程计数器/定时器8253/8254及其应用
- 定时时间=时钟脉冲周期×预置的计数初值n
- 例7.2、例7.3看一下
- 设8253的通道0~2和控制口的地址分别为300H,302H,304H和306H,系统的时钟脉冲频率为2MHz,要求:
(1)通道0输出1kHz方波﹔
(2)通道1输出500Hz序列负脉冲﹔
(3)通道2输出单脉冲,宽度为400 μ s \mu s μs。
试画出硬件连线图,并编写各通道的初始化程序。(参考例7.2。)
解:
(1)方式3, n 0 = 2 M H Z 1 K H Z = 2000 n_0=\frac{2MHZ}{1KHZ}=2000 n0=1KHZ2MHZ=2000,控制字为00110111B
(2)方式2, n 0 = 2 M H Z 500 H Z = 4000 n_0=\frac{2MHZ}{500HZ}=4000 n0=500HZ2MHZ=4000,控制字为01110101B
(3)方式1, n 0 = 400 μ s 0.5 μ s = 800 n_0=\frac{400\mu s}{0.5\mu s}=800 n0=0.5μs400μs=800,控制字为10110011B
中断和可编程中断控制器8259A
- 什么叫中断?中断的主要功能是什么?
▶ \blacktriangleright ▶中断是指计算机在执行正常程序的过程中,由于某些事件的发生,需要暂时中止当前程序的运行,转到中断处理程序去处理临时发生的事件,处理完之后又恢复原来程序的运行,这个过程称为中断。
▶ \blacktriangleright ▶功能:
①提高CPU的利用率
②在实时控制系统中,现场设备准备好数据后,可随时向CPU 发出中断请求,CPU收到中断请求后,便及时接收数据并进行处理,避免数据丢失;
③机器在运行过程中若发现故障,如电源掉电、奇偶校验错、运算中溢出错等,也能通过中断请求,要求进行及时妥善处理;
④利用中断指令,还可以直接调用大量系统已编写好的中断服务程序,实现对硬件的控制。 - 什么叫中断源?8086CPU的中断源有哪几种?根据中断源分类,8086的中断分哪几类?
▶ \blacktriangleright ▶引起中断的原因或能发出中断请求的来源称为中断源。
$\blacktriangleright$8086有两种中断源,一种是外部中断或硬件中断,它们从CPU的不可屏蔽中断引脚NMI和可屏蔽中断引脚INTR引入;另一种为内部中断或软件中断,是为解决CPU运行过程中出现的一些意外事件或便于程序调试而设置的。因此,根据引起中断的原因,可以把8086的中断分为外部中断和内部中断两大类。 - 中断向量表用来存放什么信息?它位于内存的哪些区域内?
中断服务程序的入口地址。它们位于内存00000~003FFH的区域中。 - 若中断向量表中地址为0040H单元中存放240BH,0042H单元中存放D169H,则这些单元对应的中断类型号是什么?该中断服务程序的起始地址是什么?
解:中断类型号: n = 40 H / 4 = 10 H n=40H/4=10H n=40H/4=10H
起始地址:D169:240BH
串行通信和可编程接口芯片8251A
- 在串行通信中,什么叫单工、半双工、全双工工作方式?
▶ \blacktriangleright ▶单工:单工数据线仅能在一个方向上传输数据,两个站之间进行通信时,一边只能发送数据,另一边只能接收数据。
▶ \blacktriangleright ▶半双工:在半双工方式中,数据可在两个设备之间向任一个方向传输,但两个设备之间只有一根传输线,故同一时间内只能在一个方向上传输数据,不能同时收发。
▶ \blacktriangleright ▶全双工:对数据的两个传输方向采用不同的通路,这样的系统就可以工作在全双工方式。采用全双工的系统可以同时发送和接收数据。 - 什么叫同步工作方式?什么叫异步工作方式?哪种工作方式效率更高?为什么?
▶ \blacktriangleright ▶没有数据发送时,传输线处于MARK状态。为了表示数据传输的开始,发送方先发送一个或两个特殊字符,该字符称为同步字符。当发送方和接收方达到同步后,就可以一个字符接一个字符地发送一大块数据,而不再需要用起始位和停止位了。
▶ \blacktriangleright ▶不发送数据时,数据信号线总是呈现高电平,处于MARK状态,也称为空闲状态。
有数据要发送时,数据信号线变成低电平,并持续一位的时间,用于表示字符的开始,这一位称为起始位。起始位之后,在信号线上依次出现待发送的每一位字符数据,最低有效位D最先出现,因此它被最早发送出去。
▶ \blacktriangleright ▶同步工作方式效率更高,因为异步方式需发送起始位,校验位,停止位,影响传输速率。 - 什么叫波特率?常用的波特率有哪些?
▶ \blacktriangleright ▶在串行通信中,常用波特率来表示数据传送的速率。在计算机中,每秒钟内所传送数据的位数称为波特率。
▶ \blacktriangleright ▶异步串行传送常用的波特率为110,300,600,1200,2400,4800,9600,19200,28800,36400,57600波特。