汇编语言第三章答案.docx
- 文档编号:25094860
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:10
- 大小:22.31KB
汇编语言第三章答案.docx
《汇编语言第三章答案.docx》由会员分享,可在线阅读,更多相关《汇编语言第三章答案.docx(10页珍藏版)》请在冰豆网上搜索。
汇编语言第三章答案
给定(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。
试根据以下要求写出相应的汇编语言指令
(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写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。
要求使用以下几种寻址方式:
(1)寄存器间接寻址
(2)寄存器相对寻址(3)基址变址寻址答:
(1)MOVBX,OFFSETBLOCKADDBX,(6–1)*2MOVDX,[BX]
(2)MOVBX,OFFSETBLOCK改为:
MOVBX,(6-1)*2MOVDX,[BX+(6–1)*2]也可MOVDX,BLOCK[BX](3)MOVBX,OFFSETBLOCKMOVSI,(6–1)*2MOVDX,[BX][SI]现有(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
(2)MOVAX,BX(3)MOVAX,[1200H](4)MOVAX,[BX](5)MOVAX,1100[BX](6)MOVAX,[BX][SI](7)MOVAX,1100[BX][SI]答:
(1)(AX)=1200H
(2)(AX)=0100H(3)(AX)=4C2AH(4)(AX)=3412H(5)(AX)=4C2AH(6)(AX)=7856H(7)(AX)=65B7H给定(IP)=2BC0H,(CS)=0200H,位移量D=5119H,(BX)=1200H,(DS)=212AH,(224A0H)=0600H,(275B9H)=098AH,试为以下的转移指令找出转移的偏移地址。
(1)段内直接寻址
(2)使用BX及寄存器间接寻址方式的段内间接寻址(3)使用BX及寄存器相对寻址方式的段内间接寻址答:
(1)JMPNEARPTR5119H;(IP)=5119H+((IP)+03H)=7CDCH,物理地址PA=09CDCH(IP)+03H是JMPNEARPTR5119H指令的下一条指令的首地址。
(2)JMPWORDPTR[BX];(IP)=((DS)*10H+(BX))=0600H,PA=02600H(3)JMPD[BX];(IP)=((DS)*10H+(BX)+D)=098AH,PA=0298AH设当前数据段寄存器的内容为1B00H,在数据段的偏移地址2000H单元内,含有一个内容为0FF10H和8000H的指针,它们是一个16位变量的偏移地址和段地址,试写出把该变量装入AX的指令序列,并画图表示出来。
答:
MOVBX,[2000H];图示如上所示。
MOVAX,[2000H+2]MOVES,AXMOVAX,ES:
[BX]在0624H单元内有一条二字节JMPSHORTOBJ指令,如其中位移量为
(1)27H,
(2)6BH,(3)0C6H,试问转向地址OBJ的值是多少答:
(1)OBJ=0624H+02H+27H=064DH
(2)OBJ=0624H+02H+6BH=0691H(3)OBJ=0624H+02H+0C6H=05ECH;C6H对应的负数为-3AH(向上转移,负位移量)假定(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在ARRAY数组中依次存储了七个字数据,紧接着是名为ZERO的字单元,表示如下:
ARRAYDW23,36,2,100,32000,54,0ZERODW
(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如TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别指令执行完后AX寄存器的内容是什么MOVAX,TABLELEAAX,TABLE答:
MOVAX,TABLE是将TABLE单元的内容送到AX,(AX)=1234HLEAAX,TABLE是将TABLE单元的有效地址送到AX,(AX)=0032H执行下列指令后AX寄存器中的内容是什么TABLEDW10,20,30,40,50;000AH,0014H,001EH,0028H,0032HENTRYDW3┇MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX]答:
(AX)=1E00H(TABLE的存储方式如右图所示)下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRINGDB‘BASEDADDRESSING’请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。
答:
MOVDH,CSTRINGMOVDL,CSTRING+7-1已知堆栈段寄存器SS的内容是0FFA0H,堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。
试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。
答:
堆栈区和SP的内容变化过程示意图如下左图所示。
设(DS)=1B00H,(ES)=2B00H,有关存储单元的内容如上右图所示。
请写出两条指令把字变量X装入AX寄存器。
答:
MOVBX,[2000H]MOVAX,ES:
[BX]求出以下各十六进制数与十六进制数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求出以下各十六进制数与十六进制数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写出执行以下计算的指令序列,其中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答:
(1)MOVAX,Z;以下程序都未考虑带符号数的溢出SUBAX,XADDAX,WMOVZ,AX
(2)MOVBX,XADDBX,6MOVCX,RADDCR,9MOVAX,WSUBAX,BXSUBAX,CXMOVZ,AX(3)ADDY,6MOVAX,WIMULXIDIVYMOVZ,AXMOVR,DX(4)MOVAX,WSUBAX,XCWDMOVBX,5IDIVBXIMULYSHLAX,1;((DX),(AX))*2RCLDX,1已知程序段如下:
MOVAX,1234H;(AX)=1234H,标志位不变MOVCL,4;(AX)和标志位都不变ROLAX,CL;(AX)=2341H,CF=1,SF和ZF不变DECAX;(AX)=2340H,CF=1不变,SF=0,ZF=0MOVCX,4;(AX)和标志位都不变MULCX;(AX)=8D00H,CF=OF=0,其它标志无定义INT20H试问:
(1)每条指令执行完后,AX寄存器的内容是什么
(2)每条指令执行完后,进位、符号和零标志的值是什么(3)程序结束时,AX和DX的内容是什么答:
(1)见注释;
(2)见注释;(3)(AX)=8D00H,(DX)=0下列程序段中的每条指令执行完后,AX寄存器及CF、SF、ZF和OF的内容是什么MOVAX,0;(AX)=0,标志位不变DECAX;(AX)=0FFFFH,CF不变,SF=1,ZF=0,OF=0ADDAX,7FFFH;(AX)=7FFEH,CF=1,SF=0,ZF=0,OF=0ADDAX,2;(AX)=8000H,CF=0,SF=1,ZF=0,OF=1NOTAX;(AX)=7FFFH,标志位不变SUBAX,0FFFFH;(AX)=8000H,CF=1,SF=1,ZF=0,OF=1ADDAX,8000H;(AX)=0,CF=1,SF=0,ZF=1,OF=1SUBAX,1;(AX)=0FFFFH,CF=1,SF=1,ZF=0,OF=0ANDAX,58D1H;(AX)=58D1H,CF=0,SF=0,ZF=0,OF=0SALAX,1;(AX)=0B1A2H,CF=0,SF=1,ZF=0,OF=1SARAX,1;(AX)=0D8D1H,CF=0,SF=1,ZF=0,OF=0NEGAX;(AX)=272FH,CF=1,SF=0,ZF=0,OF=0RORAX,1;(AX)=9397H,CF=1,SF和ZF不变,OF=1答:
见注释。
变量DATAX和变量DATAY的定义如下:
DATAXDW0148HDW2316HDATAYDW0237HDW4052H请按下列要求写出指令序列:
(1)DATAX和DATAY两个字数据相加,和存放在DATAY中。
(2)DATAX和DATAY两个双字数据相加,和存放在从DATAY开始的双字单元中。
(3)解释下列指令的作用:
STCMOVBX,DATAXADCBX,DATAY(4)DATAX和DATAY两个字数据相乘(用MUL)。
(5)DATAX和DATAY两个双字数据相乘(用MUL)。
(6)DATAX除以23(用DIV)。
(7)DATAX双字除以字DATAY(用DIV)。
答:
(1)MOVAX,DATAXADDDATAY,AXMOVAX,DATAX+2ADDDATAY+2,AX
(2)MOVAX,DATAXADDDATAY,AXMOVAX,DATAX+2ADCDATAY+2,AXMOVDATAY+4,0;用于存放进位位ADCDATAY+4,0(3)DATAX和DATAY两个字数据之和加1,结果存入BX寄存器。
(4)RESULT1DW0DW0RESULT2DW0DW0┇MOVAX,DATAXMULDATAYMOVRESULT1,AXMOVRESULT1+2,DXMOVAX,DATAX+2MULDATAY+2MOVRESULT2,AXMOVRESULT2+2,DX(5)AADW0BBDW0CCDW0DDDW0┇MOVAX,DATAXMULDATAYMOVAA,AXMOVBB,DXMOVAX,DATAXMULDATAY+2ADDBB,AXADCCC,DXMOVAX,DATAX+2MULDATAYADDBB,AXADCCC,DXADCDD,0MOVAX,DATAX+2MULDATAY+2ADDCC,AXADCDD,DX(6)MOVAX,DATAXMOVBL,23DIVBL(7)MOVDX,DATAX+2MOVAX,DATAXDIVDATAY写出对存放在DX和AX中的双字长数求补的指令序列。
答:
NEGDX也可为:
NOTDXNEGAXNOTAXSBBDX,0ADDAX,1ADCDX,0试编写一程序求出双字长数的绝对值。
双字长数在A和A+2单元中,结果存放在B和B+2单元中。
答:
程序段如下:
MOVAX,AMOVDX,A+2CMPDX,0JNSZHENSHU;不是负数则转走NEGDXNEGAXSBBDX,0ZHENSHU:
MOVB,AXMOVB+2,DXINT20H假设(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答:
见注释。
试写出执行下列指令序列后BX寄存器的内容。
执行前(BX)=6D16H。
MOVCL,7SHRBX,CL答:
(BX)=00DAH。
试用移位指令把十进制数+53和-49分别乘以2。
它们应该用什么指令得到的结果是什么如果要除以2呢答:
MOVAL,53SALAL,1;(AL)=(+53*2)=6AHMOVAL,-49SALAL,1;(AL)=(-49*2)=9EHMOVAL,53SARAL,1;(AL)=(53/2)=1AHMOVAL,-49SARAL,1;(AL)=(-49/2)=0E7H试分析下面的程序段完成什么功能MOVCL,04SHLDX,CLMOVBL,AHSHLAX,CLSHRBL,CLORDL,BL答:
本程序段将((DX),(AX))的双字同时左移4位,即将此双字乘以10H(16)。
假定(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答:
见注释。
下列程序段执行完后,BX寄存器的内容是什么MOVCL,3MOVBX,0B7HROLBX,1RORBX,CL答:
(BX)=0C02DH。
假设数据段定义如下:
CONAMEDB‘SPACEEXPLORERSINC.’PRLINEDB20DUP(‘’)用串指令编写程序段分别完成以下功能:
(1)从左到右把CONAME中的字符串传送到PRLINE。
(2)从右到左把CONAME中的字符串传送到PRLINE。
(3)把CONAME中的第3和第4个字节装入AX。
(4)把AX寄存器的内容存入从PRLINE+5开始的字节中。
(5)检查CONAME字符串中有无空格字符,如有则把第一个空格字符的地址传送给BX寄存器。
答:
(1)MOVCX,20CLDMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMELEADI,PRLINEREPMOVSB
(2)MOVCX,20STDMOVSI,SEGCONAMEMOVDS,SIMOVES,SILEASI,CONAMEADDSI,20-1LEADI,PRLINEADDDI,20-1REPMOVSB(3)MOVAX,WORDPTRCONAME+3-1(4)MOVWORDPTRPRLINE+5,AX(5)MOVAL,‘’;空格的ASCII码送AL寄存器CLDMOVDI,SEGCONAMEMOVES,DILEADI,CONAMEREPNESCASBJNENEXTDECDIMOVBX,DINEXT:
┇编写程序段,把字符串STRING中的‘&’字符用空格符代替。
STRINGDB‘ThedateisFEB&03’答:
程序段如下:
MOVCX,18MOVAL,‘&’CLDMOVDI,SEGSTRINGMOVES,DILEADI,STRINGREPNESCASBJNENEXTDECDIMOVES:
BYTEPTR[DI],‘’;送空格符NEXT:
┇假设数据段中数据定义如下:
STUDENT_NAMEDB30DUP()STUDENT_ADDRDB9DUP()PRINT_LINEDB132DUP()分别编写下列程序段:
(1)用空格符清除PRINT_LINE域。
(2)在STUDENT_ADDR中查找第一个‘-’。
(3)在STUDENT_ADDR中查找最后一个‘-’。
(4)如果STUDENT_NAME域中全是空格符时,填入‘*’。
(5)把STUDENT_NAME移到PRINT_LINE的前30个字节中,把STUDENT_ADDR移到PRINT_LINE的后9个字节中。
答:
公共的程序段如下:
MOVDI,DSMOVES,DI
(1)MOVCX,132MOVAL.,‘’;空格的ASCII码送AL寄存器CLDLEADI,PRINT_LINEREPSTOSB
(2)MOVCX,9MOVAL.,‘-’CLDLEADI,STUDENT_ADDRREPNESCASBJNENO_DASHDECDINO_DASH:
┇(3)MOVCX,9MOVAL.,‘-’STDLEADI,STUDENT_ADDRADDDI,9-1REPNESCASBJNENO_DASHINCDINO_DASH:
┇(4)MOVCX,30MOVAL,‘’;空格的ASCII码送AL寄存器CLDLEADI,STUDENT_NAMEREPESCASBJNENEXTMOVCX,30MOVAL,‘*’;“*”的ASCII码送AL寄存器LEADI,STUDENT_NAMEREPSTOSBNEXT:
┇(5)MOVCX,30CLDLEASI,STUDENT_NAMELEADI,PRINT_LINEREPMOVSBMOVCX,9STDLEASI,STUDENT_ADDR+9-1LEADI,PRINT_LINE+132-1REPMOVSB编写一程序段:
比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串则执行NEW_LESS;否则顺序执行程序。
答:
程序段如下:
MOVCX,5CLDMOVDI,SEGOLDSMOVDS,DIMOVES,DILEASI,OLDSLEADI,NEWSREPECMPSBJNENEW_LESS┇NEW_LESS:
┇假定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,CXJAEXCEED
(2)CMPBX,AXJGEXCEED(3)JCXZZERO(4)CMPBX,AXJOOVERFLOW(5)CMPBX,AXJLEEQ_SMA(6)CMPDX,CXJBEEQ_SMA试分析下列程序段:
ADDAX,BXJNOL1JNCL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 第三 答案