ХАНДЫФАР

Функция PrintFormatString принимает строку формата и необязательные аргументы и выдаёт форматированную последовательность символов для вывода. Строка формата может содержать ноль или более директив, которые являются либо литеральными символами для вывода, либо спецификациями кодированного преобразования, описывающими, как форматировать аргумент в выходных данных.

Каждое поле спецификации преобразования представляет собой символ или цифру, обозначающую определённый параметр формата или спецификатор преобразования. Обязательное "поле типа" определяет тип преобразования, которое будет применено к аргументу. Необязательное поле "ширина" управляет другим аспектом формата, таким как начальные пробелы и выравнивание.

Символ спецификатора преобразования типа указывает, следует ли интерпретировать соответствующий аргумент как символ, строку, указатель или целое число. Символ типа является единственным обязательным полем спецификации преобразования, и он появляется после любых необязательных полей.

Аргументы, которые следуют за строкой формата, интерпретируются в соответствии с соответствующим символом типа. Преобразования для типов символов задаются с помощью %c, а однобайтовые строки задаются с помощью %s.

Десятичное число со знаком и без знака задаётся с помощью %d/%i, %d16/%i16 (%d/%i по умолчанию выводит 16-разрядное число) и %d32/%i32 (выводит 32-разрядное число), восьмеричное число задаётся с помощью %o, двоичное число задаётся с помощью %b, шестнадцатеричное число задаётся с помощью %h.

Вещественное число со знаком и без задаётся с помощью %f. Функция выводит только 2 числа после точки. Выравнивание стека не требуется. Чтобы указать количество чисел после точки, воспользуйтесь функцией SetPrecision и укажите в регистре al число выводимих цифр после точки.

С помощью спецификатора %a, можно получить адрес расположения аргумента в сегменте данных.

Ширина поля по левому краю задаётся с помощью %. за которым следует число и символ типа.

Например: "Hello %.4s!"

По умолчанию ширина заполняется пробелами. Если необходимо указать другой символ то, следует использовать следующую последовательность символов: %.#(?), где # это ширина, а ? это символ для заполнения.

Например: "Hello %.4(-)s!"

Спецификатор %* указывает функции PrintFormatString на то, что аргумент передаваемый функции должен быть проигнорирован для вывода на консоль. Символы пробела следующие за %* тоже игнорируются.

Функция PrintFormatString поддерживает управляющие последовательности, такие как \t - Горизонтальная табуляция, выравниванивает по горизонтальной сетке, которая равна 8 символам, \b - backspace, \r - возврат каретки, \n - переход на новую строку, \0 - символ завершения строки.

Первым аргументом функции PrintFormatString должен быть указатель на строку формата в регистре ax, все остальные аргументы должны передаваться через стек используя любой из доступных регистров.

Вещественные числа загружаются на вершину стека математического сопроцессора с помощью инструкции FLD (Загрузить вещественное число).

Функцию PrintFormatString можно использовать вместо функции WriteString для вывода строки.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Привет, Мир 8086 ______________Ассемблера!\0"
  6. data ends
  7. code segment public
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc
  10. ____main proc
  11. ________call____SetDataSegment
  12. ________lea_____ax, ds:[fmtstr]
  13. ________call____PrintFormatString
  14. ________xor_____al, al
  15. ________call____ExitProcess
  16. ____main endp
  17. code ends
  18. end main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствует спецификатор %c, который выводит один символ.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Символ: %c\0"
  6. data ends
  7. code segment public
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc
  10. ____main proc
  11. ________call____SetDataSegment
  12. ________mov_____al, 'Д'
  13. ________push____ax
  14. ________lea_____ax, ds:[fmtstr]
  15. ________call____PrintFormatString
  16. ________add_____sp, 2
  17. ________xor_____al, al
  18. ________call____ExitProcess
  19. ____main endp
  20. code ends
  21. end main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификаторы %s и %c.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Меня зовут %s и первая ______________буква моей фамилии '%c'.\0"
  6. ____mName _db "Евгений\0"
  7. data ends
  8. code segment public
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc
  11. ____main proc
  12. ________call____SetDataSegment
  13. ________mov_____al, 'Д'
  14. ________push____ax
  15. ________lea_____ax, ds:[mName]
  16. ________push____ax
  17. ________lea_____ax, ds:[fmtstr]
  18. ________call____PrintFormatString
  19. ________add_____sp, 4
  20. ________xor_____al, al
  21. ________call____ExitProcess
  22. ____main endp
  23. code ends
  24. end main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствует спецификатор %d. Вы так же можете использовать спецификатор %d16.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Я изучаю Ассемблер %d ______________архитектуры.\0"
  6. data ends
  7. code segment public
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc
  10. ____main proc
  11. ________call____SetDataSegment
  12. ________mov_____ax, 8086
  13. ________push____ax
  14. ________lea_____ax, ds:[fmtstr]
  15. ________call____PrintFormatString
  16. ________add_____sp, 2
  17. ________xor_____al, al
  18. ________call____ExitProcess
  19. ____main endp
  20. code ends
  21. end main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствует спецификатор %i16 для вывода 16-разрядного числа и %i32 для вывода 32-разрядного числа. Вы так же можете использовать спецификатор %d32.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "16-битное десятичное ______________число: %i16\n"
  6. ___________db "32-битное десятичное ______________число: %i32\0"
  7. ____dec16b dw 28123
  8. ____dec32b dd 536870912
  9. data ends
  10. code segment public
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc
  13. ____main proc
  14. ________call____SetDataSegment
  15. ________mov_____ax, word ptr[dec32b+2]
  16. ________push____ax
  17. ________mov_____ax, word ptr[dec32b]
  18. ________push____ax
  19. ________push____dec16b
  20. ________lea_____ax, ds:[fmtstr]
  21. ________call____PrintFormatString
  22. ________add_____sp, 6
  23. ________xor_____al, al
  24. ________call____ExitProcess
  25. ____main endp
  26. code ends
  27. end main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификатор %a который выводит адрес переменной в шестнадцатеричном формате.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr _db "Адрес 'string2': %a\0"
  6. ____string1 db "Евгений\0"
  7. ____string2 db "Довгополов\0"
  8. data ends
  9. code segment public
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc
  12. ____main proc
  13. ________call____SetDataSegment
  14. ________lea_____ax, ds:[string2]
  15. ________push____ax
  16. ________lea_____ax, ds:[fmtstr]
  17. ________call____PrintFormatString
  18. ________add_____sp, 2
  19. ________xor_____al, al
  20. ________call____ExitProcess
  21. ____main endp
  22. code endsend main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификаторы %d, %h, %o, %b и %f.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "DEC: %d\nHEX: %h\nOCT: ______________%o\nBIN: %b\nFPU: %f\n\0"
  6. ____double dq 123.45
  7. data ends
  8. code segment public
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc
  11. ____main proc
  12. ________call____SetDataSegment
  13. ________fld_____qword ptr[double]
  14. ________add_____ax, 1234
  15. ________push____ax
  16. ________push____ax
  17. ________push____ax
  18. ________push____ax
  19. ________lea_____ax, ds:[fmtstr]
  20. ________call____PrintFormatString
  21. ________add_____sp, 8
  22. ________xor_____al, al
  23. ________call____ExitProcess
  24. ____main endp
  25. code ends
  26. end main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификаторы %* и %s.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr __db "Меня зовут %* %s.\0"
  6. ____mName ___db "Евгений\0"
  7. ____mSurname db "Довгополов\0"
  8. data ends
  9. code segment public
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc
  12. ____main proc
  13. ________call____SetDataSegment
  14. ________lea_____ax, ds:[mName]
  15. ________push____ax
  16. ________lea_____ax, ds:[mSurname]
  17. ________push____ax
  18. ________lea_____ax, ds:[fmtstr]
  19. ________call____PrintFormatString
  20. ________add_____sp, 4
  21. ________xor_____al, al
  22. ________call____ExitProcess
  23. ____main endp
  24. code ends
  25. end main
Функция PrintFormatString принимает строку формата и необязательные аргументы и выдаёт форматированную последовательность символов для вывода. Строка формата может содержать ноль или более директив, которые являются либо литеральными символами для вывода, либо спецификациями кодированного преобразования, описывающими, как форматировать аргумент в выходных данных.

Каждое поле спецификации преобразования представляет собой символ или цифру, обозначающую определённый параметр формата или спецификатор преобразования. Обязательное "поле типа" определяет тип преобразования, которое будет применено к аргументу. Необязательное поле "ширина" управляет другим аспектом формата, таким как начальные пробелы и выравнивание.

Символ спецификатора преобразования типа указывает, следует ли интерпретировать соответствующий аргумент как символ, строку, указатель или целое число. Символ типа является единственным обязательным полем спецификации преобразования, и он появляется после любых необязательных полей.

Аргументы, которые следуют за строкой формата, интерпретируются в соответствии с соответствующим символом типа. Преобразования для типов символов задаются с помощью %c, а однобайтовые строки задаются с помощью %s.

Десятичное число со знаком и без знака задаётся с помощью %d/%i, %d16/%i16 (%d/%i по умолчанию выводит 16-разрядное число) и %d32/%i32 (выводит 32-разрядное число), восьмеричное число задаётся с помощью %o, двоичное число задаётся с помощью %b, шестнадцатеричное число задаётся с помощью %h.

Вещественное число со знаком и без задаётся с помощью %f. Функция выводит только 2 числа после точки. Выравнивание стека не требуется. Чтобы указать количество чисел после точки, воспользуйтесь функцией SetPrecision и укажите в регистре al число выводимих цифр после точки.

С помощью спецификатора %a, можно получить адрес расположения аргумента в сегменте данных.

Ширина поля по левому краю задаётся с помощью %. за которым следует число и символ типа.

Например: "Hello %.4s!"

По умолчанию ширина заполняется пробелами. Если необходимо указать другой символ то, следует использовать следующую последовательность символов: %.#(?), где # это ширина, а ? это символ для заполнения.

Например: "Hello %.4(-)s!"

Спецификатор %* указывает функции PrintFormatString на то, что аргумент передаваемый функции должен быть проигнорирован для вывода на консоль. Символы пробела следующие за %* тоже игнорируются.

Функция PrintFormatString поддерживает управляющие последовательности, такие как \t - Горизонтальная табуляция, выравниванивает по горизонтальной сетке, которая равна 8 символам, \b - backspace, \r - возврат каретки, \n - переход на новую строку, \0 - символ завершения строки.

Первым аргументом функции PrintFormatString должен быть указатель на строку формата в регистре ax, все остальные аргументы должны передаваться через стек используя любой из доступных регистров.

Вещественные числа загружаются на вершину стека математического сопроцессора с помощью инструкции FLD (Загрузить вещественное число).

