Знаете что такое "черный ящик"? В свое время разрабатывая 32-битную графическую ОС специалисты из Майкрософт решили, что она должна работать по принципу "черного ящика", т.е., программистам теперь не нужно вникать в работу "железа" в компьютере, достаточно знать где и как применять API-функции в программе. У этого принципа несомненно много плюсов, но и минусов тоже хватает - все больше отдаляясь знания принципов работы процессора, памяти, стека и т.п., программисты много теряют в скорости, размерах, функциональности своих приложений. При помощи оконного приложения с тремя кнопками написанного на ассемблере, попробуем немного приоткрыть завесу тайн.
Что нужно знать в первую очередь
- Каждая API-функция возвращает какое-то значение, как правило, в регистр EAX.
- NULL - это нулевой указатель. В С-ишной библиотеке WinDef.h он определен так:
т.е., NULL это 0, и можно использовать 0, во многих случаях, вместо него.
- Параметры API-функций сохраняются в стеке в обратной последовательности и по мере выполнения функции последовательно извлекаются из стека.
- Некоторые API-функции бывают двух видов, например:
MessageBoxA ожидает на входе однобайтную строку в формате ASCII, а MessageBoxW ожидает двухбайтную строку в формате Unicode
Программа написана на FASMе, если вместо русских букв вдруг будут кракозябры подключите, в "шапке" программы, библиотеку с русским шрифтом строкой:
include 'include\encoding\win1251.inc'
Вы можете переписать ok_2 так же как ok_1, или наоборот,результат от этого не изменится. ok_2 написан просто для демонстрации работы API-функций, так как это работает на самом деле в компьютере.
Если программа не запустилась, ищите свою опечатку в коде - у меня все прекрасно работает. К сожалению, fasm выручает не во всех случаях.
Успехов в программировании!
продолжение следует...
#ассемблер 32 бит #оконное приложение #API-функции