间接寻址和数组

时间:2014-11-10 05:42:30

标签: assembly x86 nasm



section .data
matrix dw 1,2,3,4,5
       dw 6,7,8,9,10
       dw 11,12,13,14,15
       dw 16,17,18,19,20
       dw 21,22,23,24,25
;defined as word in order to be used in stack as well as ASCII representing numbers in 2 bytes(1 byte for each digit)

msg db "The smallest value in this matrix is:",10
msgL equ $-msg



section .bss


smallVal resw 2

section .text
global _start
_start:

mov edi, 0 ;will be used in order to indicate when end of matrix has been reached
mov esi,0 ; will be used to indicate when end of row has been reached

mov ecx, [matrix + edi +esi*2]




我正在开发一个程序,它接受矩阵并试图找到矩阵中的最小值。我对编程很陌生,现在只开始编程java大约4个月了,我现在也在学习ASM。我的问题是关于间接寻址。下面的语句实际上会做什么[eax + edx](给定存储在eax和edx中的任意值)。根据一个网站,我发现它有效地找到了有效的地址,但我不确定这意味着什么。

由于

感谢您的快速回复。我的问题实际上在于间接寻址如何适用于寄存器。我已将代码片段附加到此主题的顶部。我的问题在于mov ecx,[matrix + edi + esi * 2]。我不确定这条线的作用。

1 个答案:

答案 0 :(得分:0)

代码行

mov ecx, [matrix + edi +esi*2]

从数组中获取一个元素,但这是错误的!由于数组已被定义为单词,因此您必须使用CX而不是ECX。

进一步了解寻址模式 EDI控制外环并将以10为步长从0到40(停止在50)进行 ESI控制内循环并将从0循环到4(停止在5)