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

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

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

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

ж) Построить копию заданного списка.

з) Удалить из заданного списка первый нулевой элемент, если он есть.

и) Удалить из заданного списка все нулевые элементы.

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

NODE STRUC ; вершина дерева:

ELEM DW ? ; элемент (знаковое число)

LEFT DW ? ; ссылка на левое поддерево или NIL

RIGHT DW ? ; ссылка на правое поддерево или NIL

NODE ENDS

и процедуры NEW и DISPOSE работают с тремя соседними словами кучи.

Описать (рекурсивно или с использованием стека) близкую процедуру, которой через регистр BX передается ссылка на дерево (возможно, пустое) и которая свой ответ возвращает через регистр AX, для решения следующей задачи.

а) Найти сумму всех элементов заданного дерева.

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

в) Найти максимальное значение элементов заданного непустого дерева.

г) Подсчитать число листьев в заданном дереве.

д) Найти максимальную глубину заданного непустого дерева (число ветвей в наиболее длинном пути).

е) Определить число вершин на N-м уровне заданного дерева, если число N (0) передается через регистр CX (считать, что корень находится на 0-м уровне).

ж) Скопировать заданное дерево.

з) Ввести непустую последовательность попарно различных положительных чисел, за которой следует 0, и построить из них дерево поиска (в нем слева от любой вершины находятся только меньшие числа, а справа - только большие).

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

к) Из заданного непустого дерева удалить все листья.

9. МАКРОСРЕДСТВА.

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

а) записать в регистр AH сумму чисел из регистров AL, BL, CL и DH;

б) обнулить переменные A, B и C типа DWORD;

в) используя из операций вывода только операцию OUTCH, вывести (с кавычками) текст "A+B=B+A";

г) зарезервировать (с помощью директивы DB) место в памяти для 40 байтов, присвоив им в качестве начальных значений первые 40 нечетных чисел (1, 3, 5, ..., 79).

9.2 Выписать текст окончательной программы, который построит макрогенератор по следующему фрагменту исходной программы:

а) IRP C,<INC A,JE L> б) IRP W,<SW,< A,2>> в) N EQU 5

C MOV&W IRP OP,<N,%N,N%N>

ENDM ENDM ADD AX,OP

ENDM

г) IRP C,<K,LL,M> д) IRP T,<AB,C> е) IRPC CH,<! %">

C EQU C&C&CC IRPC U,T ADD AL,'&CH' ;код CH

DB 'C&C&CC' DW U,T&U,T&&U ENDM

ENDM ENDM

DW U,T&U

ENDM

9.3 Описать в виде указанных (слева) макросов указанные операции над двойными словами (X,Y и Z - переменные типа DWORD, L - метка):

DMOV X,Y : X:=Y

DADD X,Y,Z : X:=Y+Z

DSUB X,Y,Z : X:=Y-Z

DJNE X,Y,L : при XY перейти на L

9.4 Описать в виде макроса DEF X,T,N,V определение массива X из N величин V, тип которых задается параметром T: при T=B это тип BYTE, при T=W - тип WORD, при T=D - тип DWORD.

Выписать текст, который построит макрогенератор по следующему фрагменту исходной программы:

K EQU 4

DEF C,B,10,'*'

DEF W,W,K+1,<TYPE C>

DEF ,D,%K+1,%(TYPE W)

DEF A,B,1,<1,2,3>

9.5 Описать полную программу, которая вводит три числа H, M и S и проверяет, удовлетворяют ли они следующим условиям: 0H23, 0M,S59. Если нет, программа должна выдать сообщение об ошибке, а иначе, трактуя эти числа как час (H), минута (M) и секунда (S) некоторого момента суток, должна напечатать время суток, на 1 секунду большее (с учетом смены суток).

Определить и использовать в этой программе два макроса, один из которых проверяет условие aXb, а другой - увеличивает X на 1 и, если X>b, обнуляет X.

9.6 Описать в виде указанного (слева) макроса указанное действие над знаковыми числами размером в байт:

а) ABS R,X : R:=abs(X), где R - регистр, X - переменная

б) SUM X,N : AX:=сумма элементов массива X из N байтов (N>0)

в) MAX X,N : AL:=максимум элементов массива X из N байтов (N>0)

9.7 Описать в виде макроса указанную команду, предполагая, что ее нет в ПК (в качестве вспомогательных можно использовать регистры AX и BX):

