Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2008, 15:58   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Правильная работа из под Win с прерываниями в МАСМ

Позволю себе понадоедать наверное заежженным вопросом. Поскольку асм у меня еще на стадии изучения то всего не знаю. Вот стало интересно вспомнить работу с прерываниями. Нашел литературку читаю.

Там есть пример:
Код:
CSEG segment
org 100h
_Begin:
    mov ah,04Ch
    int 21h
    ret
CSEG ends
end _Begin
типа просто программа сразу закрывается.
Но под виндой вызов прерывания ведет куда-то в Exception-обработчик

Вопрос: Как правильно в МАСМ делать приложения, работающие с прерываниями? Вроде как нельзя с прерываниями работать, но как тогда работают старые бейсиковские программы, в которых целый набор ДОС прерываний.
Может компилить как то нужно.

В общем не откажусь от обьяснений и ссылок по этому поводу.

...А еще на всякий пожарный добавлю что работа ведется в ring3
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.06.2008, 16:05   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Ну так программа-то под Win32? Тогда GetSystemTime/GetLocalTime/GetTickCount/INT 2AH
--------
P.S. Int 21h под виндами - пустой гейт, потому exception и поднимается.

Последний раз редактировалось B_N; 06.06.2008 в 16:08. Причина: Уточнил. не просто Windows, а Win32
B_N вне форума Ответить с цитированием
Старый 06.06.2008, 16:15   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А старие программы то как работают? Кто-то ж их эмулирует?

Вот TP7 то это вот:
Код:
var s:string;
begin
s:='123456$';
 asm
 xor ax,ax
 mov ah,9
 lea dx,s
 int 21h
 end;
 readln;
end.
компилит путево и выполняется нормально.
I'm learning to live...

Последний раз редактировалось Stilet; 06.06.2008 в 16:34.
Stilet вне форума Ответить с цитированием
Старый 06.06.2008, 16:34   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Кто-то ж их эмулирует?
DOS - подсистема NTVDM.EXE. А под Win32 прерывания выглядят вот так: (по "материалам" WinDbg.exe)

Цитата:
lkd> !idt -a

Dumping IDT:

