微机原理习 题 2_第1页
微机原理习 题 2_第2页
微机原理习 题 2_第3页
微机原理习 题 2_第4页
微机原理习 题 2_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、习 题 22.1 8086/8088 CPU分为哪两大功能部件?其各自的主要功能是什么?8086/8088 CPU中有哪些寄存器?各有什么用途?解:从功能上来看,Intel 8086/8088微处理器可分为两部分,即执行单元EU(Execution Unit) 和总线接口单元BIU(Bus Interface Unit)。执行单元EU 的功能是负责指令的译码、执行,包括算术、逻辑运算,控制等。总线接口单元BIU 的功能是负责8086/8088对存储器和I/O 设备的所有访问操作。具体包括:负责从内存单元中预取指令,并将其送到指令队列缓冲器暂存;从内存单元或外设端口中读取操作数或者将指令的执行结

2、果传送到指定的内存单元或外设端口;根据有效地址(EA)形成物理地址(PA)。8086/8088有4个16位数据寄存器:AX、BX,CX,DX,它们既可作为16位寄存器使用,存放数据或地址,也可以分别作为两个 8 位寄存器使用。8086/8088有2个16位变址寄存器:SI 、DI,通常与DS联用,为访问当前数据段提供段内偏移地址或偏移地址分量。8086/8088有2个16位地址指针寄存器:SP,BP,它们一般是用来存放堆栈操作数的偏移地址。总线接口单元(BIU) 中设置有4 个16位的段寄存器,分别是代码段寄存器(CS),数据段寄存器(DS),堆栈段寄存器(SS)和附加段寄存器(ES)。指令指

3、针寄存器 (Instruction Pointer,IP) 用来存放下一条要执行的指令在当前代码段中的偏移地址。标志寄存器也称程序状态字(PSW) 寄存器,用来存放运算结果的特征和机器工作状态。2.2 8086/8088 CPU中标志寄存器有哪两类标志?简述各标志位的含义。解:(Zero Flag ,ZF)零标志。若本次运算结果为0,则ZF1,否则ZF0。(Sign F1ag SF)符号标志。此标志用于反映有符号数运算结果的符号是正还是负。对于有符号数,用最高位表示数的符号,当本次运算结果最高位为1 ,表示结果为负数,则SF1,否则SF0。(Parity Flag,PF)奇偶标志。此标志是反映

4、运算结果中最低字节中含“1”的个数为0或偶数时,PF1,为奇数时,PF0。 注意,PF标志仅反映运算结果的最低8位中“1”的个数是偶数或奇数,即使是进行16位字操作也是如此。(Auxiliary Carry Flag ,AF)辅助进位标志。当进行8 位数( 字节)或16位数( 字)的低8 位运算时,低4 位向高4 位( 即D3 位向D4 位) 有进位或借位时,AF1,否则AF0。AF标志主要供 BCD码十进制算术指令判别是否要进行十进制调整,用户一般不必关心。(Carry Flag,CF)进位标志。当本次算术运算结果使最高位产生进位( 加法运算)或借位( 减法运算) 时,则此标志位置“1”,即

5、CF1;若加法运算结果最高位无进位,或减法运算结果最高位无借位,则CF0。(Overflow Flag ,OF)溢出标志。当运算结果产生溢出时,使OF1,否则OF0。2.3 简述伪指令“EQU”与“=”之间有什么区别?解:“EQU”伪指令不能重复定义,而“=”伪指令可以重复定义。2.4 画图说明下列语句分配的存储空间及初始化的数值(1)FF1DB'0100',2+5,?,'ABC'(2)FF2DW2 DUP(?),'A','BC',1000H,25H(3)FF3DB2 DUP(1,2 DUP(2,3),4)偏移地址内容变量名000

6、0H30HFF10001H31H0002H30H0003H30H0004H07H0005H00H0006H41H0007H42H0008H43H0009H00HFF2000AH00H000BH00H000CH00H000DH41H000EH00H000FH43H0010H42H0011H00H0012H10H0013H25H0014H00H0015H01HFF30016H02H0017H03H0018H02H0019H03H001AH04H001BH01H001CH02H001DH03H001EH02H001FH03H0020H04H2.5 指出下列指令的错误。A1DB ?A2DB 10K1E

