66 lines
1.6 KiB
NASM
66 lines
1.6 KiB
NASM
; 实验七-加强-2: 字符串替换程序
|
|
; 功能: 将字符串中的指定字符替换为另一个字符
|
|
|
|
DATAS SEGMENT
|
|
INPUT_STR DB 'Assembly Language Programming', 0 ; 输入字符串
|
|
OLD_CHAR DB 'A' ; 被替换的字符
|
|
NEW_CHAR DB '*' ; 替换后的字符
|
|
RESULT_STR DB 40 DUP(?) ; 结果字符串缓冲区
|
|
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
|
|
MOV ES, AX
|
|
|
|
LEA SI, INPUT_STR ; SI指向输入字符串
|
|
LEA DI, RESULT_STR ; DI指向结果字符串
|
|
MOV AL, OLD_CHAR ; AL=被替换的字符
|
|
MOV AH, NEW_CHAR ; AH=替换后的字符
|
|
|
|
; 复制并替换每个字符
|
|
REPLACE_LOOP:
|
|
MOV BL, [SI] ; 读取字符
|
|
CMP BL, 0 ; 检查是否结束
|
|
JE REPLACE_DONE
|
|
|
|
CMP BL, AL ; 比较是否为被替换的字符
|
|
JNE NOT_MATCH
|
|
|
|
; 字符匹配,替换
|
|
MOV [DI], AH
|
|
JMP NEXT_CHAR
|
|
|
|
NOT_MATCH:
|
|
MOV [DI], BL ; 字符不匹配,原样复制
|
|
|
|
NEXT_CHAR:
|
|
INC SI
|
|
INC DI
|
|
JMP REPLACE_LOOP
|
|
|
|
REPLACE_DONE:
|
|
MOV BYTE PTR [DI], 0 ; 添加字符串结束符
|
|
|
|
; 显示原始字符串
|
|
LEA DX, INPUT_STR
|
|
MOV AH, 09H
|
|
INT 21H
|
|
|
|
; 显示分隔符
|
|
LEA DX, INPUT_STR ; 复用显示功能
|
|
; Note: 实际应用中应该用不同的分隔符,这里简化处理
|
|
|
|
; 程序结束
|
|
MOV AH, 4CH
|
|
INT 21H
|
|
|
|
CODES ENDS
|
|
END START |