您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 汇编语言程序设计(第四版)第5章【课后答案】
-1-汇编语言程序设计第四版【课后习题答案】--囮裑為檤第五章高级汇编语言程序设计5.1条件表达式中逻辑与“&&”表示两者都为真,整个条件才为真,对于程序段:.if(X==5)&&(ax!=bx)incax.endif请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。解:cmpX,5jeabcjmpdoneabc:cmpax,bxjnecdejmpdonecde:incaxdone:....5.2条件表达式中逻辑与“||”表示两者之一为真,整个条件就为真,对于程序段:.if(X==5)||(ax!=bx)incax.endif请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。解:cmpX,5jeabcjmpdonecmpax,bxjneabcjmpdoneabc:incaxdone:....5.3、对于程序段:.whileax!=10mov[bx],ax-2-incbxincbxincax请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。5.4、对于程序段:.repeatmov[bx],axincbxincbxincax请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。5.5、宏是如何定义、调用和展开的?解:宏定义采用一对伪指令实现,格式如下(其中方括号表示可选):宏名macro[形参表]宏定义体endm宏调用时,利用宏名带上实参即可,格式如下:宏名[实参表]5.6、宏定义中的形式参数有什么特点,它是如何进行形参和实参结合的?解:宏的参数功能非常强大,即可以没有参数,也可以带有一个或多个参数;而且参数的形式非常灵活,可以是常量、变量、存储单元、指令或它们的一部分,还可以是表达式等。宏展开时的形参与实参结合是用位置匹配的实参对形参进行取代。实参个数与形参个数不同时,多余的实参没有作用,缺少的实参则用空格代替。取代时,不进行有效性等检查。5.7、宏结构和子程序在应用中有什么不同,如何选择采用何种结构?解:宏汇编的特点是在汇编阶段进行语句展开,无需返回,不减少目标程序代码,执行速度没有改变;通过形参、实参结合传递参数。宏汇编适合于程序段较短或要求执行速度快的场合。子程序在执行阶段需要由主程序执行调用指令CALL进行调用,进而转入子程序执行,子程序执行结束执行返回指令RET返回主程序。子程序如果被多次-3-使用,则会减少目标程序代码;主程序与子程序之间主要采用寄存器、存储单元、堆栈等传递参数。子程序适合于程序段较长或为减少目标代码的场合5.8没有。。。5.9、对于例题5.5b的宏定义shrot,对应如下宏指令的宏展开是什么?shrotwordptr[bx],4,ror解:shrotwordptr[bx],4,ror1pushcx1movcl,41rorwordptr[bx],cl1popcx5.10、定义一个宏logical,用它代表4条逻辑运算指令:and/or/xor/test,注意需要利用3个形式参数,并给一个宏调用以及对应宏展开的例子。解:logicalmacrolcode,dopd,sopdlcodedopd,sopdendm例如,如果使用“andax,[bx]”指令,可以利用该宏定义,写出宏指令如下:logicaland,ax,[bx]初看起来,这个问题似乎比较难解决。实际上,这4条逻辑指令都具有相同的指令操作数格式,所以可以归纳为如上宏定义。5.11没有。。5.12、编写一个宏指令movedoprnd,soprnd,它实现任意寻址方式的字量源操作数送到目的操作数,包括存储单元到存储单元的传送功能。解:moveMACROdoprnd,soprndpushaxmovax,soprndmovdoprnd,axpopaxENDM5.13;movstrstrN,dstr,sstrleasi,sstrleadi,dstrmovcx,strN-4-cldrepmovsbendm5.14;①ABSDIFPl,P2,DISTANCE②ABSDIF[BX],[SI],[DI]1pushax答:1pushax1movax,P11movax,[bx]1subax,P21subax,[si]1cmpax,01cmpax,01jge??00001jge??00001negax1negax1??00001??00001movDISTANCE,ax1mov[di],ax1popax1popax5.15;wtemp=2repeat100dw0dwwtempwtemp=wtemp+2endm5.18;DOS21HMACROcallnum,calladdressmovah,callnumifnbmovdx,calladdressendifint21hENDM5.22;1.编写主程序,并进行汇编产生OBJ模块;2.编写独立的子程序,也进行汇编产生OBJ模块;3.分别编写主程序与子程序时,需要处理好共用变量、过程、逻辑段属性、参数传递等问题;4.利用连接程序将主程序模块和子程序模块连接起来,形成完整的可执行程序。5.28;;数据段tabledw2277,2138,1808,1709,1522,1356,1208,1139;对应中音1~7和高音i的定时器记数值-5-;代码段moval,0b6h;设置定时器2工作方式out43h,alagain:movah,1;等待按键int21hcmpal,’1’;判断是否为数字1~8jbnextcmpal,’8’janextsubal,30h;1~8的ASCII码转换为二进制数subal,1;再减1,将数字1~8变为0~7,以便查表xorah,ahshlax,1;乘以2movbx,ax;记数值表是16位数据,无法采用xlat指令movax,table[bx];取出对应的记数值out42h,al;设置定时器2的记数值moval,ahout42h,alinal,61h;打开扬声器声音oral,03h;使D1D0=PB1PB0=11b,其他位不变out61h,aljmpagain;连续发声,直到按下另一个键next:pushaxinal,61h;不是数字1~8,则关闭扬声器声音andal,0fch;使D1D0=PB1PB0=00b,其他位不变out61h,alpopaxcmpal,1bh;判断是否为ESC键(对应ASCII码1bh)jneagain;不是ESC,继续;否则程序执行结束如果其中没有,表示没有答案出来。。。
本文标题:汇编语言程序设计(第四版)第5章【课后答案】
链接地址:https://www.777doc.com/doc-5421604 .html