2016-11-27 4 views
2

私は自分のコンピュータアーキテクチャクラスの課題を取り組んでいます。私はキーボードから文字列を入力し、それが回文かどうかを確認するはずです。 INT 21hを使用することはできません。キーボード入力ではなくdb string valueというプログラムを書いていますが、私はまだCMPを正しく動作させることができません。私はこれが間違っていると確信しています。うまくいけば誰かが助けることができる。emuのINT 21hのないパリンドロムの文字列を確認してください。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レジスタを起動する必要があります。

  • プログラムがチェックを開始します。部分は、-1を含むSIレジスタになります。それは明らかに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

関連する問題