Главная страница

Отчет по ассемблеру. Отчёт. Отчет по лабораторным работам по дисциплине Языки ассемблера


Скачать 390.37 Kb.
НазваниеОтчет по лабораторным работам по дисциплине Языки ассемблера
АнкорОтчет по ассемблеру
Дата16.12.2021
Размер390.37 Kb.
Формат файлаdocx
Имя файлаОтчёт.docx
ТипОтчет
#306181

Министерство образования и науки российской

федерации

Федеральное государственное образовательное учреждение высшего образования

«Московский авиационный институт

(национальный исследовательский университет)» (МАИ)

Кафедра 316 «Системное моделирование и автоматизированное
проектирование»

ОТЧЕТ

по лабораторным работам
по дисциплине: «Языки ассемблера»

Выполнил:

Ревтов М.Н.

Студент группы:

М3О-132Б-21

Проверил:

Бутко А.О.


Содержание


Введение 3

1. Лабораторная работа №1 4

1.1. Вывод строки на экран 4

1.2. Вывод строки на экран 4

1.3. Вывод форматированного текста на экран 6

1.4. Вывод текста на экран с предварительной его чисткой 6

1.5. Вывод на экран последовательности символов через цикл 7

1.6. Ввод строки с клавиатуры и вывод её на экран 8

1.7. Ввод символа с клавиатуры с его обработкой 8

1.8. Ввод и сравнение пароля 9

2. Лабораторная работа №2 11

2.1. Рисование горизонтальной линии 11

2.2. Рисование горизонт., вертикальной и наклонной линий 11

2.3. Ввод чисел и преобразование их в символьную строку 13

2.4.Запись в файл 14

2.5. Чтение из файла 15

2.6. Чтение из файла с обработкой ошибок 16

2.7. Вывод графика y=s*sqrt(x) 17

3. Лабораторная работа №3 19

3.1. Рисование окружности 19

3.2. Рисование линии по заданным координатам 20

3.3. Рисование линии по заданным координатам 24

3.4. Рисование спирали 27

3.5. Вывод звукового сигнала на PC-speaker 29

3.6. Управление курсором с помощью клавиатуры 30

4. Лабораторная работа №4 33

4.1 Вывод ФИО и номера группы 33

4.2 Переворот строки 33

4.3 Программа рисования треугольника 34

4.4. Рисование буквы «Р» 36

5. Лабораторная работа №5 38

5.1 Движущаяся буква «Р» с помощью стрелок на клавиатуре 38

Заключение 42

Список литературы 43

Введение


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

Наиболее известным ассемблером для операционной системы DOS являлись Borland Turbo Assembler (TASM), который и будет использоваться при выполнении лабораторных работ вместе с эмулятором для ПК, создающим DOS окружение, DOSbox.

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

1. Лабораторная работа №1

1.1. Вывод строки на экран


text segment 'code'

assume CS:text, DS:text

begin:

mov ax,text

mov ds,ax

mov ah,09h

mov dx,offset message

int 21h

mov ah,4ch

mov al,00h

int 21h

message db 'Hello world!$'
text ends

end begin
Результат выполнения программы:


Рис. 1 Результат задания 1.1

1.2. Вывод строки на экран


text segment 'code'

assume CS:text, DS:data

begin:

mov ax,data

mov ds,ax

mov ah,09h

mov dx,offset message

int 21h

mov ax,4c00h

int 21h
text ends

data segment

message db 'Hello world!$'

data ends

end begin
Результат выполнения программы:

Рис. 2 Результат задания 1.2

1.3. Вывод форматированного текста на экран


text segment 'code'

assume CS:text, DS:data

begin:

mov ax,data

mov ds,ax

mov ah,09h

mov dx,offset message

int 21h

mov ax,4c00h

int 21h
text ends

data segment

message db 9, 'Hello world!',10,13

db 9, 'Welcome fellas',10,13

db 9, 'This is a multiline',10,13

db 9, 'formatted text',10,13

db 9, 'displaying program$'

data ends

stk segment stack 'stack'

dw 128 dup(0)

stk ends

end begin

Результат выполнения программы:


Рис. 3 Результат задания 1.3

1.4. Вывод текста на экран с предварительной его чисткой


text segment 'code'

assume CS:text, DS:data

begin:

mov ax,data

mov ds,ax

mov ah,09h

