汇编语言程序设计(第四版)第5章【课后答案】

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汇编语言程序设计第四版

【课后习题答案】--囮裑為檤

第五章高级汇编语言程序设计

5.1 条件表达式中逻辑与“&&”表示两者都为真,整个条件才为真,对于程序段:

.if (X==5) && (ax!=bx)

inc ax

.endif

请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。

解:

cmp X, 5

je abc

jmp done

abc: cmp ax, bx

jne cde

jmp done

cde: inc ax

done:....

5.2条件表达式中逻辑与“||”表示两者之一为真,整个条件就为真,对于程序段:.if (X==5) || (ax!=bx)

inc ax

.endif

请用转移指令实现上述分支结构,并比较汇编程序生成的代码序列。

解:

cmp X, 5

je abc

jmp done

cmp ax, bx

jne abc

jmp done

abc: inc ax

done: ....

5.3、对于程序段:

.while ax!=10

mov [bx],ax

inc bx

inc bx

inc ax

.endw

请用处理器指令实现上述循环结构,并比较汇编程序生成的代码序列。

5.4、对于程序段:

.repeat

mov [bx],ax

inc bx

inc bx

inc ax

.until 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,ror

1 push cx

1 mov cl,4

1 ror word ptr [bx],cl

1 pop cx

5.10、定义一个宏logical,用它代表4条逻辑运算指令:and/or/xor/test,注意需要利用3个形式参数,并给一个宏调用以及对应宏展开的例子。

解:logical macro lcode,dopd,sopd

lcode dopd,sopd

endm

例如,如果使用“and ax,[bx]”指令,可以利用该宏定义,写出宏指令如下:logical and,ax,[bx]

初看起来,这个问题似乎比较难解决。实际上,这4条逻辑指令都具有相同的指令操作数格式,所以可以归纳为如上宏定义。

5.11 没有。。

5.12、编写一个宏指令move doprnd,soprnd,它实现任意寻址方式的字量源操作数送到目的操作数,包括存储单元到存储单元的传送功能。

解:move MACRO doprnd,soprnd

push ax

mov ax,soprnd

mov doprnd,ax

pop ax

ENDM

5.13;

movstr strN,dstr,sstr

lea si, sstr

lea di, dstr

mov cx, strN

cld

rep movsb

endm

5.14; ①ABSDIF Pl,P2,DISTANCE ②ABSDIF [BX],[SI],[DI]

1 push ax 答:1 push ax

1 mov ax,P1 1 mov ax,[bx]

1 sub ax,P

2 1 sub ax,[si]

1 cmp ax,0 1 cmp ax,0

1 jge ?? 0000 1 jge ?? 0000

1 neg ax 1 neg ax

1 ?? 0000 1 ?? 0000

1 mov DISTANCE, ax 1 mov [di],ax

1 pop ax 1 pop ax

5.15; wtemp =2

repeat 100

dw 0

dw wtemp

wtemp =wtemp+2

endm

5.18; DOS21H MACRO callnum,calladdress

mov ah,callnum

ifnb

mov dx,calladdress

endif int 21h

ENDM

5.22; 1.编写主程序,并进行汇编产生OBJ模块;

2.编写独立的子程序,也进行汇编产生OBJ模块;

3.分别编写主程序与子程序时,需要处理好共用变量、过程、逻辑段属性、参数传递等问题;

4.利用连接程序将主程序模块和子程序模块连接起来,形成完整的可执行程序。

5.28; ;数据段

table dw 2277,2138,1808,1709,1522,1356,1208,1139

;对应中音1 ~ 7和高音i的定时器记数值

相关文档
最新文档