Функция 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 (Загрузить вещественное число).