我一直在尝试不同的寻址模式并对此主题进行研究;在我尝试使用索引寻址模式时,我从 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
作者正在使用嵌套循环来解析二维数组,并找到最小的数字。我真正感兴趣的是(案例1):
mov ax, matrix[edi + esi*2]
因为这部分在编译代码时似乎会导致问题,并且会给出错误:“comma,colon or end of line expected”但是如果我将代码更改为(案例2):
[matrix + edi + esi*2]
一切似乎都运行良好。
哪一种是正确的索引寻址模式?我的直觉说,由于“矩阵”是数组,它应该位于左括号之外,但在实践中似乎并非如此。如果有人能解释案例 1 和案例 2 之间的区别,我将不胜感激。