а) PUSH X (X - переменная размером в слово);

б) POP X (X - переменная размером в слово);

в) CALL P (P - имя близкой процедуры);

г) RET N (близкий возврат);

д) LOOP L (L - метка);

9.8 X DW 1234h

A MACRO R,U

MOV R,U

ENDM

B MACRO R,V

A R,<V>

ENDM

C MACRO R,V

A R,V

ENDM

Определить значения регистров AH и AL после выполнения следующего фрагмента программы:

B AH,<BYTE PTR X>

C AL,<BYTE PTR X>

9.9 Описать в виде макроса MAX2 M,X,Y вычисление M=max(X,Y) и на его основе описать макрос MAX3 M,X,Y,Z для вычисления M=max(X,Y,Z), где M, X, Y и Z - знаковые байтовые переменные.

Выписать макрорасширение для макрокоманды

MAX3 A,<BYTE PTR B>,C+1,D

9.10 Пусть K - числовая константа с положительным значением, а ,  и  - некоторые группы предложений. Используя средства условного ассемблирования, выписать фрагмент исходной программы, в котором ,  и  указаны лишь по разу и по которому в зависимости от значения K формируются следующие варианты окончательной программы:

при K=1:  при K=2:  при K>2: 

  

 ... (K раз)

9.11 Пусть RUN - константа, которая своим значением 1 или 0 указывает режим текущего прогона программы: счет или отладка. Используя средства условного ассемблирования, выписать фрагмент программы, в котором находится наибольший общий делитель двух положительных чисел с записью его в регистр AX, при условии, что в режиме счета эти два числа должны вводиться, а в режиме отладки эти числа равны 45 и 30.

9.12 Имеются следующие описания макроса M X, который должен уменьшить значение X на 5, если X - это переменная-байт, или на 12, если X - это переменная-слово:

а) M MACRO X б) M MACRO X в) M MACRO X

LOCAL L2,L LOCAL L2,L IF TYPE X EQ BYTE

CMP TYPE X,BYTE MOV AL,TYPE X SUB X,5

JNE L2 CMP AL,BYTE ELSE

SUB X,5 JNE L2 SUB X,12

JMP L SUB X,5 ENDIF

L2: SUB X,12 JMP L ENDM

L: L2: SUB X,12

ENDM L:

ENDM

Какое из этих описаний неправильно (и почему) и какое из двух правильных описаний лучше другого (и почему)?

9.13 Описать в виде макроса SHIFT X,K (X - имя байтовой переменной, K - явно заданное число) сдвиг значения X на |K| разрядов вправо (при K>0) или влево (при K<0).

Выписать макрорасширения для макрокоманд SHIFT A,-1 и SHIFT B,5.

9.14 Описать в виде макроса IF0 X,L (X - переменная размером в байт, слово или двойное слово, L - метка) переход на метку L в том случае, когда значение переменной X равно 0.

Выписать макрорасширения для макрокоманд IF0 B,L1 и IF0 D,L2 при условии, что B - переменная типа BYTE, а D - типа DWORD.

9.15 Описать в виде макроса SIGN X (X - знаковая переменная размером в байт, слово или двойное слово) операцию засылки в регистр AL числа 1 при X>0, числа 0 при X=0 и числа -1 при X<0.

Выписать макрорасширения для макрокоманд SIGN W и SIGN D при условии, что W - переменная размером в слово, а D - размером в двойное слово.

9.16 Описать в виде макроса NULL X,N,T (X - имя массива из N байтов, N - положительное целое число, T - это FIRST или LAST) обнуление либо начального (при T=FIRST), либо последнего (при T=LAST) элемента массива X.

Выписать макрорасширение для макрокоманды NULL A,100,LAST.

9.17 Описать в виде макрос VAR X,EQ,V определение байтовой переменной с именем X и начальным значением V, а если последний параметр не задан - без начального значения (параметр EQ фиктивный).

Выписать макрорасширения для макрокоманд:

а) VAR A = '*' б) VAR B : <10 DUP(?)> в) VAR C г) VAR

9.18 Описать в виде макроса NULL RS (RS - это <R1,R2,...,Rk>, где Ri - имена регистров общего назначения, k0) обнуление регистров Ri.

