61 lines
1.3 KiB
NASM
61 lines
1.3 KiB
NASM
; 实验七-2: 字符串比较程序 - 使用REP CMPSB
|
||
; 功能: 比较两个字符串是否相等
|
||
|
||
DATAS SEGMENT
|
||
STRING1 DB 'Hello, World!', 0 ; 第一个字符串
|
||
STRING2 DB 'Hello, World!', 0 ; 第二个字符串(相同)
|
||
STRING3 DB 'Hello, Assembly!', 0 ; 第三个字符串(不同)
|
||
RESULT DB 'EQUAL', 0 ; 比较结果
|
||
RESULT2 DB 'NOT EQUAL', 0
|
||
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, STRING1 ; SI指向第一个字符串
|
||
LEA DI, STRING2 ; DI指向第二个字符串
|
||
|
||
; 计算字符串长度
|
||
MOV CX, 0
|
||
LEN1_LOOP:
|
||
CMP BYTE PTR [SI + CX], 0
|
||
JE LEN1_DONE
|
||
INC CX
|
||
JMP LEN1_LOOP
|
||
LEN1_DONE:
|
||
|
||
; 使用REP CMPSB比较字符串
|
||
; CMPSB会逐字节比较[SI]和[DI],相等则继续,不等则停止
|
||
REP CMPSB
|
||
|
||
; 检查比较结果
|
||
; 如果CX=0且ZF=1,则字符串相等
|
||
JNZ NOT_EQUAL ; ZF=0说明不相等
|
||
|
||
; 相等的情况
|
||
LEA DX, RESULT
|
||
JMP DISPLAY_RESULT
|
||
|
||
NOT_EQUAL:
|
||
LEA DX, RESULT2
|
||
|
||
DISPLAY_RESULT:
|
||
; 显示结果
|
||
MOV AH, 09H
|
||
INT 21H
|
||
|
||
; 程序结束
|
||
MOV AH, 4CH
|
||
INT 21H
|
||
|
||
CODES ENDS
|
||
END START |