你可以先把它改写成C代码:
struct t {
int i;
int n;
char image[2];
};
_stdcall void BMPfun(struct t **s)
{
char *image = (char *)&(*s)->image;
int i = *(int *)&image[18];
int j = (i * 3 + 3) & -4;
int k = *(int *)&image[22];
int m = k / 2;
for (int n1 = 0; n1 < m; n1++)
{
for (int n2 = 0; n2 < j; n2++)
{
int t = image[j * n1 + n2 + 54];
image[j * n1 + n2 + 54] = image[j * (k - n1 - 1) + n2 + 54];
image[j * (k - n1 - 1) + n2 + 54] = t;
}
}
}
然后用C的编译器输出汇编代码:
.file "0.c"
.intel_syntax noprefix
.text
.globl _BMPfun@4
.def _BMPfun@4; .scl 2; .type 32; .endef
_BMPfun@4:
push ebp
mov ebp, esp
push edi
xor edi, edi
push esi
mov esi, 2
push ebx
sub esp, 20
mov eax, DWORD PTR [ebp+8]
mov DWORD PTR [ebp-16], 0
mov ebx, DWORD PTR [eax]
mov eax, DWORD PTR [ebx+26]
lea ecx, [eax+1]
mov eax, DWORD PTR [ebx+30]
lea ecx, [ecx+ecx*2]
and ecx, -4
cdq
idiv esi
mov DWORD PTR [ebp-32], eax
mov eax, DWORD PTR [ebx+30]
dec eax
imul eax, ecx
mov DWORD PTR [ebp-24], eax
L2:
mov edx, DWORD PTR [ebp-32]
cmp DWORD PTR [ebp-16], edx
jge L1
mov eax, DWORD PTR [ebp-24]
lea esi, [edi+ebx]
mov DWORD PTR [ebp-20], 0
lea edx, [eax+ebx]
L5:
inc esi
inc edx
cmp DWORD PTR [ebp-20], ecx
jge L8
mov al, BYTE PTR [esi+61]
inc DWORD PTR [ebp-20]
mov BYTE PTR [ebp-25], al
mov al, BYTE PTR [edx+61]
mov BYTE PTR [esi+61], al
mov al, BYTE PTR [ebp-25]
mov BYTE PTR [edx+61], al
jmp L5
L8:
inc DWORD PTR [ebp-16]
add edi, ecx
sub DWORD PTR [ebp-24], ecx
jmp L2
L1:
add esp, 20
pop ebx
pop esi
pop edi
pop ebp
ret 4
.ident "GCC: (x86_64-posix-seh, Built by MinGW-Builds project) 11.4.0"
最后修改一下,让它能放到易语言中运行,结果得到的就是你说的汇编代码:
置入代码 ( { 49, 255, 190, 2, 0, 0, 0, 131, 236, 20, 139, 69, 8, 199, 69, 240, 0, 0, 0, 0, 139, 24, 139, 67, 26, 141, 72, 1, 139, 67, 30, 141, 12, 73, 131, 225, 252, 153, 247, 254, 137, 69, 224, 139, 67, 30, 72, 15, 175, 193, 137, 69, 232, 139, 85, 224, 57, 85, 240, 125, 56, 139, 69, 232, 141, 52, 31, 199, 69, 236, 0, 0, 0, 0, 141, 20, 24, 70, 66, 57, 77, 236, 125, 23, 138, 70, 61, 255, 69, 236, 136, 69, 231, 138, 66, 61, 136, 70, 61, 138, 69, 231, 136, 66, 61, 235, 226, 255, 69, 240, 1, 207, 41, 77, 232, 235, 192, 201, 194, 4, 0
} )