Консультация № 174697
30.11.2009, 02:31
0.00 руб.
0 11 0
Здраствуйте Уважаемые эксперты. Пишу 32-разрядную программу.
Код:
.386
.model flat
.code
start:
mov eax, 0000Fh
mov ebx, 007C8h
add eax,ebx
push eax
mov ah,4ch
int 21h
end start

Использую 32-разрядный TASM. Компилирую - TASM32, а затем TLINK32. Все нормально. ошибок не обнаруживает.
Но при открытии программа сразу закрывается из-за ошибки и предлагает отправлять или не отправлять отчет.
В чем может быть проблема?

При компиляции на 16-разрядном ассемблере выдает следующее:
Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International
Fatal: Bad object file record in module Z5.ASM near module file offset 0x000000DD

Обсуждение

давно
Посетитель
7438
7205
30.11.2009, 09:15
общий
Приведите команды вызова TASM-a и TLINK--а
Очень подозреваю, что Вы делали 32-битную программу под Windows
В которой int 21h неминуемо приведет к краху...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
30.11.2009, 12:10
общий
помоему flat модель для программ либо под windows, либо под расширитель DOS.
давно
Посетитель
7438
7205
30.11.2009, 12:20
общий
Airyashov:
Совершенно верно. Так понял, что под windows и писалось.
Вот только про то, что int 21h уже нельзя использовать, забыли...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
30.11.2009, 20:11
общий
Команды вызова и результат:
Код:
E:\Tasm5Plus\BIN>tasm32 pr
Turbo Assembler Version 5.0 Copyright (c) 1988, 1996 Borland International

Assembling file: pr.ASM
Error messages: None
Warning messages: None
Passes: 1

E:\Program Files\TASM5Plus\BIN>tlink32 z5
Turbo Link Version 1.6.71.0 Copyright (c) 1993,1996 Borland International

Так что, возможно 32-разрядную программу создать используя при этом и другие модели памяти?
Я пишу под DOS программу.
Возможно компилятор у меня не правильно работает...
Если это может от этого зависето то, пожалуйста, можете дать ссылку на компилятор, который сможет данный код скомпилировать и запустить?



Неизвестный
30.11.2009, 20:13
общий
На всякий случай - вот МАР файл, который был создан.
Может в карте можно определить, что могло пойти не так...
Код:
Start         Length     Name                   Class
0001:00000000 000000011H _TEXT CODE
давно
Посетитель
7438
7205
01.12.2009, 09:50
общий
Поставьте другую модель памяти, например
.model small
Модель flat предназначена для программ под windows.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
01.12.2009, 13:46
общий
Поставил -
.model small
Теперь при компиляции выдает:
E:\Program Files\TASM5Plus\BIN>tlink32 pr
Turbo Link Version 1.6.71.0 Copyright (c) 1993,1996 Borland International
Fatal: 16 bit segments not supported in module pr.ASM
Неизвестный
01.12.2009, 13:47
общий
а простой tlink не работает?
давно
Посетитель
7438
7205
01.12.2009, 14:10
общий
Используйте tlink с ключем /3 и будем Вам счастье
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
01.12.2009, 21:41
общий
Лысков Игорь Витальевич:
Что-то не выходит...
А где именно его писать в строке:
tlink32 pr?
давно
Посетитель
7438
7205
02.12.2009, 01:19
общий
Да не tlink32, а
tlink /3 pr
Еще раз! tlink32 используется для сборки программ для Windows! Для ДОС только tlink!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа