EXERSISE (Ассемблер - упражнения), страница 3
Описание файла
Файл "EXERSISE" внутри архива находится в папке "Ассемблер - упражнения". Текстовый-файл из архива "Ассемблер - упражнения", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр 3 страницы текстового-файла онлайн
языка Паскаль (n - константа с неотрицательным значением, x и y - знако-
вые байтовые переменные):
case n/8 of
1,4,5,7: y:=-y;
0,3: x:=y div 3;
2,6: y:=abs(x)
end
5.20 data struc ;дата
d db 1 ;число
m db ? ;номер месяца
wd db 'воскресенье' ;день недели
data ends
Описать переменные d1, d2, d3 и d4 типа data со следующими начальными
значениями их полей (знак ? означает, что поле не должно иметь начального
значения):
d m wd
d1: 5 1 среда
d2: 1 5 воскресенье
d3: ? ? ?
d4: 1 ? воскресенье
Директивы, описывающие эти переменные, должны быть максимально короткими.
5.21 time struc ;время какого-то момента суток
h db ? ;час (от 0 до 23)
m db ? ;минута (от 0 до 59)
s db ? ;секунда (от 0 до 59)
time ends
t time <>
t1 time <>
Присвоить переменной t1 время, на 1 секунду большее времени t. (Учесть
смену суток.)
5.22 person struc ;информация о человеке
fam db 20 dup(?) ;фамилия
nam db 10 dup(?) ;имя
age db ? ;возраст
person ends
gr person 40 dup(<>) ;группа людей
f db "Школьный",12 dup(" ")
n db 10 dup(?)
Решить следующие задачи:
а) В регистр al записать возраст самого старшего из людей группы gr.
б) Если среди людей из группы gr есть человек с фамилией, указанной в
переменной f, тогда в переменную n записать имя этого человека (любого,
если их несколько).
в) Если среди людей группы gr есть тезки (с одинаковыми именами), тог-
да любое из повторяющихся имен записать в переменную n.
5.23 Имеются символьные переменные s и t:
s db 256 dup(?) ;s[0..255]
t db 80 dup(?) ;t[0..79]
подстроки которых будем представлять структурами типа substr:
substr struc
astr dw ? ;начальный адрес строки, в которую входит подстрока
indx db ? ;индекс элемента строки, с которого начинается подстрока
leng db ? ;длина подстроки (число символов в ней)
(Например, директива x substr <t,59,20> описывает подстроку из последних
20 символов строки t.)
Имеются две подстроки:
a substr <>
b substr <>
которые в процессе выполнения программы получили некоторые значения (счи-
таем, что эти значения корректно задают подстроки: подстрока не выходит
за пределы строки и т.п.).
Решить следующие задачи:
а) Если в подстроку a входит пробел, тогда сделать значением перемен-
ной b подстроку из 15 начальных символов строки s.
б) Если подстроки a и b равны (состоят из равного числа попарно равных
символов), тогда в регистр al записать 1, а иначе 0.
Глава 6. БИТОВЫЕ ОПЕРАЦИИ. УПАКОВАННЫЕ ДАННЫЕ.
Логические команды (not, and, test, or, xor), вычисление логических выра-
жений. Команды сдвига (shl, shr, sal, sar, rol, ror, rcl, rcr), быстрое
умножение и деление на степени двойки. Упакованные данные, приемы их об-
работки. Множества: представление и операции. Записи: описание типов и
переменных, операторы width и masm.
УПРАЖНЕНИЯ.
6.1 Пусть под логические переменные a и b выделено по байту:
a db ?
b db ?
и пусть выбрано следующее представление для логических значений: "ложь" -
нулевой байт, "истина" - любой ненулевой байт. Реализовать при этом пред-
ставлении следующие операции:
а) a:=not a б) a:=a and b в) a:=a or b
6.2 x и y - переменные-слова, значения которых рассматриваются как
числа без знака. Не используя команды умножения и деления, реализовать
следующие вычисления:
а) y:=4*x - x div 8 + x mod 16
б) y:=35*x
6.3 Не используя команды деления, вывести значение регистра ax в виде
4-значного шестнадцатиричного числа.
6.4 Не используя команды умножения, ввести шестнадцатиричное число и
записать его в регистр ax. Считать, что число записано без ошибок, содер-
жит от 1 до 4 цифр ("буквенные" цифры заданы заглавными буквами), за ко-
торыми следует пробел.
6.5 x dd ? ;число со знаком
Реализовать вычисление al=sign(x), т.е. в регистр al записать 1 при x>0,
записать 0 при x=0 или записать -1 при x<0.
6.6 x dw ?
Подсчитать количество двоичный единиц в слове x. Ответ записать в al.
6.7 Перевернуть содержимое регистра bh (например: 11001010b ->
01010011b).
6.8 tr record a:3,b:2,c:3
r tr <>
Реализовать следующие операции (все поля - из переменной r):
а) полю a присвоить значение поля c;
б) поменять местами значения полей a и c;
в) перейти на метку eq, если значения полей a и b равны.
6.9 date1 struc ;дата в виде структуры
d1 db ? ;день (от 1 до 31)
m1 db ? ;номер месяца (от 1 до 12)
y1 db ? ;год (две последние цифры - от 0 до 99)
date1 ends
date2 record d2:5, m2:4, y2:7 ;дата в виде записи
dt1 date1 <>
dt2 date2 <>
Решить следующие задачи:
а) Проверить на равенство даты dt1 и dt2 и записать в регистр al зна-
чение 1, если даты равны, и значение 0 иначе.
б) Переменной dt2 присвоить дату, являющуюся значением dt1.
в) Переменной dt1 присвоить дату, являющуюся значением dt2.
6.10 date record d:5, m:4, y:7 ;дата в формате
;"день-месяц-год (две последние цифры)"
date1 record y1:5, m1:4, d1:7 ;дата в формате "год-месяц-день"
a date <>
b date <>
a1 date1 <>
Решить следующие задачи:
а) Вывести дату a в виде dd.mm.yy (например: 14.6.90).
б) Определить, предшествует ли дата a дате b, и записать ответ 1
(предшествует) или 0 в регистр al.
в) Присвоить переменной a1 ту же дату, что записана в переменной a.
6.11 Имеются числовые константы l и r (l<r) и переменные
m db (l-r)/8+1 dup(?)
s db (l-r)/8+1 dup(?)
x dw ? ;l<=x<=k
Рассматривая m и s как множества целых чисел из отрезка [l,r], решить
следующие задачи:
а) Из множества m удалить все элементы, входящие в множество s.
б) В множество m добавить элемент x.
в) Из множества m удалить элемент x.
г) Определить, сколько элементов входит в множество m. Ответ записать
в регистр al.
д) Вывести все числа, входящие в множество m.
е) Передать управление на метку subset, если множество s является
подмножеством множества m.
6.12 Для массива x[0..511], элементами которого являются числа от 0
до 3, предложить машинное представление, наиболее экономное по расходу
памяти, и реализовать следующие операции:
а) перейти на метку less, если x[6]<x[197]
б) x[i]:=x[45], где i - значение регистра si и 0<=i<=255.
в) элементы массива x циклически сдвинуть на одну позицию влево.
Глава 7. ПРОГРАММНЫЕ СЕГМЕНТЫ.
Сегментирование адресов в ПК, соглашения о сегментных регистрах. Програм-
мные сегменты. Операторы offset и seg, адресные переменные. Директива
assume. Начальная загрузка сегментных регистров. Структура программы на
языке ассемблера. Директива include.
УПРАЖНЕНИЯ.