Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 608
от 21.11.2006, 11:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 373, Экспертов: 26
В номере:Вопросов: 5, Ответов: 7


Вопрос № 62761: Привет. Кто нибудь может привести каркасное приложение OpenGL на асме, только ссылок не надо. Пока...
Вопрос № 62773: Извините,уважаемые эксперты, вопрос наверное не в тему,не подскажете сайт, где можно почитать про разработку драйверов .Всегда было интересно узнать как компьютер управляет, например принтером....
Вопрос № 62813: Уважаемые эксперты помогите пожалуйста,начал изучать асемблер : не могу загрузить MC DOS вернее загрузил но вот пишу команду debug компьютер выдает ошибку.Заранее благодарен всем кто ответит....
Вопрос № 62816: Обьясните, пожайлуста, что означает термины "кольца защиты, нулевое кольцо".Заранее спасибо....
Вопрос № 62831: Товарищи, эксперты! У меня такой вопрос по ассемблеру: Нужно обработать прерывание 16h (keyboard i/o), а именно для клавиши Backspace, чтобы удалялся символ слева от текущей позиции курсора, а затем переводился сам курсор. Если курсор находитс я в ле...

Вопрос № 62.761
Привет.
Кто нибудь может привести каркасное приложение OpenGL на асме, только ссылок не надо.
Пока
Отправлен: 15.11.2006, 15:23
Вопрос задал: Практик (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Joy~
Здравствуйте, SchoolBoy!
Принимайте!
.586
.Model Flat,StdCall
Option Scoped
Option CaseMap:None
Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
Include OpenGLgl.def
Include OpenGLglu.def
IncludeLib user32.lib
IncludeLib kernel32.lib
IncludeLib opengl32.lib
IncludeLib glu32.lib
IncludeLib gdi32.lib
WinMain Proto :DWORD,:DWORD,:DWORD,:DWORD
WndProc Proto :DWORD,:DWORD,:DWORD,:DWORD
EnableOpenGL Proto :DWORD
DisableOpenGL Proto :DWORD
.Const
ClassName db "OGLMainWinClass", 0
AppName db "OpenGL App", 0
IDC_ICON1 equ 500
.Data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hDC HDC ?
hRC HGLRC ?
.Code
Start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
invoke ExitProcess, eax
WinMain Proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
LOCAL bQuit:BOOL
mov bQuit, FALSE
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_OWNDC
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInstance
invoke GetStockObject, BLACK_BRUSH
mov wc.hbrBackground, eax
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset ClassName
invoke LoadIcon, hInstance, IDC_ICON1
mov wc.hIcon, eax
mov wc.hIconSm, eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL, addr ClassName, addr AppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,
256, 256, NULL, NULL,hInst, NULL
mov hwnd,eax
invoke ShowWindow, eax, SW_SHOWNORMAL
invoke UpdateWindow, hwnd
invoke EnableOpenGL, hwnd
.while !( bQuit )
invoke GetMessage, addr msg, NULL, 0, 0
invoke PeekMessage, addr msg, NULL, 0, 0, PM_REMOVE
; handle or dispatch messages
.if ( eax )
.if ( msg.message == WM_QUIT )
mov bQuit, TRUE
.else
invoke TranslateMessage, addr msg
invoke DispatchMessage, addr msg
.endif
.else

; ...OpenGL animation code goes here...

.endif
.endw
invoke DisableOpenGL, hwnd
; mov eax,msg.wParam
; ret
return msg.wParam
;}
WinMain EndP

