Главная » Просмотр файлов » Пильщиков В.Н. - Упражнения по языку ассемблера MASM

Пильщиков В.Н. - Упражнения по языку ассемблера MASM (1110572), страница 3

Файл №1110572 Пильщиков В.Н. - Упражнения по языку ассемблера MASM (Пильщиков В.Н. - Упражнения по языку ассемблера MASM) 3 страницаПильщиков В.Н. - Упражнения по языку ассемблера MASM (1110572) страница 32019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 3)

WD DB 'воскресенье' ; день недели

DATE ENDS

Описать переменные D1, D2, D3 и D4 типа DATE со следующими начальными значениями их полей (знак ? означает, что поле не должно иметь начального значения):

Y M D WD

D1: 1945 5 13 среда

D2: 1997 12 ? четверг

D3: ? ? ? ?

D4: 1997 ? ? воскресенье

Директивы, описывающие эти переменные, должны быть максимально короткими.

4.28 TIME STRUC ; время какого-то момента суток

H DB ? ; час (от 0 до 23)

M DB ? ; минута (от 0 до 59)

S DB ? ; секунда (от 0 до 59)

TIME ENDS

T TIME <>

T1 TIME <>

Присвоить переменной T1 время, на 1 секунду большее времени T. (Учесть смену суток.)

4.29 Описать структурный тип PERSON (человек) со следующими тремя полями: FAM (фамилия) - из 20 байтов, NAME (имя) - из 10 байтов и AGE (возраст) - 1 байт. Описать также (без начальных значений) переменную P типа PERSON и массив GR (группа людей) из 40 элементов того же типа. Считая, что этим переменным в программе уже присвоены какие-то значения, решить следующую задачу (ответ записать в регистр AL):

а) определить, является ли P человеком в возрасте 17 лет, вторая буква в фамилии которого - это "е" (ответ: 1 (является) или 0);

б) определить, сколько людей из GR имеют тот же возраст, что и P;

в) напечатать фамилию самого молодого человека из группы GR (любого, если таких несколько);

г) определить, сколько людей из GR имеют то же имя, что и P;

д) определить, есть ли в GR хотя бы одна пара однофамильцев (ответ: 1 (есть) или 0).

4.30 Имеются символьные переменные 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 ? ;длина подстроки (число символов в ней)

SUBSTR ENDS

(Например, директива X SUBSTR <T,60,20> описывает подстроку из последних 20 символов строки T.)

Имеются две подстроки:

A SUBSTR <>

B SUBSTR <>

которые в процессе выполнения программы получили некоторые значения (считать, что эти значения корректно задают подстроки: подстрока не выходит за пределы строки и т.п.).

Решить следующую задачу:

а) если в подстроку A входит пробел, тогда сделать значением переменной B подстроку из 15 начальных символов строки S;

б) если подстроки A и B равны (состоят из равного числа попарно равных символов), тогда в регистр AL записать 1, а иначе - 0.

5. БИТОВЫЕ ОПЕРАЦИИ. УПАКОВАННЫЕ ДАННЫЕ.

5.1 Указать значения регистра AL и флага ZF после выполнения следующей пары команд:

а) MOV AL,1010b б) MOV AL,0 в) MOV AL,1101b г) MOV AL,100b

NOT AL NOT AL AND AL,0111b AND AL,011b

д) MOV AL,100b е) MOV AL,0F0h ж) MOV AL,0 з) MOV AL,101b

TEST AL,011b OR AL,0Fh XOR AL,0FFh XOR AL,AL

5.2 A DB ?

B DB ?

X DW ? ; число со знаком

Рассматривая A и B как логические переменные, принимающие лишь значения 0 ("ложь") и 0FFh ("истина"), реализовать следующее присваивание:

а) A := A and not B or not A and B

б) A := B or (X>2) and A

в) A := A>=B (команды условного перехода не использовать)

5.3 Пусть под логические переменные A и B выделено по байту:

A DB ?

B DB ?

и пусть выбрано следующее представление для логических значений: "ложь" - нулевой байт, "истина" - любой ненулевой байт. Реализовать при этом представлении следующие операции:

а) A:=not A б) A:=A and B в) A:=A or B

5.4 Предложить машинное представление (размером в байт) для логических значений, которое отлично от известного представления

false = 00h, true = 0FFh

и при котором команды NOT, AND и OR правильно реализуют логические операции отрицания, конъюнкции и дизъюнкции соответственно.

5.5 Указать значения регистра AL и флага CF после выполнения следующей группы команд:

а) MOV AL,101b б) MOV AL,1100b в) MOV AL,110b г) MOV AL,110b

SHL AL,1 MOV CL,5 SHR AL,1 MOV CL,3

SHL AL,CL SHR AL,CL

д) MOV AL,0F0h е) MOV AL,101b ж) MOV AX,1122h з) MOV AX,1122h

ROL AL,1 MOV CL,2 SHR AH,1 SHR AH,1

ROR AL,CL RCL AL,1 RCR AL,1

5.6 Пусть X и Y - беззнаковые переменные-слова. Не используя команды умножения и деления, реализовать следующее присваивание:

