ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ВЫСШЕМУ ОБРАЗОВАНИЮ
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ПРОГРАММИРОВАНИЕ ОБРАБОТКИ, ПРЕОБРАЗОВАНИЯ И ВВОДА-ВЫВОДА ДАННЫХ НА АССЕМБЛЕРЕ ПЭВМ Методические указания к выполнению лабораторных работ
ПЕНЗА 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 <имя-asm-файла>,<имя-obj-файла>,<имя-lst-файла> например: tasm /zi prg1,prg1,prg1 должен быть файл: prg1.asm сформируются файлы: prg1.obj, prg1.lst - для редактирования: tlinc /v <имя-obj-файла>,<имя-exe-файла>,<имя-map-файла> например: tlinc /v prg1,prg1,prg1 должен быть файл: prg1.obj сформируются файлы: prg1.exe, prg1.map - для исполнения: <имя-exe-файла> например: prg1 - для исполнения в среде отладчика: td <имя-exe-файла> например: 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 (c<>d) 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
-d) (ae) (b>c) or (d<e) (b>-c) or (d<e) (b-c) or (d<-e) (b<-c) or (d-e) (b-e) (b<>c) or (d>e) (c>-d) xor (e-a)
Контрольные вопросы
1. Что понимается под ‘коротким’, ‘ближним’ и ‘дальним’ переходами? 2. Перечислите флаги, используемые при выполнении условных переходов. 3. Как реализовать условный переход, отличный от “короткого”? 4. Охарактеризуйте группу команд условных переходов, ориентированных на сравнение беззнаковых чисел. 5. Охарактеризуйте группу команд условных переходов, ориентированных на сравнение знаковых чисел. Лабораторная работа 3
ЦИКЛИЧЕСКАЯ ПРОГРАММА Тема: Цель работы. Изучение языковых средств и принципов организации циклов на ассемблере, приобретение навыков программирования циклической обработки массивов данных. Лабораторное задание. Разработать программу вычисления таблицы значений функции y=f(a,b,c,d,e) при изменении одного из аргументов с постоянным шагом h. Вычислить n значений функции. Методические указания. Табличные значения функции и изменяемого аргумента записать в память одним из четырех способов: 13
1) в виде одного массива, содержащего n троек значений “порядковый номер – аргумент - функция”; 2) в виде одного массива, содержащего n троек значений “функция – аргумент – порядковый номер”; 3) в виде двух массивов: массива аргумента, содержащего n пар значений “порядковый номер - аргумент”, и массива функции, содержащего n пар значений “порядковый номер - функция”; 4) в виде двух массивов: массива аргумента, содержащего n пар значений “аргумент – порядковый номер”. Значения аргументов a,b,c,d,e, шаг приращения меняющегося аргумента h и количество табличных значений n задать в программе. Результат проверить с помощью программы отладчика. Варианты заданий: Для каждого варианта указан номер, под которым f приведена в описании к работе 1, варьируемый аргумент (a,b,c,d,e), способ представления результата (1, 2, 3, 4) и формат данных (байт – b, слово - w). 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15)
31 32 33 34 35 6 37 38 39 40 41 42 43 44 45
a b c d e a b c d e a b c d e
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3
b w b w w b w b b w b w w b w
16) 17) 18) 19) 20) 21) 22) 23) 24) 25) 26) 27) 28) 29) 30)
1 a 4 b 2 b 1 b 3 c 2 w 4 d 3 b 5 e 4 w 6 a 1 w 7 b 2 b 8 c 3 w 9 d 4 b 10 e 1 b 11 a 2 w 12 b 3 b 13 c 4 w 14 d 1 w 15 e 2 b
31) 32) 33) 34) 35) 36) 37) 38) 39) 40) 41) 42) 43) 44) 45)
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
a b c d e a b c d e a b c d e
3 4 1 2 3 4 1 2 3 4 1 2 3 4 1
w b b w b w w b w b b w b w w
Контрольные вопросы
1. Назовите известные вам типы циклических процессов. 2. Как организовать цикл с помощью команд условных переходов, не прибегая к специальным командам управления циклами? 14
3. Перечислите команды управления циклом. Поясните логику исполнения каждой команды. 4. Как организовать цикл с помощью команды управления циклом? 5. Поясните принцип использования стека при организации вложенных циклов. 6. Есть ли ограничения на размер тела цикла в байтах? Лабораторная работа 4
ПРЕОБРАЗОВАНИЕ ПРЕДСТАВЛЕНИЯ ЧИСЛОВЫХ ДАННЫХ Цель работы. Изучение способов представления и алгоритмов преобразования числовых данных. Лабораторное задание. Разработать программу перевода целого знакового числа из одной системы счисления в другую. Методические указания. Любое целое число p, представленное в некоторой позиционной системе счисления по основанию q в виде последовательности dndn-1… di …d1d0, где di – цифры этой позиционной системы от 0 до q-1, может рассматриваться как сокращенная запись полинома P = d n q n + d n −1 q n −1 + ... + d i q i + ... + d1 q + d 0 . Для получения представления числа в другой позиционной системе счисления необходимо коэффициенты di, а также основание q выразить в этой системе и вычислить значение полинома. Вычисление можно выполнить по различным схемам, но наиболее экономичной по количеству операций является схема Горнера, в основу которой положена следующая форма записи полинома: P = (((d n q + d n −1 )q + ... + d i )q + ... + d1 )q + d 0 . В этом случае для получения результата требуется всего n умножений и n сложений, которые можно выполнить в цикле. В общем случае для решения задачи перевода целого числа из одной системы счисления в другую следует использовать известный алгоритм многократного деления переводимого числа на основание новой системы счисления по правилам исходной системы счисления. Тема:
15
Для вариантов с 1 по 15 исходное число задать в виде строки символов в коде ASCII, результат сформировать в виде двоичного кода в формате слова. Для вариантов с 16 по 30 исходное данное задать в виде двоичного числа в формате слова, результат сформировать в виде строки символов в коде ASCII. Число в ASCII разместить в памяти одним из двух способов: 1) “чем старше разряд, тем старше адрес” (ЦЦЦ…ЦЗн); 2) “чем старше разряд, тем младше адрес” (ЗнЦЦЦ…Ц). Количество разрядов (байтов) в ASCII-представлении числа выбирается таким, чтобы обеспечивалась возможность работы с числами в диапазоне –32768…+32767. Варианты заданий. Для каждого варианта указаны основания систем счисления исходного числа и результата, а также способ размещения числа в коде ASCII в памяти: 21) 2 7 1 11) 12 2 1 1) 2 2 1 22) 2 8 2 12) 13 2 2 2) 3 2 2 23) 2 9 1 13) 14 2 1 3) 4 2 1 24) 2 10 2 14) 15 2 2 4) 5 2 2 25) 2 11 1 15) 16 2 1 5) 6 2 1 26) 2 12 2 16) 2 2 2 6) 7 2 2 27) 2 13 1 17) 2 3 1 7) 8 2 1 28) 2 14 2 18) 2 4 2 8) 9 2 2 29) 2 15 1 19) 2 5 1 9) 10 2 1 30) 2 16 2 20) 2 6 2 10) 11 2 2 Контрольные вопросы
1. Назовите форматы представления числовых данных в ЭВМ. Охарактеризуйте каждый из них. 2. Какие способы перевода чисел из одной системы в другую вам известны? 3. Дайте характеристику поразрядных логических операций. 4. Дайте характеристику операций сдвигов и логических сдвигов. Лабораторная работа 5 Тема:
ПРОГРАММИРОВАНИЕ ВВОДА-ВЫВОДА СИМВОЛЬНЫХ И ЧИСЛОВЫХ ДАННЫХ 16
Цель работы. Получение навыков программирования ввода и вывода данных с использованием функций прерывания int 21h. Лабораторное задание. Разработать программу, обеспечивающую: - ввод целого знакового числа, представленного в позиционной системе счисления с основанием q1, в формате ASCII; - перевод введенного числа в двоичный формат; - перевод числа из двоичной системы в систему счисления с основанием q2 и представление результата в формате ASCII; - вывод полученного результата на экран дисплея. Методические указания. Формат вводимых и выводимых чисел имеет вид: ЗнЦЦЦ…Ц, где Зн – знак числа (+,-), Ц – цифра. Количество цифр должно быть таким, чтобы обеспечивалась работа с числами в диапазоне –32768…+32767. Предусмотреть а программе вывод текста, поясняющего из какой системы (q1) в какую (q2) фактически осуществляется перевод, вывод запроса на ввод исходных данных с указанием формата ввода и вывод пояснения к выводимому результату. Необходимо также предусмотреть проверку правильности ввода исходных данных (каждого знака в отдельности и числовой строки в целом). Данная работа выполняется на основе лабораторной работы 4. Варианты заданий. Для каждого варианта указаны основания систем счисления представления исходного данного (q1), промежуточного (“2”) и окончательного результатов (q2): 21) 10 2 7 11) 12 2 10 1) 2 2 10 22) 10 2 8 12) 13 2 10 2) 3 2 10 23) 10 2 9 13) 14 2 10 3) 4 2 10 24) 10 2 10 14) 15 2 10 4) 5 2 10 25) 10 2 11 15) 16 2 10 5) 6 2 10 26) 10 2 12 16) 10 2 2 6) 7 2 10 27) 10 2 13 17) 10 2 3 7) 8 2 10 28) 10 2 14 18) 10 2 4 8) 9 2 10 29) 10 2 15 19) 10 2 5 9) 10 2 10 30) 10 2 16 20) 10 2 6 10) 11 2 10 Контрольные вопросы
17
1. Дайте классификацию прерываний в ПЭВМ. 2. Поясните назначение команд прерывания. 3 .Дайте общую характеристику прерывания 21h. 4. Охарактеризуйте функции для работы с клавиатурой, выполняемые по прерыванию 21h. 5. Поясните назначение и работу буфера клавиатуры. 6. Опишите функции для вывода символьной и строковой информации на экран дисплея, вызываемые по прерыванию 21h. 7. Какие управляющие коды используются при выводе текстовых строк на экран дисплея? Лабораторная работа 6 Тема: ПРОЦЕДУРЫ Цель работы. Получение навыков разработки структурной организации ассемблерных программ и ее реализации на основе аппарата процедур, изучение способов организации связи по данным между процедурами. Лабораторное задание. Разработать программу вычисления функции y=f(a,b,c,d,e). Значения аргументов a, b, c, d, e должны вводиться с клавиатуры ПЭВМ. Значение функции y следует вывести на экран дисплея. Методические указания. Для ввода-вывода числовых данных использовать один из двух следующих форматов: ЗнЦЦЦ или ЗнЦЦЦЦЦ, где Ц – цифра {0,1,2,…,9}, Зн – знак {+, -}. Предусмотреть в программе вывод текста, содержащего вычисляемую функцию и формат аргументов, а также выдачу запроса на ввод каждого аргумента. Вычисление функции и преобразование вводимых и выводимых данных оформить в виде процедур: func – вычисление заданной функции, ascbin – преобразование числа из строки ASCII-кодов в двоичное число, binasc – преобразование числа, представленного в виде двоичного кода, в строку ASCII кодов. Передача аргументов между вызывающей и вызываемой процедурами может осуществляться несколькими способами (1 - 8):
18
Способ передачи Через регистры Через сегмент стека Через сегмент данных Через сегмент кода
Передаются данные 1 3 5 7
Передаются адреса 2 4 6 8
Варианты заданий. Для каждого варианта указан номер, под которым функция f приведена в описании лабораторной работы 1, способ передачи данных между вызывающей и вызываемой процедурами соответственно для func,ascbin,binasc, а также формат данных (b – байт, w – слово):
1) 11 2) 12 3) 13 4) 14 5) 15 6) 16 7) 17
5 2 6 4 2 6 1 8 7 1,2 8 3,4 4 5,6
7,4 7,2 3,8 3,2 3,4 1,2 1,8
w w w w w w w
8) 9) 10) 11) 12) 13) 14)
18 9 20 21 22 23 24
3 2 3 1 4 5 6
7,8 1,4 1,8 3,2 3,8 7,2 7,4
1,4 w 7,8 b 5,6 b 8 b 6 b 4 b 2 b
Контрольные вопросы
1. Какие языковые средства используются в ассемблере для оформления и активизации процедур? 2. Охарактеризуйте основные действия, выполняемые в общем случае в вызывающей и вызываемой процедурах в процессе их исполнения. 3. Как используется стек для обеспечения взаимодействия между вызывающей и вызываемой процедурами? 4. Каково назначение операнда в команде ret ? Лабораторная работа 7
МАКРОСЫ Тема: Цель работы. Изучение аппарата макросредств ассемблера и получение навыков разработки и использования макроопределений. Лабораторное задание. Разработать программу вычисления таблицы значений функции y=f(a,b,c,d,e) при изменении одного из ее аргументов в соответствии с заданной закономерностью. Реализовать в виде макро вычисление функции и одну из арифметиче19
ских операций. Обеспечить вывод на экран вида табулируемой функции, значений неизменяемых аргументов и результатов вычислений в виде пар: “значение варьируемого аргумента – значение функции”. Методические указания. Значения всех аргументов следует задать в программе, причем варьируемый аргумент должен быть представлен в виде массива. Для формирования этого массива следует кроме директив определения данных использовать условные директивы, директивы повторения, а также арифметические и логические операции. Варианты заданий. Для каждого варианта указана табулируемая функция, варьируемая переменная (ai, bi, ci, di или ei) и закон ее изменения (задан в виде трех функций индекса i, соответствующих трем диапазонам изменения индекса: 1 – 10, 11 -20, 21 - 30). 1) ( ai + b)c + d / e
i 2 / 4 − 10
i − 10
(i − 20) 2 / 4 − 10
− i 2 / 4 + 10
10 − i
− (i − 20) 2 / 4 + 10
3) a / b − ci d − e
(i − 10) 2 / 4 − 10
i + 20
(i − 30) 2 / 4 − 10
4) ab − c ( d i − e)
−(i − 10) 2 / 4 + 10
20 − i
− (i − 30) 2 / 4 + 10
5) a (bi c + d ) − e
i
(i − 10) 2 / 4 − 10
i − 20
6) a + b(ci d − e)
−i
−(i − 10) 2 / 4 + 10
20 − i
7) a + (b − c d i )e
i − 10
(i − 20) 2 / 4 − 10
i − 30
8) a − b c + d ei
10 − i
− (i − 20) 2 / 4 + 10
30 − i
9) ai b(c + d ) − e
i 2 / 4 − 10
i − 10
(i − 20) 2 / 4 − 10
10) a + bi c ( d − e)
− i 2 / 4 + 10
10 − i
− (i − 20) 2 / 4 + 10
11) a + (b − ci ) d e
(i − 10) 2 / 4 − 10
i + 20
(i − 30) 2 / 4 − 10
12) ab − c + d i e
−(i − 10) 2 / 4 + 10
20 − i
− (i − 30) 2 / 4 + 10
13) ( a + bi )/c + d /e
i
(i − 10) 2 / 4 − 10
i − 20
14) a/b + ci /( d + e)
−i
−(i − 10) 2 / 4 + 10
20 − i
2) a + bi c + d e
20
Кроме того, для каждого варианта указана машинная операция, реализуемая в виде макро, формат соответствующей макрокоманды и описание выполняемых действий.
Макро Формат макрокоманды addm Оп1,Оп2,Оп3 1) add adcm Оп1,Оп2,Оп3 2) adc subm Оп1,Оп2,Оп3 3) sub sbbm Оп1,Оп2,Оп3 4) sbb mul1 Оп1,Оп2 5) mul mul2 Оп1,Оп2 6) mul mul3 Оп1,Оп2 7) mul mul4 Оп1,Оп2 8) mul mul1 Оп1,Оп2 9) mul mul2 Оп1,Оп2 10) imul imul3 Оп1,Оп2 11) mul 12) imul imul4 Оп1,Оп2 divm Оп1,Оп2 13) div divm Оп1,Оп2 14) div
Выполняемые действия (Оп1):=(Оп2)+(Оп3) (Оп1):=(Оп2)+(Оп3)+(С) (Оп1):=(Оп2)-(Оп3) (Оп1):=(Оп2)-(Оп3)-(С)
(DX,AX):=(Оп1)*(Оп2)
(Оп1):=(DX,AX)/(Оп2) (Оп2):=(DX,AX)mod(Оп3)
В макро addm,adcm,subm,sbbm при выполнении манипуляций с операндами не использовать арифметических операций. Макро для умножения составить с использованием одного из четырех следующих способов (в соответствии с цифрой макро): - анализируя множитель со старших бит и сдвигая или множимое (1), или сумму частных произведений (2); - анализируя множитель с младших бит и сдвигая или множимое (3), или сумму частных произведений (4). Контрольные вопросы
1. В чем заключается основное отличие макроса от процедуры? 2. Поясните механизм макровызова. 3. Можно ли использовать в программе макроопределение без макровызова? 21
ПРИЛОЖЕНИЕ Содержит пример законченной программы по всей тематике лабораторного практикума. Спецификации на программу Программа вычисления функции y = (a + b)c/d . Значения аргументов a,b,c,d вводятся с клавиатуры ПЭВМ. Результат y выводится на экран дисплея. Формат внутреннего представления аргументов a,b,c,d и результата y - слово Для ввода использован формат ЗнЦЦЦ, для вывода формат ЗнЦЦЦЦ, где Зн - знак {+,-}, Ц – цифра – {0,1,2,…,9}. Программа обеспечивает вывод текста, содержащего вычисляемую функцию и форма ввода аргументов, а также выдачу запросов на ввод каждого аргумента. В программе использованы шесть подпрограмм, три из которых оформлены в виде процедур: ascbin – преобразование числа из строки ASCII-кодов в формате ЗнЦЦЦ в двоичное слово; func – вычисление функции; binasc - преобразование числа, представленного в виде двоичного слова в строку ASCII-кодов в формате ЗнЦЦЦЦ; а три другие в виде макроопределений: outdispl – вывод строки символов на экран дисплея; vvod – ввод строки символов; asc_bin – вызов подпрограммы ascbin. Структурная схема программы osn_prg
oudtispl
vvod
asc_bin
22 ascbin
func
binasc
Продолжение прил.
Основная программа и подпрограммы ascbin, func,binasc оформлены как самостоятельные файлы с именами osn_prg.asm, ascbin.asm, func.asm, binasc.asm соответственно. Подпрограммы outdispl,vvod,asc_bin объединены в один файл lib.mac, образующий макробиблиотеку. Основная программа osn_prg include lib.mac extrn binasc:far,func:far,ascbin:far public des ;-----------------------------------------------------------; stseg segment para stack 'stack' ; сегмент; db 16 dup('stack ') ; стека ; stseg ends ; ; ;-----------------------------------------------------------; dseg segment para public ; ; tekst1 db 13,10,'==============================' ; ; db 13,10,'Программа вычисления функции' ; ; db 13,10,' y=(a+b)c/d' ; ; db 13,10,'Значения aргументов вводятся с' ; ; db 13,10,'клавиатуры в формате: ЗнЦЦЦ. ' ; ; db 13,10,'------------------------------','$'; с ; tksta db 13,10,' Введите a = ','$' ; е ; tkstb db 13,10,' Введите b = ','$' ; г ; tkstc db 13,10,' Введите c = ','$' ; м ; tkstd db 13,10,' Введите d = ','$' ; е ; tekst2 db 13,10,'------------------------------' ; н ; db 13,10,'Результат: y = ','$' ; т ; tekst3 db 13,10,'==============================','$'; ; a dw ? ; ;
23
b c d y tap buf
dw dw dw dw dw db db
? ? ? ? 5 dup(?) 5 ?
; ; ; ; ; ; ;
д а н н ы х
; ; ; ; ; ; ;
Продолжение прил. as db '+000',' ' ; ; ys db '+0000','$' ; ; des dw 10 ; ; dseg ends ; ; ;-----------------------------------------------------------; cseg segment para public 'code' ; osn_prg proc far ; assume cs:cseg,ds:dseg,ss:stseg ; push ds с ; mov ax,0 ; push ax ; mov ax,dseg ; mov ds,ax е ; ; ----------------------------------------------; outdspl tekst1 ; Вывод пояснительного текста ; ; ; ----------------------------------------------; vvoda: outdspl tksta ; Выдача запроса на ввод a ; г ; vvod ; Ввод значения a ; ; asc_bin as,a ; Преобразование a (ASCII->BIN); ; ; ----------------------------------------------; vvodb: outdspl tkstb ; Выдача запроса на ввод b ; м ; vvod ; Ввод значения b ; ; asc_bin as,b ; Преобразование b (ASCII->BIN); ; ; ----------------------------------------------; vvodc: outdspl tkstc ; Выдача запроса на ввод c ; е ; vvod ; Ввод значения c ; ; asc_bin as,c ; Преобразование c (ASCII->BIN); ; ; ----------------------------------------------; 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