16/32位微机原理、汇编语言及接口技术课后习题答案 联系客服

发布时间 : 星期四 文章16/32位微机原理、汇编语言及接口技术课后习题答案更新完毕开始阅读

dispa

dldisp

dldisp1:

dldisp ⑵

wdata wordtemp

dispa

call dldisp mov dl,ah and dl,0fh call dldisp mov dl,al shr dl,cl call dldisp mov dl,al and dl,0fh call dldisp pop dx pop cx ret endp ; proc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7 mov ah,2 int 21h pop ax ret endp end

.model small .stack .data dw 34abh dw ? .code .startup mov ax,wdata mov wordtemp,ax call dispa .exit 0 ; proc push cx push dx mov cl,4

dispa

dldisp

dldisp1:

dldisp ⑶

wdata

dispa

mov dl,byte ptr wordtemp+1 shr dl,cl call dldisp

mov dl,byte ptr wordtemp+1 and dl,0fh call dldisp

mov dl,byte ptr wordtemp shr dl,cl call dldisp

mov dl,byte ptr wordtemp and dl,0fh call dldisp pop dx pop cx ret endp ; proc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7 mov ah,2 int 21h pop ax ret endp end

.model small .stack .data dw 34abh .code .startup push wdata call dispa pop ax ;add sp,2

.exit 0 ; proc push bp mov bp,sp

push ax push cx push dx mov ax,[bp+4] mov cl,4 mov dl,ah shr dl,cl call dldisp mov dl,ah and dl,0fh call dldisp mov dl,al shr dl,cl call dldisp mov dl,al and dl,0fh call dldisp pop dx pop cx pop ax pop bp ret dispa endp ; dldisp proc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7 dldisp1: mov ah,2 int 21h pop ax ret dldisp endp end 解:

如果利用共享变量传递函数,且变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTERN声明。

解:

(1)宏定义由一对宏汇编伪指令MACRO和ENDM来完成,格式如下: 宏名 MACRO [形参表] …… ;宏定义体

ENDM 宏定义之后就可以使用它,即宏调用: 宏名 [实参表]

(2)宏调用的格式同一般指令一样:在使用宏指令的位置写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔

(3)宏展开:在汇编时,宏指令被汇编程序用对应的代码序列替代,这就是宏展开 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程序的宏指令,同时用位置匹配的实参对形参进行取代

解:

宏调用的参数通过形参、实参结合实现传递,简捷直观、灵活多变。宏汇编的一大特色是它的参数。宏定义时既可以无参数,也可以有一个或多个参数;宏调用时实参的形式也非常灵活,可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式;只要宏展开后符合汇编语言的语法规则即可。

解:

宏:仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变

通过形参、实参结合实现参数传递,简捷直观、灵活多变

子程序:还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢 需要利用寄存器、存储单元或堆栈等传递参数

选择:宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法。通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序

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

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

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

解: