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
inc si
shl ax, 1
loop cont
exit: mes str
mes enter
mes str1
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 str3
mov ah,1
mov ah, 4ch
cseg ends
end start
9. Блок-схема к заданию 5
10. ASM 5
mes macro msg
mov ah,9
lea dx,msg
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,'$'
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
push dx
inc cx
cmp ax,0
jne k_del
k3:
pop dx
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
jne nachalo
mov bx,7
m1:
rcr dx, 1
cmp dx,0
jne m1
vivod1:
mov dl, bl
mov ax, dx
call vivod
c_seg ends
11. Блок-схема к заданию 6
12. ASM 6
mes macro str
lea dx,str
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,'$'
mes inp
mov ah,1ah
lea dx,dta
xor si,si
povtor: mov ah, 1
cmp al, 13
je ok
mov filename[si], al
jmp povtor
ok:mov ah,4eh
lea dx,filename
mov cx,0
jc err
mes out1
mes out2
mes dta[1eh]
mes out3
mov dx,word ptr dta[1ah]+2
mov ax,word ptr dta[1ah]
jmp next
l1:mov dx,0
next:div ten
jne l1
n: pop dx
loop n
mes out4
jmp quit
err:mes error
quit:mes exit
mov ah,4ch
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;
rectangle(x-120, y-100, x+120, y+100);
setfillstyle(SOLID_FILL,i);
floodfill(x-115,y-95,i);
i=0;
rectangle(x-110, y-90, x+110, y+90);
floodfill(x,y,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//////////////
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;
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);
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);
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;
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");
outtextxy(30,380,"VIPOLNIL:");
settextstyle(0,0,1);
setcolor(1);
outtextxy(180,380,"STUDENT FITU 1-2a");
setcolor(0);
outtextxy(180,390,"XLINTCEV A.G.");
outtextxy(30,420,"PROVERIL:");
outtextxy(180,420,"KOLOMEICEVA T.G.");
outtextxy(180,430,"BELIKOV I.Yu.");
komp(x,y); m1:
for(r=0;r<62;r++)
if (kbhit()) break;
pomehi(x,y,i);
delay(100);
kolonki(x,y,i);
kolonki(x,y-10, i);
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);
kolonki(x,y-10,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;
outtextxy(150,30,"MENU");
outtextxy(20,100,"Zadanie po assembleru #1");
setcolor(3);
outtextxy(20,135,"Zadanie po assembleru #2");
outtextxy(20,170,"Zadanie po assembleru #3");
outtextxy(20,205,"Zadanie po assembleru #4");
outtextxy(20,240,"Zadanie po assembleru #5");
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);
if (y1==95) {y1=375;y2=395; ki=9;}
else {y1=y1-35; y2=y2-35; ki--;}
break; }
case 20480:
{setcolor(15);
if (y1==375) {y1=95;y2=115; ki=1;}
else {y1=y1+35; y2=y2+35; ki++;}
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. Голубь Н. - Искусство программирования на Ассемблере
Страницы: 1, 2