7、QU 1024(1)MOV K1,AX(2)MOV A1,AX(3)CMP A1,A2(4)K1 EQU 2048(5)MOV AX,BH(6)MOV BP,DI(7)XCHG CS,AX(8)POP CS解:(1) 立即数不能为目的操作数(2) 两个操作数的类型不一致(3) 两个操作数不能同时为存储器操作数(4) K1不能用EQU重复定义(5) 两个操作数类型不匹配(6) 两个操作数不能同时为存储器操作数(7) CS不能作为XCHG的操作数(8) CS不能为目的操作数2.6 假设在数据段进行如下的定义: DATASegmentXXDB-50,71,5,65,0YY DB200 DUP(

8、9;ABCD')ZZ DW 100 DUP(?)WW DW 25H,1052H,370H,851H DATA ENDS(1)用一条指令将YY的偏移地址送入BX(2)用一条伪指令给出该数据段占用所有字节长度(3)用一条伪指令给出变量ZZ分配的字节数目(4)编写一段程序将WW数组中的数据全部送入YY缓冲区(5)将数组XX中的第二个数据与第五个数据进行调换解:(1)LEA BX, YY(2)在数据段的最后加上:LEN EQU $-XX(3)ZZLEN EQU WW-ZZ(4)MOV AX,WW MOV YY,AX MOV AX,WW+2 MOV YY+2,AXMOV AX,WW+4 MOV

9、YY+4,AXMOV AX,WW+6 MOV YY+6,AX (5)MOV AL,XX+1 MOV XX+4,AL2.7 什么叫寻址方式?8086/8088指令系统有哪些寻址方式?解:指令中操作数的寻找方法称为寻址方式。8086/8088系统所支持的七种基本寻址方式:立即寻址, 寄存器寻址, 直接寻址, 寄存器间接寻址,寄存器相对寻址,基址变址寻址和相对基址变址寻址。2.8 将首地址为BLOCK的字数组中的第100个数送入AX中,试写出相关指令序列,要求分别使用以下三种寻址方式:(1)以BX寄存器的间接寻址(2)以BX寄存器的相对寻址(3)以BX、SI寄存器的基址变址寻址解:(1)MOV BX

10、, OFFSET BLOCK +99*2MOV AX, BX(2)MOV BX, 99*2 MOV AX, BLOCKBX或:LEA BX, BLOCKMOV AX, BX+99*2(3)LEA BX, BLOCK MOV SI, 99*2 MOV AX,BX+SI或:LEA SI, BLOCK MOV BX, 99*2 MOV AX,BX+SI2.9 已知:(BX)=1200H,(BP)=2400H,(SI)=0100H,(DI)=0200H,(SS)=1000H,(DS)=2000H,(ES)=3000H,变量VAR1对应地址为2000H,试分别指出下列指令中存储器的寻址方式及物理地址。(

11、1)MOVAL,020H(2)MOVAL,BP+010H(3)MOVBX+SI-20H,AX(4)MOVBL,ES:BX+10H(5)MOVVAR1BX+DI,AL解:(1)直接寻址 PA=(DS)*16+EA=20000h+020H=20020H(2)寄存器相对寻址PA=(SS)*16+EA=10000H+2400H+010H=12410H(3)相对基址加变址寻址PA=(DS)*16+EA=20000H+1200H+0100H-20H=212E0H(4)寄存器相对寻址PA=(ES)*16+EA=30000H+1200H+10H=31210H(5)相对基址加变址寻址PA=(DS)*16+EA=

12、20000H+2000H+1200H+0200H=23400H2.10 设Block为字单元1000H:001FH的符号地址(变量),该单元的内容是01A1H,试问以下两条含有Block的指令有什么不同?指令执行后BX的内容是多少?(1)MOVBX,Block(2)LEABX,Block解:(1)BX的内容为01A1H(2)BX的内容为001FH2.11 什么叫堆栈?采用堆栈的意义?解:2.12 若在数据段中从字节变量TABLE相应的单元开始存放了015的平方值,试写出包含有XLAT指令的指令序列查找N(015)中的某个数的平方。(设N的值存放在CL中)解:LEA BX, TABLEMOV A

13、L, NXLAT2.13 编写程序对存放在DX,AX中的双字节长数据的求补解:NOTDX;首先将(DX, AX)取反NOTAXADDAX, 1;最低位加1,注意:不能用INC指令ADCDX, 0;把进位(如果有)传递到高位2.14 写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为有符号数字变量)(1)Z=(W*X)/(R+6)(2)Z=(W-X)/(5*Y)*2(3)Z= (X+Y)/R - W(4)Z= (X/Y+ W )*100+R解:(1)MOVAX, WIMULXMOVBX, RADDBX, 6IDIVBXMOVZ, AXMOVR, DX(2)MOVAX, YMOVBX, 5I