;========================================================
WndProc Proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
;{
LOCAL Rect:RECT

.if ( uMsg == WM_DESTROY )
;{
GetOutaHere:
invoke PostQuitMessage, NULL
;}
.elseif ( uMsg == WM_CREATE )
;{

;}
.elseif ( uMsg == WM_SIZE )
;{
invoke GetClientRect, hWnd, addr Rect
invoke glViewport, 0, 0, Rect.right, Rect.bottom
;}
.elseif ( uMsg == WM_KEYDOWN )
;{
.if ( wParam == VK_ESCAPE)
;{
jmp GetOutaHere
;}
.endif
;}
.else
;{
invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret
;}
.endif

xor eax,eax
ret

WndProc EndP

;========================================================
EnableOpenGL Proc hWnd:HWND
;{
LOCAL iFormat:dword
LOCAL pfd:PIXELFORMATDESCRIPTOR

; get the device context (DC)
invoke GetDC, hWnd
mov hDC, eax

; set the pixel format for the DC
lea edi, pfd
xor eax, eax
mov ecx, sizeof pfd / sizeof DWORD
rep stosd ; zero pfd structure

mov pfd.nSize, sizeof pfd
mov pfd.nVersion, 1
mov pfd.dwFlags, PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
mov pfd.iPixelType, PFD_TYPE_RGBA
mov pfd.cColorBits, 24
mov pfd.cDepthBits, 16
mov pfd.iLayerType, PFD_MAIN_PLANE
invoke ChoosePixelFormat, hDC, addr pfd
mov iFormat, eax
invoke SetPixelFormat, hDC, iFormat, addr pfd

; create and enable the render context (RC)
invoke wglCreateContext, hDC
mov hRC, eax
invoke wglMakeCurrent, hDC, hRC
ret
;}
EnableOpenGL EndP
;========================================================
DisableOpenGL Proc hWnd:HWND
;{
invoke wglMakeCurrent, NULL, NULL
invoke wglDeleteContext, hRC
invoke ReleaseDC, hWnd, hDC
ret
;}
DisableOpenGL EndP
;========================================================
End Start
---------
ЮЗВЕРЬ!! ЮЗВЕРЮ!....
Ответ отправил: Joy~ (статус: 6-ой класс)
Ответ отправлен: 16.11.2006, 13:51


Вопрос № 62.773
Извините,уважаемые эксперты, вопрос наверное не в тему,не подскажете сайт, где можно почитать про разработку драйверов .Всегда было интересно узнать как компьютер управляет, например принтером.
Отправлен: 15.11.2006, 16:58
Вопрос задал: Rekonkista (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: IceWolf
Здравствуйте, Rekonkista!
Статьи по этой теме есть на wasm.ru , в разделе "Секреты Win32"
Вот ещё сайт http://www.evm.narod.ru/ddk.html , и ещё
http://club.shelek.com/view.php?id=19 .
Также потребуется знать как процессор работает в защищенном режиме, статьи про это есть на том же wasm.ru
С уважением, IceW0|f.

---------
И да покарает пингвин мелких и мягких!
Ответ отправил: IceWolf (статус: 3-ий класс)
Ответ отправлен: 15.11.2006, 17:54

Отвечает: Mashin
Здравствуйте, Rekonkista!
На сайте www.wasm.ru есть цикл статей про разработку драйверов.
Прямая ссылка http://www.wasm.ru/publist.php?list=21
Ответ отправил: Mashin (статус: 2-ой класс)
Ответ отправлен: 15.11.2006, 17:55


Вопрос № 62.813
Уважаемые эксперты помогите пожалуйста,начал изучать асемблер : не могу загрузить MC DOS вернее загрузил но вот пишу команду debug компьютер выдает ошибку.Заранее благодарен всем кто ответит.

Приложение:

Отправлен: 15.11.2006, 23:05
Вопрос задал: Яценко Сергей Владимирович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Стас
Здравствуйте, Яценко Сергей Владимирович!
Ошибки то и не вижу, вижу информаю о компе и виндах...

Опишите более детально как "загружали MC DOS".
Как запускаете debug и что при этом проиходит.
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 16.11.2006, 01:35


Вопрос № 62.816
Обьясните, пожайлуста, что означает термины "кольца защиты, нулевое кольцо".Заранее спасибо.
Отправлен: 15.11.2006, 23:23
Вопрос задал: Rekonkista (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Луковкин Николай Иванович
Здравствуйте, Rekonkista!
В архитектуре 32-разрядных процессоров Intel есть три кольца защиты - ring-1,2,3.
Они предназначены для ограничения взаимодействия выполняющихся программ между собой и с операционной системой. Операционная система имеет права доступа ко всем остальным выполняемым программам, т.к. она работает в нулевом кольце защиты(наиболее привилегированном), системные задачи выполняются в первом и втором кольцах защиты, а приложения в третьем (наименее привилегированном). Частично управлять запущенными приложениями можно из первого и второго колец защиты. Именно так работает большинство отладчиков для разработки программ.
На примере: отладчик SoftICE, который работает в нулевом кольце защиты и позволяет полностью контролировать не только все выполняемые системой задачи, но и саму OS Windows.
С его помощью ты можешь отлаживать все что захочешь, даже Windows.
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 3-ий класс)
Ответ отправлен: 16.11.2006, 11:43


Вопрос № 62.831
Товарищи, эксперты! У меня такой вопрос по ассемблеру: Нужно обработать прерывание 16h (keyboard i/o), а именно для клавиши Backspace, чтобы удалялся символ слева от текущей позиции курсора, а затем переводился сам курсор. Если курсор находится в левом верхнем углу, то ничего не делать, а, если - на самой первой позиции в строке, то переставить курсор на последний символ в предыдущей строке и удалить его. Меня больше всего интересует само удаление символа, с курсором там все понятно. Кстати, какой в Turbo Pascale коректный выход из программы? А то он команду ret не обрабатывает, хотя она во многих ассемблерах является стандартной.
Заранее блатодарен за ответ!!!

Приложение:

Отправлен: 16.11.2006, 03:21
Вопрос задал: Leito (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: ADSota
Здравствуйте, Leito!

1. Все это делает недокументированная функция 29h:
mov al,8
int 29h
mov al,32
int 29h
mov al,8
int 29h
В результате получишь то-же, будто была нажата клавиша backspace

---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 16.11.2006, 11:12
Оценка за ответ: 5
Комментарий оценки:
Респект!!! :) Хотя более точный код будет выглядеть так (нам нужно еще удалять символ предыдущей строки):
@start:
; здесь обрабатываем нажатие клывиши
............................
@backspace:
mov ah, 03h
mov bh, 0
int 10h
cmp dl, 0
je @move
@del:
mov al,8
int 29h
mov al,32
int 29h
mov al,8
int 29h
jmp @start

@move:
cmp dh, 0
je @start
mov dl, 79
dec dh
mov ah, 02
mov bh, 0
int 10h
jmp @del

Отвечает: Вiктор
Здравствуйте, Leito!
2. Насколько я помню, ТурбоПаскаль не позволяет делать Win32-программы, максимум - программы под Windows 3.1. (Хотя конечно он может делать ДОС-программы, которые запускаются через Виндовский эмулятор, но это не то же самое что Win32-программа)
Я предполагаю что вы делаете ДОСовские ЕХЕ-программы и хотите сделать выход из программы через ассемблерную вставку.
выход по команде ret - это работает для ДОСовских СОМ-программ. Для ЕХЕ-программ в досе надо вызвать выход через прерывание (кажется int 20, точно не помню), а в Windows - через вызов API-функции ExitProcess. И вообще, Турбопаскаль надеется на то, что выход из программы будет там, где завершается главная программа, где стоит "end.". Я не уверен, но думаю что компилятор ещё вставляет дополнительный код перед выходом - освобождение памяти, закрытие файлов, может ещё какие-то служебные действия, а если вы выйдите самостоятельно, то эти служебные действия не будут выполнены.
В крайнем случае делайте такой же выход, как и из обычной досовской ЕХЕ-программы (ведь турбопаскаль по умолчанию делает ЕХЕ-программы), т.е. вместо ret вызывайте соответствующее прерывание.
---------
ни дня без строчки (но не получается)
Ответ отправил: Вiктор (статус: 9-ый класс)
Ответ отправлен: 16.11.2006, 20:55
Оценка за ответ: 5
Комментарий оценки:
Работает! Только не 20h, а 21h, но выход происходит только при двойном нажатии Esc.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное