В этот раз обсудим возможности
языка ассемблера. Итак, мы знаем
как давать команду процессору.
Но что, если её нужно зациклить?
А как же условия? Тут же просто
поочередные команды!
Это главная часть курса. Итак,
начнем с простого.
Напишем библиотеку, которая печатает
на экран и воспользуемся ей.
-
как это хранится?
Файлы библиотек, или же
подключаемые файлы принято
сохранять с расширением *.inc.
Есть ли отличия? Вообще нет.
Просто это дань времени и
структуризации программы. как создать функцию?
2.1
Функций как таковых в асме нету.
Зато есть метки! и прыжки.
Например, небезопасный метод
зависнуть процессор:
metka: jmp metka
Как можно заметить, метки
обозначаются как "название:".
Ну а если нужно несмотря ни на
что прыгнуть на метку, то
используется конструкция
"JMP название".
Но это не все, поверьте! Есть
и условные прыжки! Для
большинства из них нужно
предварительно вызвать
сравнивающую команду:
"CMP оператор1, оператор2".
В ассемблере есть эти типы прыжков:
JMP, безусловно прыгнуть
JE, оп1 == оп2
JNE, оп1 != оп2
JG, оп1 > оп2
JGE, оп1 >= оп2
JL, оп1 < оп2
JLE, оп1 <= оп2
JZ, активен zero-флаг
-
JC, активен carry-флаг
Последние 2 рассмотрим позже.
И так мы можем прыгать на метки.
Удобно ведь?
2.2
А как же функции? Для подобных
нужд в ассемблере есть
директивы "CALL" и "RET".
Пример:
call func
cli
hlt
jmp $-2
func:
do sth
ret
Этот код вызывает функцию func и
зависает. Удобно ведь?
Ближе к делу
давайте разберем работу 10-го
прерывания 14-й команды.
mov ah, 0Eh
int 10h
Итак, оно печатает символ из
ah на экран. Можно применить
метки, чтобы зациклить печать
и поставить условие для выхода
из цикла. А ведь можно обернуть
все в функцию! Вот итоговый код:
file: print.inc
print:
mov ah, 0Eh
loopa:
lodsb test al, al
jz loopb
int 10h
loopb:
ret
file: example.asm
use16
org 7C00h
jmp main
include "print.inc"
msg db "Hello from ColaOS!", 00h
main:
mov si, msg call print
cli hlt jmp $-2
Возник вопрос? Подскажу! ;)
Предыдущий урок: https://habr.com/ru/post/666458/
Следующий урок: здесь_будет_ссылка
Комментарии (4)
sden77
18.05.2022 18:34Честно говоря, не совсем понятно, кому реально в современном мире может понадобится руководство в стиле "ассеблер для чайников". Программистом на этом языке видится всё же опытный сишник, которому надо сделать какие-то ассемблерные вставки в коде драйвера устройства или типа того.
LeshaRB
Вы в следующий раз пишите статьи из одного абзаца
Сообществу хабра это нравится, и показывает уровень профессионализма автора...
TalismanChet Автор
хорошо, приму к сведению