71 lines
1.6 KiB
NASM
71 lines
1.6 KiB
NASM
; 实验七-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 |