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



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

.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 行给出错误,这是错误的参数,或者它可能是一个未定义的变量。

您可以将 SI 和 DI 寄存器与阵列一起使用,而不是 BX 和 DX。这正是他们的目的。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 中测试

最新更新