mov dx,offset message

int 21h

mov ax,4c00h

int 21h

text ends

data segment

message db 80*25 dup (' '),10,13

db 9, 'Hello world!',10,13

db 9, 'Welcome fellas',10,13

db 9, 'This is a multiline',10,13

db 9, 'formatted text',10,13

db 9, 'displaying program',10,13

db 9, 'with screen clearing$'

data ends

stk segment stack 'stack'

dw 128 dup(0)

stk ends

end begin

Результат выполнения программы:


Рис. 4 Результат задания 1.4

1.5. Вывод на экран последовательности символов через цикл


text segment 'code'

assume CS:text, DS:data
begin:

mov ax,data

mov ds,ax

mov cx,223

mov si,0

mov al,32

fill:

mov symbols[si],al

inc al

inc si

loop fill

mov ah,40h

mov bx,1

mov cx,223

mov dx,offset symbols

int 21h

mov ax,4c00h

int 21h

text ends
data segment

symbols db 223 dup ('*')

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end begin

Результат выполнения программы:


Рис. 5 Результат задания 1.5

1.6. Ввод строки с клавиатуры и вывод её на экран


text segment 'code'

assume CS:text, DS:data
begin:

mov ax,data

mov ds,ax

mov ah,02h

mov dl,'>'

int 21h

mov ah,3fh

mov bx,0

mov cx,128

mov dx,offset inbuf

int 21h

mov actlen,ax

mov ah,40h

mov bx,1

mov cx,actlen

mov dx,offset inbuf

int 21h

mov ax,4c00h

int 21h
data segment

actlen dw 0

inbuf db 223 dup ('*')

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end begin

Результат выполнения программы:


Рис. 6 Результат задания 1.6

1.7. Ввод символа с клавиатуры с его обработкой


text segment 'code'

assume CS:text, DS:data
begin:

mov ax,data

mov ds,ax

input:

mov ah,09h

mov dx,offset promt

int 21h

mov ah,01h

int 21h

cmp al,'9'

ja error

cmp al,'0'

jb error

mov al,18

mov inbuf[si],al

mov ah,40h

mov bx,1

mov cx,19

mov dx,offset inbuf

int 21h

mov ax,4c00h

int 21h

error:

mov ah,09h

mov dx,offset message

int 21h

jmp input

text ends
data segment

message db 10,13,'incorrect symbols!$'

promt db 10,13,'Enter Symbol 0-9>$'

inbuf db 10,13,'Entered symbol >*'

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end begin

Результат выполнения программы:


Рис. 7 Результат задания 1.7

1.8. Ввод и сравнение пароля


text segment 'code'

assume CS:text, DS:data
begin:

mov ax,data

mov ds,ax

input:

mov ah,09h

mov dx,offset promt

int 21h

mov bx,0

pass:

mov ah,08h

int 21h

cmp al,13

je compare

mov string[bx],al

inc bx

jmp pass

compare:

push ds

pop es

mov si,offset string

mov di,offset password

cld

mov cx,bx

repe cmpsb

je pass2

error:

mov ah,09h

mov dx,offset message

int 21h

jmp input

pass2:

mov ah,09h

mov dx,offset passok

int 21h

mov ax,4c00h

int 21h

text ends
data segment

passok db 10,13,'Password accepted!$'

message db 10,13,'Incorrect password!$'

promt db 10,13,'Enter password>$'

string db 80 dup (?)

password db 'password'

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end begin

Результат выполнения программы:


Рис. 8 Результат задания 1.8

2. Лабораторная работа №2

2.1. Рисование горизонтальной линии


text segment 'code'

assume CS:text, DS:data
begin:

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

mov si,150

line:

push cx

mov ah,0ch

mov al,4

mov bh,0

mov cx,si

mov dx,175

int 10h

inc si

pop cx

loop line

mov ah,08h

int 21h

mov ah,00h

mov al,93h

int 10h

mov ax,4c00h

int 21h

text ends
data segment

string db 80 dup (?)

data ends

Результат выполнения программы:


Рис. 9 Результат задания 2.1

2.2. Рисование горизонт., вертикальной и наклонной линий


text segment 'code'

assume CS:text, DS:data
draw proc

mov ah,0ch

mov al,color

mov bh,vpage

mov cx,x

mov dx,y

int 10h

ret

draw endp
main proc

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

