河北工程大学微机原理复习文档格式.docx
《河北工程大学微机原理复习文档格式.docx》由会员分享,可在线阅读,更多相关《河北工程大学微机原理复习文档格式.docx(44页珍藏版)》请在冰豆网上搜索。
![河北工程大学微机原理复习文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/23/359b17cc-ec5a-4d7d-a845-cb68d5ffc142/359b17cc-ec5a-4d7d-a845-cb68d5ffc1421.gif)
(+75)+(-6)
[+75]补=01001011[-6]补=10000110
[+75]补+[-6]补=10000110+10000110=01000101
第二章
2.18086CPU在内部结构上由哪几部分组成?
其功能是什么?
【答】8086的内部结构-成两部分:
总线接口部件BIU,负责控制存储器读写。
执行部件EU,EU从指令队列中取出指令并执行。
8086是16位微处理器,有16根数据线、20根地址线,内部寄存器、运算部件以及内部操作都是按16位设计的。
2.28086的总线接口部件有那几部分组成?
【答】8086的总线接口部件主要由下面几部分组成:
4个段寄存器CS/DS/ES/SS,一个16位的指令指针寄存器IP,一个20位地址加法器,6字节的指令队列,内部暂存器以及输入输出电路组成.
2.38086的执行部件有什么功能?
由那几部分组成?
【答】8086的执行部件主要由下面几部分组成:
(1)四个16位通用寄存器AX、BX、CX、DX,通用四个16位专用寄存器,包括二个指针寄存器SP、BP,二个变址寄存器SI、DI,算术逻辑单元ALU,标志寄存器。
2.48086CPU状态标志和控制标志又何不同?
程序中是怎样利用这两类标志的?
8086的状态标志和控制标志分别有哪些?
【答】标志分两类:
状态标志(6位):
反映刚刚完成的操作结果情况。
控制标志(3位):
在某些指令操作中起控制作用。
2.58086/8088和传统的计算机相比在执行指令方面有什么不同?
这样的设计思想有什么优点?
8086CPU执行转移指令时,指令队列寄存器内容如何变化?
【答】传统的计算机一般按照取指令、指令译码/执行指令的步骤工作。
在8086/8088中,指令的提取与执行分别由总线接口部件BIU与执行部件EU完成,8086/8088可以在取指令同时又可以执行指令,这种并行工作方式有力的提高了CPU的工作效率。
2.6将两数相加,即01001100加01100101,CF、PF、AF、ZF、SF、OF各为何值?
【答】01001100+01100101=10110001
CF=0,PF=1,AF=1,ZF=0,SF=1,OF=1
2.7存储器的逻辑地址由哪几部分组成?
存储器的物理地址是怎样形成的?
一个具有20位地址线的CPU,其最大物理地址为多少?
【答】存储器的逻辑地址由段地址与段内偏移地址组成。
存储器的物理地址:
将16位段地址左移4位后加上16位段内偏移地址,形成20位物理地址。
一个具有20位地址线的CPU,其最大物理地址为
=1MB。
2.8现有6个字节的数据分别为11H,22H,33H,44H,55H,66H,已知它们在存储器中的物理地址为400A5H~400AAH.若当前(DS)=4002H,请说明它们的偏移地址值。
如果要从存储器中读出这些数据,需要访问几次存储器,各读出哪些数据?
【答】由于:
物理地址=400A5H=段地址*16+偏移地址=40020H+偏移地址
偏移地址=400A5-40020=85H
从奇地址400A5H中读出:
11H;
从偶地址400A6H读出一个字:
22H,33H;
从偶地址400A8H读出一个字:
44H,55H;
从偶地址400AAH中读出:
66H。
共读4次。
2.9已知当前数据段中存有如下图所示的数据,现要求将最后两个字节改成ODH,OAH,请说明需给出的段基值和偏移地址值,并说明其写入过程。
【答】数据段段地址=150AH,偏移地址=0004H。
CPU的总线接口部件根据数据段寄存器的内容150AH,左移4位,在加上偏移地址0004H,形成20位物理地址150A4H,由总线接口送出,选中物理存储单元150A4H、150A5H,数据0DH通过数据总线送入150A4H,数据0AH通过数据总线送入150A4H。
2.10在8088/8086中,逻辑地址FFFF∶0001,00A2∶37F和B800∶173F的物理地址分别是多少?
2.11在8088/8086中,从物理地址388H开始顺序存放下列三个双字节的数据,651AH,D761H和007BH,请问物理地址388H,389H,38AH,38BH,38CH和38DH6个单元中分别是什么数据?
2.128086/8088内部有哪些通用寄存器?
2.138086/8088内部有几个段寄存器,阐述各段寄存器的用途?
2.148086CPU的形成三大总线时,为什么要对部分地址线进行锁存?
用什么信号控制锁存?
【答】为了确保CPU对存储器和I/O端口的正常读/写操作,要求地址和数据同时出现在地址总线和数据总线上。
而在8086CPU中AD0--AD15总线是地址/数据复用的,因此需在总线周期的前一部分传送出地址信息,并存于锁存器中,而用后一部分周期传送数据。
8086CPU中是通过CPU送出的ALE高电平信号来控制锁存的。
2.15段寄存器CS=1200H,指令指针寄存器IP=4000H,此时,指令的物理地址为多少?
指向这一物理地址的CS值和IP值是唯一的吗?
【答】此时,指令的物理地址为16000H;
这一物理地址的CS值和IP值不是唯一的,例如:
CS=1000H,IP=6000H。
习题三8086指令系统与参考答案
主要内容:
8086指令系统。
主要介绍8086的基本数据类型、寻址方式和指令系统,重点掌握8086指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。
3.1下面这些指令哪些是正确的?
哪些是错误的?
如是错误的,请说明原因。
XCHGCS,AX()
MOV[BX],[1000]()
PUSHCS()
POPCS()
INBX,DX()
3.2已知(DS)=091DH,(SS)=IE4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,
(BP)=0024H,(SI)=0012H,(DI)=0032H,[09226]=00F6H,[09228]=1E40H,
[lEAF6]=091DH,试求单独执行下列指令后的结果?
(l)MOVCL,20H[BX][SI];
(CL)=F6H
(2)MOV[BP][DI],CX;
[1E4F6H]=78H
(3)LEABX,20H[BX][SI];
(BX)=0056H
MOVAX,2[BX];
(AX)=1E40H
(4)LDSSI,[BX][DI];
(SI)=00F6H
MOV[SI],BX;
[SI]=0024H
(5)XCHGCX,32H[BX];
(CX)=00F6H
XCHG20[BX][SI],AX;
(AX)=00F6H,[09226H]=1234H
3.38086CPU执行如下指令后
MOVAL,01100100B
SUBAL,58H;
(AL)=0CH,AF=1,CF=0
DAS;
(AL)=06,AF=1,CF=0
首先用TD调试验证上面的结果;
自己定义两个数据,重新验证,写出结果。
3.4分别用一条语句实现下述指明的功能
(1)栈顶内容弹出送字变量DI。
(POPDI)
(2)双字变量AYD存放的地址指针送ES和SI。
(LESSI,AYD)
(3)不允许中断即关中断。
(CLI)
(4)子程序返回调用程序。
(RET)
(5)AX的内容加1,要求不影响CF。
(INCAX)
(6)BX的内容加1,要求影响所有标志位。
(ADDBX,1)
(7)若操作结果为零转向标号GOON。
(JZGOON)
3.58086/8088用什么途径来更新CS和IP的值?
控制转移指令:
对于CALL、JMP指令,寻找的目的不是操作数地址而是程序存储器的地址,因此这类指令可以改变CS和IP中的值,即改变程序走向。
中断指令:
对于INT指令,当CPU响应一次中断,也要把IP和CS保存入栈,然后改变其值。
3.6字节扩展指令和字扩展指令用在什么场合?
举例说明。
需要对带符号数字节扩展为字时,要预先执行CBW指令。
需要对带符号数字扩展为双字时,要预先执行CWD。
例:
求-503/267=?
将商存1000H单元.
MOVAX,-503
MOVBX,267
CWD
IDIV
MOV[1000H],AX
HLT
3.7设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作:
MOVBYTEPTR[BP],2000
MOVWORDPTR[BX],2000
3.8以下是格雷码的编码表
0——0000,1——0001,2——0011,3——0010,4——0110
5——0111,6——0101,7——0100,8——1100,9——1101
请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII的转换。
格雷码
ASCII码
0000
30
0001
31
0010
33
0011
32
0100
37
0101
36
0110
34
0111
35
1000
1001
1010
1011
1100
38
1101
39
TABLESEGMENT
TAB_DADB30H,31H,33H,32H,37H,36H,34H,35H,0,0
DB0,0,38H,39H
TABLEENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
TABLE
START:
MOVAX,TABLE
MOVDS,AX
MOVBX,OFFSETTAB_DA
MOVAL,00000101B
XLAT
CODEENDS
ENDSTART
3.9设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?
当执行PUSHBX指令后,栈顶地址和栈顶2个字节的内容分别是什么?
当前栈顶指针(SP)=2FF00H,物理地址=20100H+FE00H=2FF00H
当执行PUSHBX指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址=2FDFEH,栈顶2个字节的内容分别57H,34H。
3.10HLT指令用在什么场合?
如CPU在执行HLT指令时遇到硬件中断并返回后,以下应执行哪条指令?
HLT用在使CPU处于暂停状态而等待硬件中断的场合。
在执行HLT指令遇到硬件中断并返回后将执行HLT后面的一条指令。
3.11为什么用増量指令或减量指令设计程序时,在这类指令后面不用进位标志作为判断依据?
増量指令或减量指令不影响进位标志CF。
3.12用普通运算指令执行BCD码运算时,为什么要进行十进制调整?
具体讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
在BCD码中,只允许0-9这10个数字出现,但有时候的运算结果会超过此范围,因此要进行十进制调整。
进行加、减法或乘法运算时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。
3.13中断指令执行时,堆栈的内容有什么变化?
中断处理子程序的人口地址是怎样得到的?
中断指令执行时,堆栈内容变化如下:
标志寄存器被推入堆栈,且SP减2,然后CPU将主程序的下一条指令地址即断点地址的段值和偏移量推入堆栈,且SP减4。
某中断处理子程序的入口地址即中断向量,由该中断类型号的4倍为内存地址,在该地址处的4个字节内容即该中断向量。
3.14中断返回指令IRET和普通子程序返回指令RET在执行时,具体操作内容什么不同?
IRET须弹出堆栈中标志寄存器的值,而RET则不需要。
3.15将存放在0A00H单元和0A02H单元的两个无符号数相乘,结果存放在地址为0A04H开始的单元中。
MOVAL,[0A00H]
MOVBL,[0A02H]
MULBL
MOV[0A04],AX
3.16编程序将AX中数,最高位保持不变,其余全部左移4位。
MOVBX,AX
ANDBX,8000H
MOVCL,4
SHLAX,CL
ANDAX,7FFFH
ORAX,BX
3.17将0400H单元中的数,低4位置零,高4位保持不变。
MOVAL,[0400H]
ANDAL,0F0H
MOV[0400H],AL
3.18将BX中的数,对高位字节求反,低位字节保持不变。
NOTBH
3.19检测Bx中第13位(D13),为0时,把AL置0,为1时,把AL置1。
TESTBX,0010000000000000B
JZZERO
MOVAL,01H
ZERO:
MOVAL,0
3.20利用字串操作指令,将1000H~10FFH单元全部清零。
CLD
MOVDI,1000H
MOVCX,100H
MOVAL,0
REPSTOSB
3.21从1000H开始,存放有200个字节,要查出字符#(ASCII码为23H),把存放第一个#的单元地址送入BX中。
MOVDI,1000H
MOVCX,200
MOVDX,CX
MOVAL,23H
REPNZSCASB
JZFIND
JMPNOFOUND
FOUND:
DECDI
MOVBX,DI
NOFOUND:
HLT
3.22编程计算((X+Y)*10)+Z)/X,X、Y、Z都是16位无符号数,结果存在RESULT开始的单元.。
MOVAX,X
ADDAX,Y
MOVBX,0AH
MULBX
ADDAX,Z
ADCDX,0H
MOVBX,X
DIVBX
MOVRESULT,AX
MOVRESULT+2,DX
3.23用简单指令编程求-3/2=?
,将商存DL,余数存DH单元。
用TD调试后,写出DL,DH的内容。
MOVAL,-3
CBW
MOVBL,2
IDIVBL
MOVDL,AL
MOVDH,AH
习题四汇编语言程序设计
汇编语言程序设计。
主要介绍汇编语言程序的设计方法与编程原理,重点掌握算术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS和BIOS功能调用程序、汇编语言常用伪指令。
4.1分析执行下列指令序列后的结果:
1)MOVAX,1234H
MOVBX,00FFH
ANDAX,BX
【答】
(AX)=0034H
2)MOVAL,01010101B
ANDAL,00011111B;
(AL)=00010101B
ORAL,11000000B;
(AL)=11010101B
XORAL,00001111B;
(AL)=11011010B
NOTAL
(AL)=00100101B
3)MOVDL,05H
MOVAX,0A00H
MOVDS,AX
MOVSI,0H
MOVCX,0FH
AGAIN:
INCSI
CMP[SI],DL
LOOPNEAGAIN
HLT
本程序实现了什么功能?
【答】在以0A001H开始的15个单元中查找05H。
4)MOVAX,DSEGADDR
MOVDS,AX
MOVES,AX
MOVSI,OFFSETB1ADDR
MOVDI,OFFSETB2ADDR
MOVCX,N
CLD
REPMOVSB
【答】将B1ADDR中N个字节数据传送到B2ADDR开始的15个存储单元。
5)MOVAX,0H
MOVDS,AX
MOVES,AX
MOVAL,05H
MOVDI,0A000H
MOVCX,0FH
SCASB
LOOPNEAGAIN
HLT
【答】从地址0A000H开始的15个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数据05H的查找。
4.2阅读程序:
1).CLD
LEADI,[0100H]
MOVCX,0080H
XORAX,AX
REPSTOSW
【答】将DS中起始地址为0100H的128个字节单元清零。
2).MOVAL,08H
SALAL,01H;
(AL)=00010000H
MOVBL,AL
MOVCL,02H
SALAL,CL;
(AL)=01000000H
ADDAL,BL;
(AL)=01010000H
本程序实现了什么功能?
【答】将AL中的内容乘以10。
4.3试分析下列程序完成什么功能?
MOVDX,3F08H
MOVAH,0A2H
MOVCL,4
SHLDX,CL;
(DX)=F080H
MOVBL,AH
SHLBL,CL;
(BL)=20H
SHRBL,CL;
(BL)=02H
ORDL,BL;
(DL)=82H
【答】将DX中的低4位数据8H分离出来,将AH中的低4位数据2H分离出来,合并为82H存放在DL。
4.4已知程序段如下:
MOVAX,1234H
ROLAX,CL
DECAX
MOVCX,4
MULCX
试问:
(1)每条指令执行后,AX寄存器的内容是什么?
(2)每条指令执行后,CF,SF及ZF的值分别是什么?
(3)程序运行结束时,AX及DX寄存器的值为多少?
【答】MOVAX,1234H;
(AX)=1234H,CF=SF=ZF=0
ROLAX,CL;
(AX)=2341H,CF=1,SF=ZF=0
DECAX;
(AX)=2340H,CF=1,SF=ZF=0
MOVCX,4;
MULCX;
(AX)=8000H,CF=ZF=0,SF=1,DX=0
4.5试分析下列程序段:
ADDAX,BX
JNCL2
SUBAX,BX
JNCL3
JMPSHORTL5
如果AX、BX的内容给定如下:
AXBX
(1)14C6H80DCH(程序转向L2)
(2)B568H54B7H(程序转向SHORTL5)
问该程序在上述情况下执行后,程序转向何处?
【答】
(1)程序转向L2。
(2)程序转向SHORTL5。
4.6以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节?
DATASEGMENT
VAR1DW9;
2字节
VAR2DD10DUP(?
),2;
44字节
VAR3DB2DUP(?
,10DUP(?
));
22字节
VAR4DB‘HOWAREYOU'
;
11字节
DATAENDS
【答】该数据段共占79字节。
4.7下列语句在存储器中分别为变量分配多少字节空间?
并画出存储空间的分配图。
VAR1DB10,2;
VAR2DW5DUP(?
),0;
12字节
VAR3DB‘HOWAREYOU?
'
,‘$'
;
13字节