-3

我正在尝试在汇编中执行 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
4

1 回答 1

0

主要错误是mov al, [si]。不能保证arr从 0 开始 - 实际上并非如此。将其更改为[bx+si](正索引的偏移量arr),就像在输入块中一样。

于 2014-09-12T20:24:16.117 回答