欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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来让光标移到行首;