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 переходить не хочу... привык к радасму...

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Ctrl + Enter
Ctrl + Enter
strelok

все понял... спасибо...

хотя если выбрать Дос aplication, а не console aplication то все работает, но хочу тут разобратся...

console application — это win32 приложение и ни каких аппаратных прерываний в нем быть не может.

если ты про библиотеки то это я с предыдущей проги не убрал... эт фигня... определил стек, модель указал смол...но все равно при запуске окно просто врубается и вырубается... (хотя если выбрать Дос aplication, а не console aplication то все работает, но хочу тут разобратся...) в дебагере оно просто висне на первом биосовском перерывании и на ввод с клавы символа не отвечает...

Что значит фигня? Линкёр попытается к досовскому экзешнику присобачить виндовые DLL. И ты определись что ты хочешь, консольное виндовое (тогда используй, как правильно сказал strelok flat модель и стек не нужен), если досовское, так ты сказал, что оно работает, в чём тогда проблема? Только виндовое приложение будет падать, это нормально для твоего кода, ибо досовские приложения работают под виндой в виртуальной машине, а если ты компилишь NE/PE exe, то оно работает без виртуальной машины и вызов прерываний ни к чему хорошему не приведёт, т.к. будут работать хэндлеры и трапы Windows. Даже если вызвать прерывание BIOS, то ты будешь выполнять 16 битовый код в 32 битовом режиме процессора, что, естественно, рано или поздно закончится segmentation fault/invalid opcode.

могу ошибаться, но помоему, виндовс все прерывания (int 10h, int 16h и тд) как-то по своему определяет и работает с ними только ей известным образом (имеет место быть начиная с win2000). А вообще пользуйтесь эмуляторами или грузитесь с дискетки в голый ДОС, там можно все.


виндовые определения

если ты про библиотеки то это я с предыдущей проги не убрал... эт фигня... определил стек, модель указал смол...но все равно при запуске окно просто врубается и вырубается... (хотя если выбрать Дос aplication, а не console aplication то все работает, но хочу тут разобратся...) в дебагере оно просто висне на первом биосовском перерывании и на ввод с клавы символа не отвечает...

masm32 вообще не предназначен для сборки DOS гуана и поддерживает только win32, а значит и model только flat.

для 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

оно просто выкидывает окно и сразу его закрывает...

Підписатись на коментарі