настоящие программисты
Приведенный ниже пример распечатывает число, содержащееся в регистре EAX в шестнадцатеричной, десятичной и восьмеричной форме, автоматически дописывая ведущие нули, растягивающие число до 4х разрядов. А теперь попробуйте осуществить тоже самое без использования библиотек и сравните размер полученного кода!
mov eax, 666h ; число, которое необходимо вывести на экран
; // переводим число в hex, dec и oct системы исчисления в ASCII-представлении
sub esp, 60h ; резервируем память под буфер куда пойдет результат
mov ebx, esp ; сохраняем указатель на буфер в регистре EBX
push eax ; \
push eax ; + - передаем число для преобразования ф-ции sprintf
push eax ; /
push offset s ; передаем в стек указатель на строку спецификаторов
push ebx ; передаем указатель на буфер для получения результата
call sprintf ; прямой вызов функции sprintf
; // вывод преобразованных данных на экран через диалоговое окно
xor eax,eax ; eax := 0
push eax ; uType
push eax ; lpCaption
push ebx ; lpText
(наши преобразованные данные)
push eax ; hWnd
call ds:[MessageBoxA] ; косвенный
вызов API-функции MessageBox
add esp, 60h + (5*4) ; выталкиваем аргументы из стека и уничтожаем буфер
...
...
...
s db "%04X hex == %04d dec == %04o oct",0
; строка спецификаторов