重复CMPSB问题

时间:2014-11-10 16:54:01

标签: assembly masm x86-16 disassembly tasm

我试图使用rep cmpsb如下:

    DSEG SEGMENT PARA PUBLIC 'DATA' 

    SOURCE DB 'ASDF'
    TARGET DB 'ASDF'

    SIZE EQU ($-TARGET)



DSEG ENDS

SSEG SEGMENT PARA STACK 'STACK'

SSEG ENDS    

CSEG SEGMENT PARA PUBLIC 'CODE'

    ASSUME CS:CSEG,DS:DSEG,SS:SSEG,ES:NOTHING 


MAIN:

    MOV AX,DSEG
    MOV DS,AX

    MOV SI,OFFSET SOURCE
    MOV DI,OFFSET TARGET

    CLD

    MOV CX,SIZE

    REPE CMPSB



    MOV AH,4CH
    INT 21H

CSEG ENDS
END MAIN

我正在使用emu8086。 尝试代表并重复但没有任何反应。 rep应该重复,直到cx> 0,两个字符串相等或不相同,但它不会发生并且只运行一次(程序终止后,cx为3) 我也尝试重复两个相同的字符串,但没有任何事情发生 当在这两种模式下运行时,零标志永远不会改变,我认为它应该被改为重复正常工作 所以只有repne工作,直到cx = 0并且没有给出正确的结果 那我该怎么办?

---------解决--------------- 在初始化ES之后起作用:

 DSEG SEGMENT PARA PUBLIC 'DATA' 

    SOURCE DB 'ASDF'
    TARGET DB 'ASDF'

    SIZE EQU ($-TARGET)



DSEG ENDS

SSEG SEGMENT PARA STACK 'STACK'

SSEG ENDS

ESEG SEGMENT PARA PUBLIC 'EXTRA'

ESEG ENDS    

CSEG SEGMENT PARA PUBLIC 'CODE'

    ASSUME CS:CSEG,DS:DSEG,SS:SSEG,ES:ESEG 


MAIN:

    MOV AX,DSEG
    MOV DS,AX

    MOV ES, AX

    MOV SI,OFFSET SOURCE
    MOV DI,OFFSET TARGET

    CLD

    MOV CX,SIZE

    REPE CMPSB



    MOV AH,4CH
    INT 21H

CSEG ENDS
END MAIN

0 个答案:

没有答案