汇编语言上机考试三星题——根据键盘输入调用子程序显示子程序的入口地址

  1. 在多模块设计中,主模块中调用内部模块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 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值