我正在制作小的NASM函数,使像素表的垂直镜像存储在一维字节向量中,颜色排列类似于BGRBGRBGR。
我做了一个原型,它的第一个(最后,这是BMP)线。现在我有了一个问题,为什么这个版本是正确的,并且没有生成SEGFAULT:
global asm_vert
section .text
asm_vert:
push ebp
mov ebp, esp
push ecx
push esi
push ebx
push edx
push edi
mov edx, [ebp+8] ; table width
mov ecx, [ebp+12] ; table height
mov esi, [ebp+16] ; input table adress
mov edi, [ebp+20] ; output table adress
mov eax, edx
mov ecx, edx
mov ebx, 3
mul ebx
add edi, eax
sub edi, 3
x_loop:
mov bl, byte[esi]
mov byte[edi], bl
inc esi
inc edi
mov bl, byte[esi]
mov byte[edi], bl
inc esi
inc edi
mov bl, byte[esi]
mov byte[edi], bl
inc esi
sub edi, 5
loop x_loop
pop edi
pop edx
pop ebx
pop esi
pop ecx
pop ebp
ret
如果我只编辑那一节:
mov eax, edx
mov ecx, edx
mov ebx, 3
mul ebx
add edi, eax
sub edi, 3
对此:
mov eax, edx
mov ebx, 3
mul ebx
mov ecx, edx
add edi, eax
sub edi, 3
这是无效的。我认为这在逻辑上是一样的,但是如果第一个版本是正确的,而第二个版本不是正确的,那么你会推荐哪一个带有图形界面(Linux)的调试器呢?
我会感谢你的建议。
发布于 2014-02-10 16:41:44
MUL EBX
将产品存储在EDX:EAX
中,所以当您将MOV ECX,EDX
放在MUL
之后时,您将在ECX
中获得产品的32位,而不是宽度。
https://stackoverflow.com/questions/21682617
复制相似问题