2014-09-12 40 views
-3

我正在试图在汇编中执行rot13,其中您必须输入10个小写字母并在rot13加密后输出它。但是,它不能正常工作。我不知道如何解决它,因为我最近刚开始学习汇编。请帮帮我。汇编语言中的Rot13混淆无法正常工作

.model small 
.data 
    arr dd 10 dup(?), '$' 
.stack 100h 
.code 
main proc 

mov ax, @data 
mov ds, ax 

mov si, 0 

    scan:      ; gets input from user 

     mov ah, 01h     ; get input 
     int 21h 
     mov bx, offset arr 
     mov byte ptr [bx+si], al 
     add si, 1      ; increment si <-- array index 

    cmp si, 9     ; compare si to 9 
    jle scan     ; (loop) if si <= 9, jump to scan 

mov si, 0 

    print:      ; display the input of user 
     mov al, [si] 

     cmp al, 'n' 
     jb plus 

     cmp al, 'n' 
     jae minus 

     plus: 
      mov al, [si] 
      add al, 13 
      jmp alwaysRun 

     minus: 
      mov al, [si] 
      sub al, 13 

     alwaysRun: 
      mov dl, al    
      mov ah, 02h     ; print 
      int 21h 
      add si, 1      

    cmp si, 9 
    jle print 

mov ax, 4c00h 
int 21h 

main endp 
end main 
+2

“这是不正常工作”是*从来没有一个很好的错误描述,请修改。你有什么尝试?你在运行调试器吗? – 2014-09-12 13:13:21

+2

学习自己使用调试器。浏览代码,看看它做了什么你不打算的东西。 – Jester 2014-09-12 13:13:58

回答

0

主要错误是mov al, [si]。不保证arr从0开始 - 事实上它不是。将其更改为[bx+si](偏移arr加索引),如同在输入块中一样。