Ассемблер имеет ряд операторов, которые позволяют управлять




М Е Т О Д И Ч Е С К И Е У К А З А Н И Я

к лабораторным работам

 

" Программирование на языке Ассемблера IBM PC "

 

Часть 1

 

п о д и с ц и п л и н е

 

" Системное программирование "

 

для студентов специальности 7.091501

дневной и заочной форм обучения

 

Севастополь

 

 

 

УДК 681.3.06

 

Методические указания к лабораторным работам " Программирование на языке Ассемблера IBM PC. Часть 1". По дисциплине "Системное программирование" для студентов специальности 7.091501 дневной и заочной форм обучения. / Разработали: Максимова Т.М., Тертычный А.И., Шалимова Е.М., Сергеев Г.Г. – Севастополь: Издательство СевГТУ, 2000. - 22 с.

 

Целью методических указаний является краткое изложение основных теоретических положений: форматов записи команд и директив, правил получения исполняемой программы и ее запуска. Кроме того, методические указания содержат задания на лабораторные работы, порядок их выполнения и список рекомендованной литературы.

 

 

Методические указания утверждены на заседании кафедры кибернетики и вычислительной техники, протокол № 7 от 30 апреля 1999 года.

 

Рецензент Фисун С.Н., канд. техн. наук, доцент.

 

Ответственный за выпуск Скатков А.В., зав. Кафедрой КиВТ,

д-р техн. наук, профессор.

 

 

Допущено научно - методическим центром университета в качестве

методических указаний.

СОДЕРЖАНИЕ

 

 

1 Лабораторная работа №1. Трансляция и выполнение

программы на языке ассемблера IBM PC....................………....4

2 Лабораторная работа №2. Арифметические операции

в языке ассемвлера IBM PC............................…………...…......12

3 Лабораторная работа №3. Обработка строковых

данных в языке ассемблера IBM PC.............................………....18

Библиография…………………………………………………….22

 

1 ЛАБОРАТОРНАЯ РАБОТА №1. ТРАНСЛЯЦИЯ И ВЫПОЛНЕНИЕ ПРОГРАММЫНА ЯЗЫКЕ АССЕМБЛЕРА IBM PC

 

Цель работы: изучение правил записи программ на языке Ассемблер, трансляции и редактирования программ, получение навыков работы в отладчике.

 

1.1 НЕКОТОРЫЕ СВЕДЕНИЯ О ЯЗЫКЕ АССЕМБЛЕРА

 

Язык Ассемблера является следующим по уровню за машинными

кодами языком программирования. В языке Ассемблера программист

пользуется символическими мнемокодами вместо двоичных кодов

машинных команд и описательными именами для указания операндов этих команд.

Программа на языке Ассемблера называется исходной программой

(исходным модулем). Ассемблерный транслятор (tasm) преобразует

исходный текст в машинный код (объектную программу). И, наконец,

программа-компоновщик (tlink) определяет все адресные ссылки для,

возможно, нескольких объектных модулей, генерируя загрузочный

модуль.

 

1.1.1 ФОРМАТ ЗАПИСИ КОМАНД ЯЗЫКА АССЕМБЛЕРА

 

Основной формат кодирования команд (операторов) Ассемблера

имеет следующий вид:

 

[метка] команда [операнды]

 

Метка, команда и операнды разделяются по крайней мере одним

пробелом или символом табуляции. Максимальная длина строки - 132

символа.

Метка в языке Ассемблера может содержать буквы от "A" до "Z"и от "a" до "z" и цифры от "0" до "9", а также специальные символы "@", "_","$". Первым символом должна быть буква илиспециальный символ. Максимальная длина метки - 31 символ.

Мнемоническая команда указывает Ассемблеру, какое действие

должен выполнять данный оператор.

Операнд может определять либо начальное значение данных, либо

элементы, над которыми выполняются действия по соответствующей

команде.

Для удобства чтения текста исходной программы рекомендуется

использовать комментарии. Комментарий всегда начинается с символа ";", и Ассемблер полагает, что все символы, находящиеся справа

от ";", являются комментарием.

 

Пример записи команд:

 

; фрагмент программы

M5: ADD AX,30H;сложение содержимого аккумулятора

; AX с шестнадцатиричным числом 30

MOV RLOW,X;пересылка данных из области памяти Х

;в область памяти RLOW

JMP M5;команда перехода к метке M5

 

1.1.2 НЕКОТОРЫЕ ДИРЕКТИВЫАССЕМБЛЕРА

 

Ассемблер имеет ряд операторов, которые позволяют управлять

Процессом ассемблирования и формирования листинга. Эти

Операторы называются псевдокомандами или директивами. Они действуют только в процессе ассемблирования и не генерируют машинных кодов.

Директива SEGMENT используется для описания сегментов. Сегментом называется область памяти, которая начинается на границе

параграфа (имеет начальный адрес, кратный 10H) и имеет размер

до 64 Кбайт. Программа может содержать не более четырех сегментов,