14、MULBXMOVBX, AXMOVAX, WSUBAX, XMOVCX, 2IMULCXIDIVBXMOVZ, AX(3)MOV AX, XADD AX,YCWDIDIVRSUB AX,WMOVZ,AX(4)MOVAX,XCWDIDIVYADD AX,WMOVBX,100IMULBXMOVBX,AXMOVCX,DXMOVAX,RCWDADDAX,BXADCDX,CX;结果存放在DX、AX中2.15 设在AX、BX、CX、DX中均存放的是用压缩的BCD码表示的4位十进制数,试编写程序完成以下的计算:(1)(AX)+(BX) AX(2)(DX)-(CX) DX解:(1)ADD AL, BL DAA

15、 XCHG AL, AHADC AL, BHDAAXCHG AL, AH (2)MOV AL,DLSUB AL, CLDASMOV DL, ALMOV AL, DHSBBAL, CHDASMOV DH, AL2.16 简述指令的“DAA”和“DAS”对BCD码运算后进行调整的规则。解:DAA的调整规则:if (AL低4位>9 或 AF=1)thenAL=AL+06H ;AF=1 ;endif if (AL高4位>9 或 CF=1)thenAL=AL+60H ;CF=1 ;endifDAS的调整规则:if (AL低4位>9 或 AF=1)then AL=AL06H ;AF=1

16、;endif if (AL高4位>9 或 CF=1)thenAL=AL60H ;CF=1 ; Endif2.17 用程序段实现对存入在BX,AX的双字进行左移5位。解:SHL AX,1RCL BX,1SHL AX,1RCL BX,1SHL AX,1RCL BX,1SHL AX,1RCL BX,1SHL AX,1RCL BX,12.18 试分析下列程序完成什么功能? MOVCL,4 SHLDX,CL MOVBL,AH SHL AX,CL SHRBL,CL ORDL,BL解:把32位二进制代码(DX, AX)联合左移4位。2.19 已知程序段如下:MOVAX,1234HMOVCL,4ROLA

17、X,CLDECAXMOVCX,4MULCX试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少?解:MOVAX,1234H;AX内容为1234H,CF、SF、ZF的值保留初值MOVCL,4;AX内容为1234H,CF、SF、ZF同上ROLAX,CL;AX内容为2341H,CF=1、SF=0、ZF=0DECAX;AX内容为2340H,CF=1、SF=0、ZF=0MOVCX,4;AX内容为2340H,CF=1、SF=0、ZF=0MULCX;AX内容为8D00H,CF=0、SF=0、ZF=02.20

18、 程序中的“转移”是个什么概念?CPU执行转移指令是如何实现转移的?解:程序中的“转移”是指改变程序的顺序执行过程,某条指令执行完后,不是紧接着执行该指令后面的指令,而是执行其它的指令。CPU是通过改变CS和IP指令指针的值来实现转移的。2.21 设(DS)=2000H,(BX)=0030H,(SI)=0202H,(20232H)=00H,(200233H)=06H,分别执行下述两条指令后,实际转移的目标地址物理地址多少?(1)JMPBX(2)JMPWord PTRBX+SI解:(1)目的地址为0030H(2)转移的目标地址为:由BX+SI寻址得存储单元的地址为20232H,目的地址为0600

19、H。2.22 编写指令序列,实现下述要求 (1) 使AX寄存器的低 4 位清零,其余位不变。(2) 使BX寄存器的低4 位置1,其余位不变。(3) 测试 BX中的位0 和位4,当这两位同时为零时,将AL置1,否则AL置0。解:(1)AND AX, 0FFF0H(2)OR AX, 000FH(3)TESTAX, 0011H JZNEXT;ZF=1,表明这两位同时为0,转走将AL置1 MOVAL,0;ZF=0,表明这两位不同时为0,将AL清0 JMP EXITNEXT: MOV AL,1EXIT:2.23 下面程序段在什么情况下执行结果是(AH)=0? BEGIN:IN AL, 60H TEST

