radasm
хочу простенькую прогу написать на асме...
что то типа такого...
<br />
kl: mov ah,01h<br />
int 16h<br />
jz kl<br />
mov ah,0<br />
int 16h<br />
cmp al, 27<br />
jz kl1<br />
,
но ничего не выходит... создаю консольный проект на радасме он мне просто выкидывает окно и быстро его закрывает..., а если я выбираю досовский проект под ексе то при компиляции он мне выдает что у меня в папке БИН не хватает файла doslnk... где я его уже не искал... (всмысле в инете) нигде нет... помогите...
ЗЫ: на emu8086 переходить не хочу... привык к радасму...
9 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментаріввсе понял... спасибо...
имеется ввиду user mode.
console application — это win32 приложение и ни каких аппаратных прерываний в нем быть не может.
Что значит фигня? Линкёр попытается к досовскому экзешнику присобачить виндовые DLL. И ты определись что ты хочешь, консольное виндовое (тогда используй, как правильно сказал strelok flat модель и стек не нужен), если досовское, так ты сказал, что оно работает, в чём тогда проблема? Только виндовое приложение будет падать, это нормально для твоего кода, ибо досовские приложения работают под виндой в виртуальной машине, а если ты компилишь NE/PE exe, то оно работает без виртуальной машины и вызов прерываний ни к чему хорошему не приведёт, т.к. будут работать хэндлеры и трапы Windows. Даже если вызвать прерывание BIOS, то ты будешь выполнять 16 битовый код в 32 битовом режиме процессора, что, естественно, рано или поздно закончится segmentation fault/invalid opcode.
могу ошибаться, но помоему, виндовс все прерывания (int 10h, int 16h и тд) как-то по своему определяет и работает с ними только ей известным образом (имеет место быть начиная с win2000). А вообще пользуйтесь эмуляторами или грузитесь с дискетки в голый ДОС, там можно все.
если ты про библиотеки то это я с предыдущей проги не убрал... эт фигня... определил стек, модель указал смол...но все равно при запуске окно просто врубается и вырубается... (хотя если выбрать Дос aplication, а не console aplication то все работает, но хочу тут разобратся...) в дебагере оно просто висне на первом биосовском перерывании и на ввод с клавы символа не отвечает...
для DOS’a юзаем старый MASM.
А зачем ты для досовского режима подключаешь виндовые определения? Если ты хочешь именно.exe’шник, то определи стек.stack 2048 для начала. Модель указана tiny — это для комбинированного кода и данных -.com, если мне память не изменяет, то для.exe нужно использовать модели small, compact, large. Попробуй для начала скомпилировать masm’ом без среды, а в command line. Да, и в конце iret — это некошерно, ret/retf.
The installation prozess is easy. After installation you will get the folder masm32 on a hard disc. The file lnk563.exe is a selfextracting archive just unpack them. You will get the files: cvpack.exe, link.exe, readme.txt. Rename the file link.exe in doslnk.exe and than copy this file in folder \masm32\bin.
вот... если скачать где то lnk563.exe распаковать ипереименовать файл то можно компилить ексешные дос проги..., но я не пойму почему у меня не компилит простой консольный проект
.386.model tiny, stdcall
option casemap: none
includelib kernel32.lib
includelib user32.lib
include kernel32.inc
include user32.inc
include windows.inc
.data
.code
start:
kl: mov ah, 01h
int 16h
jz kl
mov ah, 0
int 16h
cmp al, 27
jz kl1
mov ah, 09h
mov bh, 00h
mov cx, 01h
int 10h
mov ah, 03h
mov bh, 00h
mov bl, 17h
int 10h
inc dl
mov ah, 2
int 10h
jmp kl
kl1: iret
end start
оно просто выкидывает окно и сразу его закрывает...