Выписать макрорасширения для макрокоманд NULL <AL,BX,SI> и NULL <>.

9.19 Описать макрос SUM R, где R - имя (большими буквами) одного из 16-разрядных регистров общего назначения, для записи в R суммы значений всех остальных таких регистров.

9.20 Описать в виде макроса OUTF без параметров вывод текущих значений флагов CF, OF, SF и ZF в виде четверки из 0 и 1, причем значения всех флагов и используемых макросом регистров должны быть сохранены.

Воспользоваться командами PUSHF и POPF. В регистре флагов Flags указанным флагам соответствуют биты со следующими номерами (нумерация битов справа налево от 0): CF - 0, OF - 11, SF - 7, ZF - 6.

9.21 Описать в виде макроса SL RS,OP (RS - это <R1,R2,...,Rk>, где Ri - 16-разрядные регистры общего назначения, k>0; OP - это SAVE или LOAD) запись в стек (при OP=SAVE) или восстановление из стека (при OP=LOAD) регистров Ri.

Выписать макрорасширение для макрокоманды SL <AX,CX,DI>,LOAD.

9.22 Описать в виде макроса SUM X (X - это <X1,X2,...,Xk>, где Xi - имена знаковых байтовых переменных, k>0) вычисление суммы значений Xi и записи ее в регистр BX.

Выписать макрорасширение для макрокоманды SUM <A,B,C>.

9.23 Описать в виде макроса MAX X (X - это <X1,X2,...,Xk>, где Xi - имена знаковых байтовых переменных, k>0) вычисление максимума Xi и записи его в регистр AL. (Обратить особое внимание на метки, которые будут появляться в макрорасширениях.)

Выписать макрорасширение для макрокоманды MAX <A,B,A>.

9.24 Предположим, что имеется процедура P от двух параметров, которые по значению передаются через регистры AX и BX. Описать в виде макроса CALL_P X,Y команды обращения к этой процедуре, которые должны сохранять регистры AX и BX и которые должны корректно работать, когда в качестве X и Y указаны AX и/или BX. (Считать, что названия регистров записываются только большими буквами.)

Выписать макрорасширения для макрокоманд:

а) CALL_P Q,2 б) CALL_P AX,BX в) CALL_P BX,5 г) CALL_P BX,AX

9.25 Выписать при указанном макроопределении макрорасширение для указанной макрокоманды:

а) MA MACRO K б) MB MACRO K в) MV MACRO K

JMP M1 MOV AH,K A EQU K

MOV AX,K IFIDN <AH>,<2> IFDIF <A>,<K>

M&K: ADD AX,K ADD AH,K ADD DX,A&K

ENDM ENDIF ENDIF

... ENDM ENDM

MA 1 ... ...

MB 2 MV 3

г) MG MACRO K д) MD MACRO K е) ME MACRO K

IFDIF <K+1>,<5> IF K+1 EQ 6 MOV AH,0

MOV AX,K X DB '&K+1' IRPC C,K-1

ENDIF ENDIF ADD AH,'&C'

MOV BX,K&K Y&K DW K+1 ENDM

ENDM ENDM ENDM

... ... ...

MG 4 MD 5 ME 6

10. МНОГОМОДУЛЬНЫЕ ПРОГРАММЫ.

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

а) Обязательно ли в каждом модуле программы описывать сегмент стека?

б) Если в программе используются вспомогательные процедуры ввода-вывода из файла IO.ASM, то обязательно ли в каждом модуле указывать директиву INCLUDE IO.ASM?

в) Как ассемблер, транслируя некоторый модуль программы, узнает, что какое-то имя в этом модуле является внешним? А общим?

г) Обязательно ли имя, объявленное в модуле общим, должно быть описано в этом модуле? Можно ли использовать данное имя в этом модуле?

д) Можно ли одно и то же имя объявить общим в нескольких модулях программы? А внешним?

10.2 Пусть в некотором модуле программы описана процедура P, которой через регистр AX передается по значению единственный параметр. Что надо сделать в другом модуле программы, чтобы обратиться к этой процедуре с нулевым фактическим параметром?

10.3 Пусть в первой строке текста некоторого модуля программы указана директива EXTRN X:WORD и пусть в этом модуле требуется записать значение переменной X в регистр AX. Определить, какой из следующих фрагментов правильно решает эту задачу.

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

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

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

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