20、AL, 80H JZ BRCH1 XOR AX, AX JMP STOP BRCH1:MOV AH, 0FFH STOP: 解:从60H端口读到是数据最高位为1时,使(AH)为0;数据最高位为0时,使(AH)为0FFH。2.24 “CALL”指令与“JMP”指令相同之处是什么?不同之处是什么?解:相同之处:“CALL”指令和“JMP”指令都能实现程序的控制转移,改变程序顺序指令的过程。不同之处:“CALL”指令执行时,使程序转移到子程序中执行,执行完子程序后,还是会回到调用程序,继续执行紧跟在“CALL”指令之后的那条指令。但“JMP”指令执行完后一般不会去执行紧跟在“JMP”指令之后的那条指

21、令。2.25 叙述8086/8088CPU执行指令“CALL DWORD PTR100H”的步骤。2.26 设下列程序执行前,栈顶指针SS:SP为1000H:0220H,试求:POPCXPOPBXPOPAXRET4(1) 画出该程序执行后的堆栈存储情况示意图。解:使堆栈指针加10,上面的5个字的内容出栈,图略。(2) 给出当前栈顶SS和SP的值。(SS)=1000H, (SP)=022AH2.27 一双字长的带符号数放在X和X+2中(X为变量),试编写一程序对这个数求其绝对值。解:TEST X+2, 8000H;测试最高位,判断正负,负数好取绝对值JZDONEMOVAX, XMOVDX, X+

22、2NOTAXNOT DXADDAX, 1ADCDX, 0MOVX, AXMOVX+2, DXDONE:2.28 试编写一个汇编语言程序,要求将键盘输入的小写字母用大写字母显示出来。解:CODESEGMENTASSUMECS: CODESTART:MOVAH, 01HINT 21HCMPAL, 0DH;输入回车推出程序JZEXITORAL, 20HMOV AH, 02HINT21HJMPSTARTEXIT:MOV AX, 4C00HINT21HCODEENDSENDSTART2.29 试编写程序实现Error! Reference source not found.的功能,但是不要使用字符串操作

23、指令。解:LEA SI, STRING1-1LEADI, STRING2-1MOV CX, 20AGA:INCSIINCDIMOVAL, SI CMPAL, ES:DILOOPZAGA2.30 试编写程序实现Error! Reference source not found.的功能,但是不要使用字符串操作指令。解:LEA DI, STRING2MOV AL, AMOVCX, 20AGA:CMP AL, ES:DIJZEXITINCDILOOPAGAEXIT:2.31 在使用“REPNZ CMPSB”指令时,应事先做好哪些工作?解:将源串的偏移地址送入SI,目的串的偏移地址送入DI,方向标志DF

24、清0,比较的字节数送入CX。2.32 已知在以ARRAY为首地址的内存区域存放了100个字节数,试编写相关的程序段用以完成将该数据传送到BUFF为首地址的存储区域中。分别用以下不同方法实现。(1)用一般数据传送指令“MOV”实现。(2)用字符传送指令“MOVSB”实现。(3)用重复操作前缀传送指令“REP MOVSB”实现。(4)用LODSB/STOSB实现。解:(1)LEA SI, ARRAYLEADI, BUFFMOV CX, 100AGA:MOVAL, SI MOVDI, ALINCSIINCDILOOPAGA(2)LEA SI, ARRAYLEADI, BUFFMOVAX, DSMOV ES, AXMOV CX, 100CLDAGA:MOVSBLOOPAGA(3)LEA SI, ARRAYLEADI, BUFFMOVAX, DSMOV ES, AXMOV CX, 100CLDREP MOVSB(4)LEA SI, ARRAYLEADI, BUFFMOVAX, DSMOV ES, AXMOV CX, 100CLDAGA:LODSBSTOSBLOOPAGA2.33 判断STRING1和STRING2为首地址的内存区域存放了二个长度为20的字符串是否相等。若相等将SIGN单元置1,反之,将SIGN单元置0。分别用以下不同方法实现。(1)用比较条

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论