0

我在 x86 程序集中打印数组时遇到问题。

我想在每个周期结束时使用换行符每次打印一行,但似乎我尝试使用的代码是错误的。这里是:

SECTION .data 

Matrix:
db "00000"
db "00000"
db "01110"
db "00000"
db "00000",10


NewLine:  db 10


SECTION .text

global  _start

_start:


mov esi,2

mov eax,4
mov ebx,1
mov ecx,[Matrix+esi]
mov edx,5
int 80h

mov eax,4
mov ebx,1
mov ecx,NewLine
mov edx,1
int 80h

mov eax,1
mov ebx,0
int 80h

在这个简化案例中,我的目标是打印由五个元素组成的 Matrix 的第三行,一个换行符和一个退出。我得到的输出只是换行符。

4

2 回答 2

1

我认为正在发生的事情是:

mov ecx,NewLine

将 NewLine 的地址放在 ECX 中,这样:

mov ecx,[Matrix+esi]

将地址 Matrix+ESI 的内容放入 ECX。您应该将地址放入 ECX。

于 2012-08-29T22:23:31.083 回答
1

当它显然是 Linux 代码时,为什么它被标记为“dos”?无论如何,MRAB 建议的“lea”解决方案应该可以工作。使用 esi = 2,它只会将您移动到第一行的第二个字节 - 如果您想打印第三行,您希望 esi 为 10...等等。

最好的,弗兰克

于 2012-08-29T23:45:28.233 回答