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
Image 在asm中翻转图像中的第一个像素_Image_Assembly_X86 - Fatal编程技术网

Image 在asm中翻转图像中的第一个像素

Image 在asm中翻转图像中的第一个像素,image,assembly,x86,Image,Assembly,X86,嗨,在我创建一个可以水平或垂直翻转3x3图像的循环之前,我只是在练习一下。我使用一个名为ap的变量来存储第一个像素的地址。我还希望最终使用另一个名为amp的变量来存储镜像像素地址,以及一个寄存器来存储像素的计算偏移量,但现在我手动将其放入。无论我做什么,程序都不会交换它们。有人知道问题是什么吗?谢谢你的阅读 mov ecx, dword ptr[eax + ecx * 4] mov ap, ecx //temporary pixel address storage m

嗨,在我创建一个可以水平或垂直翻转3x3图像的循环之前,我只是在练习一下。我使用一个名为ap的变量来存储第一个像素的地址。我还希望最终使用另一个名为amp的变量来存储镜像像素地址,以及一个寄存器来存储像素的计算偏移量,但现在我手动将其放入。无论我做什么,程序都不会交换它们。有人知道问题是什么吗?谢谢你的阅读

    mov ecx, dword ptr[eax + ecx * 4]
    mov ap, ecx   //temporary pixel address storage
    mov ecx, 0

    mov ecx, dword ptr[eax + ecx * 4 + 8]   //offset by 8 pixels
    mov [ap], ecx

我不明白这是怎么回事:

 mov ecx, dword ptr[eax + ecx * 4]
ecx里有什么?这是冲销柜台吗?但你每次都在覆盖它。。。 如果您试图保存原始位,我认为您需要确保在ecx中获得正确的值。试一试

mov ecx, 0
首先(您还可以
xor-ecx,ecx
它可以完成任务并且更容易阅读)

我使用一个名为ap的变量来存储第一个像素的地址

如果支持ap变量包含地址,则需要使用
lea
指令(而不是
mov
指令)

现在要交换这些像素,从而翻转图像,您可以编写:

mov ecx, [ap]
mov edx, [amp]
mov [ap], edx
mov [amp], ecx

要处理图像的下一行,您可以每次将每个扫描线的字节数添加到
EAX
寄存器中。对于一个可能是12的3x3图像。

我看到您正在读取两个连续的DWORD(假设输入时ecx为0)。但看起来你想把这两个都写到ap?读取第二个dword后,是否应该将其写入第一个dword之上?第一个AP用于保存第一个像素的地址,第二个是将镜像像素存储到AP地址的指令。写入时,ecx在第2行似乎没有包含地址。也许你的意思是leaecx,dwordptr[eax+ecx*4]?然后,最后的mov语句将覆盖第一个像素。请注意,由于在覆盖第一个像素之前未保存其旧值,因此很难进行交换。。。
mov ecx, [ap]
mov edx, [amp]
mov [ap], edx
mov [amp], ecx