通过x86程序集更改位图

时间:2019-01-20 18:02:55

标签: assembly x86 nasm

我尝试修改位图-在其上添加一个像素。

push    ebp
mov ebp, esp

put_pixel:
mov eax, DWORD [ebp+8]  ;address of bitmap
add eax, 130            ;take address i wanna change
mov eax, [eax]          ;load address
not eax                 ;this adders is ff(white) change to (00) black
mov ecx, eax    ;return value
mov eax, ecx        ;return ecx
pop ebp
ret

但是它无能为力。这是更改位图上像素颜色的正确方法吗?也许我应该以某种方式保存它?

1 个答案:

答案 0 :(得分:4)

这个评论太长了,因此我将其写为答案。
您将通过以下指令将$('[data-style="bw"]').show(); 中的地址替换为其地址中的值:

EAX

在这里,您将覆盖写回更新值所需的地址。因此,将您的代码更改为

mov eax, [eax]           ;load address 

一个问题仍然存在:
130不是4的倍数。因此,如果每个像素位置有4个字节,则将修改(至少)两个像素的值(除非存在某种标题,问题不会不告诉我们)。重新考虑该方面,以便您只能修改一个像素

编辑:
我合并了@Michael Petch的评论,并在创建框架之前设置了入口标签以获取完整的样本。谢谢。