You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2019下32/64位Irvine32汇编实现用户名转大写功能求助

实现逻辑
  • 现有代码已完成输入提示、用户输入读取的基础流程,仅缺少小写转大写的遍历处理环节。
  • ReadString调用后会在EAX寄存器返回用户输入的有效字符长度(不含字符串末尾的结束符),可直接作为循环计数器使用。
  • 小写字母的ASCII范围为61h('a')至7Ah('z'),与对应大写字母的ASCII差值固定为20h(十进制32),遍历每个字符时若处于小写范围内,减去20h即可完成转换,非小写字符(数字、符号、大写字母本身)直接跳过即可。
修改后完整可运行代码
Include Irvine32.inc

.data
askName    BYTE 32 DUP (0) ; 输入缓冲区,可按需调整大小
prompt     BYTE "Please enter your name: " ,0dh,0ah,0

.code
main PROC
    ; 输出输入提示
    mov     edx, OFFSET prompt
    call    WriteString

    ; 读取用户输入
    lea     edx, askName
    mov     ecx, SIZEOF askName
    Call    ReadString ; EAX返回输入的有效字符长度

    ; 小写转大写循环
    mov     ecx, eax
    mov     esi, OFFSET askName
    cmp     ecx, 0
    jle     ConvertEnd

ConvertLoop:
    mov     al, [esi]
    cmp     al, 'a'
    jb      NextChar
    cmp     al, 'z'
    ja      NextChar
    sub     al, 20h
    mov     [esi], al

NextChar:
    inc     esi
    dec     ecx
    jnz     ConvertLoop
ConvertEnd:

    ; 输出转换后的结果
    call    Crlf
    mov     edx, OFFSET askName
    call    WriteString
    call    Crlf

    push    0
    call    ExitProcess
main ENDP
END main
适配说明
  • 代码为32位MASM版本,完全适配Visual Studio + Irvine32环境,无16位链接器依赖。
  • 循环逻辑会自动跳过非小写字符,不会破坏原有输入的符号、数字、大写字母内容。
  • 如需支持更长的姓名输入,可直接修改askName变量的DUP参数调整缓冲区大小。

内容的提问来源于stack exchange,提问作者WInslow11b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 01:27:03