Функцию PrintFormatString можно использовать вместо функции WriteString для вывода строки.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Привет, Мир 8086 Ассемблера!\0"
  6. data ends
  7. code segment public _______________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc___________; Подключаем файл с функциями
  10. ____main proc _____________________; Начало процедуры main
  11. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  12. ________lea_____ax, ds:[fmtstr]____; Загружаем адрес переменной fmtstr в регистр ds:ax
  13. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtstr)
  14. ________xor_____al, al_____________; Обнуляем регистр al
  15. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  16. ____main endp _____________________; Конец процедуры main
  17. code ends _________________________; Конец сегмента кода
  18. end main __________________________; Конец файла. Точкой входа указывается процедура main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствует спецификатор %c, который выводит один символ.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Символ: %c\0"
  6. data ends
  7. code segment public _______________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc___________; Подключаем файл с функциями
  10. ____main proc _____________________; Начало процедуры main
  11. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  12. ________mov_____al, 'Д'____________; Копируем значение символа 'Д' в регистр al
  13. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  14. ________lea_____ax, ds:[fmtstr]____; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  15. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtstr, 'Д')
  16. ________add_____sp, 2______________; Выравниваем стек
  17. ________xor_____al, al_____________; Обнуляем регистр al
  18. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  19. ____main endp _____________________; Конец процедуры main
  20. code ends _________________________; Конец сегмента кода
  21. end main __________________________; Конец файла. Точкой входа указывается процедура main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификаторы %s и %c.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Меня зовут %s и первая буква моей фамилии '%c'.\0"
  6. ____mName _db "Евгений\0"
  7. data ends
  8. code segment public _______________; Начало сегмента кода
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc___________; Подключаем файл с функциями
  11. ____main proc _____________________; Начало процедуры main
  12. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  13. ________mov_____al, 'Д'____________; Копируем значение символа 'Д' в регистр al
  14. ________push____ax_________________; 3-й: Сохраняем значение регистра ax в стеке
  15. ________lea_____ax, ds:[mName]_____; Загружаем адрес переменной mName в регистр ds:ax
  16. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  17. ________lea_____ax, ds:[fmtstr]____; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  18. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtstr, 'Евгений', 'Д')
  19. ________add_____sp, 4______________; Выравниваем стек
  20. ________xor_____al, al_____________; Обнуляем регистр al
  21. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  22. ____main endp _____________________; Конец процедуры main
  23. code ends _________________________; Конец сегмента кода
  24. end main __________________________; Конец файла. Точкой входа указывается процедура main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствует спецификатор %d. Вы так же можете использовать спецификатор %d16.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "Я изучаю Ассемблер %d архитектуры.\0"
  6. data ends
  7. code segment public _______________; Начало сегмента кода
  8. ____assume _ds:data, cs:code
  9. ____include Handyfar.inc___________; Подключаем файл с функциями
  10. ____main proc _____________________; Начало процедуры main
  11. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  12. ________mov_____ax, 8086___________; Копируем значение 8086 в регистр ax
  13. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  14. ________lea_____ax, ds:[fmtstr]____; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  15. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtstr, 8086)
  16. ________add_____sp, 2______________; Выравниваем стек
  17. ________xor_____al, al_____________; Обнуляем регистр al
  18. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  19. ____main endp _____________________; Конец процедуры main
  20. code ends _________________________; Конец сегмента кода
  21. end main __________________________; Конец файла. Точкой входа указывается процедура main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствует спецификатор %i16 для вывода 16-разрядного числа и %i32 для вывода 32-разрядного числа. Вы так же можете использовать спецификатор %d32.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "16-битное десятичное число: %i16\n"
  6. ___________db "32-битное десятичное число: %i32\0"
  7. ____dec16b dw 28123
  8. ____dec32b dd 536870912
  9. data ends
  10. code segment public ____________________; Начало сегмента кода
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc________________; Подключаем файл с функциями
  13. ____main proc __________________________; Начало процедуры main
  14. ________call____SetDataSegment__________; Вызываем процедуру SetDataSegment
  15. ________mov_____ax, word ptr[dec32b+2]__; Копируем вторую половину числа dec32b в регистр ax
  16. ________push____ax______________________; 4-й: Сохраняем значение регистра ax в стеке
  17. ________mov_____ax, word ptr[dec32b]____; Копируем первую половину числа dec32b в регистр ax
  18. ________push____ax______________________; 3-й: Сохраняем значение регистра ax в стеке
  19. ________push____dec16b__________________; 2-й: Сохраняем значение переменной dec16b в стеке
  20. ________lea_____ax, ds:[fmtstr]_________; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  21. ________call____PrintFormatString_______; Вызываем процедуру PrintFormatString(ax:fmtstr, ...)
  22. ________add_____sp, 6___________________; Выравниваем стек
  23. ________xor_____al, al__________________; Обнуляем регистр al
  24. ________call____ExitProcess_____________; Вызываем процедуру ExitProcess
  25. ____main endp __________________________; Конец процедуры main
  26. code ends ______________________________; Конец сегмента кода
  27. end main _______________________________; Конец файла. Точкой входа указывается процедура main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификатор %a который выводит адрес переменной в шестнадцатеричном формате.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr _db "Адрес 'string2': %a\0"
  6. ____string1 db "Евгений\0"
  7. ____string2 db "Довгополов\0"
  8. data ends
  9. code segment public ____________________; Начало сегмента кода
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc________________; Подключаем файл с функциями
  12. ____main proc __________________________; Начало процедуры main
  13. ________call____SetDataSegment__________; Вызываем процедуру SetDataSegment
  14. ________lea_____ax, ds:[string2]________; Загружаем адрес строки string2 в регистр ds:ax
  15. ________push____ax______________________; 2-й: Сохраняем значение регистра ax в стеке
  16. ________lea_____ax, ds:[fmtstr]_________; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  17. ________call____PrintFormatString_______; Вызываем процедуру PrintFormatString(ax:fmtstr, 'Довгополов')
  18. ________add_____sp, 2___________________; Выравниваем стек
  19. ________xor_____al, al__________________; Обнуляем регистр al
  20. ________call____ExitProcess_____________; Вызываем процедуру ExitProcess
  21. ____main endp __________________________; Конец процедуры main
  22. code ends ______________________________; Конец сегмента кода
  23. end main _______________________________; Конец файла. Точкой входа указывается процедура main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификаторы %d, %h, %o, %b и %f.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr db "DEC: %d\nHEX: %h\nOCT: %o\nBIN: %b\nFPU: %f\n\0"
  6. ____double dq 123.45
  7. data ends
  8. code segment public _______________; Начало сегмента кода
  9. ____assume _ds:data, cs:code
  10. ____include Handyfar.inc___________; Подключаем файл с функциями
  11. ____main proc _____________________; Начало процедуры main
  12. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  13. ________fld_____qword ptr[double]__; 6-й: Загружаем на вершину стека мат. сопроцессора double
  14. ________add_____ax, 1234___________; Копируем значение 1234 в регистр ax
  15. ________push____ax_________________; 5-й: Сохраняем значение регистра ax в стеке
  16. ________push____ax_________________; 4-й: Сохраняем значение регистра ax в стеке
  17. ________push____ax_________________; 3-й: Сохраняем значение регистра ax в стеке
  18. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  19. ________lea_____ax, ds:[fmtstr]____; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  20. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtstr, ...)
  21. ________add_____sp, 8______________; Выравниваем стек
  22. ________xor_____al, al_____________; Обнуляем регистр al
  23. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  24. ____main endp _____________________; Конец процедуры main
  25. code ends _________________________; Конец сегмента кода
  26. end main __________________________; Конец файла. Точкой входа указывается процедура main

