在程序集8086中用空字符串填充其他字符串

时间:2017-02-06 06:04:28

标签: assembly emu8086

我正在尝试使用rev字符串的反向填充空字符串abc,但它在第20行给出了错误。这是错误的参数,或者可能是未定义的var。

.model small
.data
abc db "i eat an apple a day$"
rev db ?

.code
main proc
    mov ax,@data
    mov ds,ax
    ;mov cx,size
    mov bx,offset abc
    ;add bx,size
    dec bx
    ;add bx,cx
    mov dx,offset abc 

copy:
    mov al,byte ptr[bx]
    ;Error over here:(20) wrong parameters: MOV  byte ptr[dx],al
    ;(20) probably it's an undefined var: byte ptr[dx] 
    mov byte ptr[dx],al
    dec bx
    inc dx
    loop copy
    mov byte ptr[dx],'$'
    mov dx,offset rev
    mov ah,9
    int 21h
    mov ah,4ch
    int 21h
    main endp
end main

我试图用abc字符串的反向填充空字符串rev,但它在第20行给出了错误。这是错误的参数或可能是未定义的var。

1 个答案:

答案 0 :(得分:0)

您可以在阵列中使用SI和DI寄存器,而不是BX和DX。这正是他们的目的。 Registers in 8086

以下是您的代码的可修改版本:

.model small
.data   

abc db "i eat an apple a day$"
lenAbc db $-abc      ; size of abc array
rev db 0

.code
main proc

    mov ax,@data
    mov ds,ax      

    mov di, 0              

    dec lenAbc
    mov cx, word ptr lenAbc   ; size of array ( excluding '$' ) 

    dec lenAbc
    mov si, word ptr lenAbc   ; index of last element in an array into SI

copy:

    mov al, abc [si]
    mov rev [di],al     ; populate rev with abc starting from last element
    dec si
    inc di
    loop copy

    mov rev [di],'$'

    mov dx,offset rev
    mov ah,9
    int 21h

    mov ah,4ch
    int 21h

main endp

end main

在emu8086中测试