汇编大小写转换代码,masm环境

 

数据段(DATAS SEGMENT)

  • buf db 100 dup(?):定义了一个名为buf的数组,大小为100字节,初始值都是未定义(?)。这个数组用来存储用户输入的字符以及处理后的结果。

堆栈段(STACKS SEGMENT)

  • 在这段代码中,没有定义堆栈段的具体内容,但在实际程序中,堆栈段通常用于存储临时数据和处理函数调用。

代码段(CODES SEGMENT)

  • 初始化数据段:通过MOV AX,DATASMOV DS,AX指令,程序初始化数据段寄存器DS,指向定义的数据段,以便能够访问buf数组。
  • 读取用户输入:通过一个循环(标记为sr),程序使用DOS中断int 21h服务号01h来读取用户输入的每个字符。每次读取一个字符存储到寄存器AL中。
  • 判断输入结束:通过cmp al,0dh和随后的jz over指令,程序检查是否接收到回车键(ASCII码为13,即0Dh)。如果是,跳转到over标签处处理字符串结束。
  • 大小写转换:如果输入的字符是小写字母(ASCII码范围从61h到7ah),程序通过sub al,20h指令将其转换为对应的大写字母(因为ASCII码表中大写字母和小写字母相差32,即20h)。
  • 存储字符:经过判断和转换后的字符被存储到buf数组中,通过mov [bx+si],al指令实现,其中BX指向buf的开始,SI用于跟踪当前位置。
  • 结束处理:在循环结束后(over标签),程序将回车键的ASCII码存储到buf数组中,然后在字符串末尾添加$符号作为字符串的结束标志。
  • 输出处理后的字符串:使用DOS中断int 21h服务号09h来输出处理后的字符串。DX寄存器指向buf的开始。
  • 程序结束:通过DOS中断int 21h服务号4Ch结束程序,返回控制权给操作系统。

DATAS SEGMENT
    buf db 100 dup(?)
    ;此处输入数据段代码  
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    lea bx,buf
    mov si,0h
    sr:mov ah,01h
    int 21h
    cmp al,0dh
    jz over
    cmp al,61h
    jl next
    cmp al,7ah
    jg next
    sub al,20h
    next:mov[bx+si],al
    
    inc si
    jmp sr
    over:mov[bx+si+1],al
    
    mov al,'$'
    mov[bx+si+2],al
    
    mov ah,09h
    mov dx,bx
    int 21h
    
    ;此处输入代码段代码
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏目艾拉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值