ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ВЫСШЕМУ ОБРАЗОВАНИЮ
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ...
28 downloads
187 Views
386KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ВЫСШЕМУ ОБРАЗОВАНИЮ
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ПРОГРАММИРОВАНИЕ ОБРАБОТКИ, ПРЕОБРАЗОВАНИЯ И ВВОДА-ВЫВОДА ДАННЫХ НА АССЕМБЛЕРЕ ПЭВМ Методические указания к выполнению лабораторных работ
ПЕНЗА 1995
Государственный комитет Российской Федерации по высшему образованию Пензенский государственный технический университет
ПРОГРАММИРОВАНИЕ ОБРАБОТКИ, ПРЕОБРАЗОВАНИЯ И ВОДА-ВЫВОДА ДАНЫХ НА АССЕМБЛЕРЕ ПЭВМ
Методические указания к выполнению лабораторных работ
Пенза 1995
УДК 612.3.06 П78 Даны методические указания и задания к выполнению цикла лабораторных работ по программированию на языке ассемблера персональных ЭВМ типа IBM PC и совместимых с ними. Приведены примеры программ. Методические указания подготовлены на кафедрах “Высшая и прикладная математика” и “Вычислительная техника” и предназначены для студентов специальности 22.01 при выполнении лабораторных работ по дисциплине “Системное программное обеспечение ЭВМ”. Библиогр. 9 назв.
Составитель:
Л.Н.Домнин
Р е ц е н з е н т:
И.Ф.Имамутдинов, к.т.н., доцент кафедры “Прикладная математика” Пензенского государственного архитектурно-строительного института
2
ОБЩИЕ МЕТОДИЧЕСКИЕ УКАЗАНИЯ Порядок выполнения работы 1. Получите у преподавателя задание на выполнение очередной работы (вариант и дополнительные указания) и уясните цель. 2. Разработайте структуру и алгоритм работы программы. 3. Реализуйте алгоритм в виде текста на языке ассемблера. 4. Подготовьте тестовые наборы данных, необходимые для отладки программы и демонстрации ее работоспособности. 5. Используя подходящий текстовый редактор, перенесите ассемблерный текст на дисковый носитель в виде файла, имя которого должно иметь расширение asm. 6. Выполните трансляцию программы, используя транслятор применяемой в учебном процессе системы программирования. 7. Проанализируйте результаты трансляции и при обнаружении синтаксических ошибок выполните коррекцию текста программы и повторите п.п. 5 - 7. Если транслятор не обнаружил ошибок в программе, переходите к следующему пункту, используя для последующих действий объектный модуль, сформированный транслятором (содержится в файле, имя которого имеет расширение obj) 8. Выполните компоновку программы, используя редактор связей, имеющийся в вашей системе программирования. При обнаружении ошибок компоновки тщательно проанализируйте текст программы, внесите исправления и повторите п.п. 5 - 8. При успешном завершении компоновки формируется загрузочный модуль программы (файл с расширением eхe). 9. Исполните полученную программу, используя подготовленные ранее тестовые наборы исходных входных данных и сравните полученные результаты с ожидаемыми. В случае совпадения можно предположить, что программа работает правильно, и завершить работу над ней, в противном случае необходимо продолжить работу с программой, используя имеющийся в вашей системе отладчик. 10. Запустите отладчик, указав в качестве параметра имя файла с загрузочным модулем программы. Исполните программу в пошаговом режиме или в режиме с остановами в контрольных точках, тщательно проверяя получаемые промежуточные результаты. При вы3
явлении ошибки внесите необходимые поправки в текст программы и повторите предшествующие действия с п. 5. 11. Продемонстрируйте работу программы преподавателю и при наличии замечаний сделайте необходимые поправки. 12. Подготовьте и сдайте отчет о работе. Пример программы Рассмотрим пример программы, по сложности соответствующей программам лабораторной работы 1. Эта программа обеспечивает вычисление функции y = (a + b)c/d . Предполагается, что для хранения значений исходных данных и результатов достаточно машинного слова. Значения аргументов a,b,c,d заданы в программе. Результат y записывается в память. Остаток от деления ost также записывается в память. Текст программы имеет вид (колонка чисел справа - номера строк для облегчения последующих ссылок на отдельные части программы): ;-----------------------------------------------------; Лабораторная работа 1 ; Тема: Линейная программа ; Выполнил: ХХХХХХХХХХХ Х.Х. Группа: ХХХХХХ ;-----------------------------------------------------; Программа вычисления функции y = ( a + b ) c/d ; Формат данных - слово ; Значения аргументов a, b, c, d заданы в программе ; Результат y записывается в память ; Остаток от деления ost также записывается в память ;-----------------------------------------------------stseg segment para stack ‘stack’ ; сегмент dw 16 dup(?) ; stseg ends ; стека ;-----------------------------------------------------dseg segment para ; a dw 10 ; b dw 20 ; сегмент c dw 30 ; d dw 30 ; y dw ? ; данных ost dw ? ; dseg ends ; ;-----------------------------------------------------; cseg segment para lab1 proc far ; assume cs:cseg,ds:dseg,ss:stseg ; ; push ds
4
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
mov ax,0 ; push ax ; сегмент ; ---------------; mov ax,dseg ; mov ds,ax ; ; ---------------; mov ax,a ; add ax,b ; imul c ; idiv d ; ; ---------------; кода mov y,ax ; mov ost,dx ; ret ; Lab1 endp ; cseg snds ; ;-----------------------------------------------------end lab1 ; конец ;------------------------------------------прогр.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
Программа состоит из операторов и комментариев. Последние не являются строго обязательным элементом ассемблерной программы, но существенно облегчают работу с программой, если в них содержится информация о назначении и структуре программы, функциях ее составных частей, а иногда и отдельных операторов. Признаком комментария является “;” (точка с запятой). В приведенной программе в виде комментариев оформлены: заголовок (строки 1 - 4), краткая спецификация (строки 5 - 10) и разделители структурных элементов программы (штриховые линии). Остальные строки содержат собственно ассемблерный текст, состоящий из директив (псевдо операторов) и операторов машинных команд. Первые определяют структуру программы, структуру и значение данных, а вторые определяют выполняемые действия. Структурно программа состоит из трех частей – сегментов: сегмента стека (имя: stseg), сегмента данных (имя: dseg) и сегмента кода (имя: cseg). Каждый сегмент формируется с помощью пары специальных операторов, имеющих формат: “ segment ” - начало сегмента, “” - конец сегмента. 5
В рассматриваемо программе сегмент стека содержит один элемент dw 16 dup(?), с помощью которого формируется стек размером в 16 машинных слов. В данном случае стек используется в программе для обеспечения корректного завершения программы с передачей управления операционной системе ПЭВМ. Сегмент данных состоит из шести псевдооператоров dw, из которых первые четыре определяют исходные данные, а два последних – резервируют место для результатов. В составе кодового сегмента можно выделить несколько функциональных групп операторов. В тексте программы они разделены строками комментария. Директива assume обеспечивает “привязку” сегментов к конкретным сегментным регистрам. Следующие три оператора позволяют сохранить текущее содержимое сегментного регистра данных в стеке, а два других – настроить сегментный регистр на работу с сегментном данных нашей программы. Четвертая группа, состоящая из четырех арифметических операторов, реализует вычисления, заданные формулой y = (a + b)c/d . Далее следуют два оператора mov, необходимые для сохранения полученных результатов в памяти. Наконец, последний “исполняемый” оператор программы ret обеспечивает возврат управления операционной системе. Содержимое кодового сегмента оформлено в виде процедуры (подпрограммы). Это сделано с помощью двух специальных псевдооператоров, форматы которых выглядят так: “ proc ” - заголовок процедуры, “ endp ” - конец текста процедуры. Текс программы завершается оператором end, который в качестве операнда содержит имя “точки входа” в программу. В приложении содержится ещё один пример программы, который фактически является существенно усовершенствованным и усложнённым вариантом рассмотренной выше программы.
6
Средства разработки ассемблерных программ
Инструментом разработки программы на любом языке является соответствующая система программирования, к ключевым элементам которой (наряду с языком) относятся транслятор, редактор связей, отладчик и ряд других программ. Существует несколько систем программирования на ассемблере. В рассматриваемом лабораторном практикуме предполагается использование системы программирования Турбо-ассемблер. Для выполнения трансляции, редактирования связей и исполнения программы в среде Турбоотладчика можно использовать следующее форматы командной строки: - для трансляции: tasm /zi ,, например: tasm /zi prg1,prg1,prg1 должен быть файл: prg1.asm сформируются файлы: prg1.obj, prg1.lst - для редактирования: tlinc /v ,, например: tlinc /v prg1,prg1,prg1 должен быть файл: prg1.obj сформируются файлы: prg1.exe, prg1.map - для исполнения: например: prg1 - для исполнения в среде отладчика: td например: td prg1 В процессе работы с отладчиком может быть оформлен файл протокола отладки, что облегчает документирование процесса разработки программы. Содержимое файла протокола может быть использовано для подтверждения правильности работы программы. Ниже приведён пример отредактированного протокола, полученного при отладке рассмотренной ранее программы. 7
Состояние используемых областей памяти и регистров процессора перед исполнением программы: Variables a
10
(Ah)
b
20
(14h)
c
30
(1Eh)
d
80
(50h)
y
0
(0h)
0
(0h)
ost Regs
Regs
ax 0000
bx 0000
cx 0000
dx 0000
si 0000
di 0000
bp 0000
sp 0000
ss 5E32
es 5E32
ss 5E45
cs 5E45
ip 0000
c=0 z=0 s=0 o=0 p=0 a=0 i=1 d=0
--------Stopped at #prim#35
(останов в строке 35)--------
Состояние регистров процессора перед началом счета: Regs
Regs
ax 5E44
bx 0000
cx 0000
dx 0000
si 0000
di 0000
bp 0000
sp 001C
ss 5E44
es 5E32
ss 5E42
cs 5E45
ip 000A
c=0 z=0 s=0 o=0 p=0 a=0 i=1 d=0
--------Stopped at #prim#36
(останов в строке 36)--------
Состояние регистров процессора после выполнения команды: mov ax,a ; (ax):=a Regs
Regs
ax 5E44
bx 0000
cx 0000
dx 0000
si 0000
di 0000
bp 0000
sp 001C
ss 5E44
es 5E32
ss 5E42
cs 5E45
ip 000D
c=0 z=0 s=0 o=0 p=0 a=0 i=1 d=0
--------Stopped at #prim#37
(останов в строке 37)--------
Состояние регистров процессора после выполнения команды: add ax,b Regs
; (ax):=a+b
ax 001E
bx 0000
cx 0000
dx 0000
si 0000
di 0000
bp 0000
sp 001C
ss 5E44
es 5E32
ss 5E42
cs 5E45
8
ip 0011
Regs
c=0 z=0 s=0 o=0 p=1 a=0 i=1 d=0
--------Stopped at #prim#38
(останов в строке 38)--------
Состояние регистров процессора после выполнения команды: imul c ; (ax):=(a+b)c Regs
Regs
ax 0384
bx 0000
cx 0000
dx 0000
si 0000
di 0000
bp 0000
sp 001C
ss 5E44
es 5E32
ss 5E42
cs 5E45
cp 0015
c=0 z=1 s=0 o=0 p=1 a=1 i=1 d=0
--------Stopped at #prim#40
(останов в строке 40)--------
Состояние регистров процессора после выполнения команды: idiv d ; (ax):=(a+b)c/d (dx):=((a+b)c) mod d Regs
Regs
ax 000B
bx 0000
cx 0000
dx 0014
si 0000
di 0000
bp 0000
sp 001C
ss 5E44
es 5E32
ss 5E42
cs 5E45
cp 0019
c=0 z=1 s=0 o=0 p=1 a=1 i=1 d=0
--------Stopped at #prim#42
(останов в строке 42)--------
Состояние областей памяти по завершении счета, перед “выходом” в операционную систему Variables a
10
(Ah)
b
20
(14h)
c
30
(1Eh)
d
80
(50h)
y
11
(Bh)
ost
20
(14h)
--------------- Terminated, exit code 0 ---------------(Нормальное завершение программы)
Требования к оформлению отчёта
В каждой выполненной лабораторной работе составляется отчёт, который должен содержать: - титульный лист с названием учебного заведения и кафедры, где выполнена работа, названием учебной дисциплины, указанием но9
мера работы, фамилии исполнителя и фамилия преподавателя, принявшего работу; - тему, цель работы, и развёрнутое лабораторное задание с отражением сведений о конкретном варианте; - краткую характеристику выбранной сегментной структуры; - при необходимости краткое пояснение принципов, метода и алгоритма решения задачи; - текст ассемблерной программы; - тестовый набор данных; - фактические результаты исполнения программы, представленные в виде распечатки файла протокола отладки (если в программе отсутствуют операции ввода-вывода), распечатки образа экрана (если имеет место диалоговая работа), или распечатки содержимого файлов ввода-вывода; - вывод о работоспособности программы с объяснением причин обнаруженных некорректностей в работе; - статистические сведения о размерах программы (количество операторов в тексте программы, объём памяти, занимаемой файлами исходного и загрузочного модулей в килобайтах). Текст программы, кроме операторов ассемблера, должен включать в себя заголовок, отражающий номер лабораторной работы, сведения об авторе и спецификации на программу в соответствии с вариантом задания. В качестве образца оформления текста можно использовать пример приведённый выше, а так же пример из приложения. Отчёт оформляется на листах формата А4 (210х297). Допустимы незначительные отклонения от указанных размеров.
10
ЗАДАНИЯ НА ЛАБОРАТОРНЫЕ РАБОТЫ Лабораторная работа 1 Тема: ЛИНЕЙНАЯ ПРОГРАММА Цель работы. Изучение основных операций пересылки данных и операций двоичной арифметики, приобретение навыков программирования вычислений простых арифметических выражений. Лабораторное задание. Разработать программу вычисления функции y = f(a,b,c,d,e). Формат данных слово. Методические указания. Значения аргументов a,b,c,d,e задать в программе. Результат y записать в память. Правильность результата проверить с помощью программы отладчика. В процессе отладки использовать несколько тестовых наборов исходных данных, в комплексе обеспечивающих исполнение операций, как с положительными, так и с отрицательными операндами, и зафиксировать результаты в файле протокола. При подготовке текста программы можно взять за основу пример из ОБЩИХ МЕТОДИЧЕСКИХ УКАЗАНИЙ. В этом случае достаточно заменить группу арифметических операторов в соответствии с заданной функцией. Варианты заданий. Указан номер варианта и функция f.
1) y=a+b-c*d/e 2) y=a+b-c/d*e 3) y=a+b*c-d/e 4) y=a+b*c*d-e 5) y=a+b/c-d*e 6) y=a+b/c*d-e 7) y=a-b+c*d/e 8) y=a-b+c/d*e 9) y=a+b-c*d/e 10) y=a-b*c/d+e 11) y=a-b/c+d*e 12) y=a-b/c*d+e
16) y=a*b+c-d/e 17) y=a*b+c/d-e 18) y=a*b-c+d/e 19) y=a*b-c/d+e 20) y=a*b/c+d-e 21) y=a*b/c-d*e 22) y=a/b+c-d*e 23) y=a/b+c*d-e 24) y=a/b-c+d*e 25) y=a/b-c*d+e 26) y=a/b*c+d-e 27) y=a/b*c-d+e 11
31) y=(a+b-c)*d/e 32) y=(a+b-c)/d*e 33) y=(a+b)*c-d/e 34) y=(a+b)*c-d-e 35) y=(a+b)/c-d*e 36) y=(a+b)/c*d-e 37) y=(a+b+c)*d/e 38) y=(a+b+c)/d*e 39) y=(a+b)*c+d/e 40) y=(a+b)*c/d+e 41) y=(a-b)/c+d*e 42) y=(a-b)/c*d+e
13) y=a+b-c*d/e 14) y=a+b*c/d-e 15) y=a-b+c/d*e
28) y=a*b+c*d/e 29) y=a*b-c/d+e 30) y=a/b+c*d-e
43) y=a*(b+c)-d/e 44) y=a*(b+c)/d-e 45) y=a*(b-c)+d/e
Контрольные вопросы
1. Укажите недопустимые сочетания операндов команды mov. 2. Поясните логику выполнения операций push и pop. 3. Какие регистры можно использовать при выполнении арифметических операций? 4. Какие арифметические операции применимы как к знаковым, так и к беззнаковым данным? 5. Поясните схему выполнения операции умножения. 6. Поясните схему выполнения операции деления. 7. Какую подготовку следует выполнить для операции деления? 8. В каких случаях имеет место прерывание при делении? Лабораторная работа 2
РАЗВЕТВЛЯЮЩАЯСЯ ПРОГРАММА Тема: Цель работы. Изучение команд безусловного и условного переходов, получение навыков программирования разветвляющихся вычислений. Лабораторное задание. Разработать программу вычисления функции, определяемой с помощью следующего условного оператора: if then y:= f1(a,b,c,d,e) else y:= f2(a,b,c,d,e), где логическое выражение, например, (a > b)and(d<e); f1, f2 - функции, приведенные в описании к работе 1. Формат данных – байт. Методические указания. Значения аргументов a,b,c,d,e задать в программе. Результат y проверить с помощью программы отладчика. В процессе отладки использовать несколько тестовых наборов исходных данных, в комплексе обеспечивающих исполнение всех ветвей программы, и занести результаты в файл протокола. Варианты заданий. Для каждого варианта указаны номера, под которыми функции f1 и f2 приведены в описании к лабораторной работе 1, и логическое выражение (берется из той же строки, где находится номер варианта). 1) 1 16 16) 16 31 31) 31 1 (a>b) and (cd) 12
2) 2 3) 3 4) 4 5) 5 6) 6 7) 7 8) 8 9) 9 10) 10 11) 11 12) 12 13) 13 14) 14 15) 15
17 18 19 20 21 22 23 24 25 26 27 28 29 30
17) 18) 19) 20) 21) 22) 23) 24) 25) 26) 27) 28) 29) 30)
17 18 19 20 21 22 23 24 25 26 27 28 29 30
32 33 34 35 36 37 38 39 40 41 42 43 44 45
32) 33) 34) 35) 36) 37) 38) 39) 40) 41) 42) 43) 44) 45)
32 33 34 35 36 37 38 39 40 41 42 43 44 45
2 3 4 5 6 7 8 9 10 11 12 13 14 15
(a>-b) and (c-c) or (d<e) (b-c) or (d-d) xor (eBIN); ; ; ----------------------------------------------; vvodd: outdspl tkstd ; Выдача запроса на ввод d ; н ;
24
;
vvod ; Ввод значения d ; asc_bin as,d ; Преобразование d (ASCII->BIN); ----------------------------------------------mov tap,offset a ; ; mov tap+2,offset b ; Формирование ; mov tap+4,offset c ; таблицы ; mov tap+6,offset d ; адресов ; mov tap+8,offset y ; параметров ;
т
; ; ; ; ; ; ; ;
Продолжение прил. lea bx,tap ; ; ; call func ; Вызов func ; к ; ; ----------------------------------------------; mov bx,offset ys ; Запись в стек ; ; push bx ; адреса строки ; ; ; ; ASCII-кодов ; о ; mov bx,y ; Запись в стек ; ; push bx ; адреса y ; ; call binasc ; Вызов binasc ; ; ; ----------------------------------------------- д ; outdspl tekst2 ; Вывод ; ; outdspl ys ; результата ; ; outdspl tekst3 ; на дисплей ; ; ; ----------------------------------------------- а ; mov ah,8 ; int 21h ; osn_prg endp ; cseg ends ; ;-----------------------------------------------------------; end osn_prg ; конец программы ;
Подпрограмма
ascbin
Обеспечивает преобразование числа, представленного в виде строки ASCII-кодов в формате ЗнЦЦЦ в двоичный дополнительный код в формате слова. Перед запуском ascbin адрес начала строки ASCII-кодов должен быть помещен в регистр si. Результат перевода формируется в регистре ax. Используемые регистры ax,bx,cx,si. 25
extrn des:word public ascbin ;------------------------------------------------------------; cseg segment para public 'code' ; ascbin proc far ; с ; assume cs:cseg ; ; push bx ; Сохранение содержимого ; е ; push cx ; рабочих регистров ; ; push si ; ; г ;
Продолжение прил. mov mov mov
ax,0 bx,0 cx,3
; ; Подготовка цикла ;
; ; ; м ; ; ; povt1: ; е ; imul des ; ax:=ax*10 ; ; inc si ; Формирование в bl ; н ; mov bl,[si] ; двоичного эквивалента ; ; and bl,0fh ; i-го разряда числа ; т ; add ax,bx ; ax:=ax+bl (bh содерж. 0); ; loop povt1 ; ; ; pop si ; Восстановление si ; ; cmp byte ptr [si],'+' ; формирование ; ; je pos ; знака двоичного ; к ; neg ax ; эквивалента числа ; ; pos: ; о ; pop cx ; Восстановление содержимого ; ; pop bx ; рабочих регистров ; д ; ret ; Возврат в вызывающую программу ; ; ascbin endp ; а ; ;------------------------------------------------------; cseg ends ; ;------------------------------------------------------------; end
Подпрограмма
func
Обеспечивает вычисление функции y=(a+b)*c/d, где a,b,c,d двоичные знаковые числа в формате слова. Перед запуском func в регистр bx должен быть помещен адрес начала таблицы, содержащей адреса аргументов a,b,c,d и адрес результата y. Используемые регистры: ax,bx,dx,si. 26
cseg func
public segment proc push push push mov mov
func para public far ax ; dx ; si ; si,[bx] ax,[si]
'code'
;---------------------; ; с ; Сохранение ; ; содержимого ; е ; рабочих регисров ; ; ; Выборка ; г ; ; значений ; ;
Продолжение прил.
func cseg
mov add mov imul mov idiv mov mov pop pop pop ret endp ends end
si,[bx+2] ; параметров ax,[si] ; и si,[bx+4] ; выполнение word ptr [si] ; вычислений si,[bx+6] ; ax:=(a+b)*c/d word ptr [si] ; si,[bx+8] ; Передача результата в [si],ax ; в вызывающую процедуру si ; Восстановление dx ; содержимого рабочих ax ; регисров ; Возврат в вызывающую процедуру
; м ; ; ; ; е ; ; ; ; н ; ; ; ; т ; ; ; ; ; ; к ; ; о ; ; д ; ; а ; ;-------------------------------------------;
Подпрограмма binasc
Обеспечивает преобразование числа из двоичного дополнительного кода в формате слова в строку ASCII-кодов с форматом ЗнЦЦЦ. Перед запуском binasc переводимое двоичное число, а также адрес начала формируемой строки ASCII-кодов должны быть помещены в стек. Используемые регистры: ax,cx,dx,di. extrn des:word public binasc ;-----------------------------------------------------------; cseg segment para public 'code' ; с ; binasc proc far ; ;
27
assume public push mov push push push push mov
cs:cseg binasc bp bp,sp ax cx dx di ax,[bp+6]
; ; ; ; ; Сохранение ; ; содержимого ; ; рабочих ; ; регистров ; ; ; ; Переводимое число -> ax ;
е
г
м
; ; ; ; ; ; ; ; ;
Продолжение прил. mov mov cmp jge mov neg poz: mov add mov povt2: div or mov mov dec loop ;
binasc cseg
pop pop pop pop pop ret endp ends end
di,[bp+8] ; Адрес результата -> di ; е byte ptr[di],'+' ; Формирование ; ax,0 ; знака ; poz ; в символьном ; н byte ptr[di],'-' ; представлении ; ax ; числа ; ; т dx,0 ; di,4 ; cx,4 ; ; des ; Формирование ; dx,030h ; кода очередной ; [di],dl ; цифры перево; dx,0 ; димого числа ; к di ; Переход к сле; povt2 ; дующей цифре ; ; о di ; Восстановление ; dx ; содержимого ; cx ; рабочих ; д ax ; регистров ; bp ; ; 4 ; Возврат в вызывающую процедуру ; а ; ;------------------------------------------
Библиотека макроопределений
28
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
outdspl macro mov mov int endm vvod macro mov mov int endm
tkst ;-----------------------------------ah,9 ; Вывод строки dx,offset tkst ; символов 21h ; на экран дисплея ;------------------------------------------; dx,offset buf ; Ввод строки ah,10 ; символов с 21h ; клавиатуры
Продолжение прил. asc_bin macro mov call mov endm
src,dst ;---------------------------------; si,offset src ; Подготовка к вызову ascbin ascbin ; Вызов процедуры ascbin dst,ax ; Запись числа в память ;-------------------------------------------;
Результаты трансляции и компоновки
По завершении полного цикла разработки программ рабочий директорий, кроме указанных ранее файлов с исходными текстами программ с расширением asm, будет содержать еще ряд файлов (файлы с расширениями lst,obj,mac,exe,map). В приводимом списке числа указывают размеры файлов в байтах. ASCBIN.ASM ASCBIN.LST ASCBIN.OBJ BINASC.ASM BINASC.LST BINASC.OBJ
1856 2528 200 2583 3140 218
FUNC.ASM FUNC.LST FUNC.OBJ OSN_PRG.ASM OSN_PRG.LST OSN_PRG.OBJ
1485 2126 71 5575 13636 1011
LIB.MAC PRG.EXE PRG.MAP
888 1357 228
Текстовыми являются файлы с расширениями asm, map и lst. map-файл дает характеристику сегментной структуры программы и в нашем случае выглядит так: Start
Stop
Length Name
Class
00000H 0007FH 00080H STSEG 00080H 00207H 00188H DSEG
29
STACK
00210H 0036EH 0015FH CSEG
CODE
Program entry point at 0021:0000
lst-файлы содержат протокол трансляции и обеспечивают наи-
более полное документирование соответствующих ассемблерных модулей. Пример листинга для модуля func.asm приведен на странице 31. Наконец, файл prg.exe содержит загрузочный модуль программы, который может быть запущен на исполнение.
Продолжение прил.
Образ части экрана с результатами выполнения программы имеет вид:
Непосредственной проверкой можно убедиться в правильности результата. Аналогичное совпадение имеет место и при других проверках, что свидетельствует в пользу правильности программы.
30
Продолжение прил. Turbo Assembler ascbin.ASM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Version 2.5
0000 0000 0000 0001 0002 0003 0006 0009 000C 000C 0010 0011 0013 0016 0018 001A 001B 001E 0020 0022 0022 0023 0024 0025 0025
53 51 56 B8 0000 BB 0000 B9 0003 F7 46 8A 80 03 E2 5E 80 74 F7 59 5B CB
2E 0000e 1C E3 0F C3 F2 3C 2B 02 D8
05/15/95 11:18:15
Page 1
extrn des:word public ascbin ;-------------------------------------------------------------; cseg segment para public 'code' ; ascbin proc far ; с ; assume cs:cseg ; ; push bx ; Сохранение содержимого ; е ; push cx ; рабочих регистров ; ; push si ; ; г ; mov ax,0 ; ; ; mov bx,0 ; Подготовка цикла ; м ; mov cx,3 ; ; ; povt1: ; е ; imul des ; ax:=ax*10 ; ; inc si ; Формирование в bl ; н ; mov bl,[si] ; двоичного эквивалента ; ; and bl,0fh ; i-го разряда числа ; т ; add ax,bx ; ax:=ax+bl(bh содерж.0) ; ; loop povt1 ; ; ; pop si ; Восстановление si ; ; cmp byte ptr [si],'+' ; формирование ; ; je pos ; знака двоичного ; к ; neg ax ; эквивалента числа ; ; pos: ; о ; pop cx ; Восстановление содержимого ; ; pop bx ; рабочих регистров ; д ; ret ; Возврат в вызывающую программу ; ; ascbin endp ; а ; ;------------------------------------------------------; cseg ends ; ;-------------------------------------------------------------; end
31
Turbo Assembler Symbol Table
Version 2.5
05/15/95 11:18:15
Symbol Name
Type
??DATE ??FILENAME ??TIME ??VERSION @CPU @CURSEG @FILENAME @WORDSIZE ASCBIN DES POS POVT1
Text "03/02/09" Text "ascbin " Text "11:18:15" Number 040A Text 0101H Text CSEG Text ASCBIN Text 2 Far CSEG:0000 Word ----:---- Extern Near CSEG:0022 Near CSEG:000C
Groups & Segments
Bit Size Align
CSEG
16
Page 2
Value
Combine Class
0025 Para
Public
CODE
ЛИТЕРАТУРА 1. Абель П. Язык ассемблера для IBM PC и программирования / Пер. с англ. Ю.В.Сальникова. – М.:Высш. шк., 1992.- 447с. 2. Григорьев В.Л. Микропроцессор-i485. Архитектура и программирование: В 4-х кн. – М.:ГРАНАЛ,1993. – 346с. 3. Злобин В.К., Григорьев В.Л. программирование арифметических операций в микропроцессорах: Учебное пособие для технических вузов. – М.: Высш. шк., 1991.-303с. 4. Лю Ю-Чжен, Гибсон Г. Микропроцессоры семейства 8086/8088. Архитектура, программирование и проектирование микрокомпьютерных систем / Пер. с англ. – М.: Радио и связь, 1987. – 512с. 5. Морс С.П., Алберт Д.Д. Архитектура микропроцессора 80286 / Пер. с англ. – М.: Радио и связь, 1990. – 304с. 6. Нортон П., Соуха Д. Язык ассемблера для IBM PC / Пер. с англ. - М.: Изд-во “Компьютер”, 1993. – 352с. 32
7. Пучков В.Г. Отладка программ на уровне машинных команд: Методические указания к выполнению лабораторных работ. - Пенза: Изд-во ПГТУ, 1993. – 47с. 8. Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера / Пер. с англ. – М.: Радио и связь, 1989. – 512с. 9. Шереметьев К. Введение в Турбо-ассемблер. – М.: Либрис, 1993. – 192с.
33
ПРОГРАММИРОВАНИЕ ОБРАБОТКИ ПРЕОБРАЗОВАНИЯ И ВВОДА-ВЫВОДА ДАННЫХ НА АССЕМБЛЕРЕ ПЭВМ Методические указания к выполнению лабораторных работ
Редактор Н. К. Ступина Технический редактор В. Н. Спирочкина Корректор Ж. А. Лубенцова
Сдано в производство 12.09.05. Формат 60Х84. Бумага типогр. №2.
Печать офсетная. Усл. печ. л. 1,86. Уч.-изд. л. 2,0 Заказ № 448. Тираж 100. «С» 78. Издательство Пензенского государственного технического университета. Пенза, Красная, 40.
2