Assembly 重复CMPSB问题

Assembly 重复CMPSB问题,assembly,masm,x86-16,disassembly,tasm,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

我尝试使用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和repe,但什么也没发生。 rep实际上应该重复,直到cx>0,两个字符串是否相等,但不会发生,并且只运行一次(程序终止后,cx为3) 我还尝试了两个相等字符串的repe,但都没有结果 当在这两种模式下运行时,零标志永远不会改变,我认为应该改变它以正确地重复工作 因此,只有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

尝试初始化
ES
寄存器,因为
CMPS
DS:SI
ES:DI
进行比较。在
MOV-DS,AX
之后添加
MOV-ES,AX
REP
REPE
的使用取决于汇编程序。您需要检查qemu(或您正在使用的汇编程序)的确切文档。这里有更多信息(可能是副本)。@Jester非常感谢!现在可以了!:)