Проблема в том, когда я создаю 32-разрядный application.exe. Я получаю приложение с 16-разрядным машинным кодом.Создание 16-битного кода вместо 32-разрядного в MASM
Вот код (взято из книги):
.386
.model flat
.const
URL db "http://www.lionking.org/`cubbi/", 0
.code
_start:
xor ebx, ebx
push ebx
push ebx
push ebx
push offset URL
push ebx
push ebx
; call ShellExecute
push ebx
; call ExitProcess
end _start
Для построения приложения я пишу в консоли
- мл winurl.asm (я пробовал мл/с winurl.asm но нет другого результата)
- ссылки winurl.obj
Тогда у меня есть исполняемый файл с 16-битной машиной код:
PU = ?86, Uirtual 8086 Mode, Id/Step = 0F62, A20 enabled
09E4:0000 33DB XOR BX,BX
09E4:0002 53 PUSH BX
09E4:0003 53 PUSH BX
09E4:0004 53 PUSH BX
09E4:0005 680000 PUSH 0000h
09E4:0008 0000 ADD [BX+SI],AL
09E4:000A 53 PUSH BX
09E4:000B 53 PUSH BX
09E4:000C 53 PUSH BX
09E4:000D 0000 ADD [BX+SI],AL
09E4:000F 006874 ADD [BX+SI+74h],CH
09E4:0012 7470 JZ Short 0084
Мне не нужен надлежащим образом действующий код. Я просто хочу собрать приложение с 32-битным кодом или я хочу понять, что я делаю неправильно.
Благодарим вас за внимание.
Вы уверены, что это не просто ваш дизассемблер, который неправильно интерпретирует исполняемый файл? Что делать, если вы открываете файл, например. PE Explorer? – Michael
@ Майкл, я уже разобрал свою другую программу, которая правильно работала с тем же ассемблером и отладчиком (masm611 и Debug32, соответственно). Неправильный машинный код. Это проблема. – gencurrent
Нет, машинный код для 'push bx' и' push ebx' точно такой же. Разница заключается в ожидании того, какой сегмент кода он будет загружен. –