2016-11-27 100 views
2

我正在为我的计算机体系结构类的任务,我不明白大会。我应该从键盘上输入一个字符串,并检查它是否是回文。我不允许使用INT 21h。我编写的程序为db string value而不是键盘输入,但我仍然无法让我的CMP正常工作。我很确定我做错了。希望有人能帮助。检查字符串回文没有INT 21h在em 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
  • 你必须在4开始SI寄存器中的5代替有了你理线,你不希望显示与BIOS电传打字机的功能NULL字符数5。

  • 你的程序开始检查部分将一个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