section .data
number dw 5 ; Число для инвертирования бита
section .text
global _start
_start:
; Инвертируем 4-й бит
mov ax, [number] ; Загружаем число из секции данных в регистр AX
xor ax, 0x0010 ; Инвертируем 4-й бит (0x0010 = 00000000 00010000b)
; Выводим младший байт в шестнадцатеричном виде
movzx eax, al ; Расширяем AL (младший байт AX) до EAX, заполняя нулями
push eax ; Сохраняем значение EAX в стек для передачи в функцию печати
call print_hex ; Вызываем функцию печати в шестнадцатеричном виде
add esp, 4 ; Очищаем стек после вызова функции
; Завершение программы
mov eax, 1 ; Системный вызов exit
xor ebx, ebx ; Код возврата 0
int 0x80 ; Вызов ядра
; Функция для печати числа в шестнадцатеричном виде (младшего байта)
print_hex:
push ebp ; Сохраняем старое значение EBP
mov ebp, esp ; Устанавливаем EBP на вершину стека
push ebx ; Сохраняем регистры, которые будем использовать
mov eax, [ebp+8] ; Получаем число из стека
; Вывод старшей цифры (4 бита)
mov bl, al ; Копируем AL в BL
shr bl, 4 ; Сдвигаем вправо на 4 бита, чтобы получить старшую цифру
and bl, 0x0F ; Маскируем, чтобы оставить только 4 младших бита
call print_digit ; Вызываем функцию печати цифры
; Вывод младшей цифры (4 бита)
mov bl, al ; Копируем AL в BL
and bl, 0x0F ; Маскируем, чтобы оставить только 4 младших бита
call print_digit ; Вызываем функцию печати цифры
pop ebx ; Восстанавливаем регистры
pop ebp ; Восстанавливаем старое значение EBP
ret ; Возврат
; Функция для печати одной шестнадцатеричной цифры
print_digit:
push ebp
mov ebp, esp
cmp bl, 0x0A ; Сравниваем с 10 (A)
jl is_number ; Если меньше 10, это цифра 0-9
add bl, 0x37 ; Если больше или равно 10, это буква A-F (добавляем 'A' - 10 + '0')
jmp print
is_number:
add bl, 0x30 ; Преобразуем цифру в ASCII код
print:
mov eax, 4 ; Системный вызов write
mov ebx, 1 ; stdout
mov ecx, esp ; Адрес символа для вывода
mov edx, 1 ; Количество байт для вывода
int 0x80 ; Вызов ядра
pop ebp
ret
c2VjdGlvbiAuZGF0YQogICAgbnVtYmVyIGR3IDUgICAgICA7INCn0LjRgdC70L4g0LTQu9GPINC40L3QstC10YDRgtC40YDQvtCy0LDQvdC40Y8g0LHQuNGC0LAKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsg0JjQvdCy0LXRgNGC0LjRgNGD0LXQvCA0LdC5INCx0LjRggoKICAgIG1vdiBheCwgW251bWJlcl0gICA7INCX0LDQs9GA0YPQttCw0LXQvCDRh9C40YHQu9C+INC40Lcg0YHQtdC60YbQuNC4INC00LDQvdC90YvRhSDQsiDRgNC10LPQuNGB0YLRgCBBWAogICAgeG9yIGF4LCAweDAwMTAgICAgIDsg0JjQvdCy0LXRgNGC0LjRgNGD0LXQvCA0LdC5INCx0LjRgiAoMHgwMDEwID0gMDAwMDAwMDAgMDAwMTAwMDBiKQoKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0LzQu9Cw0LTRiNC40Lkg0LHQsNC50YIg0LIg0YjQtdGB0YLQvdCw0LTRhtCw0YLQtdGA0LjRh9C90L7QvCDQstC40LTQtQogICAgbW92enggZWF4LCBhbCAgICAgIDsg0KDQsNGB0YjQuNGA0Y/QtdC8IEFMICjQvNC70LDQtNGI0LjQuSDQsdCw0LnRgiBBWCkg0LTQviBFQVgsINC30LDQv9C+0LvQvdGP0Y8g0L3Rg9C70Y/QvNC4CiAgICBwdXNoIGVheCAgICAgICAgICAgOyDQodC+0YXRgNCw0L3Rj9C10Lwg0LfQvdCw0YfQtdC90LjQtSBFQVgg0LIg0YHRgtC10Log0LTQu9GPINC/0LXRgNC10LTQsNGH0Lgg0LIg0YTRg9C90LrRhtC40Y4g0L/QtdGH0LDRgtC4CiAgICBjYWxsIHByaW50X2hleCAgICAgOyDQktGL0LfRi9Cy0LDQtdC8INGE0YPQvdC60YbQuNGOINC/0LXRh9Cw0YLQuCDQsiDRiNC10YHRgtC90LDQtNGG0LDRgtC10YDQuNGH0L3QvtC8INCy0LjQtNC1CiAgICBhZGQgZXNwLCA0ICAgICAgICAgOyDQntGH0LjRidCw0LXQvCDRgdGC0LXQuiDQv9C+0YHQu9C1INCy0YvQt9C+0LLQsCDRhNGD0L3QutGG0LjQuAoKICAgIDsg0JfQsNCy0LXRgNGI0LXQvdC40LUg0L/RgNC+0LPRgNCw0LzQvNGLCiAgICBtb3YgZWF4LCAxICAgICAgICAgOyDQodC40YHRgtC10LzQvdGL0Lkg0LLRi9C30L7QsiBleGl0CiAgICB4b3IgZWJ4LCBlYnggICAgICAgOyDQmtC+0LQg0LLQvtC30LLRgNCw0YLQsCAwCiAgICBpbnQgMHg4MCAgICAgICAgICAgOyDQktGL0LfQvtCyINGP0LTRgNCwCgo7INCk0YPQvdC60YbQuNGPINC00LvRjyDQv9C10YfQsNGC0Lgg0YfQuNGB0LvQsCDQsiDRiNC10YHRgtC90LDQtNGG0LDRgtC10YDQuNGH0L3QvtC8INCy0LjQtNC1ICjQvNC70LDQtNGI0LXQs9C+INCx0LDQudGC0LApCnByaW50X2hleDoKICAgIHB1c2ggZWJwICAgICAgICAgICA7INCh0L7RhdGA0LDQvdGP0LXQvCDRgdGC0LDRgNC+0LUg0LfQvdCw0YfQtdC90LjQtSBFQlAKICAgIG1vdiBlYnAsIGVzcCAgICAgICA7INCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8IEVCUCDQvdCwINCy0LXRgNGI0LjQvdGDINGB0YLQtdC60LAKICAgIHB1c2ggZWJ4ICAgICAgICAgICA7INCh0L7RhdGA0LDQvdGP0LXQvCDRgNC10LPQuNGB0YLRgNGLLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTQtdC8INC40YHQv9C+0LvRjNC30L7QstCw0YLRjAoKICAgIG1vdiBlYXgsIFtlYnArOF0gICA7INCf0L7Qu9GD0YfQsNC10Lwg0YfQuNGB0LvQviDQuNC3INGB0YLQtdC60LAKCiAgICA7INCS0YvQstC+0LQg0YHRgtCw0YDRiNC10Lkg0YbQuNGE0YDRiyAoNCDQsdC40YLQsCkKICAgIG1vdiBibCwgYWwgICAgICAgICAgOyDQmtC+0L/QuNGA0YPQtdC8IEFMINCyIEJMCiAgICBzaHIgYmwsIDQgICAgICAgICAgIDsg0KHQtNCy0LjQs9Cw0LXQvCDQstC/0YDQsNCy0L4g0L3QsCA0INCx0LjRgtCwLCDRh9GC0L7QsdGLINC/0L7Qu9GD0YfQuNGC0Ywg0YHRgtCw0YDRiNGD0Y4g0YbQuNGE0YDRgwogICAgYW5kIGJsLCAweDBGICAgICAgIDsg0JzQsNGB0LrQuNGA0YPQtdC8LCDRh9GC0L7QsdGLINC+0YHRgtCw0LLQuNGC0Ywg0YLQvtC70YzQutC+IDQg0LzQu9Cw0LTRiNC40YUg0LHQuNGC0LAKICAgIGNhbGwgcHJpbnRfZGlnaXQgICAgOyDQktGL0LfRi9Cy0LDQtdC8INGE0YPQvdC60YbQuNGOINC/0LXRh9Cw0YLQuCDRhtC40YTRgNGLCgogICAgOyDQktGL0LLQvtC0INC80LvQsNC00YjQtdC5INGG0LjRhNGA0YsgKDQg0LHQuNGC0LApCiAgICBtb3YgYmwsIGFsICAgICAgICAgIDsg0JrQvtC/0LjRgNGD0LXQvCBBTCDQsiBCTAogICAgYW5kIGJsLCAweDBGICAgICAgIDsg0JzQsNGB0LrQuNGA0YPQtdC8LCDRh9GC0L7QsdGLINC+0YHRgtCw0LLQuNGC0Ywg0YLQvtC70YzQutC+IDQg0LzQu9Cw0LTRiNC40YUg0LHQuNGC0LAKICAgIGNhbGwgcHJpbnRfZGlnaXQgICAgOyDQktGL0LfRi9Cy0LDQtdC8INGE0YPQvdC60YbQuNGOINC/0LXRh9Cw0YLQuCDRhtC40YTRgNGLCgogICAgcG9wIGVieCAgICAgICAgICAgIDsg0JLQvtGB0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INGA0LXQs9C40YHRgtGA0YsKICAgIHBvcCBlYnAgICAgICAgICAgICA7INCS0L7RgdGB0YLQsNC90LDQstC70LjQstCw0LXQvCDRgdGC0LDRgNC+0LUg0LfQvdCw0YfQtdC90LjQtSBFQlAKICAgIHJldCAgICAgICAgICAgICAgICA7INCS0L7Qt9Cy0YDQsNGCCgo7INCk0YPQvdC60YbQuNGPINC00LvRjyDQv9C10YfQsNGC0Lgg0L7QtNC90L7QuSDRiNC10YHRgtC90LDQtNGG0LDRgtC10YDQuNGH0L3QvtC5INGG0LjRhNGA0YsKcHJpbnRfZGlnaXQ6CiAgICBwdXNoIGVicAogICAgbW92IGVicCwgZXNwCgogICAgY21wIGJsLCAweDBBICAgICAgIDsg0KHRgNCw0LLQvdC40LLQsNC10Lwg0YEgMTAgKEEpCiAgICBqbCAgaXNfbnVtYmVyICAgICAgIDsg0JXRgdC70Lgg0LzQtdC90YzRiNC1IDEwLCDRjdGC0L4g0YbQuNGE0YDQsCAwLTkKICAgIGFkZCBibCwgMHgzNyAgICAgICA7INCV0YHQu9C4INCx0L7Qu9GM0YjQtSDQuNC70Lgg0YDQsNCy0L3QviAxMCwg0Y3RgtC+INCx0YPQutCy0LAgQS1GICjQtNC+0LHQsNCy0LvRj9C10LwgJ0EnIC0gMTAgKyAnMCcpCiAgICBqbXAgcHJpbnQKCmlzX251bWJlcjoKICAgIGFkZCBibCwgMHgzMCAgICAgICA7INCf0YDQtdC+0LHRgNCw0LfRg9C10Lwg0YbQuNGE0YDRgyDQsiBBU0NJSSDQutC+0LQKCnByaW50OgogICAgbW92IGVheCwgNCAgICAgICAgIDsg0KHQuNGB0YLQtdC80L3Ri9C5INCy0YvQt9C+0LIgd3JpdGUKICAgIG1vdiBlYngsIDEgICAgICAgICA7IHN0ZG91dAogICAgbW92IGVjeCwgZXNwICAgICAgIDsg0JDQtNGA0LXRgSDRgdC40LzQstC+0LvQsCDQtNC70Y8g0LLRi9Cy0L7QtNCwCiAgICBtb3YgZWR4LCAxICAgICAgICAgOyDQmtC+0LvQuNGH0LXRgdGC0LLQviDQsdCw0LnRgiDQtNC70Y8g0LLRi9Cy0L7QtNCwCiAgICBpbnQgMHg4MCAgICAgICAgICAgOyDQktGL0LfQvtCyINGP0LTRgNCwCgogICAgcG9wIGVicAogICAgcmV0Cg==