РефератыИнформатика, программированиеАсАссемблер и программирование

Ассемблер и программирование

Содержание


Задание............................................................................................................. 2


1. Блок-схема к заданию 1......................................................................... 3


2. ASM 1..................................................................................................... 4


3. Блок-схема к заданию 2......................................................................... 7


4. ASM 2..................................................................................................... 8


5. Блок-схема к заданию 3....................................................................... 11


6. ASM 3................................................................................................... 12


7. Блок-схема к заданию 4....................................................................... 16


8. ASM 4................................................................................................... 17


9. Блок-схема к заданию 5....................................................................... 19


10. ASM 5................................................................................................... 20


11. Блок-схема к заданию 6....................................................................... 23


12. ASM 6................................................................................................... 24


13. KOMP.CPP........................................................................................... 26


14. Руководство пользователя................................................................... 36


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


Задание


Информатика - курсовое задание, вариант 1


Три байтовые переменные A, B, и C содержат целые значения. Упорядочить эти значения по возрастанию так, чтобы A содержала минимальное значение, а С - максимальное.


Задан байтовый массив из N элементов в неупакованном BCD формате. Написать процедуру преобразования исходного массива


Задан байтовый массив из N элементов. Написать процедуру, отыскивающую: номер максимального и минимального элементов, а также разность между максимальным и минимальным элементами.


Написать процедуру нормализации значения, содержащегося в AX. Нормализация заключается в сдвиге содержимого AX влево до тех пор, пока старший из битов, имеющих значение 1, не попадет в 15-й разряд. Если же сразу (AX)=0 или 15-й разряд содержит 1, то процедура не должна выполняться. При выходе из процедуры регистр BX должен содержать число, равное количеству выполненных сдвигов.


Считая содержимое регистров DX:AX 32-битной величиной, написать программу, загружающую в регистр DL номер самого младшего бита, содержащего 1.


Индивидуальное задание: определить размер файла из DTA.


1. Блок-схема к заданию 1



2. ASM 1


mes macro msg


mov ah,9


lea dx,msg


int 21h


endm


abc macro char


add char,'0'


mov dl,char


mov ah,2


int 21h


sub char,'0'


endm


d_seg segment


a db 5


b db 9


c db 3


str db 'Ishodnie dannie:',10,13,'$'


str2 db 'Resultat sortirovki po vozrastaniyu',10,13,'$'


str3 db 'Press any key.........$'


enter db 10,13,'$'


space db ' ','$'


strA db 'A=','$'


strB db 'B=','$'


strC db 'C=','$'


d_seg ends


c_seg segment


assume ds:d_seg,cs:c_seg


start:mov ax,d_seg


mov ds,ax


mes enter


mes str


mes enter


mes strA


abc a


mes space


mes strB


abc b


mes space


mes strC


abc c


mes enter


mov al,a


mov bl,b


mov cl,c


cmp al,bl


jl continue


xchg al,bl


continue:


cmp al,cl


jl continue2


xchg al,cl


continue2:


cmp bl,cl


jl continue3


xchg bl,cl


continue3:


mov a,al


mov b,bl


mov c,cl


mes enter


mes str2


mes enter


mes strA


abc a


mes space


mes strB


abc b


mes space


mes strC


abc c


mes enter


mes enter


mes str3


mov ah,1


int 21h


mov ah,4ch


int 21h


c_seg ends


end start



3. Блок-схема к заданию 2



4. ASM 2


mes macro msg


mov ah,9


lea dx,msg


int 21h


endm


dseg segment


k dw 10


mdb10


masdb1,3,6,8,9,1,4,7,2,3,7,9,4,5,8,9


str db 'Ishodnii massiv elementov v neupakovannom BCD formate:',10,13,'$'


str1 db 10,13,'Poluchenii massiv elementov v ypakovannom BCD formate:',10,13,'$'


str2 db 10,13,'Press any key.........',10,13,'$'


enter db 10,13,'$'


