TASK_ASM (1000388), страница 3

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

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

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

и пусть сегмент команд имеет имя CODE. Предполагая неопределенными значения регистров DS и ES и не используя регистр SS, реализовать (выписать подходящую директиву ASSUME и группу команд) следующее сложение массивов:

а) Y:=X+Y б) Z:=X+Y

6.11 C SEGMENT

ASSUME CS:C

X DW 1

BEG: MOV AX,Y

ADD AX,X

...

Y DW 2

C ENDS

При трансляции команды MOV ассемблер зафиксирует ошибку, тогда как трансляция команды ADD пройдет без ошибки. В чем разница между этими двумя случаями? Как исправить ошибку в команде MOV?

6.12 A SEGMENT

DB 400 DUP(?)

A ENDS

Выписать группу команд, копирующих самих себя в начало сегмента A.

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

S SEGMENT

A DB 100 DUP(4)

B DW 5,8,6

S ENDS

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

а) MOV AX,B б) MOV AX,OFFSET B в) LEA AX,B

г) MOV AX,B+2 д) MOV AX,OFFSET B + 2 е) MOV AX,B - OFFSET B

6.14 X DB 200 DUP(?) ; X[0..199]

Пусть в регистре BX находится адрес (смещение) одного из элементов массива X. Используя оператор OFFSET реализовать переход на метку L, если:

а) в BX находится адрес элемента X[37];

б) BX указывает на вторую половину массива X.

6.15 Описать полную программу для решения следующей задачи.

а) Напечатать фразу "Hello Wordl".

б) Дан текст из 50 символов. Определить, симметричен ли он. Ответ: "симметричен" или "не симметричен".

в) Дан массив из 40000 чисел (размером в слово). Определить, симметричен ли этот массив. Ответ: "да" или "нет".

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

д) Дан непустой текст из любых символов (кроме точки), за которым следует точка. Напечатать этот текст, удалив из него лишние пробелы (из подряд идущих пробелов оставить только один).

е) Дан текст из больших латинских букв, за которым следует точка. Для каждой буквы указать, сколько раз она входит в этот текст.

ж) Дан непустой текст из любых символов (кроме точки), за которым следует точка. Определить, сколько различных больших русских гласных букв (А, Е, И, О, У, Ы, Э, Ю, Я) входит в этот текст.

6.16 Пусть под сегмент стека отведено 900 байтов. Реализовать переход на метку L, если в текущий момент:

а) стек полон;

б) стек пуст;

в) стек занимает ровно треть сегмента стека.

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

а) PUSH AX б) POP AX

6.18 Определить, какие значения будут находиться в байте с адресом SS:SP и в байте с адресом SS:(SP+1) после выполнения команд

MOV AX,0102h

PUSH AX

6.19 Выписать фрагмент программы, в котором вводится последовательность ненулевых чисел, заканчивающаяся нулем, и эти числа выводятся в обратном порядке, но только если среди них нет отрицательных чисел (в противном случае ничего не выводить). Исходное значение регистра SP должно быть сохранено.

6.20 Пусть в стек записано 40 слов. Реализовать следующую операцию:

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

б) определить, сколько среди этих слов нулевых, и записать ответ в регистр AL;

в) удалить из стека нулевые слова, "сжав" остальные (дополнительный массив не использовать);

г) определить, есть ли в стеке хотя бы два одинаковых слова, и записать ответ 1 (есть) или 0 в регистр AL;

д) рассматривая слова из стека как адреса (смещения) некоторых байтов из сегмента данных, обнулить все эти байты.

6.21 Пусть под сегмент стека отведено 200 слов и пусть в сегменте данных описан массив X из 200 слов. Выписать фрагмент программы, в котором в начало этого массива копируется текущее содержимое стека ("верхнее" слово стека должно быть записано в начальный элемент массива) и заполняется нулями оставшаяся часть массива. Значение регистра SP должно быть сохранено.

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

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

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

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