微机课作业2 编程题

1.编写子程序output,将AX中的数以无符号十进制形式输出显示

DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    mov ax,2268
    call output
    
    MOV AH,4CH
    INT 21H
    
    output proc;入参ax
    mov cl,10
    mov ch,0
    
L0:   
    div cl;ax/cl 商:al,余数:ah
    push ax;入栈ax
    add ch,1;记录是几位数
    mov ah,0;将余数部分置零
    cmp ax,0;比较商和0
    jne L0;如果不为0,那么重复L0操作,如果为0,说明结束
   
L1:
    cmp ch,0;输入结束判断
    je over
    pop dx;出栈到dx中
    xchg dl,dh;将高位和低位进行交换
    add dl,48
    mov ah,2;输出dl
    int 21h
    sub ch,1;位数-1
    jmp L1
        
over:    
           ret
    output endp
    
CODES ENDS
    END START

2.编写子程序input,从键盘输入数字字符(例如‘1’,‘2’,’6‘,’a'),在程序中得到对应的数值(126)

DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    call input
    xchg ax,bx;因为这里我把bx设置为出参了,而下一个函数的入参是ax,所以交换他们
    call output
    
    MOV AH,4CH
    INT 21H
    
    input proc ;入参ax,出参bx
    
    mov cl,10
L0:
    mov ah,1
    int 21h;输入字符
    cmp al,'0'
    jb over;判断是否是数字字符
    cmp al,'9'
    ja over
    sub al,48
    
    mov ah,0;因为ah被使用过,所以置零
    push ax;压栈ax
    
    mov ax,bx;将bx赋给ax为接下来的乘法做准备
    mul cl;al*cl
    pop bx;出栈到bx中
    add bx,ax
    jmp L0
    
over:
           ret
    input endp
     

output proc;入参ax,同上题
    mov cl,10
    mov ch,0
    
L0:   
    div cl;
    push ax
    add ch,1
    mov ah,0
    cmp ax,0
    jne L0
   
L1:
    cmp ch,0
    je over
    pop dx
    xchg dl,dh
    add dl,48
    mov ah,2
    int 21h
    sub ch,1
    jmp L1
        
over:    
           ret
    output endp
    
CODES ENDS
    END START



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值