汇编语言中的Rot13混淆无法正常工作

时间:2014-09-12 12:58:40

标签: assembly encryption rot13

我试图在程序集中执行rot13,其中您必须输入10个小写字母并在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

1 个答案:

答案 0 :(得分:0)

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