space db ' $'


dseg ends


cseg segment


assume cs:cseg, ds:dseg


vivod proc


xor cx,cx


k_del:


mov dx,0


div k


add dx,'0'


push dx


inc cx


cmp ax,0


jne k_del


k3:


pop dx


mov ah,2


int 21h


loop k3


ret


vivod endp


abcproc


xorsi,si


xordi,di


movbx,16


movcx,16


decbx


m2:


moval,mas[si]


mulm


incsi


addal,mas[si]


movmas[di],al


cmpsi,bx


jem1


incdi


incsi


loop m2


m1:


ret


abcendp


start:


movax,dseg


movds,ax


mes enter


mes str


mes enter


mov bx, 0


met2: mov al, mas[bx]


mov ah,0


call vivod


mes space


inc bx


cmp bx,15


jle met2


call abc


mes enter


mes str1


mes enter


mov bx, 0


met1: mov al, mas[bx]


mov ah,0


call vivod


mes space


inc bx


cmp bx,7


jle met1


mes enter


mes str2


mov ah,1


int 21h


movah, 4ch


int21h


cseg ends


end start



5. Блок-схема к заданию 3




6. ASM 3


char1 macro b


add b,'0'


mov dl,b


mov ah,2


int 21h


sub b, '0'


endm


char macro a


xor dx, dx


mov ax, a


mov bx, 10


div bx


add dl,'0'


mov ah, 2


int 21h


endm


mes macro str


mov ah,9


lea dx,str


int 21h


endm


d_seg segment


mindb0


maxdb0


n_mindw1


n_maxdw1


razdb0


adb2,6,4,1,7,9,3


n=$-a


enter db 10,13,'$'


str db 10,13,'Ishodnii massiv: $'


str1 db 10,13,'Resultat: $'


str2 db 10,13,'Number min chisla: $'


str3 db 10,13,'Number max chisla: $'


str4 db 10,13,'Raznost mezhdu max i min chislami: $'


str5 db 10,13,'Press any key........$'


space db ' $'


d_seg ends


c_seg segment


assume cs:c_seg, ds:d_seg


start:


movax,d_seg


movds,ax


xorsi,si


moval,a[si]


movmin,al


movmax,al


incsi


m3:


moval,a[si]


cmpal,max


jlem1


movmax,al


movbx,si


incbx


movn_max,bx


m1:


cmpal,min


jgem2


movmin,al


movbx,si


incbx


movn_min,bx


m2:


incsi


cmpsi,n


jlm3


moval,max


subal,min


movraz,al


mes str


mes enter


xor si,si


povtor:


char1 a[si]


mes space


inc si


cmp si,n


jne povtor


mes enter


mes str1


mes enter


mes str2


char n_min


mes enter


mes str3


char n_max


mes enter


mes str4


char1 raz


mes enter


mes enter


mes str5


mov ah, 1


int 21h


movah,4ch


int21h


c_seg ends


end start



7. Блок-схема к заданию 4



8. ASM 4


mes macro str


mov ah,9


lea dx,str


int 21h


endm


dseg segment


str db 10,13,'AX soderzhit znachenie 2345h$'


str1 db 10,13,'Posle normalizacii znacheniya AX, BX soderzhit chislo vipolnenih sdvigov$' $'


str2 db 10,13,'BX = $'


str3 db 10,13,'Press any key........$'


enter db 10,13,'$'


x dw 2345h


dseg ends


cseg segment


assume cs:cseg, ds:dseg


start: mov ax,dseg


mov ds,ax


mov ax,x


push ax


xor dx, dx


cmp ax, dx


je exit


xor si, si


cont: mov cx, 2


mov dx, 1000000000000000b


mov bx, ax


or bx, dx


cmp bx, ax


je exit


inc si


shl ax, 1


loop cont


exit: mes str


mes enter


mes str1


mes enter


mes str2


mov bx,si


xor dx,dx


push bx