mov cx,620

line:

push cx

call draw

inc x

pop cx

loop line

mov x,10

mov cx,350

line1:

push cx

push x

pop y

call draw

inc x

pop cx

loop line1

mov cx,640

mov x,10

mov y,10

mov cx,350

line2:

push cx

call draw

inc y

pop cx

loop line2

mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

main endp

text ends
data segment

x dw 10

y dw 10

color db 14

vpage db 0

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 10 Результат задания 2.2

2.3. Ввод чисел и преобразование их в символьную строку


text segment 'code'

EXTRN BinToAscDec: proc

assume CS:text, DS:data
main:

mov ax,data

mov ds,ax

mov dx,offset ask2msg

mov ah,09h

int 21h

xor di,di

ReadCh:

mov ah,08h

int 21h

cmp al,13

je Done

cmp al,'9'

ja ReadCh

cmp al,'0'

jb ReadCh

mov ah,02h

mov dl,al

int 21h

sub al,'0'

xor ah,ah

mov cx,ax

mov ax,di

mov bx,10

mul bx

add ax,cx

mov di,ax

jmp ReadCh

Done:

mov ax,ds

mov es,ax

mov ax,di

mov number,ax

mov cx,1

mov di,offset outmsg+19

call BinToAscDec

mov dx,offset outmsg

mov ah,09h

int 21h

mov ah,08h

int 21h

mov ax,4c00h

int 21h

text ends
data segment

number dw 0

ask2msg db 'Enter number below 65535 >$'

outmsg db 10,13,'Entered number :$'

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 11 Результат задания 2.3

2.4.Запись в файл


text segment 'code'

assume Cs:text, DS:data

main:

mov ax,data

mov ds,ax

mov ah,3ch

mov cx,0

mov dx,offset filename

int 21h

mov handle,ax

mov ah,40h

mov bx,handle

mov cx,buflen

mov dx,offset buf

int 21h

mov ah,3eh

mov bx,handle

int 21h

mov ax,4c00h

int 21h

text ends

data segment

buf db '<>'

buflen equ $-buf

handle dw ?

filename db 'C:\data.txt',0

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main
Результат выполнения программы:


Рис. 12 Результат задания 2.4

2.5. Чтение из файла


text segment 'code'

assume CS:text, DS:data

main:

mov ax,data

mov ds,ax

mov ah,3dh

mov al,2

mov dx,offset filename

int 21h

mov handle,ax

mov ah,3fh

mov bx,handle

mov cx,65535

mov dx,offset inbuf

int 21h

mov cx,ax

mov ah,40h

mov bx,1

mov dx,offset inbuf

int 21h

mov ax,4c00h

int 21h

text ends
data segment

inbuf db 80 dup (' ')

handle dw ?

filename db 'D:\data.txt',0

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 13 Результат задания 2.5

2.6. Чтение из файла с обработкой ошибок


text segment 'code'

assume CS:text, DS:data
main:

mov ax,data

mov ds,ax

mov ax,3d02h

mov dx,offset filename

int 21h

jc error

mov handle,ax

mov cx,65535

mov dx,offset inbuf

int 21h

mov cx,ax

mov ah,40h

mov bx,1

mov dx,offset inbuf

int 21h

exit:

mov ax,4c00h

int 21h

error:

cmp ax,02

je err1

cmp ax,03

je err2

jmp exit

err1:

mov ah,09h

mov dx,offset mes1

int 21h

jmp exit

err2:

mov ah,09h

mov dx,offset mes2

int 21h

jmp exit

text ends
data segment

inbuf db 80 dup (' ')

handle dw ?

filename db 'C:\data.txt',0

mes1 db 'File not found$'

mes2 db 'Directory does not exist$'

data ends
stk segment stack 'stack'

dw 128 dup (0)

stk ends

end main

Результат выполнения программы:


Рис. 14 Результат задания 2.6

2.7. Вывод графика y=s*sqrt(x)


text segment 'code'

assume CS:text, DS:data
main:

mov ax,data

mov ds,ax

mov ah,0

mov al,10h

int 10h

finit

fild s

mov cx,400

line:

push cx

fild x

fsqrt

fmul ST,ST(1)

fistp y

mov ah,0ch

mov al,4

mov bh,0

mov cx,x

mov dx,100

sub dx,y

int 10h

inc x

pop cx

loop line

mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

text ends
data segment

s dw 4

y dw ?

x dw 0

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 15 Результат задания 2.7

3. Лабораторная работа №3

3.1. Рисование окружности


.386
data segment

x360 dd 180.0

x36 dw 360

forcolor db 10

xc dw 320

yc dw 175

xc1 dd 320.0

yc1 dd 175.0

rx dw 100

ry dw 70

x dw ?

y dw ?

angl dw 1

data ends
text segment use16

assume CS:text, DS:data
point proc

push cx

mov cx,xc

mov ah,0ch

mov al,forcolor

mov bh,0

fld yc1

fistp yc

mov dx,yc

fld xc1

fistp xc

mov dx,yc

fld xc1

fistp xc

mov cx,xc

sub cx,x

sub dx,y

int 10h

pop cx

ret

point endp
main proc

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

mov cx,x36

finit

fldpi

fld x360

fdiv

fstp x360

do:

fld x360

fild angl

fmul

fsincos

fild ry

fmul

fistp y

fild rx

fmul

fistp x

fwait

call point

inc angl

loop do

mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

main endp

text ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 16 Результат задания 3.1

3.2. Рисование линии по заданным координатам


text segment 'code'

assume CS:text, DS:data
main:

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

finit

fild ix1

fild dv

fdiv

fstp x1

fild ix2

fild dv

fdiv

fstp x2

fild iy1

fild dv

fdiv

fstp y1

fild iy2

fild dv

fdiv

fstp y2

fld x1

fld y2

fmul ST,ST(1)

fstp x1y2

fld x2

fld y1

fmul ST,ST(1)

fstp x2y1

fld x1y2

fld x2y1

fsub

fstp x1y2mx2y1

fld x1

fld x2

fsub

fstp x1mx2

fld y1

fld y2

fsub

fstp y1my2

fld x1y2mx2y1

fld x1mx2

fdiv

fstp bm100

fld bm100

fild dv

fmul

fstp b

fld y1my2

fld x1mx2

fdiv

fstp k

mov ax,ix1

mov bx,ix2

cmp ax,bx

ja l1

sub bx,ax

mov cycx,bx

jmp cont

l1:

sub ax,bx

mov cycx,ax

cont:

mov ax,iy1

mov bx,iy2

cmp ax,bx

ja l2

sub bx,ax

mov cycy,bx

jmp cont1

l2:

sub ax,bx

mov cycy,ax

cont1:

mov ax,cycx

mov bx,cycy

cmp ax,bx

ja l3

mov cx,cycy

jmp liney

l3:

mov cx,cycx

linex:

push cx

mov ah,0ch

mov al,4

mov bh,0

mov cx,ix1

fild ix1

fld k

fmul

fstp kx

fld kx

fld b

fadd

fistp ly

fild ly

fild ly

fmul

fsqrt

fistp ly

mov dx,ly

int 10h

cmp cx,ix2

ja decc

inc ix1

jmp OK1

decc:

dec ix1

OK1:

pop cx

loop linex

jmp exit

liney:

push cx

mov ah,0ch

mov al,4

mov bh,0

fild iy1

fld b

fsub

fstp ymb

fstp ymb

fstp k

fdiv

fistp lx

fild lx

fild lx

fmul

fsqrt

fistp lx

mov cx,lx

mov dx,iy1

int 10h

cmp dx,iy2

ja decc1

inc iy1

jmp OK2

decc1:

dec iy1

OK2:

pop cx

loop liney

exit:

mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

text ends
data segment

k dd ?

bm100 dd ?

b dd ?

x1y2 dd ?

x2y1 dd ?

x1mx2 dd ?

y1my2 dd ?

x1y2mx2y1 dd ?

y1 dd ?

x1 dd ?

x2 dd ?

y2 dd ?

ymb dd ?

kx dd ?

ix1 dw 600

iy1 dw 100

ix2 dw 120

iy2 dw 300

dv dw 100

cycx dw ?

cycy dw ?

lx dw ?

ly dw ?

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main
Результат выполнения программы:


Рис. 17 Результат задания 3.2

3.3. Рисование линии по заданным координатам


text segment 'code'

assume CS:text, DS:data
main:

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

finit

fild ix1

fild dv

fdiv

fstp x1

fild ix2

fild dv

fdiv

fstp x2

fild iy1

fild dv

