2. Программа для практики.
Напишем программу, выводящую на экран все ASCII-символы (16 строк по 16 символов в строке).
. model tiny | ; модель памяти в которой сегменты кода, данных и стека объединены. |
. code | ; сегмент кода, который содержит данные. |
org 100h | ; начало СОМ-файла |
begin: | ; метка начала кода программы |
mov cx,256 | ; задаем значение счетчика (256 символов) |
mov dl,0 | ; первый символ - с кодом 00 |
mov ah,2 | ; номер функции DOS "вывод символа" |
cloop: int 21h | ; вызов DOS |
inc dl | ; увеличение DL на 1 - следующий символ |
test dl,0Fh | ; если DL не кратен 16 |
jnz continue_loop; | ; продолжить цикл, |
push dx | ; иначе: сохранить текущий символ |
mov dl,0Dh | ; вывести CR |
int 21h | ; вызов DOS |
mov dl,0Ah | ; вывести LF |
int 21h | ; вызов DOS |
pop dx | ; восстановить текущий символ |
continue_loop: | ; метка |
loop cloop | ; продолжить цикл |
ret | ; завершение СОМ-файла |
end begin | ; метка окончания кода программы |
Здесь с помощью команды LOOP оформляется цикл, выполняющийся 256 раз (значение регистра СХ в начале цикла). Регистр DL содержит код символа, который равен нулю в начале цикла и увеличивается каждый раз на 1 командой INC DL. Если значение DL сразу после увеличения на 1 кратно 16, оно временно сохраняется в стеке и на экран выводятся символы CR и LF, выполняющие переход на начало новой строки. Проверка выполняется командой TEST DL,0Fh - результат операции AND над DL и 0Fh будет нулем, только если младшие четыре бита DL равны нулю, что и соответствует кратности шестнадцати.
3. Содержание отчета.
3.1 Титульный лист.
3.2 Индивидуальный вариант задания.
3.3 Тестовые наборы данных и предполагаемые результаты.
3.4 Текст программы до отладки.
3.5 Список ошибок, обнаруженных при отладке.
3.6. Результаты выполнения тестов.
3.7. Распечатка листинга компиляции отлаженной программы с указанием работы каждой строки.
4. Задание для выполнения.
4.1 Выполните все примеры, что содержатся в описании данной лабораторной работы.
4.2 Проанализируйте работу программы примера для практики.
4.3 Изучить условия организации циклических переходов на языке Ассемблера.
4.4 Напишите программу, выводящую на экран слово "!!!!!!!!!! Hello!!!!!!!!!!" используя команды циклических переходов (3 варианта).
4.5 Получите задание у преподавателя (один из пяти вариантов табл. №1) и, пользуясь правилами оформления ассемблерных программ, создайте программу, выводящую на экран слово, D число раз.
4.6 Программу ассемблируйте в файл типа *.com или *. exe (на выбор);
5. Контрольные вопросы
5.1 Организация цикла с помощью команды loop?
5.2 Значимость регистра cx?
5.3 Максимальное число повторений команд цикла определяемого регистром сх?
5.4 Организация цикла с помощью команды jmp?
5.5. Разновидности команды jmp?
5.6. Организация цикла с помощью команд dec и jnz?
Табл. №1
№ вар. | Выводимые данные | Формула расчета | А | B | С |
Циклический переход | D=A+B+C | 101 | 345 | 121 | |
Hello world | D=A-B+C | 578 | 152 | 149 | |
Good Bye | D=A+B-C | 333 | 223 | 16 | |
Группа | D=A-B+C | 1502 | 834 | 1 | |
Лабораторная работа | D=A-B-C | 1056 | 33 | 125 |
ЛАБОРАТОРНАЯ РАБОТА №9
СПОСОБЫ И МЕТОДЫ ВЫВОДА ЧИСЕЛ
Цель работы: Освоить методы вывода чисел в двоичном, шестнадцатеричном и десятичном коде.
0 комментариев