Teslenko_Drobyazko_Systeme_programuvannia_Lab
.pdfТаблиця 2-2.1
|
Варіанти завдання |
||
1. |
|
2. |
|
#include <stdio.h> |
|
#include <stdio.h> |
|
int A[8]; |
|
int A[9]; |
|
int k; |
|
int i,j; |
|
int main(){ |
|
int main(){ |
|
int i,j; |
|
i=0; |
|
k=1; |
|
while(i<9){ |
|
i=0; |
|
j=2*i; |
|
do{ |
|
switch(i){ |
|
j=i+k*2; |
|
case 5:j+=10; break; |
|
if(j>11) |
|
case 6: j*=2; break; |
|
A[i]=j; |
|
case 7: j-=4; break; |
|
else{ |
|
case 8: j=7; break; |
|
k+=1; |
|
default: j++; |
|
A[i]=k; |
|
} |
|
} |
|
A[i]=j; |
|
i++; |
|
i++; |
|
}while(i<8); |
|
} |
|
for(i=0;i<8;i++) |
|
for(i=0;i<9;i++) |
|
printf("%d ",A[i]); |
|
printf("%d ",A[i]); |
|
printf("\n"); |
|
printf("\n"); |
|
return 0; |
|
return 0; |
|
} |
|
} |
|
3. |
|
4. |
|
#include <stdio.h> |
|
#include <stdio.h> |
|
int i,k; |
|
int A[8]; |
|
int main(){ |
|
int main(){ |
|
int j; |
|
int |
i,d; |
int A[9]; |
|
d=1; |
|
k=1; |
|
i=7; |
|
for(i=0;i<=8;i++){ |
|
do{ |
|
j=k+i*3; |
|
d=i%2; |
|
if(j>18) |
|
if(!d) |
|
A[i]=j; |
|
A[i]=i; |
|
else{ |
|
else |
|
k+=2; |
|
A[i]=-i; |
|
A[i]=k; |
|
i--; |
|
} |
|
}while(i>=0); |
|
} |
|
for(i=0;i<8;i++) |
|
for(i=0;i<=8;i++) |
|
printf("%d ",A[i]); |
|
printf("%d ",A[i]); |
|
printf("\n"); |
|
printf("\n"); |
|
return 0; |
|
return 0; |
|
} |
|
} |
|
|
|
71
|
|
Продовження табл. 2-2.1 |
|
|
|
5. |
|
6. |
#include <stdio.h> |
#include <stdio.h> |
|
int A[7]; |
int A[8]; |
|
int d; |
|
int main(){ |
int main(){ |
int p,k; |
|
int i; |
|
k=1; |
d=1; |
|
p=0; |
i=0; |
|
do{ |
while(i<=6){ |
k=p; |
|
A[i]=i | d; |
k++; |
|
d+=A[i]; |
switch(p){ |
|
if(d>10) |
case 0: k=99; break; |
|
A[i]=127-i; |
case 2: k+=10; break; |
|
i++; |
|
case 4: k*=2; break; |
} |
|
case 6: k-=4; break; |
for(i=0;i<7;i++) |
default: k*=4; |
|
printf("%d ",A[i]); |
} |
|
printf("\n"); |
A[p]=k; |
|
return 0; |
p++; |
|
} |
|
}while(p<8); |
|
|
for(p=0;p<8;p++) |
|
|
printf("%d ",A[p]); |
|
|
printf("\n"); |
|
|
return 0; |
|
|
} |
7. |
|
8. |
#include <stdio.h> |
#include <stdio.h> |
|
char b; |
|
char a1,c; |
int c; |
|
int A[13]; |
int main(){ |
int main(){ |
|
int |
a1; |
char b; |
int A[7]; |
a1=2; |
|
a1=3; |
|
b=12; |
c=0; |
|
while(b>=0){ |
for(b=0;b<7;b++){ |
if(b<10) |
|
c+=3; |
|
c=a1*2; |
if(c<9) |
else |
|
a1=5*c+b+1; |
c-=a1; |
|
else |
|
A[b]=c; |
a1=b<<2; |
a1+=b; |
|
A[b]=a1; |
b--; |
|
} |
|
} |
for(b=0;b<7;b++) |
for(b=0;b<13;b++) |
|
printf("%d ",A[b]); |
printf("%d ",A[b]); |
|
printf("\n"); |
printf("\n"); |
|
return 0; |
return 0; |
|
} |
|
} |
|
|
|
72
|
Продовження табл. 2-2.1 |
|
|
9. |
10. |
#include <stdio.h> |
#include <stdio.h> |
int c; |
int A[11]; |
int A1[12]; |
int main(){ |
int main(){ |
int l,k; |
int a; |
char j; |
char b; |
l=2; |
a=6; |
k=0; |
b=0; |
for(j=0;j<11;j++){ |
do{ |
k=j; |
if(a>b) |
l+=8; |
c=a*3-b; |
k++; |
else |
switch(j){ |
c=a*2+b; |
case 1: k=0; break; |
A1[b]=c; |
case 3: k+=l; break; |
b++; |
case 5: k-=l; break; |
}while(b!=12); |
case 6: k=2*l-k; break; |
for(b=0;b<12;b++) |
default: k--; |
printf("%d ",A1[b]); |
} |
printf("\n"); |
A[j]=k; |
return 0; |
} |
} |
for(j=0;j<11;j++) |
|
printf("%d ",A[j]); |
|
printf("\n"); |
|
return 0; |
|
} |
11. |
12. |
#include <stdio.h> |
#include <stdio.h> |
int k; |
int l,k; |
int main(){ |
int A[11]; |
int A[10]; |
int main(){ |
char j; |
char j; |
k=3; |
l=2; |
j=0; |
k=64; |
while(j<10){ |
j=10; |
if(j!=7) |
do{ |
k+=j; |
if(j%4==0) |
A[j]=k; |
k/=l; |
j++; |
else |
} |
k+=l; |
for(j=0;j<10;j++) |
A[j]=k; |
printf("%d ",A[j]); |
j--; |
printf("\n"); |
}while(j>=0); |
return 0; |
for(j=0;j<11;j++) |
} |
printf("%d ",A[j]); |
|
printf("\n"); |
|
return 0; |
|
} |
73
|
Продовження табл. 2-2.1 |
|
|
13. |
14. |
#include <stdio.h> |
#include <stdio.h> |
int p,j; |
int A[11]; |
int main(){ |
int main(){ |
int A[11]; |
int j; |
for(p=0;p<11;p++){ |
j=0; |
j=32-2*p; |
A[4]=0; |
switch(p){ |
while(j<11){ |
case 9: j*=2; break; |
if(j>5) |
case 7: j+=15; break; |
A[j]=A[j-1]+j; |
case 4: j=-5; break; |
else |
case 2: j-=8; break; |
A[j] = j*j; |
case 0: j=0; break; |
j++; |
default: j=77; |
} |
} |
for(j=0;j<11;j++) |
A[p]=j; |
printf("%d ",A[j]); |
} |
printf("\n"); |
for(j=0;j<11;j++) |
return 0; |
printf("%d ",A[j]); |
} |
printf("\n"); |
|
return 0; |
|
} |
|
15. |
16. |
#include <stdio.h> |
#include <stdio.h> |
int j; |
int A[11]; |
int main(){ |
int s; |
int A[11]; |
int main(){ |
j=2; |
int i; |
A[1]=1; |
s=0; |
A[0]=1; |
for(i=0;i<11;i++){ |
do{ |
A[i]=2*i; |
A[j]=A[j-1]+A[j-2]; |
s+=A[i]; |
if(A[j]>62) |
if(s>10) |
A[j]=0; |
A[i]=s; |
j++; |
} |
}while(j<11); |
for(i=0;i<11;i++) |
for(j=0;j<11;j++) |
printf("%d ",A[i]); |
printf("%d ",A[j]); |
printf("\n"); |
printf("\n"); |
return 0; } |
return 0; |
|
} |
|
17. |
18. |
#include <stdio.h> |
#include <stdio.h> |
int i,s; |
int i; |
int main(){ |
int A[11]; |
int A[11]; |
int main(){ |
s=0; |
int s; |
i=10; |
s=0; |
74
Продовження табл. 2-2.1
while(i>=0){ |
i=0; |
s=i*4; |
do{ |
switch(i){ |
A[i]=2*i; |
case 6: s=17; break; |
s+=A[i]; |
case 3: s*=4; break; |
if(s>80) |
case 4: s+=8; break; |
A[i]=s; |
default: s-=4; |
i++; |
} |
}while(i<11); |
A[i]=s; |
for(i=0;i<11;i++) |
i--; |
printf("%d ",A[i]); |
} |
printf("\n"); |
for(i=0;i<11;i++) |
return 0; |
printf("%d ",A[i]); |
} |
printf("\n"); |
|
return 0; |
|
} |
|
19. |
20. |
#include <stdio.h> |
#include <stdio.h> |
int i; |
int A[11]; |
int main(){ |
int m; |
int m; |
int main(){ |
int A[11]; |
int i; |
m=1; |
m=1; |
for(i=0;i<11;i++){ |
i=0; |
m= (m^i) && 1; |
while(i<=10){ |
if(m==1) |
A[i]=3*i; |
A[i]=2*i; |
m+=A[i]; |
else |
if(m>100) |
A[i]=2*i+1; |
A[i]=2*i; |
} |
i++; |
for(i=0;i<11;i++) |
} |
printf("%d ",A[i]); |
for(i=0;i<11;i++) |
printf("\n"); |
printf("%d ",A[i]); |
return 0; |
printf("\n"); |
} |
return 0; |
|
} |
21. |
22. |
#include <stdio.h> |
#include <stdio.h> |
int i,m; |
int r; |
int main(){ |
int A[10]; |
int A[9]; |
int main(){ |
m=0; |
int i; |
i=8; |
r=0; |
do{ |
for(i=0;i<10;i++){ |
m=8*i; |
r+=i*2; |
switch(i){ |
if(r<32) |
case 2: m+=4; break; |
A[i]=r; |
case 0: m=17; break; |
else |
case 7: m-=4; break; |
A[i]=r & i; |
75
|
Продовження табл. 2-2.1 |
case 1: m=4; break; |
} |
default: m++; |
for(i=0;i<10;i++) |
} |
printf("%d ",A[i]); |
A[i]=m; |
printf("\n"); |
i--; |
return 0; } |
}while(i>-1); |
|
for(i=0;i<9;i++) |
|
printf("%d ",A[i]); |
|
printf("\n"); |
|
return 0; |
|
} |
|
23. |
24. |
#include <stdio.h> |
#include <stdio.h> |
int i,r; |
int A[11]; |
int main(){ |
int main(){ |
int A[11]; |
int i,r; |
r=100; |
r=0; |
i=10; |
i=1; |
while(i>=0){ |
A[0]=4; |
A[i]=2*i; |
do{ |
r-=A[i]; |
A[i]=A[i-1]+r; |
if(r<0) |
r=r | i; |
A[i]=-A[i]+1; |
if(r>9) |
i--; |
A[i]=r; |
} |
i++; |
for(i=0;i<11;i++) |
}while(i<11); |
printf("%d ",A[i]); |
for(i=0;i<11;i++) |
printf("\n"); |
printf("%d ",A[i]); |
return 0; |
printf("\n"); |
} |
return 0; |
|
} |
25. |
26. |
#include <stdio.h> |
#include <stdio.h> |
char i; |
char p; |
int main(){ |
char A[11]; |
char d; |
int main(){ |
int A[4]; |
int i; |
d=1; |
p=0; |
for(i=0;i<4;i++){ |
i=0; |
d=16*i; |
while(p<11){ |
switch(i){ |
if(p>=7) |
case 0: d+=14; break; |
i=i ^ p; |
case 1: d*=4; break; |
else |
case 3: d-=7; break; |
i=i | p; |
default: d+=10; |
A[p]=i; |
} |
p++; |
A[i]=d; |
} |
} |
for(i=0;i<11;i++) |
76
|
Продовження табл. 2-2.1 |
for(i=0;i<4;i++) |
printf("%d ",A[i]); |
printf("%d ",A[i]); |
printf("\n"); |
printf("\n"); |
return 0; |
return 0; |
} |
} |
|
27. |
28. |
#include <stdio.h> |
#include <stdio.h> |
unsigned int A[6]; |
int j; |
int main(){ |
int main(){ |
int i,p; |
int i; |
p=6; |
int A[7]; |
for(i=5;i>=0;i--){ |
i=3; |
if(i<3) |
j=0; |
p++; |
do{ |
else |
if(j<5) |
p--; |
i+=2*j; |
A[i]=p; |
else |
} |
i+=j; |
for(i=0;i<6;i++) |
A[j]=i; |
printf("%d ",A[i]); |
j++; |
printf("\n"); |
}while(j<7); |
return 0; |
for(i=0;i<7;i++) |
} |
printf("%d ",A[i]); |
|
printf("\n"); |
|
return 0; |
|
} |
29. |
30. |
#include <stdio.h> |
#include <stdio.h> |
int i; |
unsigned int A[9]; |
int A[9]; |
int main(){ |
int main(){ |
int i,k; |
int j; |
k=0; |
i=0; |
for(i=0;i<9;i++){ |
j=0; |
k+=i; |
while(i<=8){ |
if(k<9) |
j=i+10; |
A[i]=i; |
switch(i){ |
else |
case 2: j=0; break; |
A[i]=k; |
case 4: j=13; break; |
} |
case 6: j*=4; break; |
for(i=0;i<9;i++) |
case 8: j+=9; break; |
printf("%d ",A[i]); |
default: j--; |
printf("\n"); |
} |
return 0; |
A[i]=j; |
} |
i++; |
|
} |
|
for(i=0;i<9;i++) |
|
printf("%d ",A[i]); |
|
printf("\n"); return 0;} |
|
77
2-2.6. Контрольні запитання
1.Що відображає мовою Асемблера ідентифікатор змінної мови С++?
2.Як реалізуються мовою Асемблера оператори присвоєння?
3.Як реалізуються мовою Асемблера оператори if та if...else?
4.Як реалізуються мовою Асемблера оператори for?
5.Як реалізуються мовою Асемблера оператори while?
6.Як реалізуються мовою Асемблера оператори do…while?
7.Як реалізується мовою Асемблера оператор switch?
8.Які вимоги ставлять до асемблерних вставок у програмах мовою С++?
78
ЛАБОРАТОРНА РОБОТА №3
Ознайомлення з методами адресації даних
Мета роботи – вивчення типових структур даних та методів адресації їх елементів у мікропроцесорах 80х86 (Pentium) в реальному режимі.
3.1. Зміст роботи
При виконанні роботи студенти вивчають особливості створення та використання в мові Асемблера багатовимірних масивів, структур та масивів структур. Для доступу до елементів складних структур даних вивчаються режими адресації та команди обробки адрес. З навчальною метою мовою Асемблера створюються програми, які складаються з багатьох логічних сегментів. На конкретних прикладах вивчаються проблеми, які виникають при об‘єднанні логічних сегментів в один фізичний сегмент.
3.2. Теоретичні відомості
Створення багатовимірних масивів, структур та масивів структур у програмах мовою Асемблера
1) Директиви визначення простих даних
Асемблер надає дуже широкий набір засобів подання й обробки даних,
які за своїми можливостями не гірші від аналогічних засобів багатьох мов високого рівня. Спочатку розглянемо правила опису простих типів даних, які є базовими для більш складних типів. Для опису використовують спеціальні директиви резервування й ініціалізації даних. Якщо проводити аналогію з мовами високого рівня, то ці директиви являють собою визначення змінних.
Машинного еквіваленту цим директивам не має, просто транслятор,
оброблюючи кожну таку директиву, виділяє необхідну кількість комірок пам‘яті та, при необхідності, ініціалізує цю область деяким значенням. Формат
79
директив резервування й ініціалізації даних простих типів показаний на рис.
3.1.
db – резервування пам‘яті для даних розміром 1 байт;
dw - резервування пам‘яті для даних розміром 2 байти;
dd - резервування пам‘яті для даних розміром 4 байти;
df - резервування пам‘яті для даних розміром 6 байтів;
dp - резервування пам‘яті для даних розміром 6 байтів;
dq - резервування пам‘яті для даних розміром 8 байтів;
dt - резервування пам‘яті для даних розміром 10 байтів.
Рис. 3.1. Формат директив резервування й ініціалізації даних Транслятор masm, залежно від версії, може не підтримувати директиви df
та dp. На рис.3.1 використані наступні позначення:
? показує, що вміст поля не визначено, тобто вміст виділеної частини фізичної пам’яті при завантаженні програми змінюватися не буде.
Фактично створюється неініціалізована змінна. Операційні системи в багатьох випадках попередньо обнуляють область пам‘яті для завантаження програми, але розраховувати на це не слід.
80