Как написать свою функцию вывода в консоль? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

наверно как-то с
GetStdHandle(STD_OUTPUT_HANDLE);

Решение задачи: «Как написать свою функцию вывода в консоль?»

textual
Листинг программы
.DATA 
s DB 'ВЫРАЖЕНИЕ',0
.CODE
mov ah,0EH
mov si,offset s
next:lodsb
int 10h 
test al,al
jnz next

Объяснение кода листинга программы

  1. s DB 'ВЫРАЖЕНИЕ',0 - в данной строке описывается переменная s типа DB (буфер), которая содержит строку 'ВЫРАЖЕНИЕ' и дополнительный символ 0, используемый для указания конца строки в кодировке ASCII.
  2. mov ah,0EH - в этой строке происходит перенос содержимого регистра ah в регистр ah с кодовым значением 0EH (0E = 14), которое соответствует коду функции вывода в консоль в кодировке ASCII.
  3. mov si,offset s - в данной строке происходит перенос содержимого регистра si в регистр si с смещением (offset) от начала сегмента данных (DS), где расположен буфер s.
  4. next:lodsb - в этой строке описывается цикл, который начинается с метки next. В теле цикла выполняется команда lodsb, которая загружает в регистр al байт из буфера s и увеличивает смещение буфера на 1.
  5. int 10h - в данной строке выполняется команда int, которая вызывает прерывание 10h (2x OS), отвечающее за вывод символов в консоль.
  6. test al,al - в этой строке выполняется команда test, которая сравнивает содержимое регистра al с самим собой (al,al). Если результат сравнения не равен 0 (то есть, если в регистре al содержится хотя бы один байт), то управление передается следующему командному октету.
  7. jnz next - в данной строке описывается условие цикла, которое проверяет результат предыдущей команды test. Если результат не равен 0 (то есть, если в регистре al содержится хотя бы один байт), то управление передается следующей итерации цикла с меткой next. Если же результат равен 0 (то есть, если в регистре al содержится 0), то цикл завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы