Найти в Дзене
Junior Coder

Ассемблер. Оконное приложение на ассемблере

Знаете что такое "черный ящик"? В свое время разрабатывая 32-битную графическую ОС специалисты из Майкрософт решили, что она должна работать по принципу "черного ящика", т.е., программистам теперь не нужно вникать в работу "железа" в компьютере, достаточно знать где и как применять API-функции в программе. У этого принципа несомненно много плюсов, но и минусов тоже хватает - все больше отдаляясь знания принципов работы процессора, памяти, стека и т.п., программисты много теряют в скорости, размерах, функциональности своих приложений. При помощи оконного приложения с тремя кнопками написанного на ассемблере, попробуем немного приоткрыть завесу тайн.

Что нужно знать в первую очередь

  • Каждая API-функция возвращает какое-то значение, как правило, в регистр EAX.
  • NULL - это нулевой указатель. В С-ишной библиотеке WinDef.h он определен так:
-2

т.е., NULL это 0, и можно использовать 0, во многих случаях, вместо него.

  • Параметры API-функций сохраняются в стеке в обратной последовательности и по мере выполнения функции последовательно извлекаются из стека.
  • Некоторые API-функции бывают двух видов, например:

MessageBoxA ожидает на входе однобайтную строку в формате ASCII, а MessageBoxW ожидает двухбайтную строку в формате Unicode

Программа написана на FASMе, если вместо русских букв вдруг будут кракозябры подключите, в "шапке" программы, библиотеку с русским шрифтом строкой:

include 'include\encoding\win1251.inc'

-3

-4

-5

-6

-7

-8

-9

Вы можете переписать ok_2 так же как ok_1, или наоборот,результат от этого не изменится. ok_2 написан просто для демонстрации работы API-функций, так как это работает на самом деле в компьютере.

-10

-11

-12

Если программа не запустилась, ищите свою опечатку в коде - у меня все прекрасно работает. К сожалению, fasm выручает не во всех случаях. 

Успехов в программировании!

продолжение следует...

#ассемблер 32 бит #оконное приложение #API-функции