Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz

07.02.2008, 02:38
|
|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
Провел на форуме: 1740746
Репутация:
435
|
|
зайдите на lab29a... возьмите лучший образец и "думайте"
это я все просматрела. На счет доса и много задачности.
Я в замешательстве. Есть разница между графическим и текстовым режимом?
а то вот тут я наблюдаю много задачность Manuet OS v0.78. 
под Fat 12 так е на флопике. Имеет возможность запускать файлы и работать с ними не зависимо от адресного пространства. И там и у меня система 32-х битная.
Со всей симпатией за помощь в развитии моих знаний Delimiter но как это понимать?
А Dos и есть и был однозадачный. Там и ядра то не было.... и у тебя не будет!
Как раз таки через прерывание эти действия и производяться, вот только я пока не могу понять как.
PS: DOS -дисковая операционная система, не все они однозадачные:-)
Многозадачная, многопользовательская операционная система DOS-Line
В реальном режиме мы имеем 640Kb памяти - 10 сегментов по 64Kb. В первый сегмент лучше не соваться - эта область BIOS. Для простоты предположим, что каждая задача нашей ОС - это COM файл MS-DOS.
COM-программы содержат единственный сегмент (или, во всяком случае, не содержат явных ссылок на другие сегменты). Образ COM-файла считывается с диска и помещается в память, начиная с PSP:0100. Притом COM-программа может использовать множественные сегменты, но она должна сама вычислять сегментные адреса, используя PSP как базу.
В MS-DOS после загрузки двоичного образа:
CS, DS, ES и SS указывают на PSP
SP указывает на конец сегмента PSP (обычно 0fffeH, но может быть и меньше, если полный 64K сегмент недоступен). Слово по смещению 06H в PSP указывает, какая часть программного сегмента доступна.
Вся память системы за программным сегментом распределена программе.
Слово 00H помещено (PUSH) в стек.
IP содержит 100H (первый байт модуля) в результате команды JMP PSP:100
задача при загрузке файла проделать те-же самые действия, что-бы программы ни коим образом не догадывалась об отстутствии ее родной ОС.
Предположим, что каждая COM-программа занимает в памяти один сегмент.
18.2 раза в секунду приходит аппаратное прерывание, и процессор отвлекается на выполнение некоторой процедуры - восьмого прерывания (int 08h). При этом он сохраняет в стеке регистр флагов (PUSHF), и регистры указывающие на текущую команду (CS:IP) (PUSH CS, PUSH IP). Всего 6 байт. После окончания аппаратного прерывания эти регистры восстанавливаются и основная программа продолжает свое выполнение.
Задача, состоит в том, чтобы во время выполнения прервания подменять стек таким образом, что-бы после восстановления регистров выполнялась другая программа, находящаяяся в памяти.
При наилучшем раскладе возможна загрузка восьми задач - 640Kb/64Kb=10, то есть всего имеем десять сегментов - один под переменные DOS, и один под ядро, вот и остается только восемь.
|
|
|

11.02.2008, 00:02
|
|
Познающий
Регистрация: 20.12.2007
Сообщений: 36
Провел на форуме: 71113
Репутация:
20
|
|
так ничего и не удалось разобрать самому. могу разве что сослаться но постоянную смену редакторов ресурсов каждым из которых двигала мания величия в виде вставки своих копирайтов в коментах и юзанием хз каких библиотек. вообщем на данный момент остановился на ResEd. поскольку у мене не получилось самому то остается один очень надежный вариант. ткните меня носом в правильны ответ.
вот полный текст и программы и ресурсов.
Код:
.386
.model flat,stdcall
option casemap:none
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
;DlgName db "MyDialog",0
AppName db "First",0
.data?
hInstance HINSTANCE ?
.const
IDM_EXIT equ 32003
IDD_DLG2 equ 1000
IDC_RED1 equ 1001
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, IDD_DLG2, NULL, ADDR DlgProc, NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
invoke GetDlgItem, hWnd, IDC_RED1
invoke SetFocus,eax
.ELSEIF uMsg==WM_CLOSE
invoke SendMessage, hWnd, WM_COMMAND, IDM_EXIT, 0
.ENDIF
mov eax,TRUE
ret
DlgProc endp
end start
Код:
#define IDD_DLG2 1000
#define IDC_RED1 1001
IDD_DLG2 DIALOGEX 5,5,65,13
CAPTION "IDD_DLG"
FONT 10,"MS Sans Serif",400,0,204
STYLE 0x10CF0000
BEGIN
CONTROL "IDC_RED",IDC_RED1,"RichEdit20A",0x50010000,1,1,63,11,0x00000200
END
|
|
|

11.02.2008, 00:35
|
|
Участник форума
Регистрация: 08.10.2007
Сообщений: 259
Провел на форуме: 500748
Репутация:
137
|
|
Сразу приношу извенения я только начал изучать языки програмирования не считая скриптов. Решил начать с асемблера.
Посоветте с чего мне начать? где скачать програмное обеспечение для написания программ на асемблере?
я скачал с http://softok.org/coding/debug/13111prog.html Turbo Assembler Shell v.3.00
пробывал запустить простенький код
Код:
.data
msgtext db "Hello, WORLD", 0h
msgcap db "It is ASM!!! =)", 0h
.code
start:
INVOKE MessageBoxA, 0 offset msgtext, offset msgcap, 0
end start
конечно же неполучилось в ошибке пишут
Оut-file not found
какого выходного файла нету я понять немогу. вроде перед запуском проект сохранил.
посоветте пожалусто чтонибть для совсем зелёных. заранее благодарен
|
|
|

