/
xyzm
/
Asm
Обзор
Документация
Войти
/
xyzm
/
Asm
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
string.inc
120 строк
2 KB
Сергей Резник
create string.inc
02 июл 2025, 14:18
02 июл 2025, 14:18
aab41e5
Код
Авторство
О чём код?
GetStdHandle proto :dword WriteConsoleA proto :dword, :dword, :dword, :dword, :dword tmpLength = 9 ; Длина буфера для конвертации чисел в строки. Расчитан на 8 байт и один завершающий 0 .data rn db 0Dh, 0Ah, 0 ; перенос строки hConsole dd 0 bytesWritten dd 0 tmp db tmpLength dup( 0FFh ) ; 9 байт для convert_dec_to_str .code strlen proc ; [ebp+8] - адрес начала строки push ebp mov ebp,esp push edi push ecx mov al, 0 mov edi, [ebp+8] mov ecx, 0FFFFFFFFh repne scasb ; поиск символа который в al not ecx dec ecx mov eax,ecx pop ecx pop edi mov esp,ebp pop ebp Ret 4 strlen EndP print proc ; [ebp+8] - адрес начала строки push ebp mov ebp,esp push -11 call GetStdHandle mov hConsole, eax push 0 push offset bytesWritten push [ebp+8] call strlen push eax push [ebp+8] push hConsole call WriteConsoleA mov esp,ebp pop ebp Ret 4 print EndP convert_number_to_str proc ; Конвертирует число в строку ; [ebp+8] Основание системы счисления (10/16) ; Возвращает в eax адрес начала строки. Строка заканчивается нулём и готова для печати. push ebp mov ebp, esp push ebx push ecx push edx push esi lea esi, tmp + tmpLength - 1 mov byte ptr[esi],0 mov ebx, [ebp+8] ; Проверка на переданный нуль test eax,eax jnz convert_loop dec esi mov byte ptr[esi],30 jmp done convert_loop: mov ecx, 9 ; Для сравнения чисел при конвертации в код символа для 10 и 16 xor edx,edx div ebx dec esi cmp edx,ecx jg greater_than_nine not_greater: add dl,30h jmp end_check_nine greater_than_nine: add dl,37h end_check_nine: mov [esi],dl test eax,eax jnz convert_loop done: mov eax,esi pop esi pop edx pop ecx pop ebx mov esp,ebp pop ebp Ret 4 convert_number_to_str EndP