String 如何比较汇编中的两个字符串?
我是装配新手。我想用“cmps”比较两个字符串。我读了一些例子,然后写下:String 如何比较汇编中的两个字符串?,string,assembly,intel,x86-16,String,Assembly,Intel,X86 16,我是装配新手。我想用“cmps”比较两个字符串。我读了一些例子,然后写下: GETSTR MACRO STR MOV AH,0AH LEA DX,STR INT 21H ENDM PRINTSTR MACRO STR MOV AH,09H LEA DX,STR INT 21H ENDM EXTRA SEGMENT DEST DB ? EXTRA ENDS DATA SEGMENT SOURCE DB ? STR1 DB 0AH,0
GETSTR MACRO STR
MOV AH,0AH
LEA DX,STR
INT 21H
ENDM
PRINTSTR MACRO STR
MOV AH,09H
LEA DX,STR
INT 21H
ENDM
EXTRA SEGMENT
DEST DB ?
EXTRA ENDS
DATA SEGMENT
SOURCE DB ?
STR1 DB 0AH,0DH,'ENTER STR : ' ,'$'
ENTER DB 10,13,'$'
SAME DB 0AH,0DH,'TWO STR ARE THE SAME ' ,'$'
NSAME DB 0AH,0DH,'TWO STR ARE NOT THE SAME ' ,'$'
USER DB 6,10 DUP('$')
USER1 DB 6,10 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,ES:EXTRA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
PRINTSTR STR1
GETSTR USER1
PRINTSTR STR1
GETSTR USER
LEA BX,USER
MOV SI,BX
LEA BX,USER1
MOV DI,BX
CLD
MOV CX,5
REPE CMPSB
JCXZ MTCH
PRINTSTR NSAME
JMP ENDPR
MTCH:
PRINTSTR SAME
ENDPR:
MOV AH,4CH
INT 21H
CODE ENDS
END START
我有一些问题:
USER DB 6,10 DUP('$')
此外,两条LEA指令都必须获取一个高2的地址。第一个字节仍然是要读取的最大字节数(6),第二个字节将是实际读取的字节数[0,5]
@萨拉:这是一个关于额外部分的错误答案。您可能不需要定义额外的段,但您肯定要编写ES。CMPS指令隐式使用ES,不能重写。如果不想将ES设置为额外段,则可以将其设置为数据段。此外,比较失败,因为ES指向未初始化的额外段。因此,ES:EDI指向垃圾。像这样?MOV AX、DX MOV ES、AX使用以下3条指令:MOV AX、数据MOV DS、AX MOV ES、AX