00: 804df350 nt!KiTrap00
01: 8376a01d
02: Task Selector = 0x0058
03: 8376a03c
04: 804dfa20 nt!KiTrap04
05: 804dfb81 nt!KiTrap05
06: 804dfd02 nt!KiTrap06
07: 804e036a nt!KiTrap07
08: Task Selector = 0x0050
09: 804e078f nt!KiTrap09
0a: 804e08ac nt!KiTrap0A
0b: 804e09e9 nt!KiTrap0B
0c: 804e0c42 nt!KiTrap0C
0d: 804e0f38 nt!KiTrap0D
0e: 8376a07a
0f: 804e197c nt!KiTrap0F
10: 804e1a99 nt!KiTrap10
11: 804e1bce nt!KiTrap11
12: Task Selector = 0x00A0
13: 804e1d34 nt!KiTrap13
14: 804e197c nt!KiTrap0F
15: 804e197c nt!KiTrap0F
16: 804e197c nt!KiTrap0F
17: 804e197c nt!KiTrap0F
18: 804e197c nt!KiTrap0F
19: 804e197c nt!KiTrap0F
1a: 804e197c nt!KiTrap0F
1b: 804e197c nt!KiTrap0F
1c: 804e197c nt!KiTrap0F
1d: 804e197c nt!KiTrap0F
1e: 804e197c nt!KiTrap0F
1f: 804e197c nt!KiTrap0F
20: 00000000
21: 00000000
22: 00000000
23: 00000000
24: 00000000
25: 00000000
26: 00000000
27: 00000000
28: 00000000
29: 00000000
2a: 804deb92 nt!KiGetTickCount
2b: 804dec95 nt!KiCallbackReturn
2c: 804dee34 nt!KiSetLowWaitHighThread
2d: f38c7b5c *** ERROR: Module load completed but symbols could not be loaded for \SystemRoot\System32\Drivers\DbgMsg .SYS
DbgMsg+0xB5C
2e: 804de631 nt!KiSystemService
2f: 804e197c nt!KiTrap0F
30: 806f2d50 hal!HalpClockInterrupt
31: 8356d48c i8042prt+0x495 (KINTERRUPT 8356d450)
32: 804ddd04 nt!KiUnexpectedInterrupt2
33: 8265d5c4 serial+0xA30 (KINTERRUPT 8265d588)
34: 8265b5c4 serial+0xA30 (KINTERRUPT 8265b588)
35: 804ddd22 nt!KiUnexpectedInterrupt5
36: 804ddd2c nt!KiUnexpectedInterrupt6
37: 804ddd36 nt!KiUnexpectedInterrupt7
38: 806ecef0 hal!HalpProfileInterrupt
39: 83783634 ACPI+0xB31E (KINTERRUPT 837835f8)
USBPORT!USBPORT_RegisterUSBPortDriv er+0x20C8 (KINTERRUPT 83560978)
portcls!KsoGetIrpTargetFromIrp+0x7E 0 (KINTERRUPT 83579220)
3a: 834b7bfc NDIS!NdisCompletePnPEvent+0xF2 (KINTERRUPT 834b7bc0)
3b: 83564374 VIDEOPRT!VideoPortDebugPrint+0x172 (KINTERRUPT 83564338)
3c: 83443dd4 i8042prt+0x7D80 (KINTERRUPT 83443d98)
3d: 804ddd72 nt!KiUnexpectedInterrupt13
3e: 83780044 Unknown_Module_f75d1000+0x55E0 (KINTERRUPT 83780008)
3f: 8377fcc4 Unknown_Module_f75d1000+0x55E0 (KINTERRUPT 8377fc88)
40: 804ddd90 nt!KiUnexpectedInterrupt16
41: 804ddd9a nt!KiUnexpectedInterrupt17
42: 804ddda4 nt!KiUnexpectedInterrupt18
43: 804dddae nt!KiUnexpectedInterrupt19
...................
...................
И т.д.
первые 32 за интелом, 20-29 - свободные гейты, 2A-2F - программные WinNT, а дальше HAL, драйвера и куча ничего не делающих, но занятых вплоть до FF. Кроме того, для вызова из определённого кольца в гейте должно стоять разрешение на вызов не ниже, чем из этого кольца.
B_N вне форума Ответить с цитированием
Старый 06.06.2008, 16:47   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Интересно как же тогда паскаль компилит...?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.06.2008, 17:01   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Интересно как же тогда паскаль компилит...?
Так и компилит. В код для DOS. Который потом работает под NTVDM...
B_N вне форума Ответить с цитированием
Старый 06.06.2008, 17:06   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм. Я кажись начинаю понимать.
Теперь скажи пожалуйста как откомпиленый в МАСМ код запустить из под NTVDM?

Как его оформлять я понял, но как запустить из командной строки?

Например такое:
Код:
	.386
	.model flat

.data
;_______________

Caption			db "Form$"
;_______________
.code
_start:
 xor ax,ax
 mov ah,9
 lea dx, Caption
 int 21h
 ret
end _start
компилится, но если пишу в CMD "NTVDM <тот Экзе файл который скомпилился>" Ничего не происходит. Может код у меня кривой?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.06.2008, 17:36   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Stilet, ну так экзешник-то линкуется под Win32, линкером link32.exe (он, кажется вообще под ДОС линковать не умеет, давно таким извратом не занимался , не помню точно по версиям MASMa, сейчас сам смотрю его ключи). Можно поискать старый линкер...
А вот это:
Цитата:
CMD "NTVDM <тот Экзе файл который скомпилился>"
вообще никакого смысла не имеет. Тип загружаемого имиджа определяется автоматом и соответственно запускается или напрямую, или через подсистему, будь то OS/2, DOS или UNIX.


-----------------------------

Вот, кажется, старый линкер: ftp://ftp.microsoft.com/softlib/mslfiles/lnk563.exe

Последний раз редактировалось B_N; 06.06.2008 в 17:47.
B_N вне форума Ответить с цитированием
Старый 09.06.2008, 09:27   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
экзешник-то линкуется под Win32, линкером link32.exe
Ы-ы-ы-ы... Вполне возможно... Ну ладно, если под ДОС писать надумаю возьму обычный паскаль.

В общем спасибо за ответы. Думаю тема исчерпана.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2008, 20:05   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ы-ы-ы-ы... Вполне возможно...
Да точно, точно.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну ладно, если под ДОС писать надумаю возьму обычный паскаль.
Не обязательно. Можно взять просто старый масм, вроде пятого. Он замечательно компилирует и линкует под ДОС.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильная организация класса для работы с таблицей mysql Choo PHP 10 08.08.2008 08:55
Правильная программа? Надюха Помощь студентам 10 28.09.2007 14:40