fdiv

fstp y1

fild iy2

fild dv

fdiv

fstp y2

fld x1

fld y2

fmul

fld x2

fld y1

fmul

fsub

fld x1

fld x2

fsub

fdiv

fild dv

fmul

fstp b

fld y1

fld y2

fsub

fld x1

fld x2

fsub

fdiv

fstp k

mov ax,ix1

mov bx,ix2

cmp ax,bx

ja l1

sub bx,ax

mov cycx,bx

jmp cont

l1:

sub ax,bx

mov cycx,ax

cont:

mov ax,iy1

mov bx,iy2

cmp ax,bx

ja l2

sub bx,ax

mov cycy,bx

jmp cont1

l2:

sub ax,bx

mov cycy,ax

cont1:

mov ax,cycx

mov bx,cycy

cmp ax,bx

ja l3

mov cx,cycy

jmp liney

l3:

mov cx,cycx

linex:

push cx

mov ah,0ch

mov al,4

mov bh,0

mov cx,ix1

fild ix1

fld k

fmul

fstp kx

fld kx

fld b

fadd

fistp ly

fild ly

fild ly

fmul

fsqrt

fistp ly

mov dx,ly

int 10h

cmp cx,ix2

ja decc

inc ix1

jmp OK1

decc:

dec ix1

OK1:

pop cx

loop linex

jmp exit

liney:

push cx

mov ah,0ch

mov al,4

mov bh,0

fild iy1

fld b

fsub

fld k

fdiv

fabs

fistp lx

mov cx,lx

mov dx,iy1

int 10h

cmp dx,iy2

ja decc1

inc iy1

jmp OK2

decc1:

dec iy1

OK2:

pop cx

loop liney

exit:

mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

text ends
data segment

k dd ?

bm100 dd ?

b dd ?

x1y2 dd ?

x2y1 dd ?

x1mx2 dd ?

y1my2 dd ?

x1y2mx2y1 dd ?

y1 dd ?

x1 dd ?

x2 dd ?

y2 dd ?

ymb dd ?

kx dd ?

ix1 dw 600

iy1 dw 100

ix2 dw 120

iy2 dw 300

dv dw 100

cycx dw ?

cycy dw ?

lx dw ?

ly dw ?

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 18 Результат задания 3.3

3.4. Рисование спирали


.386

data segment

x360 dd 180.0

x36 dw 360

del dd 0.9985

delx dd 1.0000004

dely dd 0.999997

forcolor db 9

xc1 dd 320.0

yc1 dd 175.0

xc dw 320

yc dw 175

rx dd 100.0

ry dd 70.0

x dw ?

y dw ?

angl dw 1

data ends
text segment use16

assume CS:text, DS:data
coord proc

fld rx

fmul del

fstp rx

fld ry

fmul del

fstp ry

fild xc1

fmul delx

fistp xc1

fild yc1

fmul dely

fist yc1

ret

coord endp
point proc

push cx

mov cx,xc

mov ah,0ch

mov al,forcolor

mov bh,0

fld yc1

fistp yc

mov dx,yc

fld xc1

fistp xc

mov cx,xc

sub cx,x

sub dx,y

int 10h

pop cx

ret

point endp
main proc

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

mov cx,x36

finit

fldpi

fld x360

fdiv

fstp x360

do:

fld x360

fild angl

fmul

fsincos

fld ry

fmul

fistp y

fld rx

fmul

fistp x

fwait

call point

inc angl

call coord

loop do

mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

main endp

text ends

stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 19 Результат задания 3.4

3.5. Вывод звукового сигнала на PC-speaker


text segment 'code'

assume CS:text, DS:data

begin:

mov ax,data

mov ds,ax

mov al,0B6h

out 43h,al

in al,61h

or al,3

out 61h,al

mov cx,50
snd:

push cx

mov ax,tone

out 42h,al

mov al,ah

out 42h,al

mov cx,15

delay:

push cx

mov cx,65535

loop $

mov cx,65535

loop $

pop cx

loop delay

pop cx

add tone,50

loop snd

in al,61h

and al,0FCh

out 61h,al

mov ax,4c00h

int 21h

text ends

data segment

tone dw 3000

data ends

stk segment stack 'stack'

dw 128 dup(0)

stk ends

end

Результат выполнения программы:


Рис. 20 Результат задания 3.5

