汇编语言程序设计(合工大版)习题参考答案 下载本文

repne scasb jz match nomatch:

lea dx,mess4 jmp exit match: lea dx,mess3

exit:

mov ah,09 int 21h

sub di,offset stok1 mov dx,di and dx,0fh add dl,30h mov ah,2 int 21h

ret main endp codesg ends

end main

5.8 编写程序,从键盘输入一个N位二进制数,统计1出现的次数。 code segment

assume cs:code

start: mov cx,9 ;N<10 mov dl,30H next: mov ah,1 int 21h cmp al,13 jz write cmp al,30h jb exit cmp al,31h ja exit sub al,30h add dl,al dec cx jnz next write:

push dx mov dl,10 mov ah,2 int 21h pop dx

mov ah,2 int 21h exit: mov ah,4ch int 21h code ends

end start

5.9 编写程序,从键盘输入一个字符串到BUFF,并按相反顺序显示输出。 datasg segment

mess1 db 13,10, 'input string:$' mess2 db 13,10,'$' st1 label byte max1 db 6 act1 db ?

stok1 db 6 dup(?)

datasg ends

codesg segment

assume cs:codesg, ds:datasg main proc far push ds sub ax,ax push ax

mov ax,datasg mov ds,ax lea dx,mess1 mov ah,09

int 21h lea dx,st1 mov ah,0ah

int 21h lea dx,mess2 mov ah,09

int 21h mov cl,act1 mov ch,0

mov bx, offset stok1 add bx, cx next: dec bx

mov dl, [bx] mov ah,2 int 21h

loop next ret main endp codesg ends

end main

5.10 编写程序,从键盘输入一个八位的二进制数,显示其十六进制数。 code segment

assume cs:code start:

mov cx,8 mov bl,0 next: mov ah,1 int 21h cmp al,30h jb exit cmp al,31h ja exit sub al,30h shl bl,1 add bl,al loop next mov cl,4 mov di,2 out1: rol bl,cl mov dl,bl and dl,0fh add dl,30h cmp dl,39h jle dig add dl,7 dig: mov ah,2 int 21h dec di cmp di,0 jnz out1 exit: mov ah,4ch int 21h code ends end start

5.11 编写程序,从键盘输入某个字符的ASCII码(作为起点)和个数N,显示输出这N个ASCII码和字符。

5.12 字数组ARRAY为有符号数,第一个单元为元素个数N,后面为N个元素,编写程序,求数组元素中的最大值,并把它放入MAX单元。 data segment

array dw 5,9,4,5,15,3 max dw ? data ends code segment

assume cs:code,ds:data start:

mov ax, data mov ds, ax mov cx, array lea bx, array+1 mov ax, [bx] mov max, ax k1: mov ax, [bx] cmp ax, max jl next mov max,ax next: add bx,2 loop k1 mov ah,4ch int 21h code ends end start

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!$'