Пример использования функции PrintFormatString для вывода форматированной строки в которой присутствуют спецификаторы %* и %s.

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr __db "Меня зовут %* %s.\0"
  6. ____mName ___db "Евгений\0"
  7. ____mSurname db "Довгополов\0"
  8. data ends
  9. code segment public _______________; Начало сегмента кода
  10. ____assume _ds:data, cs:code
  11. ____include Handyfar.inc___________; Подключаем файл с функциями
  12. ____main proc _____________________; Начало процедуры main
  13. ________call____SetDataSegment_____; Вызываем процедуру SetDataSegment
  14. ________lea_____ax, ds:[mName]_____; Загружаем адрес переменной mName в регистр ds:ax
  15. ________push____ax_________________; 3-й: Сохраняем значение регистра ax в стеке
  16. ________lea_____ax, ds:[mSurname]__; Загружаем адрес переменной mSurname в регистр ds:ax
  17. ________push____ax_________________; 2-й: Сохраняем значение регистра ax в стеке
  18. ________lea_____ax, ds:[fmtstr]____; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  19. ________call____PrintFormatString__; Вызываем процедуру PrintFormatString(ax:fmtstr, ...)
  20. ________add_____sp, 4______________; Выравниваем стек
  21. ________xor_____al, al_____________; Обнуляем регистр al
  22. ________call____ExitProcess________; Вызываем процедуру ExitProcess
  23. ____main endp _____________________; Конец процедуры main
  24. code ends _________________________; Конец сегмента кода
  25. end main __________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda