Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly Can';t添加相对数量,装配错误_Assembly_X86 - Fatal编程技术网

Assembly Can';t添加相对数量,装配错误

Assembly Can';t添加相对数量,装配错误,assembly,x86,Assembly,X86,所以对于一个项目,我需要用80386(32位处理器)编写一个游戏 为了绘制像素,我们从老师那里得到了以下示例代码: -首先设置视频模式: MOV啊,00h MOV al,13h INT 10h -绘制像素: MOV ESI, 0A0000H ; frame buffer address MOV EDI, 320 * 2 + 10; add the appropriate offset MOV AL, 10 ; index in the colour palette MOV [EDI], AL

所以对于一个项目,我需要用80386(32位处理器)编写一个游戏

为了绘制像素,我们从老师那里得到了以下示例代码:

-首先设置视频模式: MOV啊,00h MOV al,13h INT 10h

-绘制像素:

MOV ESI, 0A0000H ; frame buffer address

MOV EDI, 320 * 2 + 10; add the appropriate offset
MOV AL, 10 ; index in the colour palette
MOV [EDI], AL ; change pixel at column 10 of row 2
这段代码工作得很好,但在我的游戏代码中,我想在数据中添加“玩家”的x和y位置

xpos dw 10 ypos dw 2

当我尝试访问这些变量时,会出现错误“无法添加相对数量”

我试过:

MOV ESI, 0A0000H ; frame buffer address
MOV EDI, 320 * offset yPosChar + offset xPosChar; add the appropriate offset
MOV AL, 10 ; index in the colour palette
MOV [EDI], AL ; change pixel at column 10 of row 2
还有:(这会得到另一个错误:“非法内存访问”)


请帮忙?IDK我做错了什么,这让我发疯

不清楚你想让第一个做什么。第二个是有意义的,但不幸的是cpu不支持这种寻址。您必须自己使用乘法计算
320*[yPosChar]
,然后将
[xPosChar]
相加。PS:有关可用寻址模式,请参阅相关手册。PPS:您的变量甚至不被称为
xPosChar
yPosChar
。还要注意操作数的大小。我仍然会遇到错误“非法内存访问”。MOV ESI,0A0000H;帧缓冲区地址IMUL EDI,320*[yPosChar]ADD EDI,EDI+[xPosChar]MOV AL,10;调色板中的索引MOV[EDI],AL;更改第2行第10列的像素教授使用的添加EDI,320*2+10,它立即起作用,我不小心写了MOV EDI。。。在本文中,但这并不否认我仍然得到相同的errorConstant算法,因为它们是由汇编程序计算的。如果
IMUL
的语法错误,请参考指令集参考。如果编写指令,则不再需要操作员。另外,正如我所说的,要注意操作数的大小。我将
dw
更改为
dd
,然后您可以执行
movedi[yPosChar];imul电子数据交换,电子数据交换,320;添加edi,[xPosChar];mov字节[0A0000h+edi],10
很难准确地说出代码包含或不包含哪些内容。请创建并发布一个。
MOV ESI, 0A0000H ; frame buffer address
MOV EDI, 320 * [yPosChar] + [xPosChar] ; add the appropriate offset
MOV AL, 10 ; index in the colour palette
MOV [EDI], AL ; change pixel at column 10 of row 2