2016-11-27 6 views
2

저는 컴퓨터 아키텍처 클래스에 대한 과제를 진행하고 있으며, 모든 것을 잘 이해하지 못합니다. 나는 키보드에서 문자열 입력을 받아야하고 그것이 회문인지 여부를 확인해야합니다. INT 21h을 사용할 수 없습니다. 키보드 입력보다는 db string value으로 프로그램을 작성했지만 여전히 제대로 작동하려면 CMP을 얻을 수 없습니다. 나는이 잘못하고 있다고 확신한다. 희망을 갖고 누군가가 도울 수 있기를 바랍니다.emu에서 INT 21h없이 palindrome에 대한 문자열을 검사하십시오. 8086

#make_COM# 

include emu8086.inc 


org 100h 

jmp init  

    msg db  "kayak",0   

init: 
    Mov SI,5 
    mov di,0 
start: 

    mov al,msg[si] 
    dEC si 
    inc di 

    mov ah ,0eh 
    int 10h 
    cmp si, -1 
    jg start 

check: 

    mov al, msg[si] 
    mov ah, msg[di] 
    cmp al, ah 
    jmp notpalin 
    inc si 
    dec di 
    cmp si, 5 
    jl check 

palin: 

    call pthis 
    db "This is a palindrome", 0 
    jmp stop 

notpalin: 

    call pthis 
    db "This is not a palindrome", 0 
    jmp stop 

stop: 
    mov  ah, 0 
    int  16h  ; wait for any key.... 
    ret ; return to operating system. 

DEFINE_PTHIS 

답변

3
  • 당신은 당신이 BIOS 텔레 기능을 표시하지 않아야 할 NULL 문자를 사전 처리 수를 5로 5 대신에 4에서 SI 레지스터를 시작해야합니다.

  • 프로그램이 검사를 시작합니다. 부분은 SI 레지스터에 -1이 포함됩니다. 그것은 분명히 mov al, msg[si]에 대한 올바른 메모리 참조가 아닙니다.

  • 2자를 비교할 때 조건부 점프를 사용해야합니다. 당신은 항상 뛰는 점프를 사용했습니다!

    cmp al, ah 
    jNE notpalin 
    
  • 당신은 곧 인덱스 등의 검사를 중지 할 수 SIDI 서로 교차했다.

솔루션 :

mov si, 0 
    mov di, 4 
check: 
    mov al, msg[si] 
    mov ah, msg[di] 
    cmp al, ah 
    jne notpalin 
    inc si 
    dec di 
    cmp si, di 
    jb check 
+0

이 오 와우, 내가 많이 가까웠다는 나는 깨달았다. 감독 실수. 귀하의 솔루션에 감사드립니다 @Sep Roland, 내가 잘못 가고있는 부분을 이해하도록 도와주었습니다. – remedy