微机原理与接口技术-部分作业参考答案梳理
- 作业
2、8086的总线接口单元由那几部分组成,有什么功能?
【答】8086的总线接口单元主要由下面几部分组成:
(1)段寄存器,4个段寄存器CS/DS/ES/SS,用于保存各段地址;为分段寻址定位段的位置。
(2)地址加法器,一个20位地址加法器,用于形成20位物理地址;将分段地址转换为物 理地址。
(3)指令指针寄存器,一个16位的指令指针寄存器IP,用于保存当前指令的偏移地址; 存储代码段内的偏移,与CS一起构成取指所需的程序计数器。
(4)存储器接口,用于内总线与外总线的连接;通过此接口进行取指和存取操作数。
(5)指令流字节队列,用于保存指令。
3、8086的执行单元由那几部分组成,有什么功能?
【答】8086的执行单元部件主要由下面几部分组成:控制器、算数逻辑单元、标志寄存器、通用寄存器组。
(1)控制器,从指令流顺序取指令、进行指令译码,完成指令的执行等。
(2)算数逻辑单元ALU,根据控制器完成8/16位二进制算数与逻辑运算。
(3)标志寄存器,使用9位,标志分两类。其中状态标志6位,存放算数逻辑单元ALU运算结果特征;控制标志3位,控制8086的3种特定操作。
(4)通用寄存器组,用于暂存数据或指针的寄存器阵列。
8、8086形成三总线时,为什么要对部分地址线进行锁存?什么信号控制锁存?
【答】 为了确保CPU对存储器和I/O端口的正常读/写操作,要求地址和数据同时出现在地址总线和数据总线上。而在8086CPU中AD0~AD15总线是地址/数据复用的,因此需在总线周期的前一部分传送出地址信息,并存于锁存器中,而用后一部分周期传送数据。8086CPU中是通过CPU送出的ALE高电平信号来控制锁存的。
12、在8086中,逻辑地址FFFFH:0001H、00A2H:37F0H和B800H:173FH的物理地址分别是多少?
【答】(1)FFFFH*16+0001H=FFFF0H+0001H=FFFF1H (物理地址=段地址*10H(=16)+偏移地址。)
(2)00A20+37F0=4210H
(3)B8000+173F=B973FH
15、8086工作在最小模式和最大模式的主要特点是什么?有何区别?
【答】最小模式接+5V,构成小规模的应用系统,只有8086一个微处理器,所有的总线 控制信号均为8086产生,系统中的总线控制逻辑电路,减少到最小; 不需总线控制器8288;适用于单一处理机系统。
最大模式接地,用于大型(中型)8086/8088系统中,系统总是包含有两个或多个微 处理器,其中一个主处理器就是8086或8088。其它的处理器称协处理器,协助主处理器工作,需要总线控制器来变换和组合控制信号, 需总线控制器8288; 适用于多处理机系统。
17、8086启动时有何特征,如何寻找8086系统的启动程序
【答】在8088/8086系统中,CPU启动后,处理器的标志寄存器、指令指针寄存器IP、段寄存器DS、SS、ES和指令队列都被清零,但是代码段寄存器CS被设置为FFFFH。因为IP=0000,而CS=FFFFH,所以,8088/8086将从地址FFFF0H开始执行指令。
通常,在安排内存区域时,将高地址区作为只读存储区,而且在FFFF0H单元开始的几个单 元中放入一条无条件转移指令,转到一个特定的程序中,这个程序往往实现系统初始化、 引导监控程序或者引导操作系统等功能,这样的程序叫做引导和装配程序。
第三章作业答案梳理
8086指令系统
3.5 设(IP)= 3D8F H,(CS)= 4050H,(SP)= 0F17C H,当执行CALL 2000:0094H后,试求出 IP、CS、SP、[SP]、[SP+1][SP+2] 和[SP+3]的内容?
【答】(IP)=0094H ,( CS)=2000H ,(SP)=F178H 参见P76页,CALL指令的(2)段间调用 的例子
[SP]=8FH , [SP+1]=3DH , [SP+2]=50H, [SP+3]=40H
3.7 分别用一条语句实现下述指明的功能
(1)栈顶内容弹出送字变量DI。 ( POP DI )
(2)双字变量AYD存放的地址指针送ES和SI。 ( LES SI ,AYD )
(3)不允许中断即关中断。 ( CLI )
(4)子程序返回调用程序。 ( RET )
(5)AX的内容加1,要求不影响CF。 ( INC AX )
(6)BX的内容加1,要求影响所有标志位。 ( ADD BX, 1 )
(7)若操作结果为零转向标号GOON。 ( JZ GOON )
3.8 8086/8088用什么途径来更新CS和IP的值?
【答】执行CALL、JMP、INT指令,可以改变CS和IP中的值,即改变程序走向。
3.9 字节扩展指令和字扩展指令用在什么场合?举例说明。
【答】需要对带符号数字节扩展为字时,要预先执行CBW指令。需要对带符号数字扩展为双字时,要预先执行CWD。
例:求-503/267=?,将商存1000H单元.
MOV AX,-503
MOV BX,267
CWD
IDIV
MOV [1000H],AX
HLT
3.12 8086状态标志寄存器中,作为控制用的标志位有( 3 )个,其中,不可用指令操作的是(DF、 IF、 TF)
3.13 设当前的SP=1000H,执行PUSHF指令后,SP=(0FFE H),若改为执行INT 20H指令后,则SP=( 0FFA H)。
【答】执行PUSHF指令后,SP=(0FFE H)。执行INT 20H指令后,则SP=( 0FFA H)。
3.14 设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行PUSH BX 指令后,栈顶地址和栈顶2个字节的内容分别是什么?
【答】当前栈顶指针(SP)=FE00H,物理地址=20100H+FE00H=2FF00H
当执行PUSH BX 指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址=2FEFEH,栈顶2个字节的内容分别57H,34H。
3.15 HLT指令用在什么场合?如CPU 在执行HLT 指令时遇到硬件中断并返回后,以下应执行哪条指令?
【答】HLT用在使CPU处于暂停状态而等待硬件中断的场合。
在执行HLT指令遇到硬件中断并返回后将执行HLT后面的一条指令。
3.16 为什么用増量指令或减量指令设计程序时,在这类指令后面不用进位标志作为判断依据?
【答】増量指令或减量指令不影响进位标志CF。
3.17 用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
【答】在BCD码中,采用4位二进制数对一个十进制数的编码,只允许0-9这10个数字出现,但CPU运算结果一般会超过此范围,因此要进行十进制调整。进行加、减法或乘法运算时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。
3.18 中断指令执行时,堆栈的内容有什么变化?中断处理子程序的人口地址是怎样得到的?
【答】中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且SP减2,然后CPU将主程序的下一条指令地址即断点地址推入堆栈,即段值CS推入堆栈且SP减2,偏移量推入堆栈,且SP减2。中断处理子程序的入口地址即中断向量,对应的中断类型号的4倍即为中断向量地址,在该地址处的4个字节内容,高地址单元两个字节为中断入口地址的段地址,低地址单元两个字节为中断入口地址的偏移地址。
3.19 中断返回指令IRET和普通子程序返回指令RET 在执行时,具体操作内容什么不同?
【答】IRET从堆栈中依次弹出断点处指令指针IP、代码段CS内容与标志寄存器的值,而RET从堆栈中依次弹出断点处指令指针IP值、代码段CS内容,不需要弹出标志寄存器的值。
3.20 将存放在0A00H单元和0A02H单元的两个无符号数相乘,结果存放在地址为0A04H开始的单元中。
【答】参考程序:
MOV AL,[0A00H]
MOV BL,[0A02H]
MUL BL
MOV [0A04H],AX ; MOV [0A06H],DX ;
3.21 编程序将AX中数,最高位保持不变,其余全部左移4位。
【答】参考程序:
MOV BX, AX
AND BX , 8000H
MOV CL, 4
SHL AX, CL
AND AX,7FFFH
OR AX, BX
3.22 将0400H单元中的数,低4位置零,高4位保持不变。
【答】参考程序:
MOV AL, [0400H]
AND AL, 0F0H
MOV [0400H], AL
3.23 将BX中的数,对高位字节求反,低位字节保持不变。
【答】参考程序:NOT BH 或者 XOR BX, FF00H
3.24 检测Bx中第13位(D13),为0时,把AL置0,为1时,把AL置1。
【答】参考程序:
TEST BX,0010 0000 0000 0000B
JZ ZERO
MOV AL,01H
HLT
ZERO: MOV AL,0
HLT
3.25 利用字串操作指令,将1000H~10FFH单元全部清零。
【答】参考程序:
CLD
MOV DI,1000H
MOV CX,100H
MOV AL,0
REP STOSB
3.26 从1000H开始,存放有200个字节,要查出字符#(ASCII码为23H), 把存放第一个#的单元地址送入BX中。
【答】参考程序:
CLD
MOV DI,1000H
MOV CX,200
MOV DX,CX
MOV AL,23H
REPNZ SCASB
JZ FOUND
JMP NOFOUND
FOUND: DEC DI ;上下对应
MOV BX,DI
NOFOUND: HLT
3.27 编程计算((X+Y)*10)+Z)/X,X、Y、Z都是16位无符号数,结果存在RESULT开始的单元。
【答】参考程序:
MOV AX,X
ADD AX,Y
MOV BX,0AH
MUL BX
ADD AX,Z
ADC DX,0H
MOV BX,X
DIV BX
MOV RESULT,AX
MOV RESULT+2,DX
HLT
3.28 用简单指令编程求-3/2=?,将商存DL,余数存DH单元。用TD调试后,写出DL,DH的内容。
【答】参考程序:
MOV AL,-3
CBW
MOV BL,2
IDIV BL
MOV DL,AL
MOV DH,AH
HLT
习题四 汇编语言程序设计
主要内容:汇编语言程序设计。主要介绍汇编语言程序的设计方法与编程原理,重点掌握算术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS和BIOS功能调用程序、汇编语言常用伪指令。
4.1 分析执行下列指令序列后的结果:
1) MOV AX,1234H
MOV BX,00FFH
AND AX,BX
【答】(AX)=0034H
2) MOV AL,01010101B
AND AL,