2013-01-03 4 views
1

dlbl이 같더라도 doi으로 점프하지 않는 것이 문제입니다. 왜 그 사람이 누군지 압니까?어셈블리 jmp가 점프하지 않음

assume cs:code,ds:data 
data segment 
sir1 db "abc" 
l1 equ $-sir1 
sir2 db "a" 
l2 equ $-sir2 
bunbun db "Este!$" 
nu db "NU este!$" 
iesire db "Apasa Enter!$" 

data ends 

code segment 
start: 
    mov ax,data 
    mov ds,ax 

    mov bp,offset sir1 
    mov si,offset sir2 
    dec bp 
    push bp 
    push si 
    mov ah,l1 
    mov bh,l2 

unu: 
    pop si 
    pop bp 
    inc bp 
    dec ah 
    mov dl,sir1[bp] 
    mov bl,sir2[si] 
    push bp 
    push si 
    cmp dl,bl 
    je doi 
    cmp ah,0 
    je nu_bun 
    jmp unu 

doi: 
    inc si 
    inc bp 
    dec ah 
    mov dl,sir1[bp] 
    mov bl,sir2[si] 
    cmp dl,bl 
    jne unu 
    cmp bh,0 
    je bun 
    jmp doi 

bun: 
    mov dx,offset bunbun 
    mov ah,09h 
    int 21h 
    mov ah, 09h 
    mov dx,offset iesire 
    int 21h 
    mov ah, 0ah 
    int 21h 
    mov ax,4c00h 
    int 21h 

nu_bun: 
    mov dx,offset nu 
    mov ah,09h 
    int 21h 
    mov ah, 09h 
    mov dx,offset iesire 
    int 21h 
    mov ah, 0ah 
    int 21h 
    mov ax,4c00h 
    int 21h 

code ends 
end start 
+0

당신은 어떻게'dl'와'bl'가 동일한 것으로 판단된다? '[bp]'의 기본값은'ss : [bp]'... 문자열이 아닌 곳입니다. 'bp '대신에'di'를 사용하십시오. –

답변

1
doi: 
    xchg di, bp 
    mov cx, ax 
    xor ax, ax 

cmp_next: 
    lodsb 
    dec si 
    cmpsb 
    jnz not_equal 
    or al, al 
    jz do_equal 
    jmp cmp_next 

do_equal: 
    xchg di, bp 
    mov ax, cx 
    jmp somewhere_togo_when_equal 

not_equal: 
    xchg di, bp 
    mov ax, cx 
    jmp somewhere_togo_when_not_equal