所以我正在尝试使用MASM32中的数组(来自C ++),它真的很烦人。我用C ++原型化了我想要的东西,它看起来像这样:
void randomplaceShip()
{
int toPlace = 3;
srand(time(0));
while (toPlace > 0)
{
int v1 = rand() % 12;
int v2 = rand() % 12;
if (dArray[v1][v2] != 'X' && v1 < 9)
{
for (int i=0; i<3; i++)
{
dArray[v1+i][v2] = 'X';
}
toPlace--;
}
}
}
它将3艘船放在12x12游戏板上,每1个宽1个长3个。到目前为止,在汇编中,我将我的数组地址存储在esi
寄存器中,并获得我在rVal
中存储的1-9之间的随机数。我在正确的位置存储“X”时遇到问题,因为没有像C ++那样的索引。我在MASM32中使用的数组是一个具有144个插槽的字节数组(用于12x12板)。
lea esi, dArray
mov eax, 11
.while eax > 10
invoke crt_rand
.endw
mov rVal1, eax
mov eax, 11
.while eax > 10
invoke crt_rand
.endw
mov rVal2, eax
movzx eax, byte ptr [esi+1*rVal1] ;The problem
mov eax, "x" ;is here
答案 0 :(得分:0)
你在这做什么:
movzx eax, byte ptr [esi+1*rVal1]
从内存中读取,而不是写入内存。地址也不正确;您试图从esi
+ 的地址中读取 rVal1
的地址([x]
并不意味着“使用{{1}处的值}}作为地址“。它只是表示”使用x
的地址作为地址“。
假设数组中的每个元素都是一个字节,你想要的是将值x
存储在'X'
,即:
OFFSET dArray + (rVal1 + i) * 12 + rVal2