Образец программы title stk stk segment para stack’stack’ db ends data segment para public ‘data’ x y a dw 112 dw 122 dw 100 dup(0) data ends code segment para public ‘code’ assume cs:code,ds:data start: mov ax,data mov ds,ax mov ax,x ;ax=x 3 lab1 первая программа на ассемблере 64 dup(‘stack’) add ax,y mov a,ax mov ax,x sub ax,y mov a+2,ax mov ax,x imul y mov a+4,ax mov a+6,dx mov ax,x cwd idiv y mov a+8,ax mov a+10,dx mov ax,x inc ax mov a+12,ax mov ax,y dec ax mov a+14,ax ax,3 mov ax,x sar mov a+16,ax ax,4 mov ax,y sal mov a+18,ax mov ah,4ch int 21h code ends end start Варианты заданий 1. <...> lab4 основная программа stk segment stack dw 256 dup(0) ends data segment n a in_a db out_a db outn db outa db tab db nl db dw ? dw 100 dup(0) 13,10,’input a:’,’$’ 13,10,’output a:’,’$’ 13,10,’n=’,’$’ ‘ai=’,’$’ 9,’$’ 13,10,’$’ data ends code segment wrstr macro str mov dx,offset str mov ah,9 int 21h endm extrn rdint:far extrn wrint:far extrn shiftcr:far assume cs:code,ds:data,ss:stk ;--- подпрограмма ввода вектора invect proc ;--- ввод n wrstr outn call rdint mov n,ax ;--- подготовка цикла mov cx <...>
Практикум_на_ЭВМ._Ассемблер__методические_указания.pdf
Министерство образования и науки Российской Федерации
Ярославский государственный университет им. П. Г. Демидова
Кафедра компьютерной безопасности и математических
методов обработки информации
Н. Б. Федотов
Практикум на ЭВМ.
Ассемблер
Методические указания
Рекомендовано
Научно-методическим советом университета
для студентов, обучающхся по специальности
Математика
Ярославль 2011
1
Стр.1
УДК 002
ББК З973.2–018.1я73
Ф33
Рекомендовано
Редакционно-издательским советом университета
в качестве учебного издания. План 2010/2011 учебного года
Рецензент
кафедра компьютерной безопасности и математических методов обработки
информации
Федотов, Н. Б. Практикум на ЭВМ. Ассемблер : методиФ33
ческие
указания / Н. Б. Федотов ; Яросл. гос. ун-т им. П. Г. Демидова.
– Ярославль: ЯрГУ, 2011. – 68 с.
Данная работа содержит описание лабораторных работ для практического
освоения программирования на языке ассемблера. Для каждой
лабораторной работы формулируется ее цель, приводится список
заданий и для одного из заданий дается его полное решение в виде
отлаженной программы и набора тестов, на котором она проверялась.
Каждая программа содержит достаточно подробные комментарии,
полезные для самостоятельного обучения, а каждый тест включает в
себя его описание, исходные данные и ожидаемые результаты.
Предназначено для студентов, обучающихся по специальности
010101.65 «Прикладная математика и информатика» (дисциплина
«Практикум на ЭВМ», блок ЕН), очной формы обучения. .
УДК 002
ББК З973.2–018.1я73
© Ярославский государственный
университет им. П. Г. Демидова, 2011
2
Стр.2
Прежде чем переходить к описанию лабораторных работ,
сделаем замечания общего характера. Каждая работа должна содержать
комментарии, описывающие содержание работы, смысл
важнейших ее частей, а также отдельных команд, имеющих ключевое
значение. Далее, крайне важно приучиться использовать
мнемонические имена. И наконец, важнейшей частью работы
является разработка достаточно полного набора тестов, который
должен следовать определенной логике, быть упорядочен, как
правило, по размерности исходных данных и содержать описание
теста, исходные данные и ожидаемый результат. Полезно
набор тестов разработать прежде, чем писать программу. Кроме
того, программы необходимо тестировать каждый раз заново при
внесении любых изменений в ее текст.
Лабораторная работа № 1
Цель работы – познакомиться со структурой программы, технологией
выполнения (см. образец программы и приложение 1),
арифметическими командами (см. приложение 3), внутренним
представлением целых чисел, работой в отладчике td.exe. В работе
предполагается сравнение результатов выполнения арифметических
команд в отладчике с результатами расчетов, выполненных
вручную.
Образец программы
title
stk
stk segment para stack’stack’
db
ends
data segment para public ‘data’
x
y
a
dw 112
dw 122
dw 100 dup(0)
data ends
code segment para public ‘code’
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov ax,x
;ax=x
3
lab1 первая программа на ассемблере
64 dup(‘stack’)
Стр.3
add ax,y
mov a,ax
mov ax,x
sub ax,y
mov a+2,ax
mov ax,x
imul y
mov a+4,ax
mov a+6,dx
mov ax,x
cwd
idiv y
mov a+8,ax
mov a+10,dx
mov ax,x
inc
ax
mov a+12,ax
mov ax,y
dec ax
mov a+14,ax
ax,3
mov ax,x
sar
mov a+16,ax
ax,4
mov ax,y
sal
mov a+18,ax
mov ah,4ch
int
21h
code ends
end start
Варианты заданий
1. 135,1222
5. 201,1276
9. 161,3183
13. 99,3157
Варианты заданий определяются значениями констант x,y:
2. 89,4177
6. 105,2242
3. 92,1158
7. 139,3157
4. 101,412
8. 1322,178
10. 111,2136 11. 151,3223 12. 79,2177
14. 121,2173 15. 133,3226 16. 145,4252
17. 119,1217 18. 111,4148 19. 141,1193 20. 120,4255
;ax=x+y
;a[0]=x+y
;ax=x
;ax=x-y
;a[1]=x-y
;dx:ax=x*y
;a[2]=ax
;a[3]=dx
;dx:ax=ax
;ax=x/y dx=x mod y
;a[4]=x/y
;a[5]=x mod y
;ax=x+1
;a[6]=x+1
;ax=y-1
;a[7]=y-1
;ax=x/8
;a[8]=x/8
;ax=y*16
;a[9]=y*16
;ah=4ch
4
Стр.4
Лабораторная работа № 2
Цель работы – научиться программировать арифметические
выражения с рационализацией по числу промежуточных вычислений,
по выбору оптимальных команд. Использование внешних
подпрограмм ввода-вывода и макросов.
Образец программы
title
lab2
stk segment para stack’stack’
db
64 dup(‘stack’)
stk
ends
data segment para public ‘data’
input_x db
input_y db
output_z db
10,13,’x= ‘,’$’
10,13,’y= ‘,’$’
10,13,’z= ‘,’$’
data ends
code segment para public ‘code’
extrn rdint:far
extrn wrint:far
;--- макроc вывода строки
wrstr macro str
mov dx,offset str
mov ah,9
int
21h
endm
assume cs:code,ds:data,ss:stk
start: mov ax,data
mov ds,ax
;--- распределение регистров
x
y
z
equ bx
equ bp
equ si
;--- вывод запроса на число x
wrstr input_x
call
rdint
mov x,ax
;--- вывод запроса на число y
wrstr input_y
call
rdint
mov y,ax
;--- вычисление ((y-1) * x - (y-1)/x + (y-1)mod x)*16
;--- проверка на ОДЗ
cmp x,0
5
Стр.5