Этот код выводит байты числа 0x12345678 в шестнадцатеричном виде, начиная со старшего байта. Число помещается в стек, затем его байты извлекаются и передаются в printf. - Обрати внимание на порядок байтов в стеке: число 0x12345678 сохраняется в памяти как 78 56 34 12 (little-endian). Твой код читает байты в обратном порядке, начиная с [esi+3], что даёт 12 34 56 78 — это правильный порядок для вывода. Но проверь, что ты не перепутал смещения: [esi] — младший байт, [esi+3] — старший. - После вызова printf ты добавляешь 20 к esp. Посчитай, сколько аргументов было помещено в стек: четыре байта (по одному на каждый push) плюс адрес строки fmt — это 5 значений по 4 байта, то есть 20 байт. Всё верно.