打印x86组装阵列

时间:2012-08-29 21:28:58

标签: assembly x86

我在x86 Assembly中打印数组时遇到问题。

我希望每次打印一个数组,每个循环结束时使用换行符,但似乎我尝试使用的代码是错误的。这是:

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的第三行,换行符和退出。我得到的输出只是换行符。

2 个答案:

答案 0 :(得分:1)

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

mov ecx,NewLine

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

mov ecx,[Matrix+esi]

内容放入地址Matrix + ESI到ECX。您应该将地址改为ECX。

答案 1 :(得分:1)

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

最佳, 弗兰克