Assembly Can';t添加相对数量,装配错误
所以对于一个项目,我需要用80386(32位处理器)编写一个游戏 为了绘制像素,我们从老师那里得到了以下示例代码: -首先设置视频模式: MOV啊,00h MOV al,13h INT 10h -绘制像素: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
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