- 在多模块设计中,主模块中调用内部模块buf1,buf2,buf3,buf4。主模块根据键盘输入的指令(如:a,b,c,d)调用上述对应的子程序,每个子程序的任务是显示其入口地址。调用后继续等待调用,若输入ESC键(ASCII码为1BH)则结束程序的执行。请编写完成该任务的程序。
DATAS SEGMENT
buf0 db 0ah,'Please choose the subprogram(a,b,c,d): ','$'
buf dw buf1,buf2,buf3,buf4
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
;======================
main proc far
MOV AX,DATAS
MOV DS,AX
loop_begin:
mov dx,offset buf0
mov ah,09h
int 21h
mov ah,01h
int 21H
cmp al,'a'
je one
cmp al,'b'
je two
cmp al,'c'
je three
cmp al,'d'
je four
cmp al,1bh
je exit0
jmp loop_begin
one:
call buf1
jmp loop_begin
two:
call buf2
jmp loop_begin
three:
call buf3
jmp loop_begin
four:
call buf4
jmp loop_begin
exit0:
MOV AH,4CH
INT 21H
main endp
;======================
buf1 proc near
mov bx,offset buf1
call output
ret
buf1 endp
;========================
buf2 proc near
mov bx,offset buf2
call output
ret
buf2 endp
;========================
buf3 proc near
mov bx,offset buf3
call output
ret
buf3 endp
;========================
buf4 proc near
mov bx,offset buf4
call output
ret
buf4 endp
;========================
output proc near
mov dx,0ah
mov ah,02h
int 21H
mov dx,bx
mov cl,4
SHR DH,cl
add dh,30h
cmp dh,39h
jle first
add dh,7
first:
mov dl,dh
mov ah,02h
int 21H
mov dh,bh
and dh,0fh
add dh,30h
cmp dh,39h
jle second
add dh,7
second:
mov dl,dh
mov ah,02h
int 21H
mov dl,bl
shr dl,cl
add dl,30h
cmp dl,39h
jle third
add dl,7
third:
mov ah,02h
int 21H
mov dl,bl
and dl,0fh
add dl,30h
cmp dl,39h
jle forth
add dl,7
forth:
mov ah,02h
int 21H
ret
output endp
CODES ENDS
END main