Отчет по ассемблеру. Отчёт. Отчет по лабораторным работам по дисциплине Языки ассемблера
Скачать 390.37 Kb.
|
Кафедра 316 «Системное моделирование и автоматизированное проектирование» ОТЧЕТ по лабораторным работам по дисциплине: «Языки ассемблера»
СодержаниеВведение 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. Лабораторная работа №11.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. Лабораторная работа №22.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. Лабораторная работа №33.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-speakertext 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. Лабораторная работа №44.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. Лабораторная работа №55.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 |