【问题标题】:filling empty string with other string in assembly 8086 [duplicate]在程序集8086中用其他字符串填充空字符串[重复]
【发布时间】:2017-02-06 06:04:28
【问题描述】:

我正在尝试用 abc 字符串的反向填充一个空字符串 rev,但它在第 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。

【问题讨论】:

标签: assembly emu8086


【解决方案1】:

您可以将 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中测试

【讨论】:

  • @muhammadali 如果我的回答有帮助,请不要忘记将其标记为已接受 :)
猜你喜欢
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
相关资源
最近更新 更多