EXERSISE (Ассемблер - упражнения)
Описание файла
Файл "EXERSISE" внутри архива находится в папке "Ассемблер - упражнения". Текстовый-файл из архива "Ассемблер - упражнения", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр текстового-файла онлайн
Возможно не удалось распознать кодировку файла
УПРАЖНЕНИЯ ДЛЯ КНИГИ
В.Н.Пильщиков "Программирования на языке ассемблера ibm pc"
Глава 1. ОСОБЕННОСТИ ПЕРСОНАЛЬНОГО КОМПЬЮТЕРА
Оперативная память. Регистры. Представление данных (целых чисел, символь-
ных данных и др.). О представлении машинных команд.
Глава 2. ЯЗЫК АССЕМБЛЕРА. НАЧАЛЬНЫЕ СВЕДЕНИЯ.
Запись лексем (идентификаторов, чисел, строк). Запись предложений (ком-
ментариев, команд, директив). Директивы определения данных (db, dw, dd),
оператор type. Директивы equ и =. Простейшие константные (числа, символы,
имена констант, арифметические операторы) и адресные (имена переменных,
метки, счетчик размещения $, арифметические операторы) выражения. Стар-
шинство (всех) операторов.
УПРАЖНЕНИЯ.
2.1 a db 82h
Выписать три директивы db, эквивалентные данной, в которых начальное зна-
чение переменной a записано как двоичное число, как десятичное беззнако-
вое число и как десятичное знаковое число.
2.2 Описать переменную b размером в двойное слово с начальным значе-
нием 2^16.
2.3 Описать переменную-слово c, начальным значением которой является:
а) адрес этой же переменной;
б) адрес следующего слова памяти.
2.4 Описать массив d из 5 байтов с начальными значениями от -2 до 2.
2.5 Выписать все возможные варианты (кроме тех, где указываются коды
букв) описания символьной переменной s из первых 4 больших букв русского
алфавита.
2.6 Описать байтовый массив x из 101 элемента со следующими начальны-
ми значениями:
а) первые 50 элементов имеют значение 10, следующие 20 элементов -
значение '+', остальные - без начального значения;
б) средний элемент имеет значение 1, а все остальные - значение 0.
2.7 Описать байтовую матрицу b размера 30x50, в каждой строке которой
первые 47 элементов имеют значение -1, а последние три - значение 'q'.
2.8 n equ 10
Описать единичную матрицу e размера nxn из элементов-слов.
2.9 Воспользоваться подходящей директивой equ и предложить более ко-
роткий вариант записи директивы
s db "abcdefhg=abcdef+k"
2.10 Указать начальные значения элементов массивов x и y:
a=10
b=a
c equ a
d equ +a
x db a, b, c, d
a=2*a
y db a, b, c, d
Глава 3. ПЕРЕСЫЛКИ. АРИФМЕТИЧЕСКИЕ КОМАНДЫ.
Команды пересылки mov и xchg, оператор ptr. Особенности сложения и вычи-
тания знаковых и беззнаковых чисел, установки флагов cf, of, zf и zf. Ко-
манды сложения и вычитания (add, sub, inc, dec, neg, adc, sbb). Команды
умножения и деления (mul, imul, div, idiv). Команды cbw и cwd.
УПРАЖНЕНИЯ.
3.1 Определить, верны ли следующие утверждения:
а) Если операнды команды add интерпретировать как знаковые числа, то
флаг sf получает в этой команде значение 1 тогда и только тогда, когда
эти числа имеют один и тот же знак, а у результата команды - иной знак.
б) Если операнды команды sub x,y интерпретируются как знаковые числа
и x<y, то после выполнения этой команды флаги of и sf обязательно будут
иметь разные значения (of<>sf).
3.2 Определить флаги cf, of и sf после выполнения команды
add al,bl
при следующих исходных значениях регистров al и bl:
а) al=200, bl=90
б) al=-100, bl=30
в) al=-100, bl=-90
3.3 x db 3 dup(?) ;x[0..2]
Выписать команды, циклически сдвигающие элементы массива x на один байт
влево: (x0, x1, x2) ==> (x1, x2, x0).
3.4 y dd ?
Выписать команды, присваивающие переменной y значение 66000. (Вспомога-
тельные переменные не использовать.)
3.5 x db ?
Требуется в регистр cl записать значение переменной x, увеличенное на 2.
Определить, какой из следующих двух фрагментов правильно решает эту зада-
чу:
а) mov cl,x б) mov cl,x+2
add cl,2
3.6 Пусть в регистре bh находится код какой-то большой латинской бук-
вы и требуется записать в этот регистр код одноименной малой латинской
буквы. Определить, какой из следующих двух фрагментов правильно решает
эту задачу:
а) sub bh,'a' б) add bh,'a'-'a'
add bh,'a'
3.7 Пусть a, x и y - знаковые байтовые переменные. Вычислить
y = (a*x-12)^2 + (-a) div x
в предположении, что все промежуточные и окончательный результаты уклады-
ваются в размер слова.
3.8 Пусть d1, d2 и n - байтовые переменные. Считая, что значения d1 и
d2 - это символы-цифры (от "0" до "9"), записать в n число, десятичная
запись которого составлена из этих цифр (d1 - левая цифра).
3.9 Пусть h, m и s - байтовые переменные, а t - переменная размером
в двойное слово. Считая, что от начала суток прошло h часов (0<=h<24), m
минут и s секунд (0<=m,s<60), определить, сколько всего секунд прошло от
начала суток к этому моменту времени. Ответ записать в t.
3.10 Пусть t - переменная размером в двойное слово, а h, m и s - бай-
товые переменные. Считая, что прошло t секунд (0<=t<86400) от начала су-
ток, определить, сколько полных часов (h), минут (m) и секунд (s) прошло
к этому моменту времени.
3.11 x dd ?
y dd ?
z dd ?
w dd ?,?
Реализовать следующие операции над "длинными" числами:
а) z=x+y (считать, что сумма укладывается в двойное слово):
б) z=x-y (считать x>=y);
в) w=x*y (считать x и y беззнаковыми числами).
Глава 4. ПЕРЕХОДЫ. ЦИКЛЫ.
Безусловный переход (близкий, прямой и косвенный), оператор short. Коман-
да сравнения (cmp). Команды условного перехода (все). Команды управления
циклом (loop, loope/loopz, loopne/loopnz). Вспомогательные операции оста-
нова программы и ввода-вывода (finish, inch, inint, flush, outch, outint,
outword, outstr, newline).
УПРАЖНЕНИЯ.
4.1 В регистре bl находится число от 0 до 15. Записать в bl код соот-
ветствующей шестнадцатиричной цифры как символа (в качестве "буквенных"
цифр использовать большие латинские буквы от 'a' до 'f').
4.2 x dd ?
y dd ?
Рассматривая значения x и y как беззнаковые числа, реализовать условный
переход на метку less, если x<y.
4.3 y - переменная-слово со значением от 1 до 2100. Определить, яв-
ляется ли год y високосным, и в регистр cl записать 1, если является, и 0
в противном случае.
(По "новому стилю" високосными считаются года, кратные 4, однако из
всех годов, кратных 100, високосными являются лишь кратные 400: 1700,
1800 и 1900 - невисокосные, 2000 - високосный).
4.4 h, m и s - байтовые переменные, причем 0<=h<24, 0<=m,s<60. Рас-
сматривая h, m и s соответственно как число полных часов, минут и секунд,
прошедших к некоторому моменту суток, присвоить этим переменным значения,
соответствующие моменту, на 1 секунду большему. (Учесть смену суток.)
4.5 m и d - байтовые переменные (1<=m<=12 и 1<=d<=31). Рассматривая
значения этих переменных как дату некоторого дня (месяц и число) невисо-
косного года, записать в эти переменные дату следующего дня. (Учесть сме-
ну года.)
4.6 p и q - байтовые переменные, причем значением p является знаковое
число, а значение q строго положительно. Рассматривая эти переменные как
дробь (рациональное число) p/q, привести эту дробь к несократимому виду
(например, дробь (-45)/30 надо привести к виду (-3)/2).