а) Y:=4*X - X div 8 + X mod 16

б) Y:=35*X

5.7 X DW ? ; число без знака

Реализовать условный переход на метку L, если X - четное число, четырьмя способами - соответственно с помощью команд DIV, AND, TEST и SHR. Какой из этих способов лучше и почему?

5.8 Y20 DW 30 DUP(?)

Рассматривая элементы массива Y20 как порядковые номера некоторых годов 20 века (от 1901 до 2000), подсчитать количество високосных годов среди них и записать ответ в регистр AL.

5.9 X DD ? ; число со знаком

Не используя команды условного перехода, записать в регистр AL знаковый бит числа X, т.е. 1, если X<0, и 0 иначе.

5.10 Реализовать следующую операцию:

а) сделать переход на метку L, если 4 средних бита регистра AL - это 1001b;

б) сделать переход на метку L, если 2 правых бита регистра AL равны 2 правым битам регистра BL;

в) сделать переход на метку L, если равны 3 левых и 3 правых бита регистра AX;

г) записать в регистр CL байт, составленный из 4 левых битов регистра AL и 4 правых битов регистра BL;

д) в регистре AX заменить 5 левых битов на 5 правых.

5.11 Решить следующую задачу:

а) подсчитать число двоичных единиц в значении регистра AX и записать это число в регистр DH;

б) не используя команды деления, напечатать значение регистра AX в виде беззнакового двоичного числа без незначащих нулей;

в) перевернуть содержимое регистра AX;

г) не используя команды умножения, ввести беззнаковое двоичное число и записать его в регистр AX (считать, что число задано без ошибок, содержит от 1 до 16 цифр и заканчивается пробелом).

5.12 Пусть A, B - беззнаковые переменные-слова, а C - переменная типа DWORD. Без команды умножения реализовать операцию C:=16*A+B.

5.13 Не используя команды умножения и деления и используя буквы A-F как "буквенные" 16-ричные цифры, решить следующую задачу:

а) вывести значение регистра AX в виде 4-значного шестнадца-тиричного числа;

б) ввести шестнадцатиричное число и записать его в регистр AX (считать, что число записано без ошибок, содержит от 1 до 4 цифр, за числом следует пробел).

5.14 При так называемом двоично-десятичном представлении целых (неотрицательных) чисел каждая цифра в десятичной записи числа заменяется на 4-битовый двоичный код этой цифры (0  0000, 1  0001, ..., 9  1001), причем соседние пары таких четверок упаковываются в один байт. Например, десятичное число 193 в этом представлении имеет следующий вид:

0000 0001 1001 0011

Решить следующую задачу:

а) в регистре BX хранится число от 0 до 9999, представленное в двоично-десятичном виде; перевести его в обычное двоичное представление и записать в регистр AX;

б) регистре AX хранится число от 0 до 9999 в обычном двоичном представлении; записать в регистр BX двоично-десятичное представление этого числа.

5.15 T RECORD A:1=1, B:3=5, C:2

X T < ,2>

Указать значение:

а) всего байта X и полей A, B и C в нем;

б) выражений WIDTH X, WIDTH A, WIDTH B и WIDTH C;

в) выражений MASK X, MASK A, MASK B и MASK C;

г) выражений A, B и C.

5.16 TR RECORD A:3, B:2, C:3

R TR <>

Реализовать следующую операцию (все поля - из переменной R):

а) полю A присвоить значение поля C;

б) поменять местами значения полей A и C;

в) перейти на метку L, если значения полей A и B равны.

5.17 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 (распаковать дату);

б) переменной DT2 присвоить дату, являющуюся значением DT1 (упаковать дату);

в) проверить на равенство даты DT1 и DT2 и записать в регистр L значение 1, если даты равны, и значение 0 иначе.

5.18 DATE RECORD D:5, M:4, Y:7 ; дата в формате

; "день-месяц-год (две последние цифры)"

DATE1 RECORD Y1:7, M1:4, D1:5 ; дата в формате

; "год-месяц-день"

A DATE <>

A1 DATE1 <>

Решить следующую задачу:

а) вывести дату A в виде dd.mm.yy (например: 16.5.97);

б) присвоить переменной A1 ту же дату, что записана в переменной A.

5.19 Имеются числовые константы L и R (L<R) и переменные

M DB (R-L)/8+1 DUP(?)

S DB (R-L)/8+1 DUP(?)

X DW ? ; LXR

Рассматривая M и S как упакованные множества целых чисел из отрезка [L,R], решить следующую задачу:

а) из множества M удалить все элементы, входящие в множество S;

б) перейти на метку SUBSET, если множество S является подмножеством множества M;

в) в множество M добавить элемент X;

г) из множества M удалить элемент X;

д) определить, сколько элементов входит в множество M, и записать ответ в регистр AX;

е) напечатать все числа, входящие в множество M.

5.20 var B: packed array[0..99] of boolean;

i: 0.99;

Предложить для массива B упакованное машинное представление, описать этот массив и реализовать следующую операцию:

а) присвоить всем элементам массива B значение true;

б) поменять на противоположное значение всех элементов массива B;

в) B[28] := not B[28];

г) B[i] := false;

д) B[i] := B[i] and B[41] or B[80]

6. СЕГМЕНТИРОВАНИЕ. ПОЛНЫЕ ПРОГРАММЫ. СТЕК.

6.1 Пусть DS=8208h, ES=8400h, BX=0FFF0h, SI=12h, offset X=28Ah.

Вычислить (20-разрядный) абсолютный адрес второго операнда следующей команды:

а) MOV AX,DS:210Ah б) CMP BX,ES:X

в) ADD CX,DS:[BX] г) OR DX,ES:X[BX+SI]

6.2 Пусть DS=1100h, SS=0FF00h, BX=8000h, BP=8000h, SI=9003h.

Определить, какой сегментный регистр подразумевается по умолчанию в следующей команде, и вычислить абсолютный адрес ее первого операнда:

а) SUB [SI],CL б) MOV [BX+2],DX

в) MOV [BP+2],DX г) AND [BP+SI-1],BH

6.3 X DW ?

Среди перечисленных команд указать ошибочные:

а) MOV DS,1000h б) MOV DS,AX в) MOV CS,AX г) MOV AX,CS

д) MOV ES,DS е) MOV DS,X ж) MOV X,CS з) LEA ES,X

6.4 Требуется записать в регистр AL содержимое байта памяти с абсолютным адресом 01234h. Определить, какие из следующих групп команд правильно решают эту задачу, а какие - нет и почему.

а) MOV AL,1234h б) MOV BX,1234h в) MOV DS,0

MOV AL,[BX] MOV AL,DS:1234h

г) MOV AX,0 д) MOV AX,1234h е) MOV AX,123h

MOV ES,AX MOV ES,AX MOV DS,AX

MOV AL,ES:1234h MOV AL,ES:0 MOV AL,DS:4

6.5 Реализовать следующую операцию:

а) поменять местами значения байтов с абсолютными адресами 80000h и 80024h;

б) в слово памяти с абсолютным адресом 803FAh записать содержимое слова памяти с абсолютным адресом 90400h;

в) подсчитать количество нулевых байтов среди 20 байтов памяти, начинающихся с абсолютного адреса 12345h, и записать ответ в регистр AL.

6.6 Пусть в программе имеются следующие программные сегменты:

A SEGMENT

DW 100 DUP(?)

A ENDS

B SEGMENT

DW 100 DUP(?)

B ENDS

Реализовать перепись содержимого всего сегмента B в сегмент A.

6.7 ABS DD ?

PAIR DD ?

Значение переменной ABS трактуется как 20-разрядный абсолютный адрес некоторой ячейки памяти, а значение переменной PAIR - как адрес этой же ячейки, но заданный в виде адресной пары сегмент:смещение (seg:ofs), причем в силу "перевернутого" представления двойных слов в памяти часть ofs находится в первом слове этой переменной, а часть seg - во втором.

Не используя команды умножения и деления, решить следующие задачи:

а) преобразовать абсолютный адрес ABS в адресную пару PAIR;

б) преобразовать адресную пару PAIR в абсолютный адрес ABS;

в) нормализовать адресную пару PAIR, т.е. преобразовать ее к виду, где смещение ofs не превосходит 15 (0Fh); например, пару 4567h:1112h надо привести к виду 4678h:2h.

6.8 Пусть переменная-слово D описана в программном сегменте D1, переменная E - в сегменте E1, а переменная S - в сегменте S1. Пусть имеется директива (C - сегмент команд)

ASSUME CS:C, DS:D1, ES:E1, SS:S1

Для каждой из следующих команд определить, какой из префиксов (DS:, ES: или SS:) выберет ассемблер при трансляции ее второго операнда, и определить, сохранит ли ассемблер этот префикс при формировании соответствующей машинной команды.

а) MOV AX,D б) MOV AX,E в) MOV AX,S

г) ADD AX,D[BX] д) ADD AX,E[SI] е) ADD AX,S[BX+DI]

ж) CMP AX,D[BP] з) CMP AX,E[BP+SI+2] и) CMP AX,S[BP+DI]

6.9 Пусть переменная-слово D описана в сегменте D1, а переменная-слово E - в сегменте E1 и пусть регистры DS и ES уже установлены на начало сегментов D1 и S1 соответственно. Реализовать присваивание AX:=D+E при условии, что имеется следующая директива ASSUME (C - имя сегмента команд):

а) ASSUME CS:C, DS:D1, ES:S1

б) ASSUME CS:C, DS:D1

в) ASSUME CS:C, ES:S1

г) ASSUME CS:C

6.10 Пусть в программе описаны следующие три сегмента:

A SEGMENT B SEGMENT C SEGMENT

... .. ...

X DW 1000 DUP(?) Y DW 1000 DUP(?) Z DW 1000 DUP(?)

... ... ...

A ENDS B ENDS C ENDS

Характеристики

Тип файла
Документ
Размер
214 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее