《汇编语言程序设计》习题答案(第二版,沈美明,温冬婵,清华大学)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Page1of411汇编语言程序设计(第二版)第二章1、答:直接由指令指定的I/O端口数为256个。2、答:3、答:字节单元:(30022H)=ABH,(30024H)=EFH字单元:(30021H)=AB34H,(30022H)=CDABH。4、答:3017:000A的存储单元的物理地址是3017AH,3015:002A的存储单元的物理地址是3017AH,3010:007A的存储单元的物理地址是3017AH。5、答:该程序的第一个字的物理地址是0AAA40H。6、答:条件标志OF、SF、ZF、CF的值依次分别为0、0、0、0。7、答:(1)AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL、SP、BP、DI、SI(注意:学生尽量不要用SP参与加减运算)(2)CX(3)DX、AX、AH、AL(4)CS、DS、ES、SS(5)FLAGS(6)IP(7)SS、SP、BP8、答:可以用来指示存储器地址的寄存器有BX、SP、BP、DI、SI、IP、CS、DS、ES、SS。9、答:唯一正确的是D。第三章1。.(1)立即寻址没有(2)直接寻址7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址0D5F0H(6)基址变址寻址8E18H(7)相对基址变址004FHPage2of4122。根据下列要求,写出相应的汇编指令。(1)ADDDX,BX(2)ADDAL,[BX][SI](3)ADD[BX][0B2H],CX(4)MOVAX,2A59HADD[0524H],AX(5)ADDAL,0B5H3。(1)寄存器间接寻址MOVBX,OFFSET[BLOCK][0AH]MOVDX,[BX](2)寄存器相对寻址MOVSI,OAHMOVDX,[BLOCK][SI](3)基址变址寻址MOVBX,BLOCKMOVSI,OAHMOVDX,[BX][SI]4现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容。(1)MOVAX,1200H1200H(2)MOVAX,BX0100H(3)MOVAX,[1200]4C2AH注意,是字单元!!(4)MOVAX,[BX]3412H同上(5)MOV1100[BX]4C2AH(6)MOVAX,[BX][SI]7856H(7)MOVAX,1100[BX][SI]65B7H5。(1)7CD9H(2)1200H(3)6319H6。MOVBX,2000HLESDI,[BX]MOVAX,ES:DI7。转向地址OBJ的值分别为:(1)064DH(2)0691H(3)05E0H注意有符号数的符号位~~8。(1)MOVAX,0ABH立即数寻址无物理地址(2)MOVAX,BX寄存器寻址同上(3)MOVAX,[100]直接寻址20100H(4)MOVAX,VAL直接寻址20050H(5)MOVAX,[BX]寄存器间接寻址20100H(6)MOVAX,ES:[BX]直接寻址21100H(7)MOVAX,[BP]寄存器间接寻址20010HPage3of413(8)MOVAX,[SI]同上200A0H(9)MOVAX,[BX+10]寄存器相对寻址20110H(10)MOVAX,VAL[BX]同上20150H(11)MOVAX,[BX][SI]基址变址寻址201A0H(12)MOVAX,VAL[BX][SI]相对基相变址寻址201F0H9。的指令:MOVAX,[BX][0CH]MOVZREO,AX(2)的指令:MOVAX,ARRAY[BX]MOVZREO,AX10。MOVAX,TABLE是把符号地址TABLE里的内容送到AX里,指令执行完后,(AX)=1234HLEAAX,TABLE是把符号地址TABLE的有效地址(这里是偏移量)送到指定寄存器AX里,指令执行完后,(AX)=0032H11。执行完指令后,(AX)=1E00H12。LEAAX,CSTRINGMOVDL,AXMOVDH,[AX+6]13。这个,,图,很麻烦了,所以就不画了~~大家可以看一下课本上P51--P53,很清楚,看完了这道韪也会了~~~14。LESBX,[2000]MOVAX,ES:[BX]注意:一开始我写的是:MOVAX,ES:[8000H],后来看到题目里要求写两条指令,所以一条就不行了,就要画蛇添足~~~15。运算结果:SF,ZF,CF,OF各位的值(从左至右依次往下~)(1)74D4H0000(2)A5C1H1001(3)4240H0010(4)0000H011016。接上表~(1)5D140000(2)A8701001(3)D8701000(4)34E4001017。(1).MOVAX,Z;把Z送到AXSUBAX,X;Z-XADDAX,W;W+(Z-X)MOVZ,AX;结果保存在Z中(2).MOVAX,R;R送到AX中ADDAX,9;R+9MOVBX,X;X送到BX中ADDBX,6;X+6ADDAX,BX;(R+9)+(X+6),结果保存在AX中MOVBX,W;W送到BX中SUBBX,AX;W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和~~Page4of414MOVZ,BX;最终结果送到Z中(3)MOVAX,W;把W送到AXIMULX;W*X注意:低十六位保存在AX里,高十六位保存在DX里MOVBX,Y;把Y送到BX里ADDBX,6;Y+6IDIVBX;(W*X)/(Y+6)注意:商保存在AX里,余数保存在DX里MOVZ,AX;把商送到Z中,MOVR,DX;把余数送到R中(4)MOVAX,W;把W送到AX中SUBAX,X;W-XCWD;把AX中的十六位带符号数扩展成为32位,低十六位保存在AX中,高十六位保;在DX中MOVBX,5;把5送到BX中IDIVBX;(W-X)/5被除数为32位,除数为16位商为16位IMULY;上一步结果再乖以Y,积为32位MOVBX,2;把2送到BX中IMULBX;上一步乘法所得的积再乘以2,各为64位MOVZ,EAX;把结果中低32位放入Z双字单元中MOV[Z+4],EDX;把结果中高32位放入Z+4双字单元中18。指令本条指令执行完后AX的内容执行完后CF,SF,ZF的值MOVAX,1234H1234H000MOVCL,41234H000ROLAX,CL2341H100DECAX2340H100MOVCX,42340H100MULCX8918H000INT20H程序结束后,(AX)=8918H(DX)=0000H19。指令执行完后AX的内容执行完后CF,SF,ZF和OF的值MOVAX,000010DECAXFFFFH0100ADDAX,7FFFH7FFEH0000ADDAX,28000H0101NOTAX7FFFH0101SUBAX,0FFFFH8000H1101ADDAX,8000H0000H1011SUBAX,1FFFFH1101ANDAX,58D1H58D1H0000SALAX,1B1A2H0101SARAX,1D8D1H0100NEGAX272FH1000RORAX,19397H100120。(1)MOVAX,DATAXADDDATAY,AX(2)MOVAX,DATAXADDDATAY,AXMOVAX,[DATAX+2]ADD[DATAY+2],AXPage5of415(3)本组指令的作用是:BX------[DATAX]+[DATAY]+[1](CF的值)带进位加法~(4)MOVAX,DATAXMULDATAY;结果的高十六位保存在DX里,低十六位保存在AX里(5)MOVAX,DATAXMOVDX,[DATAX+2]MULDWORDDATAY;结果的高三十二位保存在EDX里,低三十二位保存在EAX里;这里所用的DWORD为一属性操作符,在第四章会学到~~(6)MOVAX,DATAXDIV17H;结果商保存在AL中,余数在AH中(7)MOVAX,DATAXCDWDIVDATAY21。NEGDXNEGAXSBBDX,022。MOVAX,A;把双字长数的低字放到AX中MOVDX,[A+2];把双字长数的高字放到DX中TESTDX,8000H;测试双字长数的符号JZRIGHT;如果是非负数,则直接保存NEGDX;如果是负数,则求补NEGAXSBBDX,0RIGHT:MOVB,AXMOV[B+2],DX23。每条指令单独执行完后的结果依次为:(1)9AH(2)61H(3)0FBH(4)1CH(5)0(6)0E3H24。执行指令序列后,BX的内容为:0DAH25。(1)把53D乘以2的程序:MOVAX,35H;53D=35HSHLAX,1(2)把53除以2的程序:MOVAX,35HSHRAX,1其他的同理~~26。这段程序完成的功能是:把DX:AX中的双字数据左移4位(相当于乘以16D)27。各条指令单独执行后,DX的值依次为:(1)5CH(2)17H(3)05C8H(4)72H(5)2017H(6)0CDH(7)0172H(8)05CCH(9)0DCH28。该程序段执行完后,BX寄存器的内容是:C02DH29。(1)从左到右把CONMAE中的字符串伟送到PRLINE的程序实现:LEASI,CONAME;把CONAME中第一个字节的偏移地址送到SI中Page6of416LEADI,PRLINE;把PRLINE中第一个字节的偏移地址送到DI中MOVCX,20;把重复次数放到CX里CLD;让SIDI从低地址指向高地址(即从左到右传送)REPMOVSB;传送(2)从右到左把CONMAE中的字符串传送到PRLINE中的程序实现:LEASI,CONAMELEADI,PRLINEMOVCX,20STD;和上面唯一不同的就是这次是从右到左,所以要从高地址批向低地址REPMOVSB(3)把CONAME中的第三和第四个字节装入AX的程序实现:LEASI,[CONAME+3]LODSW(4)把AX寄存器的内容存入从PRLINE+5开始的字节中的程序实现:LEADI,[PRLINE+5]STOSW(5)检查CONAME字符串中有无空格字符,如有把它伟送给BH寄存器的程序实现:LEADI,CONAME;把CONAME中第一个字符偏移地址放入DI中MOVCX,20;把重复次数放到CX中MOVAL,20H;把空格符的ASCII值放入AL中CLD;从低到高REPNESCASB;比较MOVBH,[DI-1]R;把检查到的空格符送到BH中30。MOVCX,12H;把重复次数放到CX中。这里用十六进制表示MOVSI,0;初始化SIMOVAX,26H;把&字符的ASCII值放入AXCHECK:CMPAX,STRING[SI];依次查找INCSILOOPNECHECK;找到了就退出MOVAX,20H;把空格符的ASCII值勤放入AX中MOVSTRING[SI-1],AX;用空格符代替&31。(1)用空格符清除PRINT_LINE域的程序实现:MOVAL,20HLEADI,PRINT_LINEMOVCX,132CLDREPSTOSB(2)在STUDENT_ADDR中查找第一个’_‘的程序实现:MOVAX,2DH;把“—”的ASCII值放入AXMOVSI,0;初始化SIMOVCX,9;把重复次数放入CX中;依次检查STUDENT-ADDR中的字符是否为_,找到第一个停下来Page7of417CHECK:CMPAX,STUDENT_ADDR[SI];INCSILOOPNZCHECK(3)在STUDENT_ADDR中查找最后一个”_“的程序实现:;和第二题不同的就是这次是从右到左查询,所以SI的初始化为9MOVAX,2DHMOVSI,9MOVCX,9CHECK:CMPAX,STUDENT_ADDR[SI]DECSILOOPNZC

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功