Задание 1. Усовершенствуйте программу №1.1, чтобы выводилось сообщение на РУССКОМ ЯЗЫКЕ.




Литература

 

1. Юров В., Хорошенко С. Assembler: учебный курс – СПб: Питер Ком, 1999. – 672 с.:ил.

2. Абель П. Язык Ассемблера для IBM PC и программирования / Пер. с англ. Ю.В.Сальникова.- М.: Высш. шк., 1992.- 447 с.:ил.

3. Майко Г.В. Ассемблер для IBM PC: - М.: «Бизнес-Информ», «Сирин», 1997. – 212 с.

4. Финогенов К.Г. Самоучитель по системным функциям MS-DOS. – Изд.2, перераб. и дополн.- М.: Радио и связь, Энтроп, 1995. – 382 с., ил.

5. Данкан Р. Профессиональная работа в MS-DOS: Пер. с англ. – М.: Мир, 1993. – 509 с., ил.

6. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ. / Предисл. Н.В.Гайского. – М.: Финансы и статистика, 1992.- 544 с.: ил.

 

1. Создайте на Вашем рабочем диске папку для хранения программ на ассемблере. В неё скопируйте транслятор (tasm.exe), компоновщик (tlink.exe), отладчики (td.exe, afdpro.exe), а также файлы rtm.exe, dpmi16bi.ovl.

Возможно, в зависимости от конфигурации системы компьютера и его программного обеспечения, понадобятся еще какие-то дополнительные файлы. Если такая необходимость возникнет, система сообщит об этом.

Если в компьютере нет файлового менеджера для работы в DOS, можно установить эмулятор DOS, например, DOSBox.

Русификация DOSBox:

1) Файл russian.txt -> C:\Users\%username%\AppData\Local\DosBox. Если папка AppData не видна, то изменить настройки Windows на «показывать скрытые папки и диски».

2) Изменить конфигурационный файл (file.conf) dosbox: раздел [dosbox] - language = russian.txt, раздел [dos] - keyboardlayout = ru.

Перед началом работы командой mount <диск в эмуляторе> <реальный путь> необходимо «смонтировать» каталог с транслятором в эмулятор DOSBox (например, mount c c:\progs_asm) и перейти в него – команда «с:» Чтобы каждый раз при запуске DOSBox не писать эти команды, можно их записать в конфигурационном файле dosbox в разделе [autoexec].

Наша первая программа (1.1) – традиционный для всех языков программирования «Hello, world!»:

asm segment

org 100h

Begin:

mov ah, 9

mov dx, offset Mes

int 21h

int 20h

Mes db ‘Hello, world!$’

asm ends

end Begin

Для написания программы используется простейший текстовый редактор, например, Блокнот. Файл с написанным листингом необходимо сохранить с расширением.asm, для запуска в DOSBox написать команды:

tasm.exe <название программы>.asm

tlink.exe <название программы>.obj /t /x – для получения com-файла

<название программы>.com

Программа на языке ассемблера состоит из сегментов - любая программа имеет хотя бы один сегмент (в программах типа COM код, данные и стек расположены в одном сегменте, объем занимаемой памяти – 64 Кбайт).

Сегмент образуется директивой segment, которая имеет следующий формат:

имя сегмента segment

имя сегмента ends

Имя может быть произвольным, но соответствовать соглашениям для имен. Директивой ends заканчивается сегмент.

С помощью директивы org 100h выделяется память для программного префикса – области памяти объемом в 100h байт, которая используется для хранения служебной информации о программе.

Begin – метка, указывающая ассемблеру на начало кода (имя метки может быть другим, например, Start).

Регистр процессора – это специально отведенная область памяти для хранения какого-нибудь числа.

Команда mov загружает в регистр число: загружаем в регистр ah число 9, загружаем в регистр dx адрес сообщения для вывода («offset» — это смещение внутри заданного сегмента).

Когда мы загружаем программу в память, она автоматически располагается в первом свободном сегменте. Сегментные регистры – cs, ds, ss, es. Как они называются? Регистры данных – ax, bx, cx, dx (16-разрядные, состоят из 2-х 8-разрядных регистров, например, регистр ax состоит из ah и al). Как они называются?

Прерывание (interrupt) – это своего рода подпрограмма, которая находится постоянно в памяти и может вызываться в любое время из любой программы. Таким образом, мы вызываем подпрограмму (прерывание 21h), которая выводит на экран строку. Для этого мы, собственно, и помещаем необходимые значения в регистры, т. е. готовим для прерывания необходимые параметры. Всю работу (вывод строки, перемещение курсора) берет на себя эта процедура.

Прерывание int 20h выполняет только одну задачу: выход из программы (аналог оператора exit () в языках высокого уровня).

$ указывает на конец выводимой строки. Что будет, если мы уберём этот символ и запустим программу?

Пара регистров cs:ip задаёт текущий адрес кода.

Исследуйте программу в отладчике. Чтобы запустить программу под отладчиком, необходимо написать «afdpro.exe (или td.exe) <название программы>.com». Для перехода к следующей команде в отладчике необходимо нажать клавишу <F1> в AFD, <F7> в TD. Чтобы выйти из отладчика, необходимо выполнить команду «Quit».

а) Как изменяется регистр IP?

б) Что загружается в регистр dx? Перейдите в дампе памяти к смещению, указанному в dx.

в) Сколько байт занимает каждая из команд в программе №1.1?

 

Задание 1. Усовершенствуйте программу №1.1, чтобы выводилось сообщение на РУССКОМ ЯЗЫКЕ.

/*Изучите таблицу ASCII-кодов*/

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-10-21 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: