【发布时间】: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指向的段内。如果不是,那么它会稍微复杂一些。