Компиляция x86 кода сборки Intel Syntax в emu8086 - PullRequest
0 голосов
/ 03 апреля 2020

Я пытался получить следующий код ассемблера для компиляции в 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». Любая помощь с этим будет принята с благодарностью ...

...