我一直在尝试不同的寻址模式并对这个主题进行研究;在我尝试使用索引寻址模式时,我从SO上的不同示例中借用了一些代码。在下面的示例中:
outerLoop:
cmp edi, 50 ;each element is 2 bytes (2 ascii characters)
ja endloop ;we need 50 because it's 5 elements per row
mov esi, 0 ;and 5 rows
innerLoop:
cmp esi, 5 ;Compare esi(inner loop index) to 5
jae innerEnd ;jump if it reached the end of the row
mov ax, matrix[edi + esi*2]
cmp ax, cx
jg biggerThan
mov cx, ax
作者正在使用嵌套循环来解析2-d数组,并找到最小的数字。 我真正感兴趣的是(案例1):
mov ax, matrix[edi + esi*2]
由于此部分在编译代码时似乎会导致问题并且它会给出错误: “逗号,冒号或行尾预期” 但是,如果我将代码更改为(案例2):
[matrix + edi + esi*2]
一切似乎都运转良好。
哪一个是正确的索引寻址模式? 我的直觉说,由于“矩阵”是数组,它应该位于左括号之外,但在实践中似乎并非如此。 如果有人能够解释案例1和案例2之间的区别,我将不胜感激。