汇编语言期末习题.docx
《汇编语言期末习题.docx》由会员分享,可在线阅读,更多相关《汇编语言期末习题.docx(26页珍藏版)》请在冰豆网上搜索。
汇编语言期末习题
汇编语言期末习题
第二章8086计算机组织
(主要是寻址方式以及地址存储方式)
2.2有两个16位字1EE5H和2A3CH分别存放在80x86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。
答:
存储器里的存放情况如右下图所示:
000B0H
E5H
000B1H
1EH
000B2H
000B3H
3CH
000B4H
2AH
2.3在IBMPC机的存储器中存放信息如右下图所示。
试读出30022H和30024H字节单元的内容,以及30021H和30022H字单元的内容。
如图:
30020
12H
30021
34H
30022
ABH
30023
CDH
30024
EFH
答案:
30020H:
12H
30021H:
34H
30022H:
ABH
30023H:
CDH
30024H:
EFH
2.4在实模式下,段地址和偏移地址为3017:
000A的存储单元的物理地址是什么?
如果段地址和偏移地址是3015:
002A和3010:
007A呢?
答:
3017:
000A、3015:
002A和3010:
007A的存储单元的物理地址都是3017AH。
2.5如果在一个程序开始执行以前(CS)=0A7F0H,(如16进制数的最高位为字母,则应在其前加一个0)(IP)=2B40H,试问该程序的第一个字的物理地址是多少?
答:
该程序的第一个字的物理地址是0AAA40H。
第三章8086的指令系统和寻址方式
3.1给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?
(1)立即寻址
(2)直接寻址(3)使用BX的寄存器寻址
(4)使用BX的简接寻址(5)使用BX的寄存器相对寻址(6)基址变址寻址(7)相对基址变址寻址
答:
(1)操作数在指令中,即立即数;
(2)EA=D=7237H;
(3)无EA,操作数为(BX)=637DH;
(4)EA=(BX)=637DH;
(5)EA=(BX)+D=0D5B4H;
(6)EA=(BX)+(SI)=8E18H;
(7)EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。
3.2试根据以下要求写出相应的汇编语言指令
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。
(2)用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3)用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。
(4)用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。
(5)把数0B5H与(AL)相加,并把结果送回AL中。
答:
(1)ADDDX,BX
(2)ADDAL,[BX][SI]
(3)ADD[BX+0B2H],CX
(4)ADDWORDPTR[0524H],2A59H
(5)ADDAL,0B5H
3.3写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。
要求使用以下几种寻址方式:
(1)寄存器间接寻址
(2)寄存器相对寻址
(3)基址变址寻址
答:
(1)MOVBX,OFFSETBLOCK
ADDBX,(6–1)*2
MOVDX,[BX]
(2)MOVBX,OFFSETBLOCK改为:
MOVBX,(6-1)*2
MOVDX,[BX+(6–1)*2]也可MOVDX,BLOCK[BX]
(3)MOVBX,OFFSETBLOCK
MOVSI,(6–1)*2
MOVDX,[BX][SI]
3.4现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。
(1)MOVAX,1200H
(1)(AX)=1200H
(2)MOVAX,BX
(2)(AX)=0100H
(3)MOVAX,[1200H](3)(AX)=4C2AH
(4)MOVAX,[BX](4)(AX)=3412H
(5)MOVAX,1100[BX](5)(AX)=4C2AH
(6)MOVAX,[BX][SI](6)(AX)=7856H
(7)MOVAX,1100[BX][SI](7)(AX)=65B7H
3.8假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?
其物理地址值是多少?
(1)MOVAX,0ABH
(2)MOVAX,BX
(3)MOVAX,[100H](4)MOVAX,VAL
(5)MOVAX,[BX](6)MOVAX,ES:
[BX]
(7)MOVAX,[BP](8)MOVAX,[SI]
(9)MOVAX,[BX+10](10)MOVAX,VAL[BX]
(11)MOVAX,[BX][SI](12)MOVAX,VAL[BX][SI]
答:
(1)立即方式;操作数在本条指令中
(2)寄存器寻址方式;操作数为(BX)=0100H
(3)直接寻址方式;PA=20100H
(4)直接寻址方式;PA=20050H
(5)BX寄存器间接寻址方式;PA=20100H
(6)附加段BX寄存器间接寻址方式;PA=21100H
(7)BP寄存器间接寻址方式;PA=15010H
(8)SI寄存器间接寻址方式;PA=200A0H
(9)BX寄存器相对寻址方式;PA=20110H
(10)BX寄存器相对寻址方式;PA=20150H
(11)BX和SI寄存器基址变址寻址方式;PA=201A0H
(12)BX和SI寄存器相对基址变址寻址方式;PA=201F0H
3.9在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下:
ARRAYDW23,36,2,100,32000,54,0
ZERODW?
(1)如果BX包含数组ARRAY的初始地址,请编写指令将数据0传送给ZERO单元。
(2)如果BX包含数据0在数组中的位移量,请编写指令将数据0传送给ZERO单元。
答:
(1)MOVAX,[BX+(7-1)*2]
MOV[BX+(7)*2],AX
(2)MOVAX,ARRAY[BX]
MOVARRAY[BX+2],AX
3.10如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别?
指令执行完后AX寄存器的内容是什么?
MOVAX,TABLE
LEAAX,TABLE
答:
MOVAX,TABLE是将TABLE单元的内容送到AX,(AX)=1234H
LEAAX,TABLE是将TABLE单元的有效地址送到AX,(AX)=0032H
3.11执行下列指令后AX寄存器中的内容是什么?
TABLEDW10,20,30,40,50;000AH,0014H,001EH,0028H,0032H
ENTRYDW3
┇
MOVBX,OFFSETTABLE
ADDBX,ENTRY
MOVAX,[BX]
答:
(AX)=1E00H(TABLE的存储方式如右图所示)
3.12下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRINGDB‘BASEDADDRESSING’
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。
答:
MOVDH,CSTRING
MOVDL,CSTRING+7-1
3.13已知堆栈段寄存器SS的内容是0FFA0H,堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。
试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。
答:
堆栈区和SP的内容变化过程示意图如下左图所示。
3.15求出以下各十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF、ZF、CF和OF的值。
(1)1234H
(2)4321H(3)CFA0H(4)9D60H
答:
(1)和为74D4H;SF=0,ZF=0,CF=0,OF=0
(2)和为A5C1H;SF=1,ZF=0,CF=0,OF=1
(3)和为3240H;SF=0,ZF=0,CF=1,OF=0
(4)和为0000H;SF=0,ZF=1,CF=1,OF=0
3.16求出以下各十六进制数与十六进制数4AE0H的差值,并根据结果设置标志位SF、ZF、CF和OF的值。
(1)1234H
(2)5D90H(3)9090H(4)EA04H
答:
(1)差为C754H;SF=1,ZF=0,CF=1,OF=0
(2)差为12B0H;SF=0,ZF=0,CF=0,OF=0
(3)差为45B0H;SF=0,ZF=0,CF=0,OF=1
(4)差为9F24H;SF=1,ZF=0,CF=0,OF=0
3.17写出执行以下计算的指令序列,其中X、Y、Z、R、W均为存放16位带符号数单元的地址。
(1)Z←W+(Z-X)
(2)Z←W-(X+6)-(R+9)
(3)Z←(W*X)/(Y+6),R←余数(4)Z←((W-X)/5*Y)*2
答:
以下程序都未考虑带符号数的溢出
3.18已知程序段如下:
MOVAX,1234H;(AX)=1234H,标志位不变
MOVCL,4;(AX)和标志位都不变
ROLAX,CL;(AX)=2341H,CF=1,SF和ZF不变
DECAX;(AX)=2340H,CF=1不变,SF=0,ZF=0
MOVCX,4;(AX)和标志位都不变
MULCX;(AX)=8D00H,CF=OF=0,其它标志无定义
INT20H
试问:
(1)每条指令执行完后,AX寄存器的内容是什么?
(2)每条指令执行完后,进位、符号和零标志的值是什么?
(3)程序结束时,AX和DX的内容是什么?
答:
(1)见注释;
(2)见注释;
(3)(AX)=8D00H,(DX)=0
3.19下列程序段中的每条指令执行完后,AX寄存器及CF、SF、ZF和OF的内容是什么?
MOVAX,0;(AX)=0,标志位不变
DECAX;(AX)=0FFFFH,CF不变,SF=1,ZF=0,OF=0
ADDAX,7FFFH;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0
ADDAX,2;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1
NOTAX;(AX)=7FFFH,标志位不变
SUBAX,0FFFFH;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1
ADDAX,8000H;(AX)=0,CF=1,SF=0,ZF=1,OF=1
SUBAX,1;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0
ANDAX,58D1H;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0
SALAX,1;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1
SARAX,1;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0
NEGAX;(AX)=272FH,CF=1,SF=0,ZF=0,OF=0
RORAX,1;(AX)=9397H,CF=1,SF和ZF不变,OF=1答:
见注释。
3.20变量DATAX和变量DATAY的定义如下:
DATAXDW0148H
DW2316H
DATAYDW0237H
DW4052H
请按下列要求写出指令序列:
(1)DATAX和DATAY两个字数据相加,和存放在DATAY中。
(2)DATAX和DATAY两个双字数据相加,和存放在从DATAY开始的双字单元中。
(3)解释下列指令的作用:
STC
MOVBX,DATAX
ADCBX,DATAY
(4)DATAX和DATAY两个字数据相乘(用MUL)。
(5)DATAX和DATAY两个双字数据相乘(用MUL)。
(6)DATAX除以23(用DIV)。
(7)DATAX双字除以字DATAY(用DIV)。
答:
(3)DATAX和DATAY两个字数据之和加1,结果存入BX寄存器。
3.22试编写一程序求出双字长数的绝对值。
双字长数在A和A+2单元中,结果存放在B和B+2单元中。
答:
程序段如下:
MOVAX,A
MOVDX,A+2
CMPDX,0
JNSZHENSHU;不是负数则转走
NEGDX
NEGAX
SBBDX,0
ZHENSHU:
MOVB,AX
MOVB+2,DX
INT20H
3.23假设(BX)=0E3H,变量VALUE中存放的内容为79H,确定下列各条指令单独执行后的结果。
(1)XORBX,VALUE;(BX)=9AH,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=1
(2)ANDBX,VALUE;(BX)=61H,CF、OF都为0,AF无定义,SF=0,ZF=0,PF=0
(3)ORBX,VALUE;(BX)=0FBH,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=0
(4)XORBX,0FFH;(BX)=1CH,CF、OF都为0,AF无定义,SF=0,ZF=0,PF=0
(5)ANDBX,0;(BX)=00H,CF、OF都为0,AF无定义,SF=0,ZF=1,PF=1
(6)TESTBX,01H;(BX)=0E3H,CF、OF都为0,AF无定义,SF=1,ZF=0,PF=0
答:
见注释。
3.24试写出执行下列指令序列后BX寄存器的内容。
执行前(BX)=6D16H。
MOVCL,7
SHRBX,CL
答:
(BX)=00DAH。
3.26试分析下面的程序段完成什么功能?
MOVCL,04
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
答:
本程序段将((DX),(AX))的双字同时左移4位,即将此双字乘以10H(16)。
3.27假定(DX)=0B9H,(CL)=3,(CF)=1,确定下列各条指令单独执行后DX中的值。
(1)SHRDX,1;(DX)=05CH
(2)SARDX,CL;(DX)=17H
(3)SHLDX,CL;(DX)=5C8H
(4)SHLDL,1;(DX)=72H
(5)RORDX,CL;(DX)=2017H
(6)ROLDL,CL;(DX)=0CDH
(7)SALDH,1;(DX)=0B9H
(8)RCLDX,CL;(DX)=2CCH
(4)RCRDL,1;(DX)=0DCH
答:
见注释。
3.28下列程序段执行完后,BX寄存器的内容是什么?
MOVCL,3
MOVBX,0B7H
ROLBX,1
RORBX,CL
答:
(BX)=0C02DH。
3.29假设数据段定义如下:
CONAMEDB‘SPACEEXPLORERSINC.’PRLINEDB20DUP(‘’)
用串指令编写程序段分别完成以下功能:
(1)从左到右把CONAME中的字符串传送到PRLINE。
(2)从右到左把CONAME中的字符串传送到PRLINE。
(3)把CONAME中的第3和第4个字节装入AX。
(4)把AX寄存器的内容存入从PRLINE+5开始的字节中。
(5)检查CONAME字符串中有无空格字符,如有则把第一个空格字符的地址传送给BX寄存器。
答:
(3)MOVAX,WORDPTRCONAME+3-1
(4)MOVWORDPTRPRLINE+5,AX
3.33假定AX和BX中的内容为带符号数,CX和DX中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:
(1)若DX的内容超过CX的内容,则转去执行EXCEED。
(2)若BX的内容大于AX的内容,则转去执行EXCEED。
(3)若CX的内容等于0,则转去执行ZERO。
(4)BX与AX的内容相比较是否产生溢出?
若溢出则转OVERFLOW。
(5)若BX的内容小于等于AX的内容,则转EQ_SMA。
(6)若DX的内容低于等于CX的内容,则转EQ_SMA。
答:
(1)CMPDX,CX
JAEXCEED
(2)CMPBX,AX
JGEXCEED
(3)JCXZZERO
(4)CMPBX,AX
JOOVERFLOW
(5)CMPBX,AX
JLEEQ_SMA
(6)CMPDX,CX
JBEEQ_SMA
3.35指令CMPAX,BX后面跟着一条格式为J…L1的条件转移指令,其中…可以是B、NB、BE、NBE、L、NL、LE、NLE中的任意一个。
如果AX和BX的内容给定如下:
AXBX
(1)1F52H1F52H
(2)88C9H88C9H
(3)FF82H007EH
(4)58BAH020EH
(5)FFC5HFF8BH
(6)09A0H1E97H
(7)8AEAHFC29H
(8)D367H32A6H
问以上8条转移指令中的哪几条将引起转移到L1?
答:
(1)JNB、JBE、JNL、JLE
(2)JNB、JBE、JNL、JLE
(3)JNB、JNBE、JL、JLE
(4)JNB、JNBE、JNL、JNLE
(5)JNB、JNBE、JL、JLE
(6)JB、JBE、JL、JLE
(7)JB、JBE、JNL、JNLE
(8)JNB、JNBE、JL、JLE
3.39考虑以下的调用序列:
(1)MAIN调用NEAR的SUBA过程(返回的偏移地址为0400);
(2)SUBA调用NEAR的SUBB过程(返回的偏移地址为0A00);
(3)SUBB调用FAR的SUBC过程(返回的段地址为B200,返回的偏移地址为0100);
(4)从SUBC返回SUBB;
(5)SUBB调用NEAR的SUBD过程(返回的偏移地址为0C00);
(6)从SUBD返回SUBB;
(7)从SUBB返回SUBA;
(8)从SUBA返回MAIN;
(9)从MAIN调用SUBC(返回的段地址为1000,返回的偏移地址为0600);
请画出每次调用及返回时的堆栈状态。
答:
每次调用及返回时的堆栈状态图如下所示:
3.40假设(EAX)=00001000H,(EBX)=00002000H,(DS)=0010H,试问下列指令访问内存的物理地址是什么?
(1)MOVECX,[EAX+EBX]
(2)MOV[EAX+2*EBX],CL
(3)MOVDH,[EBX+4*EAX+1000H]
答:
(1)PA=(DS)*10H+EA=00100H+00001000H+00002000H=00003100H
(2)PA=(DS)*10H+EA=00100H+00001000H+2*00002000H=00005100H
(3)PA=(DS)*10H+EA=00100H+00002000H+4*00001000H+1000H=00007100H
3.41假设(EAX)=9823F456H,(ECX)=1F23491H,(BX)=348CH,(SI)=2000H,(DI)=4044H。
在DS段中从偏移地址4044H单元开始的4个字节单元中,依次存放的内容为92H,6DH,0A2H和4CH,试问下列各条指令执行完后的目的地址及其中的内容是什么?
(1)MOV[SI],EAX
(2)MOV[BX],ECX
(3)MOVEBX,[DI]
答:
(1)目的地址为DS:
2000H,内容依次为:
56H,0F4H,23H和98H
(2)目的地址为DS:
348CH,内容依次为:
91H,34H,0F2H和01H
(3)目的操作数为EBX寄存器,(EBX)=4CA26D92H
3.43请给出下列各指令序列执行完后目的寄存器的内容。
(1)MOVEAX,299FF94H
ADDEAX,34FFFFH;(EAX)=2CEFF93H
(2)MOVEBX,40000000
SUBEBX,1500000;(EBX)=3EB00000H
(3)MOVEAX,39393834H
ANDEAX,0F0F0F0FH;(EAX)=09090804H
(4)MOVEDX,9FE35DH
XOREDX,0F0F0F0H;(EDX)=6F13ADH
答:
见注释。
3.44请给出下列各指令序列执行完后目的寄存器的内容。
(1)MOVBX,-12
MOVSXEBX,BX;(EBX)=0FFFFFFF4H
(2)MOVCL,-8
MOVSXEDX,CL;(EDX)=0FFFFFFF8H
(3)MOVAH,7
MOVZXECX,AH;(ECX)=00000007H
(4)MOVAX,99H
MOVZXEBX,AX;(EBX)=00000099H
答:
见注释。
3.45请给出下列指令序列执行完后EAX和EBX的内容。
MOVECX,307F455H
BSFEAX,ECX;(EAX)=0D
BSREBX,ECX;(EBX)=25D
答:
见注释。
3.46请给出下列指令序列执行完后AX和DX的内容。
MOVBX,98H
BSFAX,BX