Поволжский Государственный Университет Телекоммуникации и Информатики Отчет по лабораторной работе №4 Программирование арифметических операций. Изучение основ работы с TURBO DEBUGGER Выполнил: Ст. гр. ИТ-71 Дудкин Н.А. Самара 2008 г. 1. Цель работы Применение команд арифметических операций при разработке программ; Практическое освоение основных функций TURBO DEBUGGER. 2. Ход работы 1. Используя текстовый редактор, создали и отредактировали исходный модуль программы Prog_4.asm, которая вычисляет значение Х в соответствии с заданием. Таблица 1. Вариант задания № Функция варианта 9 X A A B DC 2 Данные B C D 2 7 12 -15 После выполнения операции деления, в дальнейших операциях учитывали только частное. ;Prog_4 Data SEGMENT A DB 7 B DB 12 D Dw 3 C DW -15 X DW ? Data ENDS ;Открыть сегмент данных ;Инициализировать переменные A, B, C, D, X ;Закрыть сегмент данных Ourstack SEGMENT Stack ;Открыть сегмент стека DB 100h DUP (?) ;Отвести под стек 256 байт Ourstack ENDS ;Закрыть сегмент стека ASSUME CS:Code, DS: Data, SS: Ourstack ;Назначить сегментные регистры Code SEGMENT ;Открыть сегмент кодов Start: mov AX, Data ;Инициализировать сегментный регистр DS mov DS, AX xor AX, AX ; очистить регистр AX mov AL, A -2- 3 mul A Mov BX, AX mov AL, B mul B ADD AX, BX mov CX, D sub CX, C idiv D mov X, AX mov AX, 4C00h int 21h Code ENDS END Start ;Закрыть сегмент кодов ;Конец исходного модуля 2. Используя компилятор Турбо Ассемблера tasm.exe и компоновщик tlink.exe с соответствующими ключами, создали файл prog_4.exe. 3. Загрузили программу в отладчик и в окне CPU произвели трассировку программы (пошаговое выполнение) нажатием клавиши F8. На каждом шаге контролировали содержимое регистров и флагов. Записали вычисленное значение частного и остатка. Результаты пошагового выполнения свели в таблицу 2 и сделали по ним соответствующие выводы. -3- Таблица 2. Результаты выполнения программы Вариант № Команда строки Ассемблера Машинный код 1 Mov DS, AX 8ED8 2 Xor AX, AX 33C0 3 4 5 6 Mov AL, A Mul A Mov BX, AX Mov AL, B A00000 F6260000 8BD8 A00100 Длина Логический машинного адрес в Состояние регистров и флагов кода, памяти байт AX=120B, . BX=0000, CF=1, CX=9A3E, ZF=0, DX=F73A, SF=1, 2 5FC5:0003 DS=3192, OF=0, SS=120B, PF=0, CS=0000, AF=0 . ES=F732 AX=120B, BX=0000, CF=1, CX=9A3E, ZF=0, DX=F73A, SF=1, DS=3192, 2 5FC5:0005 OF=0, SS=120B, PF=0, CS=0000, AF=0 . ES=F732. 3 4 2 3 5FC5:0007 5FC5:000 A 5FC5:000 E 5FC5:0010 -4- AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . 7 8 9 10 11 Mull B ADD AX, BX F6260100 03C3 Mov CX, D 8B0E0200 Sub CX, C 2B0E0400 Idiv D F73E0200 4 2 4 4 4 5FC5:0013 5FC5:0017 5FC5:0019 5FC5:001 D 5FC5:0021 Значение переменной X: частное = AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 AX=120B, BX=0000, CX=9A3E, DX=F73A, DS=3192, SS=120B, CS=0000, ES=F732 CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 . CF=1, ZF=0, SF=1, OF=0, PF=0, AF=0 остаток = 4.Определили начальные и конечные адреса сегментов кода, данных и стека составленной программы prog_4.exe. Вычислили длину сегментов указанной программы в байтах. -5-