mov ax,bx


mov bx,10


div bx


add dx,'0'


mov ah,2


int 21h


pop ax


pop bx


mes enter


mes str3


mov ah,1


int 21h


mov ah, 4ch


int 21h


cseg ends


end start



9. Блок-схема к заданию 5



10. ASM 5


mes macro msg


mov ah,9


lea dx,msg


int 21h


endm


d_seg segment


k dw 10


str1 db 'Registr AX soderzhit 0110000b, a registr DX soderzhit 1000100b',10,13,'$'


str2 db 'Nomer samogo mladshego bita, soderzhaschego 1',10,13,'$'


str3 db 10,13,'Press any key......',10,13,'$'


enter db 10,13,'$'


d_seg ends


c_seg segment


assume ds:d_seg, cs:c_seg


vivod proc


xor cx,cx


k_del:


sub dx,dx


div k


add dx,'0'


push dx


inc cx


cmp ax,0


jne k_del


k3:


pop dx


mov ah,2


int 21h


loop k3


ret


vivod endp


start:


mov ax, d_seg


mov ds, ax


mov ax, 0110000b


mov dx, 1000100b


nachalo:


clc


rcr ax, 1


inc bx


jc vivod1


cmp ax,0


jne nachalo


mov bx,7


m1:


clc


rcr dx, 1


inc bx


jc vivod1


cmp dx,0


jne m1


vivod1:


mes enter


mes str1


mes enter


mes str2


mes enter


mov dl, bl


mov ax, dx


call vivod


mes enter


mes str3


mov ah,1


int 21h


mov ah, 4ch


int 21h


c_seg ends


end start



11. Блок-схема к заданию 6



12. ASM 6


mes macro str


mov ah,9


lea dx,str


int 21h


endm


dseg segment


ten dw 10


filename db 8 dup(0)


dta db 2ch dup(' '),0,10,13,'$'


error db 10,13,'File not found',10,13,'$'


exit db 10,13,'Press any key........$'


inp db 'Input filename:',10,13,'$'


out1

db 10,13,10,13,'Size file in DTA:',10,13,10,13,'$'


out2 db 'FILE_NAME - $'


out3 db 'FILE_SIZE - $'


out4 db ' bytes',10,13,'$'


dseg ends


cseg segment


assume cs:cseg, ds:dseg


start: mov ax,dseg


mov ds,ax


mes inp


mov ah,1ah


lea dx,dta


int 21h


xor si,si


povtor: mov ah, 1


int 21h


cmp al, 13


je ok


mov filename[si], al


inc si


jmp povtor


ok:mov ah,4eh


lea dx,filename


mov cx,0


int 21h


jc err


mes out1


mes out2


mes dta[1eh]


mes out3


mov dx,word ptr dta[1ah]+2


mov ax,word ptr dta[1ah]


mov cx,0


jmp next


l1:mov dx,0


next:div ten


push dx


inc cx


cmp ax,0


jne l1


n: pop dx


add dx,'0'


mov ah,2


int 21h


loop n


mes out4


jmp quit


err:mes error


quit:mes exit


mov ah,1


int 21h


mov ah,4ch


int 21h


cseg ends


end start



13. KOMP.CPP


#include<graphics.h>


#include<iostream.h>


#include<stdio.h>


#include<stdlib.h>


#include<conio.h>


#include<dos.h>


#include<bios.h>


#include<process.h>


void pomehi(int x, int y, int i)


{


setcolor(i);


line(x-100,y-60,x-80,y-60);


line(x-60,y-50,x-40,y-50);


line(x-20,y-60,x,y-60);


line(x+20,y-50,x+40,y-50);


line(x+60,y-60,x+80,y-60);


line(x-100,y-20,x-80,y-20);


line(x-60,y-10,x-40,y-10);


line(x-20,y-20,x,y-20);


line(x+20,y-10,x+40,y-10);


line(x+60,y-20,x+80,y-20);


line(x-100,y+20,x-80,y+20);


line(x-60,y+30,x-40,y+30);


line(x-20,y+20,x,y+20);


line(x+20,y+30,x+40,y+30);


line(x+60,y+20,x+80,y+20);


line(x-100,y+60,x-80,y+60);


line(x-60,y+70,x-40,y+70);


line(x-20,y+60,x,y+60);


line(x+20,y+70,x+40,y+70);


line(x+60,y+60,x+80,y+60);


}


void komp(int x, int y)


{


int i;


///////////////monitor////////////////


i=8;


setcolor(i);


rectangle(x-120, y-100, x+120, y+100);


setfillstyle(SOLID_FILL,i);


floodfill(x-115,y-95,i);


i=0;


setcolor(i);


rectangle(x-110, y-90, x+110, y+90);


setfillstyle(SOLID_FILL,i);


floodfill(x,y,i);


i=0;


setcolor(i);


line(x-120, y-100, x-110, y-110);


line(x+120, y+100, x+130, y+90);


line(x+120, y-100, x+130, y-110);


line(x-110, y-110, x+130, y-110);


line(x+130, y-110, x+130, y+90);


line(x+20, y+110, x+20, y+100);


line(x-20, y+110, x-20, y+100);


rectangle(x+60, y+110, x-60, y+120);


line(x+60, y+110, x+70, y+100);


line(x+60, y+120, x+80, y+100);


line(x-60, y+110, x-50, y+100);


line(x+20, y+110, x+30, y+100);


circle(x+110,y+95,3);


circle(x+100,y+95,2);


circle(x+90,y+95,2);


///////////////sistemnik//////////////


i=0;


setcolor(i);


rectangle(x-130, y+120, x-200, y-100);


line(x-200, y-100, x-110, y-190);


line(x-130, y-100, x-40, y-190);


line(x-110, y-190, x-40, y-190);


line(x-130, y+120, x-110, y+100);


line(x-40, y-190, x-40, y-110);


rectangle(x-190, y-90, x-140, y-80);


rectangle(x-190, y-70, x-140, y-60);


rectangle(x-190, y-50, x-140, y-40);


rectangle(x-190, y-30, x-140, y-20);


rectangle(x-180, y-10, x-150, y);


rectangle(x-180, y+10, x-150, y+20);


rectangle(x-190, y+100, x-140, y+110);


circle(x-165,y+80,5);


circle(x-165,y+60,4);


line(x-165,y+80,x-165,y+84);


circle(x-165,y+80,2);}


void kolonki(int x, int y, int i)


{int k;


//////////////left//////////////////


k=i;


i=15;


setfillstyle(INTERLEAVE_FILL,i);


i=k;


setcolor(i);


rectangle(x-210, y+120, x-260, y+60);


line(x-210, y+120, x-200, y+110);


line(x-210, y+60, x-200, y+50);


line(x-260, y+60, x-240, y+40);


line(x-240, y+40, x-200, y+40);


i=k;


setcolor(i);


pieslice(x-235, y+90, 0, 180, 20);


rectangle(x-255, y+90, x-215, y+110);


floodfill(x-245,y+95,i);


//////////////right/////////////////


rectangle(x+140, y+120, x+190, y+60);


line(x+190, y+120, x+210, y+100);


line(x+190, y+60, x+210, y+40);


line(x+140, y+60, x+160, y+40);


line(x+160, y+40, x+210, y+40);


line(x+210, y+100, x+210, y+40);


i=k;


setcolor(i);


pieslice(x+165, y+90, 0, 180, 20);


rectangle(x+145, y+90, x+185, y+110);


floodfill(x+155,y+95,i);


circle(x+165,y+115,4);


circle(x+155,y+115,3);


circle(x+175,y+115,3);


arc(x+165,y+40,0,150,40);


}


void main()


{int dr=DETECT,mod;


float snd[] = {659.26, 880.00, 1046.50, 987.77, 880.00, 1046.50, 880.00, 987.77, 880.00,


698.46, 783.99, 659.26, 659.26, 880.00, 1046.50, 987.77, 880.00, 1046.50, 880.00, 987.77, 880.00,


659.26, 622.25, 587.33, 587.33, 698.46, 880.00, 987.77, 587.33, 698.46,


830.61, 880.00, 440.00, 523.25, 698.46, 698.46, 659.26, 783.95, 698.46, 698.46,


659.26, 493.88, 523.25, 440.00, 987.77, 987.77, 932.33, 880.00, 987.77, 987.77,


880.00, 783.99, 698.46, 659.26, 659.26, 783.99, 659.26, 587.33, 587.33,


698.46, 587.33, 493.88} ;


int x,y,err,i,ki,key,r,h,c,x1,x2,y1,y2;


char s,str[80]={'K','U','R','S','O','V','A','Y','A',' ','R','A','B','O','T','A'};


initgraph(&dr,&mod," ");


err=graphresult();


if(err){


cout<<"error initgraph"<<grapherrormsg(err);


exit(1); }


snachala:


cleardevice();


i=7;


x=getmaxx()/2;


y=getmaxy()/2;


setfillstyle(SOLID_FILL,i);


floodfill(x,y,i);


setcolor(4);


outtextxy(400,70,"Press any key for STOP Music");


outtextxy(400,80,"Press 'P' for PLAY Music");


outtextxy(400,90,"Press 'M' for GOTO MENU");


outtextxy(400,100,"Press 'Esc' for exit");


settextstyle(0,0,3);


setcolor(2);


outtextxy(150,15,str);


settextstyle(0,0,2);


setcolor(6);


outtextxy(330,380,"KAFEDRA: EVM");


setcolor(5);


outtextxy(330,420,"SPECIALNOST: VMKSiS");


setcolor(4);


outtextxy(30,380,"VIPOLNIL:");


settextstyle(0,0,1);


setcolor(1);


outtextxy(180,380,"STUDENT FITU 1-2a");


settextstyle(0,0,1);


setcolor(0);


outtextxy(180,390,"XLINTCEV A.G.");


settextstyle(0,0,2);


setcolor(4);


outtextxy(30,420,"PROVERIL:");


settextstyle(0,0,1);


setcolor(1);


outtextxy(180,420,"KOLOMEICEVA T.G.");


settextstyle(0,0,1);


setcolor(0);


outtextxy(180,430,"BELIKOV I.Yu.");


komp(x,y); m1:


for(r=0;r<62;r++)


{


if (kbhit()) break;


i=15;


pomehi(x,y,i);


delay(100);


i=7;


kolonki(x,y,i);


i=0;


kolonki(x,y-10, i);


i=0;


pomehi(x,y,i);


delay(100);


sound(snd[r]/1.5);


if (r==11 ^ r==23 ^ r==27 ^ r==31 ^ r==43) { delay (1500); nosound (); delay (600); }


else if (r==53 ^ r==57 ^ r==61) { delay (300); nosound(); delay (1400); }


else if (r==47) { delay (500); nosound (); delay (700); }


else delay(50);


i=7;


kolonki(x,y-10,i);


i=0;


kolonki(x,y,i);


}


nosound();


setcolor(RED);


m:


s=getch();


if (s==27) exit(1);


if (s=='p') {setfillstyle(SOLID_FILL,0); floodfill(getmaxx()/2,getmaxy()/2,8); goto m1;}


if (s!='m') goto m;


cleardevice();


i=15;


setcolor(i);


setfillstyle(SOLID_FILL,i);


floodfill(x,y,i);


settextstyle(0,0,2);


setcolor(RED);


outtextxy(150,30,"MENU");


settextstyle(0,0,1);


setcolor(2);


outtextxy(20,100,"Zadanie po assembleru #1");


setcolor(3);


outtextxy(20,135,"Zadanie po assembleru #2");


setcolor(4);


outtextxy(20,170,"Zadanie po assembleru #3");


setcolor(5);


outtextxy(20,205,"Zadanie po assembleru #4");


setcolor(6);


outtextxy(20,240,"Zadanie po assembleru #5");


setcolor(0);


outtextxy(20,275,"Zadanie po assembleru #6");


setcolor(8);


outtextxy(20,310,"Zadanie po programmirovaniu");


setcolor(9);


outtextxy(20,345,"Back to previos display");


setcolor(12);


outtextxy(20,380,"Exit");


ki=1; x1=14; y1=95; x2=250; y2=115;


rectangle(x1,y1,x2,y2);


sled:


key=bioskey(0);


switch(key)


{


case 18432:{setcolor(15);


rectangle(x1,y1,x2,y2);


if (y1==95) {y1=375;y2=395; ki=9;}


else {y1=y1-35; y2=y2-35; ki--;}


setcolor(RED);


rectangle(x1,y1,x2,y2);


break; }


case 20480:


{setcolor(15);


rectangle(x1,y1,x2,y2);


if (y1==375) {y1=95;y2=115; ki=1;}


else {y1=y1+35; y2=y2+35; ki++;}


setcolor(RED);


rectangle(x1,y1,x2,y2);


break; }


case 7181: switch(ki)


{ case 1: spawnl(P_WAIT, "1.EXE", NULL); break;


case 2: spawnl(P_WAIT, "2.EXE", NULL); break;


case 3: spawnl(P_WAIT, "3.EXE", NULL); break;


case 4: spawnl(P_WAIT, "4.EXE", NULL); break;


case 5: spawnl(P_WAIT, "5.EXE", NULL); break;


case 6: spawnl(P_WAIT, "6.EXE", NULL); break;


case 7: spawnl(P_WAIT, "CPP.EXE", NULL); break;


case 8: goto snachala;


case 9: closegraph(); exit(1); }


}


goto sled;


}




14. Руководство пользователя


Для запуска курсовой работы воспользуйтесь файлом KOMP.EXE.В случае возникновения ошибки «Error initialization» убедитесь, что в папке с приложением также есть файл графического драйвера egavga.bgi и его путь в программе указан правильно.


Для нормального функционирования курсовой работы необходимо наличие в папке следующих файлов:


KOMP.EXE


1.EXE


2.EXE


3.EXE


4.EXE


5.EXE


6.EXE


EGAVGA.BGI


TRIP.CHR


SANS.CHR


LITT.CHR


INPUT.ASM


Любой файл размером < 1 мегабайта (потребуется для индивидуального задания)


При запуске приложения отображается графическая заставка, сопровождаемая мелодией и анимацией, а также содержащая информацию об авторе.


Нажмите “M” для отображения меню курсовой работы. Выход производится с помощью клавиши Esc. При нажатии любой другой клавиши останавливается мелодия и анимация.


Для запуска задания, наведите курсор на задание которое вам нужно и нажмите Enter. Запускается программа из курсовой работы, после выхода из неё, программа автоматически перейдёт в меню


В индивидуальном задании потребуется ввести имя файла, после чего нажать ENTER.


Курсовая работа тестировалась на операционных системах MS DOS и Microsoft Windows 95/2000/XP, для запуска на операционных системах Windows более высокой версии потребуется специальное программное обеспечение.


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


1. Калашников О. «Ассемблер? Это просто!»


2. Питер Абель. Ассемблер и программирование для IBM PC


3. Курс лекций по предмету «Информатика»


4. Методические указания к выполнению лабораторных работ по предмету «Информатика»


5. Крупник А. - Ассемблер Самоучитель


6. Крупник А. - Изучаем ассемблер


7. Митницкий В. - Архитектура IBM PC и язык Ассемблера


8. Голубь Н. - Искусство программирования на Ассемблере

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Ассемблер и программирование

Слов:2194
Символов:28398
Размер:55.46 Кб.