我试图在程序集中执行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
答案 0 :(得分:0)
主要错误是mov al, [si]
。不保证arr
从0开始 - 实际上它不是。将其更改为[bx+si]
(arr
偏加索引),如输入块中那样。