好文档 - 专业文书写作范文服务资料分享网站

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

天下 分享 时间: 加入收藏 我要投稿 点赞

and al,0fh ;在‘1’--‘9’,屏蔽高4位 mov cx, al ;振铃次数送cx .repeat

mov dl, 07h ;调用一次振铃 mov ah, 02h int 21h

mov dx ,0ffffh ;延时 abc: dec dx jnz abc

.untilcxz ;cx=cx-1,cx=0 退出 .exit 0 end

4.22;crazy PROC ;crazy PROC push ax ;

xor ax,ax ; xor ax,ax xor dx,dx ; xor dx,dx

again: add ax,[bx] ;again: add ax,[bx] adc dx,0 ; adc dx,0 inc bx ; inc bx inc bx ; inc bx loop again ; loop again ret ; ret

ENDP crazy ; crazy ENDP

4.25;子程序中又调用子程序就形成子程序嵌套。 子程序中直接或间接调用该子程序本身就形成子程序递归。 4.26; .model small .stack 256 .data

stdng db ’HeLLO eveRyboDy ! ’ , 0 .code .startup

mov bx, offset atring again: mov al, [bx]

call chan ;调用过程 mov [bx] , al next: inc bx

jmp again done: .exit 0

chan proc ;大写转换为小写字母的过程 or al, al jz done cmp al,’A’ jb next cmp al, ’Z’ ja next or al, 20h ret chan endp end

4.27;astob proc

and dh, 0fh ;十位数的ASCII码转为二进制数 mov al, dh

mul 10 ;al= 10*dh

and dl, 0fh ;个位数的ASCII码转为二进制数 add al, dl ;al= 10*dh + dl ret astob endp

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

5.1; cmp X, 5 je abc jmp done abc: cmp ax, bx jne cde jmp done cde: inc ax done:.... 5.2;cmp X, 5 je abc jmp done

cmp ax, bx jne abc jmp done abc: inc ax done: .... 5.4;

宏定义采用一对伪指令实现,格式如下(其中方括号表示可选): 宏名 macro [形参表] 宏定义体 endm

宏调用时,利用宏名带上实参即可,格式如下: 宏名 [实参表]

5.6;宏的参数功能非常强大,即可以没有参数,也可以带有一个或多个参数;而且参数的形式非常灵活,可以是常量、变量、存储单元、指令或它们的一部分,还可以是表达式等。

宏展开时的形参与实参结合是用位置匹配的实参对形参进行取代。实参个数与形参个数不同时,多余的实参没有作用,缺少的实参则用空格代替。取代时,不进行有效性等检查。

5.7;宏汇编的特点是在汇编阶段进行语句展开,无需返回,不减少目标程序代码,执行速度没有改变;通过形参、实参结合传递参数。宏汇编适合于程序段较短或要求执行速度快的场合。

子程序在执行阶段需要由主程序执行调用指令CALL进行调用,进而转入子程序执行,子程序执行结束执行返回指令RET返回主程序。子程序如果被多次使用,则会减少目标程序代码;主程序与子程序之间主要采用寄存器、存储单元、堆栈等传递参数。子程序适合于程序段较长或为减少目标代码的场合。 5.9;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 macro lcode,dopd,sopd lcode dopd,sopd endm

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

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

5.12; 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], 1 push ax 答:1 push ax 1 mov ax,P1 1 mov ax,[bx] 1 sub ax,P2 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

[SI],[DI] 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的定时器记数值 ;代码段

mov al,0b6h ;设置定时器2工作方式 out 43h,al

again: mov ah,1 ;等待按键 int 21h

cmp al,’1’ ;判断是否为数字1~8 jb next cmp al,’8’ ja next sub al,30h

;1~8的ASCII码转换为二进制数 sub al,1

;再减1,将数字1~8变为0~7,以便查表 xor ah,ah

shl ax,1 ;乘以2 mov bx,ax

;记数值表是16位数据,无法采用xlat指令 mov ax,table[bx] ;取出对应的记数值 out 42h,al ;设置定时器2的记数值 mov al,ah out 42h,al

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

andal,0fh;在‘1’--‘9’,屏蔽高4位movcx,al;振铃次数送cx.repeatmovdl,07h;调用一次振铃movah,02hint21h
推荐度:
点击下载文档文档为doc格式
0a80k7c1bk44p5c1cp2i5zpak1cslt00da3
领取福利

微信扫码领取福利

微信扫码分享