3.6. Управление курсором с помощью клавиатуры


text segment 'code'

assume CS:text, DS:data

cursor proc

mov cx,16

mov si,curx

line1:

push cx

mov ah,0ch

mov al,color

mov bh,0

mov cx,si

sub cx,8

mov dx,cury

int 10h

inc si

pop cx

loop line1

mov cx,16

mov si,cury

line2:

push cx

mov ah,0ch

mov al,color

mov bh,0

mov cx,curx

mov dx,si

sub dx,8

int 10h

inc si

pop cx

loop line2

ret

cursor endp

main proc

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

mov curx,600

mov cury,300

call cursor

readkey:

mov ah,08h

int 21h

cmp al,4bh

je left

cmp al,4dh

je right

cmp al,48h

je up

cmp al,50h

je down

cmp al,27

jne readkey

exit:

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

left:

mov color,0

call cursor

cmp curx,8

je nocorr

dec curx

nocorr:

mov color,4

call cursor

jmp readkey

right:

mov color,0

call cursor

cmp curx,630

je nocorr1

inc curx

nocorr1:

mov color,4

call cursor

jmp readkey

up:

mov color,0

call cursor

cmp cury,8

je nocorr2

dec cury

nocorr2:

mov color,4

call cursor

jmp readkey

down:

mov color,0

call cursor

cmp cury,300

je nocorr3

inc cury

nocorr3:

mov color,4

call cursor

jmp readkey

main endp

text ends

data segment

curx dw ?

cury dw ?

color db 4

data ends

stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 21 Результат задания 3.6

4. Лабораторная работа №4

4.1 Вывод ФИО и номера группы


text segment 'code'

assume CS:text, DS:text

begin:

mov ax, text

mov ds,ax

mov ah, 09h

mov dx, offset message

int 21h

mov ah, 40h

mov bx, 1

mov cx, 13

mov dx, offset message2

int 21h

mov ax, 4c00h

int 21h

message db 'Revtov Maxim Nikolaevich$'

message2 db 10,13, 'M30-132B-21'
text ends

end begin

Результат выполнения программы:


Рис. 22 Результат задания 4.1

4.2 Переворот строки


text segment 'code'

assume CS:text, DS:data

begin:

mov ax, data

mov ds, ax

mov ah,02h

mov dl,'>'

int 21h
mov ah, 3fh

mov bx,0

mov cx,28

mov dx, offset inbuf

int 21h

mov cx,28

mov bx,0

mov si,27

new:

mov ah,inbuf[bx]

mov inbuf2[si],ah

inc bx

dec si

loop new

mov ah, 40h

mov bx, 1

mov cx, 28

mov dx,offset inbuf2

int 21h

mov ax,4c00h

int 21h

text ends
data segment

inbuf db 28 dup(' ')

inbuf2 db 28 dup(' ')

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends
end begin

Результат выполнения программы:


Рис. 23 Результат задания 4.2

4.3 Программа рисования треугольника


text segment 'code'

assume CS:text, DS:data
draw proc

mov ah,0ch

mov al,color

mov bh,vpage

mov cx,x

mov dx,y

int 10h

ret

draw endp
main proc

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

mov cx,200

line:

push cx

call draw

inc x

pop cx

loop line

mov x,10

mov cx,200

line1:

push cx

push x

pop y

call draw

inc x

pop cx

loop line1

mov cx,640

mov x,10

mov y,10

mov cx,200

line2:

push cx

call draw

inc y

pop cx

loop line2

mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

main endp

text ends
data segment

x dw 10

y dw 210

color db 13

vpage db 0

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 24 Результат задания 4.3

4.4. Рисование буквы «Р»


text segment 'code'

assume CS:text, DS:data

draw proc

mov ah,0ch

mov al,color

mov bh,vpage

mov cx,x

mov dx,y

int 10h

ret

draw endp
main proc

mov ax,data

mov ds,ax

mov ah,00h

mov al,10h

int 10h

mov cx,100

line:

push cx

call draw

inc x

pop cx

loop line

mov y,350

mov x,10

mov cx, 340
mov cx,640

mov x,10

mov y,10

mov cx,150

line2:

push cx

call draw

inc y

pop cx

loop line2

mov cx,100

mov x,110

mov y,10

mov cx,80

line3:

push cx

call draw

inc y

pop cx

loop line3

mov x,10

mov y,90

mov cx,100

line4:

push cx

call draw

inc x

pop cx

loop line4
mov ah,08h

int 21h

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

main endp
text ends
data segment

x dw 10

y dw 10

color db 14

vpage db 0

data ends
stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 25 Результат задания 4.4

5. Лабораторная работа №5

5.1 Движущаяся буква «Р» с помощью стрелок на клавиатуре


text segment 'code'

assume CS:text, DS:data

draw proc

mov ah,0ch

mov al,color

mov bh,vpage

mov cx,x

mov dx,y

int 10h

ret

draw endp

cursor proc

mov ax,curx

mov x,ax

mov ax,cury

mov y,ax

mov cx,100

line:

push cx

call draw

inc x

pop cx

loop line

mov ax,curx

mov x,ax

mov ax,cury

mov y,ax

add x,0

mov cx,150

line1:

push cx

call draw

inc y

pop cx

loop line1

mov ax,curx

mov x,ax

mov ax,cury

mov y,ax

add y,70

mov cx,100

line2:

push cx

call draw

inc x

pop cx

loop line2

mov cx,80

mov ax,curx

mov x,ax

mov ax,cury

mov y,ax

add y,0

add x,100

mov cx,70

line3:

push cx

call draw

inc y

pop cx

loop line3

ret

cursor endp
main proc

mov ax,data

mov ds,ax
mov ah,00h

mov al,10h

int 10h
mov curx,10

mov cury,10

call cursor

readkey:

mov ah,08h

int 21h

cmp al,4bh

je left

cmp al,4dh

je right

cmp al,48h

je up

cmp al,50h

je down

cmp al,27

jne readkey

exit:

mov ah,00h

mov al,03h

int 10h

mov ax,4c00h

int 21h

left:

mov color,0

call cursor

cmp curx,1

je nocorr

dec curx

nocorr:

mov color,4

call cursor

jmp readkey

right:

mov color,0

call cursor

cmp curx, 530

je nocorr1

inc curx

nocorr1:

mov color,4

call cursor

jmp readkey

up:

mov color,0

call cursor

cmp cury,1

je nocorr2

dec cury

nocorr2:

mov color,4

call cursor

jmp readkey

down:

mov color,0

call cursor

cmp cury,190

je nocorr3

inc cury

nocorr3:

mov color,4

call cursor

jmp readkey

main endp

text ends

data segment

x dw 600

y dw 300

curx dw ?

cury dw ?

color db 4

vpage db 0

data ends

stk segment stack 'stack'

dw 128 dup(0)

stk ends

end main

Результат выполнения программы:


Рис. 26 Результат задания 5.1

Заключение


Язык Ассемблера - мощное средство программирования. Он позволяет программисту осуществлять всестороннее управление аппаратными средствами ЭВМ. Несмотря на то, что Ассемблер является
машинно-ориентированным языком, то есть языком низкого уровня, программист может применять его для работы и в сочетании с высоким. В результате практических работ было сделано 26 задач. По результатам выполнения задания сделан вывод о разнообразии возможных решений различных задач. Проведенная работа способствовала углублению знаний по программированию на языке ассемблера. Полученное решение отвечает поставленным условиям задачи полностью

Список литературы


  • Галисеев Г. В. Ассемблер для Win 32. Самоучитель. — М.: Диалектика, 2007. — 368 с. — ISBN 978-5-8459-1197-1

  • Зубков С. В. Ассемблер для DOS, Windows и UNIX. — М. ДМК Пресс; СПб. Питер, 2006. — 608 с. — ISBN 5-94074-259-9

  • КипИрвин. Язык ассемблера для процессоров Intel = Assembly Language for Intel-Based Computers. — М.: Вильямс, 2005. — 912 с. — ISBN 0-13- 091013-9

  • Калашников О. А. Ассемблер? Это просто! Учимся программировать. — СПб.: БХВ-Петербург, 2007. — 384 с. — ISBN 978-5-94157-709-5

  • Крис Касперски. Искусство дизассемблирования. — СПб.: БХВ Петербург, 2008. — 896 с. — ISBN 978-5-9775-0082-1

  • Владислав Пирогов. Ассемблер для Windows. — СПб.: БХВ-Петербург, 2007. — 896 с. — ISBN 978-5-9775-0084-5

Москва 2021


написать администратору сайта