Вопрос № 40052: Скажите как мне аткампелировать программку в masm32 что дописывать в batch
В тасм я знаю вот .
tasm32 /ml messbox.asm
tlink32 /Tpe /aa /c messbox.obj /o import32.lib
.386
.model flat, stdcall
extrn MessageBoxA:PROC
extrn...Вопрос № 40090: Уважаемые эксперты, я читаю информацию из файла в память с помощью функции 3Eh прерывания 21h. Я хочу загружать файл целиком, но размер файла у меня будет не постоянен. Как известно CX должен содержать количество байт читаемых в память. И у меня тако...Вопрос № 40093: Здравствуйте!
Пожалуйста, скажите.
Насколько я знаю существует 256 прерываний. У каждого прерывания существуют свои функции. Есть прерывания DOS, есть BIOS.
Каждое прерывание имеет свой номер и каждая функция тоже.
Пожалуйста!
Мн...
Вопрос № 40.052
Скажите как мне аткампелировать программку в masm32 что дописывать в batch
В тасм я знаю вот .
tasm32 /ml messbox.asm
tlink32 /Tpe /aa /c messbox.obj /o import32.lib
.386
.model flat, stdcall
extrn MessageBoxA:PROC
extrn ExitProcess:PROC
.data
mb_text db 'Hello, World!',0
mb_title db 'My first program',0
.code
start:
push 0
push offset mb_title
push offset mb_text
push 0
call MessageBoxA
push 0
call ExitProcess
ends
end start
Отправлен: 12.04.2006, 02:16
Вопрос задал: CriCket (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
; подключаемые библиотеки
includelib user32.lib
includelib kernel32.lib
; используемые функции
MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
ExitProcess PROTO :DWORD
.data
mb_text db 'Hello, World!',0
mb_title db 'My first program',0
.code
start:
push 0
push offset mb_title
push offset mb_text
push 0
call MessageBoxA
push 0
call ExitProcess
end start
--------- ЮЗВЕРЬ!! ЮЗВЕРЮ!....
Ответ отправил: Joy~ (статус: 5-ый класс)
Ответ отправлен: 12.04.2006, 07:41 Оценка за ответ: 5
Вопрос № 40.090
Уважаемые эксперты, я читаю информацию из файла в память с помощью функции 3Eh прерывания 21h. Я хочу загружать файл целиком, но размер файла у меня будет не постоянен. Как известно CX должен содержать количество байт читаемых в память. И у меня такой вопрос: какой процедурой в программе я могу получать размер файла, который мне предстоит прочитать, что бы не вводить СХ каждый раз вручную?
Отвечает: Евгений Иванов
Здравствуйте, Фишер Денис Александрович!
Используй передвижку указателя файла в конец оного при помощи функции 42h.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +79087645721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214;88;90;76 ---- Ответ отправлен: 12.04.2006, 13:57
Отвечает: Joy~
Здравствуйте, Фишер Денис Александрович!
Читать информацию из файла в память Функция 3Fh int 21h а не 3Eh (Закрыть описатель файла).
;**********************************************************
Функция 42h int 21h
Вход - AH=42h
BX=описатель файла
CX:DX - на сколько передвинуть указатель: (CX*65536)+DX
AL=0 переместить к началу файла +CX:DX
1 переместить к текущей позиции + CX:DX
2 переместить к концу файла + CX:DX
Выход - AX=код ошибки если CF установлен
DX:AX - новая позиция указателя файла.
;*************************************************************
Вызовите AL=2, CX=0, DX=0
На выходе получите DX:AX
ФОрмула расчёта такая (DX*65536)+AX
Удачи!
--------- ЮЗВЕРЬ!! ЮЗВЕРЮ!....
Ответ отправил: Joy~ (статус: 5-ый класс)
Ответ отправлен: 12.04.2006, 14:29
Для этого ты должен использовать функцию 42h прерывания 21h:
AX = 4202h
BX = file handle
CX = DX = 0
После выполнения этой функции указатель файла будет установлен в конец, а в регистрах DX:AX будет возвращено его новое значение, т.е. размер файла.
Только учти, что размер файла в MS DOS может достигать 4Гб, в то время как функция считывания блока данных не может одновременно считывать больше 65535 байт. Поэтому ты должен все равно считывать свой файл блоками. Рекомендую использовать буфер 32Кб. Тогда после получения размера файла ты сможешь определить число операций по считыванию буфера с помощью сдвига значений в DX:AX вправо на 15 разрядов, а размер последнего куска с помощью операции and AX, 07FFFh
Приложение:
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик) Россия, Санкт-Петербург ICQ: 5163321 ---- Ответ отправлен: 12.04.2006, 14:31
Отвечает: Пан Павел Константинович
Здравствуйте, Фишер Денис Александрович!
Есть n-ое колличетсво получения размера файла НО! давайте расмотрим самый простой Вот код:
mov ax,3d00h ;функция открытия файла
lea dx,NF ;имя файла
int 21h
mov bx,ax ;сохраняем описатель файла для функции ah=42h, int 21h
;Получим размер файла
mov ax,4202h ;функция получения размера файла
xor dx,dx ;dx = 0
mov cx,dx ;cx = 0
int 21h
;Теперь длинна файла находится в DX:AX
ret ;Exit
NF db "NAT.TXT",0 ;Имя файла
ret
CSEG ends
end Begin
Этот метод заключается в функции ah = 42h, прерывания int 21h вот её характеристики:
Вызов этой функции с AL = 2, CX = DX = 0 приведет к получению длинны файла в DX:AX.
С, Уважением MnEm0n!C.
--------- Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: 6-ой класс)
Ответ отправлен: 12.04.2006, 23:38
Отвечает: Валерий Анатольевич
Здравствуйте, Фишер Денис Александрович!
Определить размер файла можно функцией 2fh определения DTA прерывания int 21h. Вот маленький пример.
Приложение:
Ответ отправил: Валерий Анатольевич (статус: 1-ый класс)
Ответ отправлен: 13.04.2006, 00:36
Вопрос № 40.093
Здравствуйте!
Пожалуйста, скажите.
Насколько я знаю существует 256 прерываний. У каждого прерывания существуют свои функции. Есть прерывания DOS, есть BIOS.
Каждое прерывание имеет свой номер и каждая функция тоже.
Пожалуйста!
Мне нужны все прерывания с их функциями (все) и хоть какое-нибудь объяснение.
Желательно примеры использования (если нет, не беда).
И еще:
Чтобы обратиться к графической карточке, существует функция 0В800h, но эта функция позволяет использовать сегмент дисплея в текстовом режиме. Какие функции позволяют использовать туже граф.карту более широко? Вплоть до написания драйвера для нее?
Какие функции, каких прерываний позволяют обращаться к железу?
И в самом железе тоже можно ведь обращаться к составным частям устройства (у модема, например, к портам ввода-вывода и т.д.) ну понятно, что мне нужно?
И еще у кого-нибудь есть исходники DOSa и BIOSa? Желательно чем старее, тем лучше.
В случае, если тема ответа слишком большая, посоветуйте ресурсы и где они лежат.
ПОЖАЛУЙСТА! ПОЖАЛУЙСТА! ПОЖАЛУЙСТА! ПОЖАЛУЙСТА! ПОЖАЛУЙСТА!
Отправлен: 12.04.2006, 15:00
Вопрос задал: Retcom (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Boriss
Здравствуйте, Retcom!
Это самое полное описание прерываний:
http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/
К графическому экрану можно обращать по сегменту A000
Обширнее - формат VESA, если по старинному, можно посмотреть на
http://www.codenet.ru/progr/video/
и там же
http://www.codenet.ru/progr/video/egavga/
Можно сходить на сайт "Компьютерная графика" http://graphics.cs.msu.ru/courses/cg2000s/index.html
По ОС можно посмотреть на
http://oss.h1.ru/default.php?page=buses/pci
и море всего на
www.wasm.ru
--------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор) Россия, Саранск Организация: факультет Электронной техники, Мордовский госуниверситет Адрес: г. Саранск WWW:Программирование на Паскале ---- Ответ отправлен: 12.04.2006, 16:54
Отвечает: Пан Павел Константинович
Здравствуйте, Retcom!
Вот ссылка:
http://www.kalashnikoff.ru/Assembler/prog/
--------- Hello Worlds
Ответ отправил: Пан Павел Константинович (статус: 6-ой класс)
Ответ отправлен: 12.04.2006, 23:44