Практическая часть. Задание № 4.1.Составить программу для ввода с клавиатуры целых десятичных чисел со знаком
Задание № 4.1.Составить программу для ввода с клавиатуры целых десятичных чисел со знаком. Если введено не число, то выводится сообщение об ошибке и ввод прекращается. Окончание ввода – нажатие клавиши Enter.
Задание № 4.2.Напишите программу для ввода с клавиатуры вещественных чисел без знака. Любой символ, отличающийся от цифры или точки, должен быть пропущен без отображения на экран. Окончание ввода – нажатие клавиши Enter.
Задание № 4.3.Составить программу ввода с клавиатуры десятичного числа с любым числом разрядов от 1 до 5, ввод каждого числа завершается нажатием клавиши <Enter>; предусмотреть проверку вводимых символов на их принадлежность десятичному числу (нецифровые символы не воспринимаются и не отображаются на экране). Результат преобразования загружается в регистр ах.
Задание № 4.4.Составить программу для решения задачи (по вариантам).
1. Дан массив из десяти целых знаковых чисел (слов или байтов). Требуется:
2. Найти количество отрицательных чисел. Массив байтов.
3. Найти суммы всех положительных и отрицательных чисел. Массив слов.
4. Найти среднее арифметическое чисел. Массив слов.
5. Найти количество чисел больших 10h. Массив слов.
6. Найти сумму абсолютных величин. Массив байтов.
7. Найти количество положительных чисел. Массив слов.
8. Поменять местами пары соседних чисел. Массив слов.
9. Переставить числа в обратном порядке. Массив байтов.
10. Заменить все отрицательные числа нулями. Массив слов.
11. Определить симметричен ли заданный массив. Массив байтов.
Задание № 4.5.Максимум и минимум.
Напишите программу поиска максимального и минимально значения в массиве целых чисел.
Задание № 4.6.Сортировка.
Напишите программу сортировки массива целых чисел.
Контрольные вопросы и задания.
1. Какое максимальное количество байтов могут обойти команды короткий jmp и относительный переход? Каков машинный код операнда при этом генерируется?
2. Команда jmp начинается на 0624h. Определите адрес перехода, если 16-тиричный объектный код для операнда команды jmp: а) 27, б) 6B, в) С6
3. Пусть регистры AX и BX содержат знаковые данные, а CX и DX – беззнаковые. Определите команды cmp (где необходимо) и команды безусловного перехода для следующих проверок:
a) значение в DX больше, чем в CX
b) значение в BX больше, чем в AX
c) CX содержит нуль
d) было ли переполнение
e) значение в BX равно или меньше, чем в AX
f) значение в DX равно или меньше, чем в CX
4. На какие флаги воздействует следующие события и какое значение этих флагов?:
a) произошло переполнение;
b) результат отрицательный
c) результат нулевой;
d) обработка в одношаговом режиме;
e) передача данных должна быть справа налево.
5. Какой флаг используется при сравнении чисел без знака ?
6. Какой флаг используется при сравнении чисел со знака ?
7. Какой условный переход использует для проверки содержимого регистра общего назначения ?
8. Какое различие между командами ja и jnbe ?
9. Можно ли при переходе по условию сделать переход на метку в любом месте сегмента?
10. После выполнения команды jb какой флаг должен быть установлен ?
11. Пусть команда CMP сравнивает два операнда. Для каждой из команд условного перехода, показанной в таблице 4.4., определено состояние четырех флагов. В последнем столбце отметьте, будет ли совершаться переход.
Таблица 4.4.
Условные переходы, установка флагов.
команда | переполнение | знак | нуль | перенос | Переход | |
jnc | ||||||
ja | ||||||
jnb | ||||||
jbe | ||||||
joe | ||||||
jnle | ||||||
jns | ||||||
jng | ||||||
je | ||||||
jnae |
12. После выполнения следующих команд, какие значения будут в регистрах AL и BL ?
.data
val_1 db 6Bh
val_2 db 3Fh
.code
mov al,val_1
mov bl, val_2
and ax, 0B6h
cmp al, bl
ja label_1
mov al, bl
jmp exit
label_1:
mov bl, al
exit:
13. После выполнения следующих команд, какие значения будут в регистрах AL и BL ?
.data
val_1 db 6Bh
val_2 db 3Fh
.code
mov al,val_2
mov bl, val_1
or bl, 0fh
sub al, bl
jb label_1
mov al, 1
jmp exit
label_1:
mov bl, 1
exit:
14. После выполнения следующих команд, какие значения будут в регистрах CX и DX и SI?
.data
val_1 db 6Bh
val_2 db 3Fh
.code
mov al,val_1
mov bl, val_2
and ax, 0B6h
cmp al, bl
ja label_1
mov al, bl
jmp exit
label_1:
mov bl, al
exit:
15. После выполнения следующих команд, какие значения будут в регистрах CX и DX и SI и переменной val_1? (Предположите, что val_1 размещена по адресу 0006).
.data
val_1 dw 026Ah
val_2 dw 3FD9h
.code
mov si, offset val_1
mov ex, [si]
add si, 2
mov dx, [si]
xchg dx, val_1
and dx, 0FF00h
again:
dec word ptr [si]
dec dx
crop dx, 01FFh
loopz again
[1] Регистр – это высокоскоростная память, размещенная внутри процессора.
[2] Буква Х в названии регистров общего назначения от слова eXetended, расширенный: в процессоре 8080 были байтовые регистры A, B, C и D, которые затем расширили до размера слова.