最新汇编语言程序设计第四版课后答案.doc
精品文档精品文档-囮裑爲檤对于程序对于程序段:汇编语言程序设计第四版【课后习题答案】第五章高级汇编语言程序设计5. 1条件表达式中逻辑与 “ &&表示两者都为真,整个条件才为真,段:.if (X=5) && (ax!=bx)inc ax.endif请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。解:cmp X, 5je abcjmp doneabc: cmp ax, bxjne cdejmp donecde: inc axdone:.5. 2条件表达式中逻辑与“|表示两者之一为真,整个条件就为真,.if (X=5) | (ax!=bx)inc ax.endif请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。 解:cmp X, 5je abcjmp donecmp ax, bxjne abcjmp doneabc: inc axdone: .5.3、对于程序段:.while ax!=10mov bx,axinc bxinc bxinc ax.endw请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。5.4、对于程序段:.repeatmov bx,axinc bxinc bxinc axuntil ax=10请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。5.5、宏是如何定义、调用和展开的?解:宏定义采用一对伪指令实现,格式如下(其中方括号表示可选):宏名 macro 形参表宏定义体endm宏调用时,利用宏名带上实参即可,格式如下: 宏名实参表5.6、宏定义中的形式参数有什么特点,它是如何进行形参和实参结合的?解:宏的参数功能非常强大,即可以没有参数,也可以带有一个或多个参数;而且 参数的形式非常灵活,可以是常量、变量、存储单元、指令或它们的一部分, 还可以是表达式等。宏展开时的形参与实参结合是用位置匹配的实参对形参进行取代。实参个数与 形参个数不同时,多余的实参没有作用,缺少的实参则用空格代替。取代时, 不进行有效性等检查。5.7、宏结构和子程序在应用中有什么不同,如何选择采用何种结构?解:宏汇编的特点是在汇编阶段进行语句展开,无需返回,不减少目标程序代 码,执行速度没有改变;通过形参、实参结合传递参数。宏汇编适合于程序段 较短或要求执行速度快的场合。子程序在执行阶段需要由主程序执行调用指令CALL进行调用,进而转入子程序执行,子程序执行结束执行返回指令 RET返回主程序。子程序如果被多次 使用,则会减少目标程序代码;主程序与子程序之间主要采用寄存器、存储单 元、堆栈等传递参数。子程序适合于程序段较长或为减少目标代码的场合5.8 没有。5.9、对于例题5.5b的宏定义shrot,对应如下宏指令的宏展开是什么?shrot word ptr bx,4,ror解: shrot word ptr bx,4,ror1 push cx1 mov cl,41 ror word ptr bx,cl1 pop cx5.10、 定义一个宏logical,用它代表4条逻辑运算指令:and/or/xor/test,注意需 要利用3个形式参数,并给一个宏调用以及对应宏展开的例子。解: logical macro lcode,dopd,sopdlcode dopd,sopdendm例如,如果使用“ and ax,bx指令,可以利用该宏定义,写出宏指令如下:logical and,ax,bx初看起来,这个问题似乎比较难解决。实际上,这4条逻辑指令都具有相同的指令操作数格式,所以可以归纳为如上宏定义。5.11没有。5.12、编写一个宏指令move doprnd,soprnd它实现任意寻址方式的字量源操作 数送到目的操作数,包括存储单元到存储单元的传送功能。解:move MACRO doprnd,soprndpush axmov ax,soprndmov doprnd,axpop axENDM5.13;movstr strN, dstr,sstrlea si, sstrlea di, dstrmov cx, strNcldrep movsbendm5.14;ABSDIF Pl ,P2, DISTANCE ABSDIF BX , SI, DI1 push ax1 mov ax,P11 sub ax,P21 cmp ax,01 jge ? 00001 neg ax1 ? 0000答:1 push ax1 mov ax,bx1 sub ax,si1 cmp ax,01 jge ? 00001 neg ax1 ? 00001 mov DISTANCE, ax1 mov di,ax1 pop ax1 pop ax5.15; wtemp =2 repeat 100 dw 0dw wtemp wtemp =wtemp+2endm5.18; DOS21H MACRO callnum,calladdress mov ah,callnumifnbmov dx,calladdressendif int 21hENDM5.22; 1.编写主程序,并进行汇编产生 OBJ模块;2. 编写独立的子程序,也进行汇编产生 OBJ模块;3. 分别编写主程序与子程序时,需要处理好共用变量、过程、逻辑段属性、参 数传递等问题;4. 利用连接程序将主程序模块和子程序模块连接起来,形成完整的可执行程序 5.28;数据段 table dw 2277,2138,1808,1709,1522,1356,1208,1139;对应中音1 7和高音i的定时器记数值;代码段;设置定时器2工作方式;等待按键;判断是否为数字18mov al,0b6hout 43h,alaga in: mov ah,1int 21hcmp al, ' 1'jb n extcmp al, ' 8' ja n extsub al,30h;18的ASCII码转换为二进制数sub al,1;再减1,将数字18变为07,以便查表xor ah,ahshl ax,1;乘以 2mov bx,ax;记数值表是16位数据,无法采用xlat指令mov ax,tablebx;取出对应的记数值out 42h,almov al,ah;设置定时器2的记数值out 42h,alin al,61h;打开扬声器声音or al,03h;使D1D0= PB1PB4 11b,其他位不变out 61h,aljmp aga in;连续发声,直到按下另一个键n ext: push axin al,61h;不是数字18,则关闭扬声器声音and al,Ofch;使 D1DB PB1PB4 00b,其他位不变out 61h,alpop axcmp al,1bh;判断是否为ESC键(对应ASCII码1bh)jne again;不是ESC继续;否则程序执行结束如果其中没有,表示没有答案出来。00