TASK_ASM (1000388), страница 2
Текст из файла (страница 2)
3.23 Напечатать таблицу умножения (в десятичной системе счисления).
3.24 Дан текст следующего вида:
d1 ± d2 ± ... ± dk .
где di - цифра от 0 до 9, k≥1. Найти значение этой алгебраической суммы.
3.25 Используя только операцию OUTCH, вывести содержимое регистра AX в виде:
а) знакового десятичного числа,
б) беззнакового 16-ричного числа ("буквенные" цифры - от A до F).
3.26 Используя только операцию INCH, ввести:
а) знаковое десятичное число,
б) беззнаковое 16-ричное число ("буквенные" цифры - от A до F)
и записать его в регистр AX. Считать, что число записано без ошибок, оканчивается пробелом и "укладывается" в размер слова.
3.27 Дано 50 чисел, среди которых есть по крайней мере одно отрицательное. Найти наибольшее среди отрицательных чисел.
3.28 Дана последовательность из 40 чисел. Определить, у скольких чисел этой последовательности равные "соседи" (т.е. равны предыдущее и последующее числа).
3.29 Дана непустая последовательность символов (отличных от точки), за которой следует точка. Напечатать эту же последовательность:
а) заменив все 'PH' на 'F';
б) удалив все лишние пробелы (т.е. из нескольких подряд идущих пробелов оставить только один) .
3.30 Дана непустая последовательность непустых слов из больших латинских букв; между соседними словами - запятая, за последним словом - точка. Подсчитать количество слов, которые:
а) начинаются с буквы 'S';
б) оканчиваются буквой 'Z';
в) начинаются и оканчиваются одной и той же буквой.
3.31 P DW ? ; P0
Q DW ? ; Q>0
Напечатать дробь P/Q в виде вещественного числа с 5 цифрами в дробной части.
3.32 X DD ?
Напечатать значение X в виде беззнакового десятичного числа. (Обратить особое внимание на возможность переполнения в команде DIV.)
4. ИНДЕКСИРОВАНИЕ. МАССИВЫ. СТРУКТУРЫ.
4.1 X DW 500h, 600h, 700h
Пусть BX=8000h и SI=102h. Указать (в форме X+число) исполнительный адрес следующей команды:
а) DEC X+2 б) DEC X[2] в) DEC [X+2] г) DEC [X]+2
д) INC X[SI] е) INC X[SI+2] ж) INC X[SI]-2 з) INC X-2[SI]
и) NEG X[BX][SI] к) NEG X[BX+SI] л) NEG X[BX+SI+8000h]
4.2 Пусть X - имя некоторого байта памяти и BX=i и пусть требуется обнулить байт памяти с адресом X+2*i. Определить, какой из следующих фрагментов правильно решает эту задачу:
а) MOV X[BX+BX],0 б) MOV DI,BX в) ADD BX,BX
MOV X[BX+DI],0 MOV X[BX],0
4.3 Пусть X - имя некоторого байта памяти и BX=i и пусть требуется обнулить байт памяти с адресом X-i. Определить, какой из следующих фрагментов правильно решает эту задачу:
а) MOV X[-BX],0 б) MOV [X-BX],0 в) NEG BX
MOV X[BX],0
4.4 X DW 0,1,2
Пусть X обозначает ячейку памяти с адресом 100. Указать числовые значения регистров AX и BX после выполнения следующих команд:
а) MOV AX,X б) MOV AX,X+2 в) MOV SI,2 г) LEA SI,X
LEA BX,X LEA BX,X+2 MOV AX,X[SI] MOV AX,2[SI]
LEA BX,X[SI] LEA BX,2[SI]
4.5 С помощью одной команды LEA реализовать следующее действие:
а) увеличить значение регистра BX на 10;
б) уменьшить значение регистра BX на 10;
в) записать в регистр AX значение регистра DI;
г) записать в регистр SI значение регистра BX, увеличенное на 1.
4.6 X DB 400 DUP(?)
Y DW 400 DUP(?)
Определить, какая величина должна находиться в регистре BX, чтобы выражение X[BX] определяло адрес 20-го от начала элемента массива X, если нумерация элементов этого массива начинается с:
а) 0 б) 1 в) 10 г) -10
Ответить на аналогичные вопросы для массива Y и выражения Y[BX].
4.7 Z DB 61 DUP(?) ; Z[0..60]
Пусть в регистре BX находится величина i, а в регистре DI - величина j (10i,j30). Указать адресные выражения, с помощью которых можно сослаться на элемент массива Z с индексом:
а) i б) i-10 в) j+10 г) j+i-1 д) 42 е) 0
4.8 X DB ?
Y DW ?
Указать, какие из следующих конструкций являются допустимыми формами записи операндов команд, а какие - нет и почему.
а) X[SI-1] б) X[1-BX] в) Y[DI]-2 г) 2-Y[DI]
д) BX[AX] е) AX[BX] ж) SI+2 з) X[BH]
и) [X] к) [5] л) X[5] м) 5[X]
н) [Y-X] о) Y-X[DI] п) X-Y[BX] р) X+Y[SI]
с) X[BX]+2[SI] т) X[SI]+2[DI ] у) [DI]X ф) Y[DI]
4.9 X DB 50 DUP(?) ; X[0..49]
Пусть в регистре BX находится адрес некоторого элемента массива X (т.е. X+i, где i - число от 0 до 49). Требуется в этом же регистре получить индекс (i) этого элемента. Определить, какая из следующих групп команд правильно решает эту задачу:
а) SUB BX,X б) SUB BX,[X] в) LEA AX,X г) LEA BX,-X[BX]
SUB BX,AX
4.10 Описать подходящий массив и, используя команду XLAT, решить следующую задачу: в регистре DH находится число от 2 до 19; требуется записать 1 в регистр AL, если число DH простое, и записать 0 иначе.
4.11 Q DB 256 DUP(?) ; Q[0..255] of 0..255
Считая, что в регистре AL находится число i от 0 до 255, реализовать присваивание Q[Q[i]]:=i.
4.12 X DW 100 DUP(?) ; числа со знаком
Решить следующую задачу:
а) записать в регистр AX число нулевых элементов массива X;
б) записать в регистр AX наименьший элемент массива X;
в) обнулить все отрицательные элементы массива X;
г) заменить на 1 первый нулевой элемент массива X;
д) изменить знак у первого элемента массива X, отличного от 1.
4.13 N EQU 100
Y DB N DUP(?) ; Y[0..N-1]
Считая, что все элементы массива Y неотрицательны и попарно различны, поменять местами наибольший и 20-й элементы этого массива.
4.14 Z DW 30 DUP(?) ; Z[0..29], числа со знаком
Решить следующую задачу:
а) обнулить последний положительный элемент массива Z;
б) если во второй половине массива Z есть элементы, равные 1, то первый из них заменить на 45;
в) поменять знак у всех элементов массива Z с четными индексами.
4.15 X DW 100 DUP(?)
Решить следующую задачу:
а) определить, у скольких элементов массива X равные соседи (предыдущий и последующий элементы), и записать ответ в регистр AL;
б) элементы массива X циклически сдвинуть на 2 позиции вправо;
в) если левая и правая половины массива X совпадают, то обнулить последний элемент этого массива.
4.16 S DB 200 DUP(?)
T DB 200 DUP(?)
Рассматривая S и T как символьные массивы (строки), решить следующую задачу:
а) все цифры строки S записать в начало строки T, а остальные символы - в конец (в любом порядке);
б) проверить на равенство строки S и T при условии, что пробелы не учитываются, и записать ответ 1 (равны) или 0 в регистр AL;
в) перенести в конец строки S все ее пробелы, сохранив взаимный порядок следования остальных символов;
г) определить, есть ли в строке S хотя бы два одинаковых символа, и записать ответ 1 (есть) или 0 в регистр AL.
4.17 LW DB 150 DUP(12 DUP(?))
Рассматривая LW как массив из 150 слов по 12 символов в каждом, решить следующие задачи:
а) подсчитать количество симметричных слов в этом массиве и записать ответ в регистр AL;
б) определить, упорядочены ли слова этого массива по алфавиту (по неубыванию), и записать ответ 1 (да) или 0 в регистр AL;
в) определить, есть ли в массиве LW хотя бы два одинаковых слова, и записать ответ 1 (есть) или 0 в регистр AL.
4.18 N DW ? ; 0N9999
S DB 4 DUP(?) ; символьная строка из цифр
Требуется:
а) записать в S десятичные цифры N (например: N=304 S='0304');
б) решить обратную задачу.
4.19 A DD 40 DUP(?) ; числа без знака
Заменить начальный элемент массива A на максимальный элемент массива.
4.20 X DB 100 DUP(?) ; X[0..99]
Y DW 100 DUP(?) ; Y[0..99]
Решить следующую задачу:
а) заполнить массивы X и Y по правилу: X[i]:=i, Y[i]=i;
б) записать в регистр DH количество элементов массива X, для которых выполняется условие X[i]>i (считать X[i] числами без знака).
4.21 Для ввода задана непустая последовательность малых латинских букв, за которой следует точка. Используя подходящий вспомогательный массив, определить (ответ напечатать):
а) сколько различных букв входит в эту последовательность;
б) какая из букв чаще всего встречается в этой последовательности (если таких букв несколько, выбрать любую).
4.22 N EQU 1000
X DB N DUP(?)
K DW ? ; 0<K<N
Используя подходящий вспомогательный массив, циклически сдвинуть элементы массива X на K позиций влево.
4.23 Для ввода дана непустая последовательность символов (отличных от точки), за которой следует точка и в которой не более 1000 символов. Ввести эти символы и распечатать их в обратном порядке, удалив предварительно все большие гласные русские буквы (А, Е, И, О, У, Ы, Э, Ю, Я).
4.24 Пусть в регистрах SI и DI находятся начальные адреса двух (непересекающихся) областей памяти из 20 слов в каждой. Решить следующую задачу:
а) обнулить все слова первой из этих областей (SI);
б) записать в каждое слово первой области его адрес;
в) сравнить содержимое обеих областей и записать ответ 1 (равны) или 0 в регистр AL.
4.25 N EQU 100
X DB N DUP(?) ; числа со знаком
Y DB ?
Считая, что элементы массива X упорядочены по возрастанию, определить, есть ли в X элемент, равный Y, и записать ответ 1 (есть) или 0 а в регистр AX.
При решении задачи использовать метод бинарного поиска (деления пополам): сравнить Y со средним (или около него) элементом массива X; если они равны, то поиск закончить; если Y меньше (больше) среднего элемента, то далее рассматривать только левую (правую) половину массива, применив к ней этот же метод.
4.26 N EQU 100
X DW N DUP(?) ; числа со знаком
Упорядочить массив X по неубыванию (X1X2X3...), используя следующий метод сортировки:
а) сортировка выбором: найти максимальный элемент массива и переставить его с последним элементом; затем этот же метод применить ко всем элементам, кроме последнего (он уже находится на своем окончательном месте); и т.д.
б) сортировка обменом (метод пузырька): последовательно сравнивать пары соседних элементов массива (X1 с X2, X2 с X3 и т.д.) и, если первый элемент пары больше второго, то переставлять их; тем самым наибольший элемент окажется в конце массива; затем этот же метод применить ко всем элементам, кроме последнего; и т.д.
в) сортировка вставками: пусть первые k элементов уже упорядочены по неубыванию; взять (k+1)-й элемент и разместить его среди первых k элементов так, чтобы упорядоченными оказались уже k+1 первый элемент; этот метод применять при k от 1 до N-1.
4.27 DATE STRUC ; дата
Y DW 1997 ; год
M DB ? ; номер месяца
D DB ? ; число
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