我正在制作一个小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)?
我会感谢任何建议。
答案 0 :(得分:0)
MUL EBX
将产品存储在EDX:EAX
中,因此当您在MOV ECX,EDX
后MUL
放置ECX
产品的高32位时而不是宽度。