汇编:实现输入输出

2、编写子程序,其功能是从键盘输入数字字符(例如‘1’‘2’‘6’‘a’),在程序中得到对应的数值(126),然后在主程序中进行调用。(如果有入口参数或出口参数,请给出注释说明。)
用到的指令请参考实验3,子程序定义用proc 和endp,调用子程序用call指令。
注意: 分析这个子程序有入口参数吗?有出口参数吗?
子程序定义时的位置应该放在哪里?放在主程序中,还是主程序外?
子程序最后要用ret指令返回。
子程序中为什么要用到压栈和出栈操作?应该对哪些寄存器压栈和出栈。
调用定义好的子程序需要用哪条指令?
我们可以用某个寄存器来保存处理后的结果,我们还需要对这个寄存器进行压栈和出栈操作吗,为什么?

DATAS SEGMENT
    
    a1 dw ? 
    a2 dw ?, ?, ?, ?, ?
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
  	call input
  	mov si, offset a1
  	mov [si], ax
  	call output



    MOV AH,4CH
    INT 21H
input proc
	mov cl, 10
	mov bx, 0
L0: mov ah, 1
	int 21h
	sub al, 48
	cmp al, 0
	jb over
	cmp al, 9
	ja over
	mov ah, 0
	push ax
	mov ax, bx
	mul cl
	pop bx
	add bx, ax
	jmp L0
over:
	mov ax, bx
	ret
input endp
    
    
    
output proc
	;   调用输出
    mov ch, 0
    mov cl, 10
   	; 每次循环除以 cl
L0: div cl
	; 	除以 cl 以后,结果在 al 中,余数在 ah 中
	;将余数入栈
    push ax
    ; ch 每次增加,记录位数
    inc ch
    mov ah, 0
    cmp al, 0
    ja L0
    
L1: ; 输出函数
	cmp ch, 0
    je over2
    ; 出栈,将栈顶元素存储到 dx 中
    pop dx
    mov dl, dh
    add dl, 48
    mov ah, 2
    int 21h
    dec ch
    jmp L1
    
over2:
	ret 
output endp
CODES ENDS

    END START
    
   
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_努力努力再努力_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值