Files
Operating-System/Experiment/asm-exp/实验七/实验七-4_字符串转换.asm
2026-06-25 00:09:09 +08:00

71 lines
1.6 KiB
NASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; 实验七-4: 字符串转换程序 - 小写转大写
; 功能: 将字符串中的小写字母转换为大写字母
DATAS SEGMENT
INPUT_STRING DB 'hello, assembly!', 0 ; 输入字符串(小写)
OUTPUT_STRING DB 20 DUP(?) ; 输出字符串缓冲区
DASH_LINE DB 0DH, 0AH, '-', 0DH, 0AH, '$'
DATAS ENDS
STACKS SEGMENT
DB 64 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS, SS:STACKS
START:
MOV AX, DATAS
MOV DS, AX
LEA SI, INPUT_STRING ; SI指向输入字符串
LEA DI, OUTPUT_STRING ; DI指向输出字符串
; 复制并转换每个字符
COPY_LOOP:
MOV AL, [SI] ; 读取字符
CMP AL, 0 ; 检查是否结束
JE COPY_DONE
; 检查是否为小写字母 'a'-'z'
CMP AL, 'a'
JB NOT_LOWER ; AL < 'a',不是小写
CMP AL, 'z'
JA NOT_LOWER ; AL > 'z',不是小写
; 转换为大写ASCII码减去32
SUB AL, 20H
JMP STORE_CHAR
NOT_LOWER:
; 非小写字母保持不变
; 空 格、标点等保持不变
STORE_CHAR:
MOV [DI], AL ; 存储转换后的字符
INC SI
INC DI
JMP COPY_LOOP
COPY_DONE:
MOV BYTE PTR [DI], 0 ; 添加字符串结束符
; 显示原始字符串
LEA DX, INPUT_STRING
MOV AH, 09H
INT 21H
; 显示分隔符
LEA DX, DASH_LINE
INT 21H
; 显示转换后的字符串
LEA DX, OUTPUT_STRING
INT 21H
; 程序结束
MOV AH, 4CH
INT 21H
CODES ENDS
END START