из которых основными являются следующие три:

1) сегмент кода, сегмент кода содержит машинные команды, которые будут выполняться. Адрес сегмента кода находится в регистре CS;

2) сегмент данных, сегмент данных содержит определение

данных, константы и рабочие области, необходимые программе.

Адрес сегмента данных находится в регистре DS;

3) сегмент стека, стек содержит адреса возврата подпрограмм,

адреса параметров процедур и т.д. Адрес сегмента находится в

регистре SS.

Любые ассемблерные программы содержат, по крайней мере, один

сегмент - сегмент кода. В COM-файлах сегмент кода является одновременно сегментом данных и сегментом стека. Ассемблерные

директивы для описания сегмента имеют следующий формат:

 

Имя SEGMENT [параметры]

...

Имя ENDS

 

Директива SEGMENT задает имя сегмента. Имя сегмента должно обязательно присутствовать, быть уникальным и соответствовать соглашениям для имен в Ассемблере. Директива ENDS указывает на конец описания сегмента. Обе директивы, SEGMENT и ENDS, должны иметь одинаковые имена.

Как уже было сказано выше, процессор использует регистры CS, DS, SS для адресации сегмента кода, данных и стека соответственно.

Ассемблеру необходимо сообщить назначение каждого сегмента. Для этого служит директива ASSUME. Формат директивы ASSUME имеет вид:

 

ASSUME SS:им_стек,DS:им_дан,CS:им_код

 

Например, здесь SS:ABC указывает, что сегмент с именем ABC является сегментом стека.

Для определения относительной позиции в сегменте данных или кода Ассемблер использует адресный счетчик. Директива ORG используется для изменения значения адресного счетчика и соответсвенно адреса всех следующих за ней команд или данных.

Формат директивы имеет вид:

 

ORG выражение

 

Выражение может быть, в частности, целым числом.

На завершение программы указывает директива END. Директива

имеет следующий формат:

 

END [имя точки входа]

 

Имя точки входа сообщает ассемблеру, какая команда будет выполняться первой. Операнд может быть опущен, если данная программа не предназначается для выполнения (например, если программа содержит только описание данных).

 

1.1.3 ПРИМЕР ПРОГРАММЫНА ЯЗЫКЕ АССЕМБЛЕРА

 

; Программа вычисления выражения A*X*X+B*X+C, где

; X - некоторая величина от 0 до 255 длиной в 1байт,

; A,B,C - некоторые константы от 0 до 65535 длиной 2байта

; или слово каждая

 

EXAMPLE SEGMENT; Имя сегмента

ASSUME CS:EXAMPLE,DS:EXAMPLE; Имя сегмента кода

; и данных

ORG 100H; Для COM-файлов программа

; начинается с адреса 100H

; Определение констант

A EQU 1000H

B EQU 2000H

C EQU 3000H

 

; Исполняемые команды

START:

; Вычисление A*X*X

XOR AX,AX; AX <- 0

MOV AL,X; AL <- X

MUL X; AX <- X*X

MOV BX,A; BX <- A

MUL BX; DX,AX <- A*X*X

MOV RLOW,AX; RLOW <- AX

MOV RHIGHT,DX; RHIGHT <- DX

 

; Вычисление B*X

MOV AL,X; AL <- Х

XOR AH,AH; AH <- 0

MOV BX,B; BX <- B

MUL BX; DX,AX <- B*X

 

; Вычисление A*X*X+B*X

ADD AX,RLOW;младшая часть

ADC DX,RHIGHT;старшая часть

 

; Вычисление A*X*X+B*X+C

ADD AX,C

ADC DX,0

MOV RLOW,AX;сохранение результата

MOV RHIGHT,DX;в памяти

 

; Выход в DOS

INT 20H

 

X DB 30H;присвоение значения перееменной Х

; Резервирование памяти для результата

RLOW DW?

RHIGHT DW?

EXAMPLE ENDS;конец описания сегмента

END START;конец исходного модуля,

; START - точка входа (метка первой исполняемой команды)

 

 

1.2 ТРАНСЛЯЦИЯ И ЗАПУСК ПРОГРАММ НА ЯЗЫКЕ

АССЕМБЛЕРА

 

Для трансляции программ на языке Ассемблера можно использовать транслятор и редактор связей пакета Turbo Assembler. Для вызова транслятора, имеющего имя tasm, в командной строке следует набрать:

tasm [параметры] <имя исх.мод.> [имя объектн.мод.] [имя листинга]

 

Для вызова редактора связей c именем tlink следует набрать:

tlink[.exe] [параметры] <имя модуля 1> [<имя модуля 2>...]

Таким образом, для трансляции файла example1.asm командная

строка должна выглядеть следующим образом:

tasm example1.asm example1.obj example1.lst

 

В ответ на ввод этой команды на экране появится сообщение:

Turbo Assembler Version 2.5 Copyright (c) 1988, 1991 Borland

International

 



Поделиться:




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

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


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