Assembler - 字符串一致性比较
程序员文章站
2024-03-20 09:11:10
...
MASM:Microsoft Assembler
LEA XXX:Load Effective Address
CMPSB:Compare String Byte(字节相减,结果送进ZF)
REPE:Repeat if Equal(ZF=1时循环移位)
REPNE:Repeat if Not Equal
CLD:Clear Direction(指定比较字符串时移位的方向>右 [增加])
STD:Set Direction(指定比较字符串时移位的方向>左 [减少])
JZ XXX:Jump if Zero(如果结果为0,即ZF=1时,跳到XXX位置)
JMP XXX:Jump(无条件跳转到XXX)
示例:
DATA SEGMENT
STRING1 DB 'Hello,World!'
STRING2 DB 'Hello,World!'
MESS1 DB 'Match!',13,10,'$'
MESS2 DB 'No Match!',13,10,'$'
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STRING1
LEA DI,STRING2
CLD
MOV CX,12
REPZ CMPSB
JZ MATCH
LEA DX,MESS2
JMP DISP
MATCH:
LEA DX,MESS1
DISP:
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END START
注意事项(MESS1 DB 'Match!',13,10,'$'):
回车, '\r' ascII码为13, 表示将光标移至行首
换行, '\n' ascII码为10, 表示将光标移至下一行
通常来说,'\n'就足以表示换行字符串, 但由于早期微软系统对换行的理解不同, 因为早期的DOS系统中你的光标可以移至任意位置, 哪怕那里没有任何数据, 比如该行只有10个字符, 你仍然可以移至第20个字符的位置, 所以需要一个\r来让光标移到行首;
上一篇: DOM基础