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

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


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

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

Выпуск № 778
от 14.06.2007, 03:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 382, Экспертов: 35
В номере:Вопросов: 6, Ответов: 9


Вопрос № 90558: Здравствуйте! Я пишу свою программу на Ассемблере, но мне непонятны некоторые процедуры работы с окнами в виндовсе. В частности, подскажите, пжалста, как задать приложению и его окну собственную пиктограмму, взяв её, например, из расположенного р...
Вопрос № 90565: Здраствуйте!Я только начал изучат Ассемблер.При помощи проги MASM32 я просматривал код программ.Но ничего там непонятно!Вопрос в том как сделать так чтобы код был более прозрачным и понятным?...
Вопрос № 90577: Вы знаете, я как бы умею присваивать классу окна одну из стандартных иконок, но мне нужно подгрузить !свою! картинку из соседнего файла-значка *.ico. Я не очень разбираюсь в программировании, поэтому, расскажите поподробней. Пасибо....
Вопрос № 90597: Здравствуйте господа эксперты. Наставьте на путь истинный. Как, т.е. с помощью чего можно сделать свой контролл и заюзать его в программе? Например кнопку. Есть програмки, в которых кнопки в стиле WinXP (синяя тема), хотя системные кнопки выглядя...
Вопрос № 90635: Уважаемые эксперты,Assembler начала изучать недавно и столкнулась с такой проблемой: не могу осуществить работу с массивами, т.е. чтобы пользователь задавал его размерность.Помогите пожалуйста....
Вопрос № 90648: Здравствуйте Вопрос такой: с помощью mov ah,2 данные из регистра dl можно вывести на экран, но как я понял они выводятся в ascii формате, что мне нужно сделать и как сделать чтобы вывести число которое там находится?...

Вопрос № 90.558
Здравствуйте!
Я пишу свою программу на Ассемблере, но мне непонятны некоторые процедуры работы с окнами в виндовсе. В частности, подскажите, пжалста, как задать приложению и его окну собственную пиктограмму, взяв её, например, из расположенного рядом файла значка *.ico и вывести различные операции с текстом и числами в это же окно?

p.s. у меня стоит masm32.
Отправлен: 08.06.2007, 11:39
Вопрос задал: Малов Иван Константинович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Малов Иван Константинович!

Чтобы своему приложению присвоить иконку, нужно создать окно и присвоить классу этого окна нужную картинку.

mov ebx,IDI_APPICON
Call LoadIcon,esi,ebx
mov [(t WNDCLASSEX edi).hIcon],eax
.....

---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +79519145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 08.06.2007, 12:10


Вопрос № 90.565
Здраствуйте!Я только начал изучат Ассемблер.При помощи проги MASM32 я просматривал код программ.Но ничего там непонятно!Вопрос в том как сделать так чтобы код был более прозрачным и понятным?

Приложение:

Отправлен: 08.06.2007, 11:53
Вопрос задал: Григориев Денис Александрович (статус: 9-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Григориев Денис Александрович!

Для анализа кода программ используются дисасемблеры
Лутшим из них является IDA. Очень много различных дисассемблеров можно найти тут.
Удачи!

---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 08.06.2007, 14:09
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо!Яб вам 6 поставил!!!!!!!!!!!!
:-))))))


Вопрос № 90.577
Вы знаете, я как бы умею присваивать классу окна одну из стандартных иконок, но мне нужно подгрузить !свою! картинку из соседнего файла-значка *.ico. Я не очень разбираюсь в программировании, поэтому, расскажите поподробней.
Пасибо.
Отправлен: 08.06.2007, 13:13
Вопрос задал: Малов Иван Константинович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Малов Иван Константинович!

Свою картинку нужно загрузить в ресурсы. И затем её оттуда взять.


The LoadIcon function loads the specified icon resource from the executable (.EXE) file associated with an application instance.

HICON LoadIcon(

HINSTANCE hInstance, // handle of application instance
LPCTSTR lpIconName // icon-name string or icon resource identifier
);


Parameters

hInstance

Identifies an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded.

lpIconName

Points to a null-terminated string that contains the name of the icon resource to be loaded. Alternatively, this parameter can contain the resource identifier in the low-order word and zero in the high-order word. Use the MAKEINTRESOURCE macro to create this value.