11.02.2008, 02:26
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
ZET36
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
invoke GetDlgItem, hWnd, IDC_RED1
invoke SetFocus,eax
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog, hWndn, 0
.ENDIF
xor eax, eax
ret
DlgProc endp
Оконная процедура должна возвращать НОЛЬ. + по событию WM_CLOSE закрываем диалог.
CONTROL "IDC_RED",IDC_RED1,"RichEdit20A",0x50010000,1,1,63 ,11,0x00000200 - тут что-то неправильно!!!
Для примера попробуй заменить на
CONTROL "IDC_RED",IDC_RED1,"edit",0,1,1,63,11
Софт для асма бери на WWW.WASM.RU -> предпочтительно MASM or FASM.
Последний раз редактировалось GlOFF; 11.02.2008 в 02:34..
|
|
|

11.02.2008, 12:55
|
|
Познающий
Регистрация: 20.12.2007
Сообщений: 36
Провел на форуме: 71113
Репутация:
20
|
|
ZET36
думаю для совсем зеленых подойдет вот этот вариант. если что то непонятно могу откоментировать. вот тут прямая ссылка на MASM. в нем я компилировал чего и вам желаю. http://wasm.ru/baixado.php?mode=tool&id=48
Код:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\windows.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
msgtext db "Hello, WORLD", 0h
msgcap db "It is ASM!!! =)", 0h
.code
start:
invoke MessageBox, NULL, addr msgtext, addr msgcap, MB_OK
invoke ExitProcess, NULL
end start
GlOFF
хм.. где же в листинге вы нашли процедуру окна? я наконецто по лазил под отладчиком и наткнулся на то что при вызове диалоговой процедуры сначала ищется ресурс, если он не находится, то и не происходит вызова DialogBoxParam что и происходит у меня. вообщем посмотрел у Iczelion'a и нашел что у него имя ресурса задается ASCI-zero строкой. вообщем это внесло еще больше сумятицы в то что вы сказали что так нельзя. вы не могли бы довести проект до рабочего состояния, если вас не затруднит?
|
|
|

11.02.2008, 13:14
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
TruPAC Вот так попробуй компильнуть ->
PHP код:
.386
.model flat,stdcall
option casemap:none
DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
AppName db "First",0
.data?
hInstance HINSTANCE ?
.const
IDM_EXIT equ 32003
IDD_DLG2 equ 1000
IDC_RED1 equ 1001
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, IDD_DLG2, NULL, ADDR DlgProc, NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
invoke GetDlgItem, hWnd, IDC_RED1
invoke SetFocus,eax
.ELSEIF uMsg==WM_CLOSE
invoke EndDialog, hWndn, 0
.ENDIF
xor eax, eax
ret
DlgProc endp
end start
+
PHP код:
#define IDD_DLG2 1000
#define IDC_RED1 1001
IDD_DLG2 DIALOGEX 5,5,65,13
CAPTION "IDD_DLG"
FONT 10,"MS Sans Serif"
STYLE 0x10CF0000
BEGIN
CONTROL "IDC_RED",IDC_RED1,"edit",0,1,1,63,11
END
TruPAC DlgProc - оконная\диалоговая процедура, обслуживает сообщения приходящие к данному диалогу. Просто щас сравни листинги и найди что изменилось.
|
|
|

11.02.2008, 15:43
|
|
Познающий
Регистрация: 20.12.2007
Сообщений: 36
Провел на форуме: 71113
Репутация:
20
|
|
ё маё... ну сколько ж можно... и так тоже не работает. вроде бы все нормально - проверял на чужих исходниках и все прекрасно собирается, а тут нет. у вас это точно собирается? мб ошибка не только у меня? не обижайтесь, а вдруг? вы можете приатачить файлы? я уже просто с ума схожу - 6 дней возни на стенке кашей и толку 0.
Ps
я всегда различал оконную и диалоговую процедуры.
|
|
|

11.02.2008, 18:02
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме: 1845671
Репутация:
1338
|
|
TruPAC Вот мой рабочий\компилируемый вариант ->
http://webfile.ru/1737398
|
|
|

11.02.2008, 18:19
|
|
Познающий
Регистрация: 20.12.2007
Сообщений: 36
Провел на форуме: 71113
Репутация:
20
|
|
GlOFF
огромное спасибо! оказывается ошибка была в том что по какимто причинам мой линкер собирал новый вариант в папку общих документов и вместо того чтобы получить новый exe я работал со старым. сейчас я непременно посмотрю ваш вариант.
|
|
|

12.02.2008, 13:13
|
|
Новичок
Регистрация: 22.09.2007
Сообщений: 9
Провел на форуме: 312775
Репутация:
25
|
|
гуру и не гуру,дайте пожалуйста консольный пример "Hello, Wolrd" на асме,а то обыскался уже. 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|