第六章nbsp子程序结构.doc
文本预览下载声明
第六章 子程序结构
6、写一段子程序SKIPLINES,完成输出空行的功能。空行的行数在AX寄存器中。
答案:
SKIPLINES PROC NEAR
PUSH CX
PUSH DX
MOV CX,AX
NEXT: MOV AH,2
MOV DL,0AH
INT 21H
MOV AH,2
MOV DL,0DH
INT 21H
LOOP NEXT
POP DX
POP CX
RET
SKIPLINES ENDP
7、设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序统计60—69分,70—79分,80—89分,90-99分和100分的人数并分别存放到S6,S7,S8,S9和S10单元中。
答案:
dseg segment
num dw 76,69,84,90,73,88,99,63,100,80
n dw 10
s6 dw 0
s7 dw 0
s8 dw 0
s9 dw 0
s10 dw 0
dseg ends
code segment
main proc far
assume cs:code, ds:dseg
start:
push ds
sub ax, ax
push ax
mov ax, dseg
mov ds, ax
call sub1
ret
main endp
sub1 proc near
push ax
push bx
push cx
push si
mov si, 0
mov cx, n
next:
mov ax, num[si]
mov bx, 10
div bl
mov bl, al
cbw
sub bx, 6
sal bx, 1
inc s6[bx]
add si,2
loop next
pop si
pop cx
pop bx
pop ax
ret
sub1 endp
code ends
end start
8、编写一个有主程序和子程序结构的程序模块,子程序的参数是一个N字节数组的首地址TABLE,数N及字符CHAR。要求在N字节数组中查找字符CHAR,并记录该字符的出现次数。主程序则要求从键盘接收一串字符以建立字节数组TABLE,并逐个显示从键盘输入的每个字符CHAR以及它在TABLE数组中出现的次数。(为简化起见,假设出现次数≤15,可以用十六进制形式把它显示出来 。
答案:
data segment
maxlen db 40
n db ?
table db 40 dup (?)
char db a ; 查找字符’a’
even
addr dw 3 dup (?)
data ends
code segment
assume cs:code, ds:data
main proc far
start:
push ds
mov ax, 0
push ax
mov ax, data
mov ds, ax
lea dx, maxlen
mov ah, 0ah
int 21h ; 从键盘接收字符串
mov addr, offset table
mov addr+2, offset n
mov addr+4, offset char
mov bx, offset addr ; 通过地址表传送变量地址
call count ; 计算CHAR的出现次数
call display ; 显示
ret
main endp
count proc near ; count子程序
push si
push di
push ax
push cx
mov di, [bx]
mov si, [bx+2]
mov cl, byte ptr[si] mov ch, 0
mov si, [bx+4]
mov al, byte ptr[si]
mov bx, 0
again:
cmp al, byte ptr[di]
jne l1
inc bx
l1: inc di
loop again
pop cx
pop ax
pop di
pop si
ret
count endp
display proc near ; display子程序
call crlf ; 显示回车和换行
mov dl, char
mov ah, 2
int 21h
mov dl, 20h
mov ah, 2
int 21h
mov al, bl
and al, 0fh
add al, 30h
cmp al, 3ah
jl print
add al, 7
pr
显示全部