|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ЛАБОРАТОРНАЯ РАБОТАТема: Формат типовой программы на языке Ассемблер Цель работы: Изучение принципа создания программы на языке Ассемблер Задание: 1. Открыть (например, с помощью Блокнота) файл primer.asm из папки Система asm и внимательно изучите структуру программы, найдите описание сегмента данных и сегмента кодов. 2. Получить из файла primer.asm файл primer.exe 3. Написать линейныепрограммы для (на основе файла primer.asm): - Логическое сложение двух однобайтных чисел - Сложение двух однобайтных чисел - Умножение двух однобайтных чисел - Деление двух однобайтных чисел 4. Получить исполнительные файлы *.exe для написанных программ и выполните их пошаговую отладку в TD.exe. Сравните результаты работы программ с ожидаемыми результатами, докажите, что программы работают правильно. Выполнение: 1. Рисунок 1.1: код программы на Ассемблере, из этого файла primer.asm мы получим исполняемый файл primer.exe и проверим его работу в программе TD.exe Рисунок 1.2: мы видим окно программы Far Manager, с помощью которой мы получим исполняемый файл. 2. Рисунок 1.3: мы видим окно программы TD.exe, куда мы загрузили с помощью команды td primer.exe, нашу программу. Теперь проведем еще трассировку клавишей F7 и получим конечный результат. Рисунок 1.4: мы провели трассировку следующих команд: push ds sub ax,ax push ax mov ax, dseg mov ds,ax mov ax, 058h Все изменения можно посмотреть в ходе трассировки.
Рисунок 1.1 Файл primer.asm Рисунок 1.2 Окно программы Far Рисунок 1.3 Окно программы TD.exe Рисунок 1.4 Результат трассировки Выполнение: 3. Линейные программы. a) Логическое сложение двух однобайтных чисел. Код программы в сегменте кода: mov ax,30; перемещаем в регистр ax однобайтное число 30 mov bx,40; перемещаем в регистр bx однобайтное число 40 or ax,bx; производим логическое сложение двух регистров ax и bx, результат запишется в регистр ax Трассировка программы: Рисунок 1.5 Рисунок 1.6 Исходные данные: Регистр ax содержит значение 3010=001Eh Регистр bx содержит значение 4010=0028h Результат логического сложения: or ax,bx ax:=001E&0028h=003Eh Проверим работу программы: Переведем исходные данные в двоичную систему: 001Eh=1 1110, 0028h=10 1000 Проведем логическое сложение: и переведем полученное значение и h-код: 3E Полученное значение вручную совпадает со значением, полученным в регистре, значит, программа работает правильно. b) Сложение двух однобайтных чисел Код программы в сегменте кода: mov ax,6; записываем в регистр ax значение 6 mov bx,17; записываем в регистр bx значение 17 add ax,bx; производим сложение значений регистров ax и bx, результат записывается в регистр ax Трассировка программы: Рисунок 1.7 Рисунок 1.8 Исходные данные: Регистр ax содержит значение 610=0006h Регистр bx содержит значение 1710=0011h Результат сложения: add ax,bx ax:=0006h+0011h=0017h Проверим работу программы: Сумма десятичных чисел: 6+17=23 Полученное значение в h-коде: 23=17h Полученное значение в ручную совпадает со значение полученным в регистре, значит, программа работает верно. c) Умножение двух однобайтных чисел Код программы в сегменте кода: mov al,15; записываем в регистр ax в младший разряд значение 15 mov dl,2; записываем в регистр dx в младший разряд значение 2 mul dl; производим умножение значений младших разрядов регистров ax и bx, результат записывается в регистр ax Трассировка программы: Рисунок 1.9
Рисунок 1.10 Исходные данные: al регистра ax содержит значение 1510=0Fh dl регистра dx содержит значение 210=02h Результат умножения: mul dl ax:=al*dl=0F*02=1E Проверим работу программы: Переведем исходные данные в двоичную систему: 0Fh=11112, 02h=102 Произведем умножение: 1111*10=11110=1Eh Полученное значение в ручную совпадает со значение полученным в регистре, значит, программа работает верно. d) Деление двух однобайтовых чисел Код программы в сегменте кода: mov ax,40; записываем в регистр ax значение 40 mov dl,2; записываем в регистр dx в младший разряд значение 2 div dl; производим деление значений регистров ax и bx младшего разряда, результат записывается в регистр ax в старший разряд Трассировка программы: Рисунок 1.11 Рисунок 1.12 Исходные данные: Регистр ax содержит значение: 4010=0028h Младший разряд dl регистра dx содержит значение: 210=02h Результат деления: div dl al:=ax/dl=0028/02=14 Результат записывается в младший разряд регистра ax потому что, размер делителя - байт. Проверим работу программы: Переведем исходные данные в двоичную систему: 0028h=10 10002, 02h=102 Произведем деление: 10 1000/10=1 0100=14h Произведем деление в десятичной системе: 40/2=20=14h Полученное значение в ручную совпадает со значение полученным в регистре, значит, программа работает верно.
ВЫВОД По выполнению лабораторной работы на тему «Формат типовой программы на языке Ассемблер», мы изучили следующее: · структуру программы на языке Ассемблера · команды и создание исполнительного файла с помощью программы Far Manager · директивы резервирования памяти (db, dw, dd) · организацию вычислений ¨ логические команды ¨ арифметические операции На практике применили полученные знания и написали линейные программы: логическое сложение, сложение, умножение, деление двух однобайтных чисел, получили исполнительные файлы, провели их трассировку и проверку на правильность выполнения.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.) |