|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Порядок выполнения работы и методические указанияПрактическая работа РАЗРАБОТКА ПРОГРАММ В ПАКЕТЕ TASM СЕГМЕНТ ДАННЫХ ПРОГРАММЫ Цели практической работы: - научиться создавать программы на языке Assembler в пакете TASM - изучить структуру программы на языке Assembler; - научиться задавать (описывать) данные; - изучить, как выглядит сегмент данных программы в памяти компьютера; - разобраться с принципом формирования физического адреса
Напомним, что микропроцессоры Intel требуют следования данных в памяти по принципу: младший байт по младшему адресу.
Порядок выполнения работы и методические указания
1. Создайте свою рабочую папку, например, AsmWork 2. Поместите (скопируйте из папки Т:\TASM\BIN или D:\BP\BIN) в рабочую папку необходимые для получения исполняемого (загрузочного) модуля файлы из пакета TASM: tasm.exe tlink.exe rtm.exe dpmi16bi.ovl dpmiload.ovl dpmimem.dll и отладчик Turbo Debugger - td.exe
3. Введите текст программы-примера (скопируйте) и сохраните в рабочей папке в файле с именем Primer1.asm
; Программа выводит на экран сообщение «Начало сегмента данных» ; Точкой с запятой обозначаются комментарии masm model small .stack 100h .data stroka db 'Начало сегмента данных','$' perem1 db 0ffh perem2 dw 3a7fh perem3 dd 0f54d567ah mas db 10 dup (' ') pole db 5 dup (?) adr dw perem3 adr_full dd perem3 fin db 'Конец сегмента данных программы $' .code start: ; стандартное начало программы mov ax,@data mov ds,ax ; вывод строки с именем stroka на экран mov ah,09h mov dx,offset stroka int 21h ; стандартное завершение программы mov ax,4c00h int 21h end start
4. Запустите на трансляцию программу командной строкой tasm /zi primer1.asm,,,
Просмотрите файл листинга. Исправьте ошибки, если они есть. Если ошибки исправлялись, необходимо заново оттранслировать исходный модуль.
5. Создайте загрузочный модуль, запустив программу tlink командной строкой tlink /v primer1.obj
В результате вы получите загрузочный модуль Primer1.exe
6. Запустите программу на выполнение. Вы увидите сообщение «Начало сегмента данных». Вывод этого сообщения и есть результат работы программы.
7. Переведите выводимую строку на английский язык, исправьте значение выводимой строки (необходимо заново оттранслировать исходный модуль и создать новый загрузочный модуль).
8. Теперь следует посмотреть, как выглядит в памяти сегмент данных программы. Для этого необходимо запустить программу в отладчике Turbo Debugger командной строкой td primer1.exe В результате откроется окно Module с исходным текстом программы. Для того, чтобы просмотреть область памяти, необходимо открыть окно Dump (из меню выбрать режимы View / Dump). Для просмотра области памяти, содержащей сегмент данных, необходимо настроить окно Dump на адрес начала сегмента данных. Этот адрес должен содержаться в сегментном регистре DS. Но (!!!) перед началом выполнения программы адрес в DS не соответствует началу сегмента данных. Первые две команды программы производят загрузку физического адреса сегмента данных в регистр DS. Следовательно, для того, чтобы просмотреть содержимое сегмента данных, можно остановить выполнение программы после этих двух команд. Итак, необходимо перевести отладчик в пошаговый режим работы с помощью клавишF7 или F8 и выполнить только две первые команды (два раза нажать F8). После этого курсор выполнения (в виде треугольника) должен указывать на третью команду. Теперь можно смотреть дамп памяти (открыть окно Dump).
9. В дампе памяти для программы видны данные сегмента в двух представлениях: шестнадцатеричном и символьном. Видно, что по смещению 0000 расположены символы, входящие в строку stroka. После нее следует байт, имеющий в сегменте данных символическое имя perem1, содержимое этого байта offh. Теперь обратите внимание на то, как размещены в памяти байты, входящие в слово, обозначенное символическим именем perem2. Сначала следует байт со значением 7fh, а затем со значением 3ah. Как видите, в памяти действительно сначала расположен младший байт значения, а затем старший.
Оставшуюся часть сегмента данных вы можете теперь проанализировать самостоятельно или с помощью преподавателя.
ЗАДАНИЯ 1. Проанализируйте размещение байтов для поля, обозначенного символическим именем perem3. 2. Разберитесь со значением байтов, соответствующих символическим именам adr и adr_full. 3. Проанализируйте остальную часть сегмента данных. 4. Измените программу так, чтобы на экран выводилась строка «Конец сегмента данных». 5. Опишите в сегменте данных переменные со значениями 10, 100, 1000, 10000. Задайте правильный размер символических имен (переменных). Символические имена adr и adr_fullоставьте без изменения. 6. Найдите значения Ваших переменных в дампе сегмента данных. 7. Определите смещение каждой переменной и ее полный физический адрес. 8. Проверьте себя, сравнив полученное значение для perem3 со значением переменной adr, записанным в сегменте данных. 9. Проверьте полный физический адрес переменных, сравнив значение адреса сегмента данных, записанного как значение соответствующего байта переменной adr_full, со значением регистра DS в окне Registry (из меню выбрать режимы View / R
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |