汇编习题参考答案(7)

2019-08-03 10:40

call near ptr getmax mov ah,4ch int 21h main endp

getmax proc near mov ax, [bx] mov max, ax k1: mov ax, [bx] cmp ax, max jl next mov max,ax next: add bx,2 loop k1 ret getmax endp code ends end main

6.10 某字数组,第一个单元为元素个数N,后面为N个元素,编写通用子程序,把零元素从数组中清除,移动元素位置并修改第一个单元(元素个数)。 ;delete the 0 from array data segment

array dw 6,3,4,0,1,0,5 loca dw 999 data ends code segment

assume cs:code,ds:data main proc far

mov ax, data mov ds, ax mov cx, array lea si,array lea bx, array+1 call near ptr dele0 mov ah,4ch int 21h main endp

dele0 proc near

next: cmp word ptr[bx],0 jz move add bx,2 dec cx cmp cx,0 jnz next

31

jmp exit

move: dec word ptr[si] mov di,bx mnext:

cmp di,offset loca ja next

mov ax, [di+2] mov [di],ax add di,2

cmp di,offset loca jnb next jmp mnext exit: ret dele0 endp code ends end main

6.11 从键盘输入姓名和电话号码,建立通讯录,通讯录的最大容量为9条记录,程序结束时无须保留通讯录,但程序运行时要保留通讯录信息。程序的人机界面和顺序要求如下:

(1)提示信息INPUT NAME:(调用子程序INNAME录入姓名,序号自动产生) (2)提示信息INPUT TELEPHONE NUMBER:(调用子程序INTELE录入电话号码) (3)提示信息INPUT 序号:(调用子程序PRINT显示某人的姓名和电话号码,如果序号不存在,则提示信息 NO THIS NUMB )。

;telephone number list phone struc

serial db 20h tname db 3 dup (20h) tnumb db 11 dup (20h), '$' phone ends data segment num db 0 mess1 db 13,10, 'input name(3):$' mess2 db 13,10, 'phone number(11):$' mess3 db 13,10, 'serial number(1):$' mess4 db 13,10, 'no this number!$' org 50h

plist phone 9 dup (<>) org 100h

pname db 4,?,4 dup (?) pnumb db 12,?,12 dup (?) data ends

code segment

assume cs:code, ds:data

32

main proc far push ds sub ax,ax push ax

mov ax,data mov ds,ax mov es,ax next1:

call inname call intele mov al,num dec al mov bl,16 mul bl

lea di,plist add di,ax mov dl,num add dl,30h

mov byte ptr[di],dl mov cx,3

lea si,pname+2 rep movsb mov cx,11

lea si,pnumb+2 rep movsb

cmp byte ptr num,9 jb next1 next2: call print ret main endp inname proc near lea dx,mess1 mov ah,09 int 21h ;input name(XXX) lea dx,pname mov ah,10

int 21h ;get name inc byte ptr num ret inname endp

intele proc near lea dx,mess2 mov ah,09

33

int 21h ;input phone(11) lea dx,pnumb mov ah,10

int 21h ;get phone numb ret intele endp

print proc near next3: lea dx,mess3 mov ah,09

int 21h ;input serial:(X) mov ah,1

int 21h cmp al,30h jle exit cmp al,39h jg exit sub al,30h cmp al,num jg exit pdisp: dec al mov bl,16 mul bl

lea dx,plist add dx,ax mov ah,9 int 21h jmp next3 exit: lea dx,mess4 mov ah,9 int 21h ret print endp code ends end main 6.12对十名同学的期末考试成绩进行统计,使用结构变量定义学生成绩记录并预赋值,使用子程序A统计每个学生的总分,使用子程序B显示输出每个学生的姓名和总分,对于总分应使用子程序C把总分的数值转为字符显示。

学生成绩记录格式:

字段 类型 长度 学号, 字符型, 8字节 姓名, 字符型, 3字节 数学, 数值型, 2字节 物理, 数值型, 2字节 化学, 数值型, 2字节

34

语文, 数值型, 2字节 英语, 数值型, 2字节 总分, 数值型, 2字节 备用, 字符型, 3字节

为便于显示输出,问题简化为:学生成绩只设2门课,每门课分值最高为5分 参考程序:

data segment stm struc

bname db 'aaaaaa$' c1 db ? c2 db ? c3 db 0 stm ends

st1 stm <'aaaaaa$',5,3,0> st2 stm <'bbb $',2,4,0> st3 stm <'ccc $',2,3,0> st4 stm <'ddd $',5,3,0> st5 stm <'eeeee $',2,4,0> st6 stm <'ffff $',2,4,0> st7 stm <'gg $',5,3,0> st8 stm <'hhh $',3,4,0> st9 stm <'iiii $',3,4,0> st10 stm <'kkk $',2,3,0> data ends code segment

assume cs:code,ds:data main proc far mov ax,data mov ds,ax call aa call bb mov ah,4ch int 21h main endp

aa proc near mov cx,10

mov bx,offset st1 k: mov al,[bx].c1 add al,[bx].c2 mov [bx].c3,al add bx,10 loop k ret

35

aa endp

bb proc near mov cx,10

mov bx,offset st1 j: mov dx,bx mov ah,9 int 21h mov dl,',' mov ah,2 int 21h

mov dl,[bx].c3 add dl,30h mov ah,2 int 21h add bx,10 call hh loop j ret bb endp

hh proc near mov ah,2 mov dl,13 int 21h mov ah,2 mov dl,10 int 21h ret hh endp code ends

end main 36


汇编习题参考答案(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:三年级关于面积应用题100道

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: