【问题标题】:Reverse print an array in assembly programming在汇编编程中反向打印数组
【发布时间】:2013-07-05 16:16:39
【问题描述】:

我需要用汇编语言反向打印一个字符串数组。以下是我的代码。

proc reverseAr
    mov cl,count
    mov si,offset Ar
    mov si,3
    write2:

        mov dl,Ar[si]
        mov ah,02h
        int 21h
        dec si
    loop write2
ret
endp

但这并没有给出答案。谁能告诉我si的确切含义是什么?不是数组位置的索引吗?

【问题讨论】:

  • 在分段内存模型(您的程序似乎打算在其中运行)中,offset AR 将在Ar 所在的段内为您提供Ar 的16 位偏移量。如果您随后从[si] 读取,您将从[ds:si] 读取,即从si 在ds 指定的段中指定的偏移量。顺便说一句,loop 递减cx,而不仅仅是cl。所以你应该使用movzx cx,byte ptr count 而不是mov cl,count。
  • 一个问题是,在您将数组Ar 的地址写入si 之后,您就用3 覆盖了它。那可能不是你的本意。在将数组的基地址加载到si 之后,您想将数组的长度添加到其中。在这种情况下,我假设所有内容都在ds 指向的段内。如果不是,那么它会稍微复杂一些。

标签: arrays assembly reverse


【解决方案1】:
proc reverseArray
    mov cl,count
    dec cl
    dec si
    printRevArr:
        mov dl,arr[si]
        add dl,48
        mov ah,02h
        int 21h

        dec si

    loop printRevArr

    ret
endp

不要使用mov si,offset Ar。它会重置数组索引。

【讨论】:

    【解决方案2】:

    si 表示源索引寄存器。 它可以用作指针。 它是偏移寄存器 语法将是:

    SI 源索引:一般寻址,字符串操作中的源偏移量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多