Я пытался получить следующий код ассемблера для компиляции в emu8086:
isXtY - это забавный c, который возвращает беззнаковое целое и передается два параметра:
isXgtY_Unsignedint PROC loc_40109A:DWORD, loc_401098:DWORD
push ebp
mov ebp, esp
push ecx
mov eax, [ebp + 0Ch]
shr eax, 1
mov[ebp - 4], eax
mov ecx, [ebp + 8]
cmp ecx, [ebp + 0Ch]
jbe short loc_401098
mov al, 1
jmp short loc_40109A
xor al, al
mov esp, ebp
pop ebp
retn
и вот моя основная функция:
mov edx, [ebp - 14h]
push edx
mov eax, [ebp - 10h]
push eax
call isXgtY_UnsignedInt
add esp, 8
mov [ebp - 17h], al
movzx ecx, [ebp - 17h]
push ecx
mov edx, [ebp - 14h]
push edx
mov eax, [ebp - 10h]
push eax
push offset aQ1DQ2DResult_0
call printf
add esp, 10h
Я попытался отформатировать код следующим образом:
.model flat
; PUBLI C _add_3
_TEXT SEGMENT
. Код
isXgtY_Unsignedint PRO C loc_40109A: DWORD, loc_401098: DWORD
push ebp
mov ebp, esp
push ecx
mov eax, [ebp + 0Ch]
shr eax, 1
mov[ebp - 4], eax
mov ecx, [ebp + 8]
cmp ecx, [ebp + 0Ch]
jbe short loc_401098
mov al, 1
jmp short loc_40109A
xor al, al
mov esp, ebp
pop ebp
retn
1022 *
начало:
mov edx, [ebp - 14h]
push edx
mov eax, [ebp - 10h]
push eax
call isXgtY_UnsignedInt
add esp, 8
mov [ebp - 17h], al
movzx ecx, [ebp - 17h]
push ecx
mov edx, [ebp - 14h]
push edx
mov eax, [ebp - 10h]
push eax
push offset aQ1DQ2DResult_0
call printf
add esp, 10h
конец начала
_TEXT ENDS
END; Директива END требуется в конце файла
Однако вместо компиляции она возвращает ошибку «неправильные параметры: PU SH ebp». Любая помощь с этим будет принята с благодарностью ...