- •5. Преобразование двоичных чисел в десятичные
- •Преобразование десятичных чисел в двоичные
- •1H ;Перенос от предыдущей операции.
- •10. Общая структура программы на языке Ассемблер. Сегмент кода. Сегмент данных.
- •11. Подготовка, компиляция, компоновка ассемблерных программ
- •12. Отладка ассемблерных программ. Выполнение ассемблерных программ.
- •13. Формат директив и машинных команд. Директивы инициализации данных. Директивы описания данных на языке Ассемблера.
- •14. Простейшие директивы сегментации. Модели памяти. Сегменты данных.
- •15. Стандартные директивы сегментации. Команды пересылки данных.
- •16. Организация стека. Команды работы со стеком.
- •17. Команды двоичной арифметики (сложение, вычитание). Влияние на регистр флагов
- •18. Команды двоичной арифметики (умножение, деление). Влияние на регистр флагов.
- •19. Логические операции
- •23. Команды передачи управления. Команды условной передачи управления для операндов без знака. Дальность адресации.
- •24. Команды передачи управления. Команды условного перехода и флаги.
- •25.Организация цикла
- •29.Обработка массивов
- •30.Вызов подпрограмм
- •32. Повторяющиеся блоки и макросы
- •35.Обработка прерываний в реальном режиме.
- •36.Ввод информации с клавиатуры
- •1. Средства dos
- •2. Средства bios
- •37. Использование функций Int 21h (01h, 06h, 07h) для ввода информации.
- •Использование функций Int 21h (08h, 0Ah, 0Bh) для ввода информации.
- •Использование функций Int 21h (0Ch, 3Fh) для ввода информации.
- •Использование функций Int 16h bios для ввода информации
- •Использование функций Int 21h (02h, 06h, 09h) для вывода информации на экран.
- •Использование функций Int 21h для ввода, вывода информации в файл.
- •Использование функций Int 10h bios (00h,4Fh,02h).
- •Использование функций Int 10h bios (03h,08h,09h).
- •Использование функций Int 10h bios (0Ah,0Eh,13h).
- •Вывод графической информации на экран. Видеорежимы.
- •47. Ассемблер и языки высокого уровня. Вызов процедур.
- •48. Создание встраиваемого ассемблерного кода. Ассемблер, встроенный в программу на языке Pascal.
- •49. Создание встраиваемого ассемблерного кода. Ассемблер, встроенный в программу на языке с.
- •50. Охарактеризуйте системные средства управления памятью. Опишите структуру и образ памяти программ .Exe и .Com.
- •51. Трансляторы и интерпретаторы - общая схема работы.
- •Формат командных операторов
- •Формат директив ассемблера и операторов распределения данных
- •Имя Директива Операнды ;Комментарий
- •Элементы операторов
- •Регистры
- •Переменные
- •Числовые константы
- •Символьные константы
- •Сегменты и процедуры
- •Segment (начало сегмента) и ends (конец сегмента).
- •Система команд микропроцессора 8086
- •Команды передачи данных
- •Общие команды передачи данных
- •Команда mov
- •Команда обмена xchg
- •Команда xlat
- •Команды lea, lds и les
- •Команды lahf и sahf
- •Стековые команды
- •Команды ввода-вывода
- •In ac,port out port,ac (прямая укороченная адресация)
- •In ac,dx out dx,ac (косвенная адресация) команды арифметических операций
- •Команды сложения Команда add
- •Команда imul
- •Команды деления
- •Команда div
- •Команда idiv
- •Команды преобразования
- •Команды десятичной арифметики
- •Команды для формата bcd
- •Команды для формата ascii
- •Команды логических операций и команды сдвигов команды логических операций
- •Команды сдвигов
- •Команды передачи управления
- •Команды безусловных переходов
- •Команды условных переходов
- •Команды вызова подпрограмм
- •Команды возврата из подпрограмм
- •Команды управления циклами
- •Команды прерываний
- •Int type - вызов прерывания с номером type (от 0 до 255),
- •Цепочечные команды
- •Префикс повторения
- •Команда movs
- •Команда cmps
- •Команда scas
- •Команда lods
- •Команда stos
47. Ассемблер и языки высокого уровня. Вызов процедур.
- Большинство современных компиляторов позволяют комбинировать в одной программе код, написанный на разных языках программирования. Это позволяет быстро писать сложные программы используя высокоуровневый язык, не теряя быстродействия в критических ко времени задачах, используя для них части написанные на языке ассемблера. Комбинирование достигается несколькими приемами:
1) Вставка фрагментов на языке ассемблера в текст программы (специальными директивами языка) или написание процедур на языке ассемблера. Способ хороший для несложных преобразований данных, но полноценного ассемблерного кода — с данными и подпрограммами, включая подпрограммы с множеством входов и выходов, не поддерживаемых высокоуровневыми языками, с помощью него сделать нельзя.
2)Модульная компиляция. Большинство современных компиляторов работают в два этапа. На первом этапе каждый файл программы компилируется в объектный модуль. А на втором объектные модули линкуются (связываются) в готовую программу. Прелесть модульной компиляции состоит в том что каждый объектный модуль будущей программы может быть полноценно написан на своем языке программирования и скомпилирован своим компилятором (ассемблером).
- Процедуры
Процедурой в ассемблере является все то, что в других языках называют подпрограммами, функциями, процедурами и т.д. Ассемблер не накладывает на процедуры никаких ограничений — на любой адрес программы можно передать управление командой CALL, и оно вернется к вызвавшей процедуре, как только встретится команда RET. Такая свобода выражения легко может приводить к трудночитаемым программам, и в язык ассемблера были включены директивы логического оформления процедур.
метка proc язык тип USES регистры ; TASM
...
ret
метка endp
Все операнды PROC необязательны.
Тип может принимать значения NEAR и FAR, и если он указан, все команды RET в теле процедуры будут заменены соответственно на RETN и RETF. По умолчанию подразумевается, что процедура имеет тип NEAR в моделях памяти TINY, SMALL и COMPACT.
Операнд язык действует аналогично такому же операнду директивы .MODEL, определяя взаимодействие процедуры с языками высокого уровня. В некоторых ассемблерах директива PROC позволяет также считать параметры, передаваемые вызывающей программой. В этом случае указание языка необходимо, так как различные языки высокого уровня используют разные способы передачи параметров.
USES — список регистров, значения которых изменяет процедура. Ассемблер помещает в начало процедуры набор команд PUSH, а перед командой RET — набор команд POP, так что значения перечисленных регистров будут восстановлены.
48. Создание встраиваемого ассемблерного кода. Ассемблер, встроенный в программу на языке Pascal.
- Конвенция Pascal
Самый очевидный способ выражения вызова процедуры или функции языка высокого уровня, после того как решено, что параметры передаются в стеке и возвращаются в регистре АХ/ЕАХ, — это способ, принятый в языке PASCAL — просто поместить параметры в стек в естественном порядке. В этом случае запись
some_proc(a,b,c,d,e)
превращается в
push a push b push с push d push e call some_proc
Это значит, что процедура some_proc, во-первых, должна очистить стек по окончании работы (например, завершившись командой ret 10) и, во-вторых, параметры, переданные ей, находятся в стеке в обратном порядке:
some_proc proc
push bp
mov bp,sp ; создать стековый кадр
a equ [bp+12] ; определения для простого доступа к параметрам
b equ [bp+10]
c equ [bp+8]
d equ [bp+6]
e equ [bp+4]; текст процедуры, использующей параметры а, Ь, с, d, e
ret 10
some_proc endp
- Встроенный ассемблер в Pascal
Код на паскале
asm
Код на ассемблере.
end;
Код на паскале.
Для использования меток перед меткой нужно ставить знак @.