---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +79519145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 08.06.2007, 13:26

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Малов Иван Константинович!
Для этого надо сделать следующее:
1) создаем файл ресурсов, например rcrc.rc такого содержания:
#define IDI_NAME 100
IDI_NAME ICON DISCARDABLE "FILE.ICO"
2) в программе узнаем handle модуля, откуда берем иконку,
в нашем случае из нашей exe-шки
invoke GetModuleHandle, NULL
mov hInstance, eax
2) в программе описываем константу
IDI_NAME equ 100 ; номер ресурса
3) перед заполнением поля wc.hIcon и wc.hIconSm
вызвать invoke LoadIcon,hInstance,IDI_NAME
4) ну и тут же записать в структуру handle иконки
mov wc.hIcon, eax
mov wc.hIconSm, eax
5)Ну и наконец, компилируем и линкируем следующим образом:
MASM32BINRc.exe /v rsrc.rc
MASM32BINCvtres.exe /machine:ix86 rsrc.res
MASM32BINMl.exe /c /coff program.asm
MASM32BINLink.exe /SUBSYSTEM:WINDOWS program.obj rsrc.obj

Вот и все...

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 08.06.2007, 13:57
Оценка за ответ: 5
Комментарий оценки:
пасибо


Вопрос № 90.597
Здравствуйте господа эксперты.
Наставьте на путь истинный. Как, т.е. с помощью чего можно сделать свой контролл и заюзать его в программе? Например кнопку. Есть програмки, в которых кнопки в стиле WinXP (синяя тема), хотя системные кнопки выглядят по другому (тема металлик). Как такую кнопку, ну и вообще всякие контроллы прикрутить к программе на асме? Использую RadAsm и TASM 5.0.
Заранее спасибо за ответы.
Макс
ICQ 264762610
Отправлен: 08.06.2007, 15:02
Вопрос задал: Maximus777 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Maximus777!

Каждый элемент управления который отображается о окне Вашей программы есть окно и создается также как и основное окно программы (т.е. заполняется структура WNDCLASS, регистрируется класс окна функцией RegisterClass и пoсле создаете окно данного класа функцией CreateWindow) различие между ними в структуре WNDCLASS.pszClassName указывается имя создаваемого класса (стандартные: button, edit, listbox, combobox, mdiclient, scrollbar, static или Вы определяете любое свое имя класа ).
Каркас Windows-программы Вы можете найти в любой книге по программированию под Windows к примеру у Зубкова:Assembler глава 7
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 08.06.2007, 16:23
Оценка за ответ: 3
Комментарий оценки:
Мне хотелось бы на примере узнать, как сделать кнопку а'ля ХР и чтобы можно было её использовать в своих программах и чтоб системная тема её никак не затрагивала. Не обижайтесь, но из вашего ответа я нифига не понял. Программа у меня есть, со всеми причиндалами, но там стандартные контроллы, т.е. меняецца тема в свойствах рабочего стола - меняюцца и кнопки. А мне не так надо. Мне надо чтобы кнопки сохраняли свой вид в любом случае. И кстати, если они не квадратные как в таком случае их делать? У меня есть Button.ocx, в нём красивые кнопки, но я могу их использовать тока в VBA в Excell'е, а как их к проге на Асме прикрутить я не знаю.

Отвечает: Tamashev Denis M
Здравствуйте, Maximus777!
Можешь глянуть мой исходник на FASM программы с кнопками на которых расположены шкурки!
http://forum.vingrad.ru/forum/topic-153352/kw-fasm-button-bitmap.html
+ wasm.ru
+ WINAPI - учи!
Кнопки создаются с помошью CreateWindowEx!
Посмотри исходник если чё я тебе скину исходник этой же программы только разширенный с примочками ;)
C уважением,
Zmeu.
Ответ отправил: Tamashev Denis M (статус: 4-ый класс)
Ответ отправлен: 09.06.2007, 10:43
Оценка за ответ: 4
Комментарий оценки:
Немного не то, но уже ближе к теме. Как создавать окно я знаю. Мне интересно, могу я создать свои контроллы? Кнопки, чекбоксы и .т.д. и потом их использовать в своих программах? Если я правильно понял из ответов, то мне нада рисовать три вида картинки и потом их создавать как окна? При этом отслеживать курсор и перекрывать эти окна в зависимости от положения курсора? Но что-то закрадываецца сомнение у меня. А если в проге все кнопки разные по размеру, там что каждую нада вырисовывать по три раза, да ещё если кнопки не квадратные? Вобщем народ, когда вас просят решить контрольную работу вы пишите полностью код, а если пример нужен, то облом? Может кто-нить поподробней объяснить как рисуются и работают кнопки к примеру в Avira Antivir, Acronis и т.д.? Если есть пример, то ещё лучше. Мой мыл max.yegorov@mail.ru, в теме добавте 777, это от спама.


Вопрос № 90.635
Уважаемые эксперты,Assembler начала изучать недавно и столкнулась с такой проблемой: не могу осуществить работу с массивами, т.е. чтобы пользователь задавал его размерность.Помогите пожалуйста.
Отправлен: 08.06.2007, 20:59
Вопрос задала: Anomaly (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Anomaly!

Размерность массива на Ассемблере задаётся неявно в процессе работы. То есть, тебе должно быть известно количество данных, помещённых в память.

mov esi, offset array ; адрес начала массива

mov eax, [esi+24*4] ; берём 24-ый элемент массива

add eax, 45

mov [esi+2*4], eax ;помещаем на место 4-ого

удачи!
---------
Знания - сила
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +79519145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 08.06.2007, 21:04
Оценка за ответ: 4

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Anomaly!

Для работы с массивами удобно использовать индексные (si,di) и базовые регистры (bx,bp)
mov ax,[bx(bp)+si(di)]
если у Вас 2-мерный байтовый массив, то в bx(bp)-можно хранить адрес начала I-ой строки, а в (si,di)-смещение J-го столбца.
Вам уже сказали о том, что явного определения размера одного элемента массива в Ассемблере нет, можно обратится как к одному байту так и к слову так и к двойному слову. Этот труд ложится на плечи программиста т.к. только он знает, что там должно быть. K примеру если Вы работаете с числами от -32000 до 32000
то Вам достаточно на один элемент массива выделить только одно слово (16-бит).
Если Вы будете работать с массивом строк то возникает необходимость учитывать и длину одного элемента и количество элементов в строке массива.
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 08.06.2007, 22:30


Вопрос № 90.648
Здравствуйте
Вопрос такой:
с помощью
mov ah,2
данные из регистра dl можно вывести на экран, но как я понял они выводятся в ascii формате, что мне нужно сделать и как сделать чтобы вывести число которое там находится?
Отправлен: 08.06.2007, 23:11
Вопрос задал: Arcticmonkey (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Олег Владимирович
Здравствуйте, Arcticmonkey!

Идея здесь следующая. Нужно разбить число в DL на отдельные цифры, перевести цифры 0..9 в символы '0'..'9' (их коды 30h..39h) и уже их вывести.
Делается, например, так:

mov al, dl ; берём выводимое число
aam ; и делим его на 10, частное в AH, остаток в AL
mov bl, al ; остаток - младшая цифра. Выводить её первой как-то некрасиво, поэтому просто запомним.
mov al, ah ; берём частное
aam ; и снова делим его на 10
mov bh, al ; запоминаем разряд десятков
mov dl, ah ; и готовимся к выводу разряда сотен. Вывод можно начинать, т.к. в одном байте чисел больше 255 не бывает
add dl, 30h ; перевод цифр в символы
add bx, 3030h
mov ah, 02h ; функция вывода
;;cmp dl, 30h -- на такие строки пока не обращаем внимания
;;je @1
int 21h ; сотни
;;jmp @2
;;@1: cmp bh, 30h
;;je @3
;;@2:
mov dl, bh ; десятки
int 21h
;;@3:
mov dl, bl ; единицы
int 21h

Недостаток - выводятся ведущие нули. Избавиться - раскомментировать строки, начинающиеся с двойной точки с запятой. Их деятельность должна быть понятна, если нет, посмотрите в отладчике для чисел 234, 56, 7. Если есть вопросы, в минифорум.

Удачи!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: Студент)
Ответ отправлен: 09.06.2007, 00:08


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное