汇编调用子程序把键盘输入的字母转化为大写

本文是个人学习笔记,介绍了一个在Win10的DOSBox环境中,使用汇编语言编写的程序,该程序能接收用户输入的字符串并将其转化为大写。程序首先显示提示信息,接收最多16个字符的输入,然后转换输入为大写,并在完成后显示结果。文章还提到了编写过程中遇到的错误和解决方法。
摘要由CSDN通过智能技术生成

调用子程序把键盘输入的字母转化为大写

声明:本文为个人学习总结笔记,如有谬误,望不吝指教。
注意:代码在win10系统的dosbox中运行,运行过程无异样,代码部分解释程序中给出

assume cs:code, ds:data

data segment
    crlf db 0aH,0dH,"$";回车换行
    string db"Please input your string(a~z,A~Z)", "$"
    number  db 16  ;预留16个空间(即输入值最大长度为16, 但不能完全存储进去,因为需要填入$置末尾)
data ends

code segment
start:
    ;初始化
    mov ax, data
    mov ds, ax
    mov es, ax
    ;输入提示信息
    lea dx, string
    mov ah, 09h
    int 21h
    ;输入字符串
    mov ah, 0ah
    lea dx, number
    int 21h
    mov al, number + 1
    add al, 2
    mov ah, 0
    mov si, ax
    mov number[si], "$"
    
    
    call line_feed ;换行, 下同
    
    
    LEA DX, number + 2                                       
    MOV AH, 09H							 
    INT 21H
    
    call line_feed
    
    ;转换为大写,可知number+1处为输入值个数,则有
    mov ch, 0
    mov cl, [number + 1] ;多少个值,就循环多少次
    mov si, offset number + 2  ;获取偏移地址
    
    
    call LowToHig
    

    
    LEA DX, number + 2                                       
    MOV AH, 09H							 
    INT 21H
    
    call line_feed



    mov ah, 04ch
    int 21h
    
    line_feed proc  ;换行   
        LEA DX, crlf              
        MOV AH, 09H							 
        INT 21H
        ret
    line_feed endp
    
    LowToHig proc
        s:
        
        and byte ptr [si], 11011111b 
        inc si
    loop s
    ret
    LowToHig endp
code ends
end start

在这里插入图片描述

过程踩坑点

  • push 时在push后多加一个逗号,折磨自己将近一个小时
  • 子程序末尾记得ret
  • 子进程放后面(不然子程序后面需要使用的无法到达)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值