- •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
Краткий конспект к экзамену
1. Персональный компьютер (ПК) оперирует с большим количеством самых разнообразных данных, имеющих определенный формат, определяемый размером ячейки (количество бит), где данное хранится, и способом его представления. Форматы допустимых данных зависят от модели персонального компьютера и от набора команд для их обработки. Этот набор принят по умолчанию, независимо от модели ПК. Набор форматов данных для моделей i286 от базового ничем НЕ отличается, добавлены только несколько команд. Этот базовый набор образует так называемую платформу Winl6, обеспечивающую 16-разрядное программирование. Поняв базовый принцип организации данных, мы легко поймем и дальнейшие расширения форматов данных и команд для i386, i486, i586 и совместимых с ними моделей ПК, обеспечивающих работу в Win32.
Любая величина, видимая программе, имеет тип и должна быть соответствующим образом представлена и описана. Займемся для начала простыми типами данных: символы(characters ASCII), целые(char, int) и вещественные(float, double, long double) числа. Как правило, в задаче всегда известен диапазон вводимых данных (область определения). Диапазон результирующих данных известен далеко не всегда. Поэтому обычно считают, что такие данные должны иметь максимально допустимый диапазон значений. При этом нужно учитывать, что данные более длинные требуют и больше памяти.
Двоичная сиситема — ее основаниеи q=2. Число в этой системе счисления образоывано из множества цифр {0,1}. Базовая еденица компьютерных данных называется бит. Слово является удобным сокращенеием неуклюжего английского выражения binary digit, т.е. двоичная цифра. Таким образом, двоичное число — последовательность бит. Преобразование чисел:Для преобразования из двоичной системы в десятичную используют следующую таблицу степеней основания 2:
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Начиная с цифры 1 все цифры умножаются на два. Точка, которая стоит после 1, называется двоичной точкой. Преобразование двоичных чисел в десятичные: Допустим, вам дано двоичное число 110001. Для перевода в десятичное просто запишите его справа налево как сумму по разрядам следующим образом: 1*20+0*21+0*22+0*23+1*24+1*25=49
Доп.код:При записи числа в дополнительном коде старший разряд является знаковым. Если его значение равно 0, то в остальных разрядах записано положительное двоичное число, совпадающее с прямым кодом. Если же знаковый разряд равен 1, то в остальных разрядах записано отрицательное двоичное число, преобразованное в дополнительный код. Для получения значения, которое противоположно по знаку, все разряды, включая знаковый, инвертируются, а затем к результату добавляется единица.
Двоичное 8-ми разрядное число со знаком в дополнительном коде может представлять любое целое в диапазоне от −128 до +127. Если старший разряд равен нулю, то наибольшее целое число, которое может быть записано в оставшихся 7 разрядах равно 27 − 1, что равно 127.
2.3.ADD — ADD приемник, источник
INC — INC приемник
SUB — SUB приемник, источник
DEC — DEC приемник
CMP — CMP приемник, источник
MUL — MUL источник
DIV — DIV источник
4. AND операнд_1,операнд_2
OR операнд_1,операнд_2
ХОR операнд_1,операнд_2
TEST операнд_1,операнд_2
NOT операнд
на степень 2
MOV ax, число
SHL ax, степень полож. двойки
(SHR ax, отриц. степень двойки)
5. Преобразование двоичных чисел в десятичные
Допустим, вам дано двоичное число 110001. Для перевода в десятичное просто запишите его справа налево как сумму по разрядам следующим образом: 1*20+0*21+0*22+0*23+1*24+1*25=49
Преобразование десятичных чисел в двоичные
Допустим, нам нужно перевести число 19 в двоичное. Вы можете воспользоваться следующей процедурой :
19/2=9 c ост.1 > 9/2=4 с ост.1 > 4/2=2 с ост.0 > 2/2=1 с ост.0
1/2=0 с ост. 1
Итак, мы делим каждое частное на 2 и записываем остаток в конец двоичной записи. Продолжаем деление до тех пор, пока в делимом не будет 0. В результате получаем число 19 в двоичной записи: 10011.
Иногда, зная положительное число, требуется получить противоположное ему отрицательное число. Для этого используется команда NEG, обеспечивающая преобразование знака двоичных чисел из положительного в отрицательное и наоборот. Общий вид:
NEG <операнд> .
Пример. Пусть регистр AX содержит слово 0001H. После выполнения команды NEG AX содержимым регистра AX будет FFFFH. Таким образом, команда NEG инвертирует значения битов и прибавляет 1.
6. операции с двоичными числами со знаком.
ADD (Сложение). Определяет двоичную сумму двух указанных операндов. Результат помещается на место операнда-приемника, второй операнд остается без изменения. Общий вид:
ADD <1-й операнд>, <2-й операнд>
<1-й операнд> <-- <1-й операнд> + <2-й операнд>
Пример. Пусть регистр DL содержит число 58H, однобайтовая ячейка памяти TEST_BYTE содержит 27H. После выполнения команды ADD TEST_BYTE,DL в ячейку памяти будет записано 7FH:
содержимое регистра DL: 0101 10002 = 58H ;
содержимое ячейки TEST_BYTE: 0010 01112 = 27H;
новое содержимое ячейки TEST_BYTE: 0111 11112 = 7FH.
Флаги, затрагиваемые операцией: OF, ZF, AF, PF, CF.
2. ADC (Сложение с переносом). Определяет двоичную сумму двух указанных операндов и содержимого флага переноса CF. Результат помещается на место операнда-приемника, второй операнд остается без изменений. Общий вид:
ADC <1-й операнд>, <2-й операнд>
<1-й операнд> <-- <1-й операнд> + <2-й операнд> + <CF> .
Команда работает с байтами и со словами, со знаковыми и беззнаковыми двоичными числами. Первый операнд может храниться в регистре или ячейке памяти. Второй операнд может быть задан в регистре, ячейке памяти или непосредственным числовым значением. Не разрешается задавать операнды в регистрах сегментов, а также хранение (запись) двух операндов одновременно в ячейках памяти. Операнды могут быть байтами или словами, представлять числа со знаком или без знака. Поскольку команда ADC использует флаг переноса CF, то она может применяться для сложения чисел, длина которых превышает 16 бит.
Пример 1. Пусть регистр BX содержит число 4803H, регистр AX - число 2517H, а регистр флагов процессора содержит значение F047H (11110000010001112), то есть флаг переноса CF равен 1. После выполнения команды ADC AX,BX вместо 2517H в регистре AX будет записано 6D1BH:
содержимое BX: 0100 1000 0000 0011 = 4803H;
содержимое AX: 0010 0101 0001 0111 = 2517H;
флаг переноса CF: 1 ;
новое содержимое AX: 0110 1101 0001 1011 = 6D1BH.
Пример 2. Проиллюстрируем использование этой команды при сложении так называемых "длинных" чисел, которые не помещаются в одно слово. Пусть требуется сложить два таких числа:
224810H
23E1ADH
Сначала сложим младшие слова этих чисел, используя команду ADD:
4810H
E1ADH
------
(1)29BDH
Единица в скобках - это значение флага CF. Одновременно это значение, которое должно быть перенесено в следующий разряд. Мы должны его учесть при сложении старших разрядов этих чисел. Поэтому нужно воспользоваться командой ADC:
22H
23H