fix: Кодировка
This commit is contained in:
68
ASMOUSE.CPP
68
ASMOUSE.CPP
@ -1,6 +1,6 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
** <EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢨<EFBFBD> <20> <20><>誮<EFBFBD>,**
|
** Эта программа демонстрирует, как можно добиться взаимодействия с мышкой,**
|
||||||
** <EFBFBD>ᯮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>++ <20> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD>. **
|
** используя С++ и Ассемблер. **
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
@ -8,8 +8,8 @@
|
|||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
#include <iostream.h>
|
#include <iostream.h>
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>, <20>࠭<EFBFBD>騥 <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20> <20>ਧ<EFBFBD><E0A8A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//Глобальные переменные, хранящие координаты и признак нажатия на кнопку
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
//мыши.
|
||||||
unsigned int MouseX, MouseY, MouseB;
|
unsigned int MouseX, MouseY, MouseB;
|
||||||
|
|
||||||
char IfMouse ();
|
char IfMouse ();
|
||||||
@ -20,7 +20,7 @@ void SetMouseXY (unsigned int X, unsigned int Y);
|
|||||||
void SetMinMaxX (unsigned int Min, unsigned int Max);
|
void SetMinMaxX (unsigned int Min, unsigned int Max);
|
||||||
void SetMinMaxY (unsigned int Min, unsigned int Max);
|
void SetMinMaxY (unsigned int Min, unsigned int Max);
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㯭<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
//Эта процедура проверяет доступна ли мышь
|
||||||
char IfMouse ()
|
char IfMouse ()
|
||||||
{
|
{
|
||||||
unsigned int Result;
|
unsigned int Result;
|
||||||
@ -30,22 +30,22 @@ char IfMouse ()
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
//Эта процедура делает видимым курсор мыши
|
||||||
void ShowMouse ()
|
void ShowMouse ()
|
||||||
{
|
{
|
||||||
asm mov ax, 0x1
|
asm mov ax, 0x1
|
||||||
asm int 0x33
|
asm int 0x33
|
||||||
}
|
}
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
//Эта процедура делает невидимым курсор мыши
|
||||||
void HideMouse ()
|
void HideMouse ()
|
||||||
{
|
{
|
||||||
asm mov ax, 0x2
|
asm mov ax, 0x2
|
||||||
asm int 0x33
|
asm int 0x33
|
||||||
}
|
}
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20>ਧ<EFBFBD><E0A8A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//Эта процедура считывает положение курсора мыши и признак нажатия
|
||||||
//<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//на клавишу
|
||||||
void ReadMouse ()
|
void ReadMouse ()
|
||||||
{
|
{
|
||||||
asm mov ax, 0x3
|
asm mov ax, 0x3
|
||||||
@ -55,7 +55,7 @@ void ReadMouse ()
|
|||||||
asm mov MouseY, dx
|
asm mov MouseY, dx
|
||||||
}
|
}
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>㣨<EFBFBD> <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD>
|
//Эта процедура устанавливает курсор в другие координаты
|
||||||
void SetMouseXY (unsigned int X, unsigned int Y)
|
void SetMouseXY (unsigned int X, unsigned int Y)
|
||||||
{
|
{
|
||||||
asm mov ax, 0x4
|
asm mov ax, 0x4
|
||||||
@ -64,9 +64,9 @@ void SetMouseXY (unsigned int X, unsigned int Y)
|
|||||||
asm int 0x33
|
asm int 0x33
|
||||||
}
|
}
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쭮<EFBFBD> <20> <20><><EFBFBD>ᨬ<EFBFBD><E1A8AC>쭮<EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD>
|
//Эта процедура устанавливает минимальное и максимальное значение
|
||||||
//<EFBFBD>࠭<EFBFBD><EFBFBD> <20><EFBFBD><E0AEAC><EFBFBD>⪠, <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
//границ промежутка, в котором может двигаться курсор мыши
|
||||||
//<EFBFBD> <20><>ਧ<EFBFBD><E0A8A7>⠫쭮<E2A0AB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
//в горизонтальном положении.
|
||||||
void SetMinMaxX (unsigned int Min, unsigned int Max)
|
void SetMinMaxX (unsigned int Min, unsigned int Max)
|
||||||
{
|
{
|
||||||
asm mov ax, 0x7
|
asm mov ax, 0x7
|
||||||
@ -75,9 +75,9 @@ void SetMinMaxX (unsigned int Min, unsigned int Max)
|
|||||||
asm int 0x33
|
asm int 0x33
|
||||||
}
|
}
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쭮<EFBFBD> <20> <20><><EFBFBD>ᨬ<EFBFBD><E1A8AC>쭮<EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD>
|
//Эта процедура устанавливает минимальное и максимальное значение
|
||||||
//<EFBFBD>࠭<EFBFBD><EFBFBD> <20><EFBFBD><E0AEAC><EFBFBD>⪠, <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
//границ промежутка, в котором может двигаться курсор мыши
|
||||||
//<EFBFBD> <20><><EFBFBD>⨪<EFBFBD><E2A8AA>쭮<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
//в вертикальном положении.
|
||||||
void SetMinMaxY (unsigned int Min, unsigned int Max)
|
void SetMinMaxY (unsigned int Min, unsigned int Max)
|
||||||
{
|
{
|
||||||
asm mov ax, 0x8
|
asm mov ax, 0x8
|
||||||
@ -85,47 +85,47 @@ void SetMinMaxY (unsigned int Min, unsigned int Max)
|
|||||||
asm mov dx, Max
|
asm mov dx, Max
|
||||||
asm int 0x33
|
asm int 0x33
|
||||||
}
|
}
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ࠬ<EFBFBD><E0A0AC> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD>ᠭ<EFBFBD><E1A0AD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
//Главная пограмма - тестирует мышь и процедуры описанные выше.
|
||||||
main(){
|
main(){
|
||||||
clrscr();
|
clrscr();
|
||||||
IfMouse();
|
IfMouse();
|
||||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㯭<EFBFBD> <20> <20><><EFBFBD>⥬<EFBFBD>.\n";
|
cout<<"Мышь доступна в системе.\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFA2A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>প<EFBFBD> 3 ᥪ.\n";
|
cout<<"Сейчас появится курсор - задержка 3 сек.\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
ShowMouse();
|
ShowMouse();
|
||||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>祧<EFBFBD><E7A5A7><EFBFBD> - <20><><EFBFBD><EFBFBD>প<EFBFBD> 3 ᥪ.\n";
|
cout<<"Сейчас курсор исчезнет - задержка 3 сек.\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
HideMouse();
|
HideMouse();
|
||||||
cout<<"<EFBFBD><EFBFBD>१ 3 ᥪ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFA2A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.\n";
|
cout<<"Через 3 сек курсор появится вновь.\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
ShowMouse();
|
ShowMouse();
|
||||||
ReadMouse();
|
ReadMouse();
|
||||||
cout<<"\n<EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #1:\n";
|
cout<<"\nКоординаты мыши на момент #1:\n";
|
||||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD>: "<<MouseX<<"\n";
|
cout<<"Х-координата: "<<MouseX<<"\n";
|
||||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> "<<MouseY<<"\n";
|
cout<<"У-координата "<<MouseY<<"\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
cout<<"<EFBFBD><EFBFBD>१ 3 ᥪ <20><><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>=120 <EFBFBD> <20>=120\n";
|
cout<<"Через 3 сек поменяем координаты мыши на х=120 и у=120\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
SetMouseXY(120,120);
|
SetMouseXY(120,120);
|
||||||
ReadMouse();
|
ReadMouse();
|
||||||
cout<<"\n<EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #2:\n";
|
cout<<"\nКоординаты мыши на момент #2:\n";
|
||||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD>: "<<MouseX<<"\n";
|
cout<<"Х-координата: "<<MouseX<<"\n";
|
||||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> "<<MouseY<<"\n";
|
cout<<"У-координата "<<MouseY<<"\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
cout<<"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n";
|
cout<<"\nНажмите клавишу мыши.\n";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
ReadMouse();
|
ReadMouse();
|
||||||
//if ((MouseB&1)==1) cout<<"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.";
|
//if ((MouseB&1)==1) cout<<"\nКлавиша мыши нажата.";
|
||||||
if (MouseB==1) cout<<"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.";
|
if (MouseB==1) cout<<"\nКлавиша мыши нажата.";
|
||||||
else cout<<"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.";
|
else cout<<"\nКлавиша мыши не нажата.";
|
||||||
delay(3000);
|
delay(3000);
|
||||||
cout<<"\n<EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>࠭<EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>࠭<EFBFBD>:\n";
|
cout<<"\nУстановим границы движения мыши по экрану:\n";
|
||||||
cout<<"100<X<300\n";
|
cout<<"100<X<300\n";
|
||||||
cout<<"0<Y<10\n";
|
cout<<"0<Y<10\n";
|
||||||
SetMinMaxX(100,300);
|
SetMinMaxX(100,300);
|
||||||
SetMinMaxY(0,10);
|
SetMinMaxY(0,10);
|
||||||
cout<<"\n<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>襭<EFBFBD><E8A5AD> ࠡ<><E0A0A1><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n";
|
cout<<"\nДля завершения работы программы нажмите любую клавишу.\n";
|
||||||
getch();
|
getch();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
58
LABV10.CPP
58
LABV10.CPP
@ -1,4 +1,4 @@
|
|||||||
// "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IBM PC <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ன"
|
// "Обмен IBM PC с клавиатурой"
|
||||||
// Labv10
|
// Labv10
|
||||||
|
|
||||||
#include <iostream.h>
|
#include <iostream.h>
|
||||||
@ -8,69 +8,69 @@
|
|||||||
#include <bios.h>
|
#include <bios.h>
|
||||||
#define Port8042 0x60
|
#define Port8042 0x60
|
||||||
|
|
||||||
long far * pTime=(long far*)0x46C; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA>
|
long far * pTime=(long far*)0x46C; // Указатель на счетчик тиков
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20><>砫<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Определим указатели начала и конца буфера
|
||||||
|
|
||||||
int far * pHeadPtr=(int far *)0x41A; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><> 㪠<><E3AAA0>⥫<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>.<2E><>.
|
int far * pHeadPtr=(int far *)0x41A; // Указатель на указатель головы буф.кл.
|
||||||
int far * pTailPtr=(int far *)0x41C; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><> 㪠<><E3AAA0>⥫<EFBFBD> 墮<><E5A2AE><EFBFBD> <20><><EFBFBD>.<2E><>.
|
int far * pTailPtr=(int far *)0x41C; // Указатель на указатель хвоста буф.кл.
|
||||||
unsigned char far * pBuf;
|
unsigned char far * pBuf;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// 3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> N1.
|
// 3адание N1.
|
||||||
clrscr();
|
clrscr();
|
||||||
|
|
||||||
cout << "\n 3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> N1:\n";
|
cout << "\n 3адание N1:\n";
|
||||||
cout << "\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD>!";
|
cout << "\n Нажимайте клавиши для получения кодов!";
|
||||||
cout << "\n <EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n";
|
cout << "\n Пробел - идем дальше.\n";
|
||||||
char cScan,cAsci;
|
char cScan,cAsci;
|
||||||
int iAdres;
|
int iAdres;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>㧨<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>, <20><><EFBFBD>ਬ<EFBFBD><E0A8AC> ds:si <20><><EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> 0x40:0x1A
|
// Загрузить пару регистров, например ds:si значением 0x40:0x1A
|
||||||
asm{
|
asm{
|
||||||
push ds //
|
push ds //
|
||||||
push si // <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
push si // Сохранили регистры
|
||||||
push di //
|
push di //
|
||||||
mov ax,0x40 //
|
mov ax,0x40 //
|
||||||
mov ds,ax // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>㧨<EFBFBD><EFBFBD> ᥣ<><E1A5A3><EFBFBD><EFBFBD>
|
mov ds,ax // Загрузили сегмент
|
||||||
mov si,0x1A // <EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov si,0x1A // и указатели на голову
|
||||||
mov di,0x1C // <EFBFBD> <20><> 墮<><E5A2AE>
|
mov di,0x1C // и на хвост
|
||||||
}
|
}
|
||||||
wait_kbd:
|
wait_kbd:
|
||||||
asm{
|
asm{
|
||||||
mov ax,[si] // <EFBFBD>ࠢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> -
|
mov ax,[si] // Сравниваем указатели -
|
||||||
cmp ax,[di] // <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
cmp ax,[di] // т.е. ждем нажатия
|
||||||
je wait_kbd
|
je wait_kbd
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>㧨<EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD> di <20><><EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> 0x1C
|
// Загрузить регистр di значением 0x1C
|
||||||
// <EFBFBD>ࠢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD>
|
// Сравнить указатели
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD>
|
// Прочитать указатель
|
||||||
mov si,[si]
|
mov si,[si]
|
||||||
}
|
}
|
||||||
iAdres=_SI;
|
iAdres=_SI;
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Прочитать значение из буфера
|
||||||
asm mov ax,[si]
|
asm mov ax,[si]
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> _AL <EFBFBD> _AH ᮤ<EFBFBD>ঠ<EFBFBD> ᪠<>-<2D><><EFBFBD> <20> ASCII-<EFBFBD><EFBFBD><EFBFBD>
|
// Теперь _AL и _AH содержат скан-код и ASCII-код
|
||||||
asm pop di
|
asm pop di
|
||||||
asm pop si
|
asm pop si
|
||||||
asm pop ds
|
asm pop ds
|
||||||
cScan=_AH;
|
cScan=_AH;
|
||||||
cAsci=_AL;
|
cAsci=_AL;
|
||||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %x <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %d ASCII = %d \n",iAdres,cScan,cAsci);
|
printf("Адрес = %x Скан = %d ASCII = %d \n",iAdres,cScan,cAsci);
|
||||||
} while(getch() != 32);
|
} while(getch() != 32);
|
||||||
cout << "\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࢮ<EFBFBD><E0A2AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Press any key...\n";
|
cout << "\n Конец первого задания. Press any key...\n";
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
delay(1000);
|
delay(1000);
|
||||||
asm in al,0x60
|
asm in al,0x60
|
||||||
cScan=0; // ??????
|
cScan=0; // ??????
|
||||||
printf(" <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %x \n",cScan);
|
printf(" Скан = %x \n",cScan);
|
||||||
// goto met;
|
// goto met;
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задание
|
||||||
// 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>।<EFBFBD>⠢<EFBFBD><E2A0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
// 1 Разберите представленную программу
|
||||||
// <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⫨稥 ASCII <20><><EFBFBD><EFBFBD><EFBFBD>: <20>᭮<EFBFBD><E1ADAE><EFBFBD><EFBFBD> <20> <20><>㦥<EFBFBD><E3A6A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Определите отличие ASCII кодов: основных и служебных клавиш
|
||||||
// 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> 横<><E6A8AA><EFBFBD><EFBFBD><EFBFBD><E1AAAE> <20>⥭<EFBFBD><E2A5AD> ᪠<> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> 60
|
// 2 Напишите мини программу циклического чтения скан кодов из порта 60
|
||||||
// <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⫨稥 ᪠<> <20><><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>᪠<EFBFBD><E1AAA0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Определите отличие скан кодов: нажатия и отпускания клавиши
|
||||||
|
|||||||
10
LABV11.CPP
10
LABV11.CPP
@ -1,5 +1,5 @@
|
|||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 11
|
/* Лабораторная работа 11
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ०<><E0A5A6><EFBFBD> sVGA
|
Видеоадаптер, графические режимы sVGA
|
||||||
*/
|
*/
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
#include <mem.h>
|
#include <mem.h>
|
||||||
@ -35,6 +35,6 @@ asm {
|
|||||||
getch();
|
getch();
|
||||||
set_mode(0x3);
|
set_mode(0x3);
|
||||||
}
|
}
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задание
|
||||||
//<EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>浪<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 梥<><E6A2A5> <20> 111 <EFBFBD> 112 ०<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//Определите в каком порядке кодируются цвета в 111 и 112 режимах
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20>뢮<EFBFBD><EBA2AE> <20><><EFBFBD><EFBFBD>⮭<EFBFBD><E2AEAD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>
|
//Напишите программу вывода полутонового клина на Асс
|
||||||
|
|||||||
56
LABV5.CPP
56
LABV5.CPP
@ -1,32 +1,32 @@
|
|||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> N LAB5
|
// Работа N LAB5
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
// Шаблон программы
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Тема - ПОДПРПОГРАММЫ
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include<conio.h>
|
#include<conio.h>
|
||||||
#include<iostream.h>
|
#include<iostream.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20>맮<EFBFBD><EBA7AE> <20>㭪樨 <20> <20><>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Call
|
При вызове функции в Си, она интерпретируется как команда Call
|
||||||
<EFBFBD> Assembler. <EFBFBD><EFBFBD><EFBFBD> <20>⮬ <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>
|
в Assembler. При этом передаваемые в функцию параметры, заносятся в
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ਭ樯<E0A8AD> <20><>ࠢ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><>⥬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IP <><E1ABA5><EFBFBD>饩 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
СТЕК по принципу справа налево. Затем заносится IP следующей команды,
|
||||||
<EFBFBD><EFBFBD><EFBFBD>饩 <20><> Call. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᥣ<EFBFBD><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>맮<EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD>)
|
идущей за Call. (внутрисегментный вызов процедуры)
|
||||||
<EFBFBD><EFBFBD>室 <20><> <20>㭪樨 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢫<EFBFBD><E2A2AB><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RET.
|
Выход из функции осуществляется с помощью команды RET.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//<EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD>, <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1ABAE><EFBFBD><EFBFBD><EFBFBD>, <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD><EFBFBD> <20><>। <20><>१ <20>⥪
|
//Функция, выполняющая сложение, параметры перед через стек
|
||||||
void addition(long sl_1,long sl_2, long &sum)
|
void addition(long sl_1,long sl_2, long &sum)
|
||||||
{
|
{
|
||||||
/* asm{
|
/* asm{
|
||||||
mov AX,[BP+4] //AX - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>訥 p<><70>p<EFBFBD><70><EFBFBD> <20><>p<EFBFBD><70><EFBFBD><EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov AX,[BP+4] //AX - младшие pазpяды пеpвого слагаемого
|
||||||
mov DX,[BP+8] //DX - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>訥 p<><70>p<EFBFBD><70><EFBFBD> <20><><EFBFBD>ண<EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov DX,[BP+8] //DX - младшие pазpяды второго слагаемого
|
||||||
mov SI,[BP+12] //SI - <EFBFBD>㬬<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> p<><70>p冷<70>
|
mov SI,[BP+12] //SI - сумма младших pазpядов
|
||||||
add AX,DX //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> p<><70>p冷<70>
|
add AX,DX //сложение младших pазpядов
|
||||||
mov [SI],AX //p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᢥ<EFBFBD><E1A2A5><EFBFBD> <20> SI
|
mov [SI],AX //pезультат косвенно в SI
|
||||||
mov AX,[BP+6] //AX - <EFBFBD><EFBFBD><EFBFBD>p訥 p<><70>p<EFBFBD><70><EFBFBD> <20><>p<EFBFBD><70><EFBFBD><EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov AX,[BP+6] //AX - стаpшие pазpяды пеpвого слагаемого
|
||||||
mov DX,[BP+10] //DX - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>訥 p<><70>p<EFBFBD><70><EFBFBD> <20><><EFBFBD>ண<EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov DX,[BP+10] //DX - младшие pазpяды второго слагаемого
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>p<EFBFBD><70><EFBFBD> p<><70>p冷<70>
|
//сложение стаpших pазpядов
|
||||||
mov [SI+2],AX //p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> SI
|
mov [SI+2],AX //pезультат в SI
|
||||||
}*/
|
}*/
|
||||||
sum=sl_2;
|
sum=sl_2;
|
||||||
}
|
}
|
||||||
@ -36,9 +36,9 @@ void main ( void )
|
|||||||
long a,b;
|
long a,b;
|
||||||
long sum;
|
long sum;
|
||||||
|
|
||||||
cout<<"\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࢮ<EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ";
|
cout<<"\n Введите первое слагаемое: ";
|
||||||
cin>>a;
|
cin>>a;
|
||||||
cout<<" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ";
|
cout<<" Введите второе слагаемое: ";
|
||||||
cin>>b;
|
cin>>b;
|
||||||
|
|
||||||
addition(a,b,sum);
|
addition(a,b,sum);
|
||||||
@ -46,12 +46,12 @@ addition(a,b,sum);
|
|||||||
cout<<"a + b = "<<sum;
|
cout<<"a + b = "<<sum;
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задания
|
||||||
// 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <><E1ABAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 32-<2D> ࠧ<>來<EFBFBD><EFA4AD> <20><>ᥫ <20><> <20><>
|
// 1 Напишите программу сложения двух 32-х разрядных чисел на Си
|
||||||
// 2 <EFBFBD><EFBFBD><EFBFBD>ନ<EFBFBD><EFBFBD> <><E1ABAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ணࠬ<E0AEA3><E0A0AC><EFBFBD> <20><> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD> (ᬮ<><E1ACAE><EFBFBD> <20>ਬ<EFBFBD><E0A8AC>)
|
// 2 Оформите сложение подпрограммой на Ассемблере (смотри пример)
|
||||||
// 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᥣ<EFBFBD><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20>맮<EFBFBD> <20><><EFBFBD>ணࠬ<E0AEA3><E0A0AC>
|
// 3 Проведите внутрисегментный (ближний) вызов подрограммы
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᥣ<EFBFBD><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>맮<EFBFBD> <20><><EFBFBD><EFBFBD>ணࠬ<E0AEA3><E0A0AC> (<28><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD>)
|
// Проведите межсегментный вызов подпрограммы (процедуры)
|
||||||
// <EFBFBD><EFBFBD>⥬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Tiny - Large
|
// путем изменения модели распределения памяти Tiny - Large
|
||||||
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ?
|
// Что изменилось ?
|
||||||
// 4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC> <20><>१ ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 4 Реализуйте передачу параметров через регистры или общую память
|
||||||
}
|
}
|
||||||
|
|||||||
36
LABV6.CPP
36
LABV6.CPP
@ -1,27 +1,27 @@
|
|||||||
/* LAB6
|
/* LAB6
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20><> ⥬<>
|
Лабораторная работа по теме
|
||||||
"<EFBFBD>ணࠬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>"
|
"Программные прерывания"
|
||||||
|
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20>맮<EFBFBD><EBA7AE> <20>㭪樨 - <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> <20><> <20><>, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> INT.
|
При вызове функции - прерывания из СИ, используется INT.
|
||||||
<EFBFBD> <20><>裡 <20> <20>⨬ <20>⥪ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>쪮 <20><><EFBFBD><EFBFBD><EFBFBD>.
|
В связи с этим стек заполняется несколько иначе.
|
||||||
<EFBFBD> <20>⥪<EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> IP, <EFBFBD>S (ᥣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>),<2C><> <20>㤠 <20><><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD><EFBFBD>
|
В стеке сохраняются значения IP, СS (сегмент кода),от куда вызывается
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD><EFBFBD>, <20> 䫠<><E4ABA0>.
|
прерывание, и флаги.
|
||||||
<EFBFBD><EFBFBD>室 <20><> INT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢫<EFBFBD><E2A2AB><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IRet,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뭨<EFBFBD><EBADA8><EFBFBD><EFBFBD> <20><> <20>⥪<EFBFBD>
|
Выход из INT осуществляется с помощью IRet,которая вынимает из стека
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD> CS, IP <20> 䫠<><E4ABA0><EFBFBD>.
|
все старые регистров CS, IP и флагов.
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20>맮<EFBFBD><EBA7AE> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>,䫠<><E4ABA0><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> i <EFBFBD> t
|
Так же при вызове прерывания,флажок прерывания i и t
|
||||||
<EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 0, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> <20>맮<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>㣨<EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>,
|
устанавливается в 0, что запрещает вызов любых других прерываний,
|
||||||
<EFBFBD> ⠪<><E2A0AA> <20><><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2>.
|
а также запрещает трассировку.
|
||||||
*/
|
*/
|
||||||
#include<stdio.h>
|
#include<stdio.h>
|
||||||
#include<dos.h>
|
#include<dos.h>
|
||||||
#include<iostream.h>
|
#include<iostream.h>
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
|
|
||||||
void interrupt (*old)(...); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㤥<EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
void interrupt (*old)(...); // здесь будем сохранять старый вектор
|
||||||
void interrupt cmp_int(...) // <EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><>ࠡ<EFBFBD><E0A0A1>稪
|
void interrupt cmp_int(...) // а это наш обработчик
|
||||||
{
|
{
|
||||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD><EFBFBD> ";
|
cout<<"Прерывание ";
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -39,8 +39,8 @@ void main(void)
|
|||||||
puts("v1=v2");
|
puts("v1=v2");
|
||||||
setvect(0xf0,old);
|
setvect(0xf0,old);
|
||||||
return;
|
return;
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задания
|
||||||
// 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><>ࠡ<EFBFBD>⪨ <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>
|
// 1 Напишите программу обработки прерывания
|
||||||
// 2 <EFBFBD>맮<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> <20><>⥬ <20>࣠<EFBFBD><E0A3A0><EFBFBD><EFBFBD>樨 <20>ᮡ<EFBFBD><E1AEA1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 2 Вызовите прерывание путем организации особого случая
|
||||||
// 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int3, <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20> <20>ᯮ<EFBFBD>. TD
|
// 3 Покажите использование команды int3, определите ее код с испол. TD
|
||||||
}
|
}
|
||||||
|
|||||||
24
LABV7.CPP
24
LABV7.CPP
@ -1,6 +1,6 @@
|
|||||||
/* LAB-7
|
/* LAB-7
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20><> ⥬<>
|
Лабораторная работа по теме
|
||||||
"<EFBFBD><EFBFBD> ᯫ<><E1AFAB><EFBFBD><EFBFBD>饩 <20><><EFBFBD><EFBFBD>⮩"
|
"Числа сплавающей запятой"
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#include<stdio.h>
|
#include<stdio.h>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{ int aa;
|
{ int aa;
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>饩 <20><><EFBFBD><EFBFBD>⮩ <20><> <20><EFBFBD><E0AEA2> <20><>
|
// Операции с плавающей запятой на уровне Си
|
||||||
float bb,ad;
|
float bb,ad;
|
||||||
aa=1; bb=5.0;ad=3.1;
|
aa=1; bb=5.0;ad=3.1;
|
||||||
bb=aa;
|
bb=aa;
|
||||||
@ -19,7 +19,7 @@ cout<<"\n Ci "<<bb;
|
|||||||
// cin>>bb;
|
// cin>>bb;
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>饩 <20><><EFBFBD><EFBFBD>⮩ <20><> <20><EFBFBD><E0AEA2> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Операции с плавающей запятой на уровне Ассемблера
|
||||||
asm { finit
|
asm { finit
|
||||||
fld ad
|
fld ad
|
||||||
fld bb
|
fld bb
|
||||||
@ -30,12 +30,12 @@ cout<<" Acc "<<bb;
|
|||||||
getch();
|
getch();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задания
|
||||||
// 1 <EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>樨 <20><><EFBFBD> <20><><EFBFBD><E1ABA0> <20> <20><> <20><> <20><EFBFBD><E0AEA2> <20><>
|
// 1 Выполните операции над числами с ПЗ на уровне Си
|
||||||
// 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><> <20><><EFBFBD> (<28><> <20>ਬ<EFBFBD><E0A8AC>): <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>,
|
// 2 Напишите программу на Асс (см пример): Введите в диалоге три числа,
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>㧨<EFBFBD><EFBFBD> <20><> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> FPU, <20><><EFBFBD><EFBFBD>㬬<EFBFBD><E3ACAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>뢥<EFBFBD><EBA2A5><EFBFBD><EFBFBD> १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// загрузите их в регистры FPU, просуммируйте, выведите результат
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠡ<><E0A0A1><EFBFBD> FPU <EFBFBD> TD. <EFBFBD><EFBFBD><EFBFBD> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> FPU ?
|
// Проследите работу FPU в TD. Как используются регистры FPU ?
|
||||||
// 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> FPU <20><><EFBFBD><EFBFBD> (NaN), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> TD. <20>맮<EFBFBD><EBA7AE><EFBFBD><EFBFBD>
|
// 3 Получите в FPU нечисло (NaN), покажите его в TD. Вызовите
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD><EFBFBD> <20><> <20>⮬<EFBFBD> <20>ᮡ<EFBFBD><E1AEA1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
// прерывание по этому особому случаю.
|
||||||
// 4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><>ࠦ<EFBFBD><E0A0A6><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>ᥫ <20> <20><>: x=x/y. <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20> TD
|
// 4 Напишите на Асс выражение для чисел с ПЗ: x=x/y. Проверьте в TD
|
||||||
}
|
}
|
||||||
|
|||||||
32
LABV9.CPP
32
LABV9.CPP
@ -1,6 +1,6 @@
|
|||||||
/* Lab: Ass, BIOS and Ci functions
|
/* Lab: Ass, BIOS and Ci functions
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥬<EFBFBD><E2A5AC> Labv9
|
Шаблон программы для работы с видеосистемой Labv9
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ०<><E0A5A6><EFBFBD>
|
Графические режимы
|
||||||
*/
|
*/
|
||||||
#include <graphics.h>
|
#include <graphics.h>
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
@ -14,13 +14,13 @@ union REGS r;
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD>⠭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>०<EFBFBD><E0A5A6><EFBFBD>
|
// Устан номера видеорежима
|
||||||
int j,i,ii,color=0;
|
int j,i,ii,color=0;
|
||||||
r.h.ah=0x0;
|
r.h.ah=0x0;
|
||||||
r.h.al=0x13;
|
r.h.al=0x13;
|
||||||
//_asm int 0x10;
|
//_asm int 0x10;
|
||||||
int86(0x10,&r,&r);
|
int86(0x10,&r,&r);
|
||||||
// <EFBFBD>뢮<EFBFBD> 梥⭮<E6A2A5><E2ADAE> <20><><EFBFBD><EFBFBD><EFBFBD>
|
// Вывод цветного клина
|
||||||
for( j =1 ; j <319 ; j ++)
|
for( j =1 ; j <319 ; j ++)
|
||||||
{ color=color+1;
|
{ color=color+1;
|
||||||
_AH=0x0c;
|
_AH=0x0c;
|
||||||
@ -33,12 +33,12 @@ void main()
|
|||||||
}
|
}
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD>९ணࠬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//Перепрограммирование таблицы палитры
|
||||||
ii=clock();
|
ii=clock();
|
||||||
for( i = 0 ; i < 255 ; i++)
|
for( i = 0 ; i < 255 ; i++)
|
||||||
{ _AH=0x10;
|
{ _AH=0x10;
|
||||||
_AL=0x10;
|
_AL=0x10;
|
||||||
_BX=i; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
_BX=i; // Номер регистра
|
||||||
_CH=i; /* G */
|
_CH=i; /* G */
|
||||||
_CL=i; /* B */
|
_CL=i; /* B */
|
||||||
_DH=i; /* R */
|
_DH=i; /* R */
|
||||||
@ -47,26 +47,26 @@ void main()
|
|||||||
color=256;
|
color=256;
|
||||||
i=clock()-ii;
|
i=clock()-ii;
|
||||||
|
|
||||||
// <EFBFBD>뢮<EFBFBD> <20><><EFBFBD><EFBFBD>⮭<EFBFBD><E2AEAD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
// Вывод полутонового клина
|
||||||
for( j =1 ; j <319 ; j ++) /* */
|
for( j =1 ; j <319 ; j ++) /* */
|
||||||
{ color=color-1;
|
{ color=color-1;
|
||||||
_AH=0x0c;
|
_AH=0x0c;
|
||||||
_AL=color;
|
_AL=color;
|
||||||
if(color==0) color=256;
|
if(color==0) color=256;
|
||||||
_BH=0;
|
_BH=0;
|
||||||
_DX=100; // <EFBFBD><EFBFBD>ப<EFBFBD> <20>뢮<EFBFBD><EBA2AE>
|
_DX=100; // строка вывода
|
||||||
_CX=j;
|
_CX=j;
|
||||||
geninterrupt(0x10);
|
geninterrupt(0x10);
|
||||||
}
|
}
|
||||||
// printf("<EFBFBD>६<EFBFBD> <20><>९ணࠬ<E0AEA3><E0A0AC><EFBFBD><E0AEA2><EFBFBD><EFBFBD> ⠡<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %d",i);
|
// printf("Время перепрограммирования табл палитр : %d",i);
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задания
|
||||||
// 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>⮭<EFBFBD><E2AEAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 梥⮬
|
// 1 Подкрасьте полутоновой клин красным цветом
|
||||||
// 2 <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> ०<><E0A5A6><EFBFBD> <20><>אַ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 2 Выведите клин в режиме прямой работы с видео памятью
|
||||||
// (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20>뢮<EFBFBD><EBA2AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><>稭<EFBFBD><E7A8AD> <20> a0000)
|
// (напишите Асс программу вывода возрастающ кода, начиная с a0000)
|
||||||
// 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD> <20>뢮<EFBFBD><EBA2AE> <20> <20><>९ணࠬ<E0AEA3><E0A0AC><EFBFBD> ⠡<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD> i=clock()
|
// 3 Измерьте время вывода и перепрограммир табл палитры используя i=clock()
|
||||||
// 4 <EFBFBD>ਤ㬠<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ࠪ<EFBFBD><E0A0AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>뢥<EFBFBD><EBA2A5> <20><><EFBFBD>쪮
|
// 4 Придумайте абстрактную анимацию, выведя несколько
|
||||||
// 梥⮢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>쥢 <20> 横<><E6A8AA><EFBFBD><EFBFBD>᪨ <20><>९ணࠬ<E0AEA3><E0A0AC><EFBFBD><EFBFBD><EFBFBD> ⠡<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// цветовых клиньев и циклически перепрограммируя табл палитры
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
20
Lab_asm.asm
20
Lab_asm.asm
@ -2,16 +2,16 @@
|
|||||||
.MODEL TINY
|
.MODEL TINY
|
||||||
.STACK 100h
|
.STACK 100h
|
||||||
.DATA
|
.DATA
|
||||||
Message DB 13,10,'Hi <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! ',13,10,'$'
|
Message DB 13,10,'Hi Привет! ',13,10,'$'
|
||||||
.CODE
|
.CODE
|
||||||
mov ax,@Data
|
mov ax,@Data
|
||||||
mov ds,ax ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DS <20><><EFBFBD><EFBFBD><EFBFBD>
|
mov ds,ax ; установить регистр DS таким
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; образом, чтобы он указывал
|
||||||
; <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; на сегмент данных
|
||||||
mov ah,9 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov ah,9 ; функция DOS вывода строки
|
||||||
mov dx,OFFSET Message ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"
|
mov dx,OFFSET Message ; ссылка на сообщение "Привет!"
|
||||||
int 21h ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!" <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
int 21h ; вывести "Привет!" на экран
|
||||||
mov ah,4ch ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov ah,4ch ; функция DOS завершения
|
||||||
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; программы
|
||||||
int 21h ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
int 21h ; завершить программу
|
||||||
END
|
END
|
||||||
230
Labv1.cpp
230
Labv1.cpp
@ -1,8 +1,8 @@
|
|||||||
// <EFBFBD>ਬ<EFBFBD><EFBFBD> <20><><EFBFBD>ଫ<EFBFBD><E0ACAB><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
// Пример оформления программы
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> N 0
|
// Работа N 0
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ࠣ<EFBFBD><E0A0A3><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
// Измерение времени выполнения фрагмента программы
|
||||||
// <EFBFBD><EFBFBD>㤥<EFBFBD><EFBFBD><EFBFBD> <20><> 000.0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, & <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Студенты гр 000.0 Иванофф, Петрофф, & Сидорофф
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
@ -13,124 +13,124 @@
|
|||||||
#define PortCan0 0x40
|
#define PortCan0 0x40
|
||||||
|
|
||||||
|
|
||||||
void beep(unsigned iTone,unsigned iDlit); // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>⨯ <20>㭪樨
|
void beep(unsigned iTone,unsigned iDlit); // Это прототип функции
|
||||||
// <EFBFBD><EFBFBD>㪮<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᨣ<><E1A8A3><EFBFBD><EFBFBD>, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>७<EFBFBD><E0A5AD> <20>६<EFBFBD><E0A5AC><EFBFBD>
|
// звукового сигнала, используемой при измерении времени
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Объявление переменных
|
||||||
long int lCnt=0; // <EFBFBD>祩<EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>稪 <20><><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><E0A5AD>
|
long int lCnt=0; // Ячейка - счетчик повторений
|
||||||
int iA=0x1234; // <EFBFBD>㬬<EFBFBD>-<2D>祩<EFBFBD><E7A5A9>, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD>㥬<EFBFBD><E3A5AC> <20> <20><><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
int iA=0x1234; // Думми-ячейка, используемая в исследуемой команде
|
||||||
|
|
||||||
/*************************************************************************\
|
/*************************************************************************\
|
||||||
/* <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᬮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮤ<EFBFBD>ন<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨧<EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᮬ */
|
/* Как из Си посмотреть содержимое байта с известным физическим адресом */
|
||||||
|
|
||||||
// <EFBFBD> <20><>⨬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>ᮬ 0046<EFBFBD>h
|
// Если хотим напечатать содержимое байта с адресом 0046Сh
|
||||||
//<EFBFBD><EFBFBD><EFBFBD>塞 far-㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> ⨯<> char <20> <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD>㥬
|
//объявляем far-указатель на переменную типа char и инициализируем
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD>⥫쭮 <20>८<EFBFBD>ࠧ<EFBFBD><E0A0A7><EFBFBD><EFBFBD>
|
//этот указатель значением адреса, предварительно преобразовав
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20> ⨯<> char *
|
//его к типу char *
|
||||||
char far * pT=(char *)0x46C; // (1)
|
char far * pT=(char *)0x46C; // (1)
|
||||||
printf ("\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠥<EFBFBD> 10 ࠧ <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᮬ \n");
|
printf ("\n Печатаем 10 раз значение байта с известным адресом \n");
|
||||||
for (int i=0; i<10; i++)
|
for (int i=0; i<10; i++)
|
||||||
printf (" \n %d ", * pT); // (1)
|
printf (" \n %d ", * pT); // (1)
|
||||||
printf ("\n <EFBFBD><EFBFBD><EFBFBD> <20>த<EFBFBD><E0AEA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \n");
|
printf ("\n Для продолжения нажмите любую клавишу \n");
|
||||||
getch(); // <EFBFBD>ணࠬ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
getch(); // Программа ждет нажатия клавиши
|
||||||
|
|
||||||
|
|
||||||
/******************************************\
|
/******************************************\
|
||||||
\* <EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><>ᬮ<EFBFBD><E1ACAE><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */
|
\* Как из Си посмотреть содержимое порта */
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD>⠥<EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>ᮬ 40 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <20><>
|
// Читаем содержимое порта с адресом 40 с помощью функции Си
|
||||||
printf ("\n <EFBFBD><EFBFBD>⠥<EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>ᮬ 40 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <20><> \n" );
|
printf ("\n Читаем содержимое порта с адресом 40 с помощью функции Си \n" );
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.5 <EFBFBD>
|
// Цикл повторяется каждые 0.5 с
|
||||||
printf ("\n <EFBFBD><EFBFBD><EFBFBD> <20><>室<EFBFBD> <20><> 横<><E6A8AA> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \n" );
|
printf ("\n Для выхода из цикла - нажмите любую клавишу \n" );
|
||||||
|
|
||||||
|
|
||||||
while (bioskey(1)==0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>㤥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
while (bioskey(1)==0) // пока не будет нажата любая клавиша
|
||||||
{
|
{
|
||||||
printf (" \n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>40 = %d ", inp(PortCan0)); //(2)
|
printf (" \n Порт40 = %d ", inp(PortCan0)); //(2)
|
||||||
// <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TD <20><>ᬮ<EFBFBD><E1ACAE><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20>ॢ<EFBFBD><E0A5A2>頥<EFBFBD><E9A0A5><EFBFBD> <20>-<2D><><EFBFBD> inp()
|
// С помощью TD посмотрите, во что превращается ф-ция inp()
|
||||||
// <EFBFBD><EFBFBD> <20><EFBFBD><E0AEA2> <20><>設<EFBFBD><E8A8AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// на уровне машинных команд
|
||||||
delay(500); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>প<EFBFBD> <20><> <20><><EFBFBD>ᥪ㭤<E1A5AA> (500 <EFBFBD><EFBFBD>)
|
delay(500); // Задержка на полсекунды (500 мс)
|
||||||
}
|
}
|
||||||
getch(); // <EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
getch(); // Очищаем буфер клавиатуры
|
||||||
/**************************************************************************\
|
/**************************************************************************\
|
||||||
<EFBFBD>ਬ<EFBFBD>砭<EFBFBD><EFBFBD>: *
|
Примечания: *
|
||||||
<EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> printf (...) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᯥ<EFBFBD><E1AFA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>࠭<EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>, *
|
Функция printf (...) позволяет распечатать на экране значения переменных, *
|
||||||
<EFBFBD> ⠪<><E2A0AA> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<><E2A5AA>. *
|
а также произвольный текст. *
|
||||||
<EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> bioskey(1) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
Функция bioskey(1) позволяет определить, нажата ли клавиша *
|
||||||
<EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> inp(uPort) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> Port *
|
Функция inp(uPort) позволяет считать байт из порта Port *
|
||||||
<EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> outp(uPort,iValue) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뢥<EFBFBD><EBA2A5><EFBFBD> <20><><EFBFBD><EFBFBD>稭<EFBFBD> iValue <EFBFBD> <20><><EFBFBD><EFBFBD> uPort *
|
Функция outp(uPort,iValue) позволяет вывести величину iValue в порт uPort *
|
||||||
<EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> delay(uTime) <EFBFBD>࣠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>প<EFBFBD> <20><> uTime <20><><EFBFBD><EFBFBD><EFBFBD>ᥪ㭤 *
|
Функция delay(uTime) организует программную задержку на uTime миллисекунд *
|
||||||
<EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> getch() <EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ᨬ<><E1A8AC><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. *
|
Функция getch() считывает один символ из буфера клавиатуры. *
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>砥 <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>⪨ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
В данном случае это надо для очистки буфера клавиатуры *
|
||||||
\**************************************************************************/
|
\**************************************************************************/
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>⠥<EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Снова читаем тот же порт с помощью программы на встроенном ассемблере
|
||||||
printf ("\n <EFBFBD><EFBFBD>⠥<EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>ᮬ 40 <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD> \n" );
|
printf ("\n Читаем содержимое порта с адресом 40 ассемблером \n" );
|
||||||
|
|
||||||
while (bioskey(1) == 0 ) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 横<> <20>㤥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
while (bioskey(1) == 0 ) // Этот цикл будет повторяться,
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// пока не нажмем клавишу
|
||||||
|
|
||||||
// <EFBFBD>ਬ<EFBFBD><EFBFBD><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD> (3)
|
// Примеры использования встроенного ассемблера (3)
|
||||||
{
|
{
|
||||||
asm { push ax // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯮᮡ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
asm { push ax // Один способ записи на встроенном ассемблере
|
||||||
in al,0x40
|
in al,0x40
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char Tmm = _AL; // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⭠ mov Tmm,al
|
unsigned char Tmm = _AL; // Эта команда эквивалентна mov Tmm,al
|
||||||
// !! <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>⮬ <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TD
|
// !! Убедитесь в этом с помощью TD
|
||||||
|
|
||||||
asm pop ax // <EFBFBD><EFBFBD>㣮<EFBFBD> ᯮᮡ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
asm pop ax // Другой способ записи на встроенном ассемблере
|
||||||
delay (500);
|
delay (500);
|
||||||
printf (" \n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>40 = %d ", Tmm );
|
printf (" \n Порт40 = %d ", Tmm );
|
||||||
// <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><>室
|
// Если нажата клавиша - то выход
|
||||||
}
|
}
|
||||||
getch();
|
getch();
|
||||||
printf ("\n <EFBFBD><EFBFBD><EFBFBD> <20>த<EFBFBD><E0AEA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \n ");
|
printf ("\n Для продолжения - нажмите любую клавишу \n ");
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><>ᬮ<EFBFBD><E1ACAE><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>ਬ<EFBFBD><E0A8AC>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塠<EFBFBD>⮢<EFBFBD><E2AEA2>
|
Как посмотреть содержимое длинной (например)четырехбайтовой
|
||||||
<EFBFBD><EFBFBD>६<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0046<EFBFBD> c <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>।<EFBFBD><E0A5A4><EFBFBD> <20><> */
|
переменной с адреса 0046С c помощью средств Си */
|
||||||
|
|
||||||
long far * pTime=(long *)0x46C; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA>
|
long far * pTime=(long *)0x46C; // Указатель на счетчик тиков
|
||||||
while (bioskey(1) == 0)
|
while (bioskey(1) == 0)
|
||||||
{
|
{
|
||||||
printf ("\n %ld",*pTime);
|
printf ("\n %ld",*pTime);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
}
|
}
|
||||||
getch();
|
getch();
|
||||||
// <EFBFBD><EFBFBD>⠥<EFBFBD> <20> <20><><EFBFBD><EFBFBD>⠥<EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><><EFBFBD>塠<EFBFBD>⮢<EFBFBD><E2AEA2> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Читаем и печатаем содержимое двухбайтовой переменной
|
||||||
// <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0046C <20>।<EFBFBD>⢠<EFBFBD><E2A2A0> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// с адреса 0046C средствами встроенного ассемблера
|
||||||
int Time;
|
int Time;
|
||||||
while (bioskey(1) == 0)
|
while (bioskey(1) == 0)
|
||||||
{
|
{
|
||||||
asm push ds // <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD> <20><> <20><>直<EFBFBD> <20><><EFBFBD>砩 ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
asm push ds // Сохраним на всякий случай регистры
|
||||||
asm push si
|
asm push si
|
||||||
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Во встроенном ассемблере
|
||||||
asm mov ax,40h // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> hex-<2D><><EFBFBD><EFBFBD>⠭<EFBFBD><E2A0AD> ⠪ ...
|
asm mov ax,40h // можно записывать hex-константы так ...
|
||||||
asm mov ds,ax
|
asm mov ds,ax
|
||||||
asm mov si,0x6C // ... <EFBFBD><EFBFBD><EFBFBD> ⠪
|
asm mov si,0x6C // ... или так
|
||||||
asm mov ax,[ds:si]
|
asm mov ax,[ds:si]
|
||||||
asm mov Time,ax
|
asm mov Time,ax
|
||||||
asm pop si // <EFBFBD> ⥯<><E2A5AF><EFBFBD> <20><><EFBFBD><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
asm pop si // А теперь восстановим регистры
|
||||||
asm pop ds // (<EFBFBD><EFBFBD> <20><>९<EFBFBD>⠩<EFBFBD><E2A0A9> <20><><EFBFBD>冷<EFBFBD> !!!)
|
asm pop ds // (не перепутайте порядок !!!)
|
||||||
|
|
||||||
printf ("\n %d",Time);
|
printf ("\n %d",Time);
|
||||||
delay(300);
|
delay(300);
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
<EFBFBD>ਬ<EFBFBD><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⨯<> <20>
|
Пример выполнения задания типа И
|
||||||
<EFBFBD>ॡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Требуется измерить время выполнения заданной команды
|
||||||
(<EFBFBD> <20>ਬ<EFBFBD><E0A8AC><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mov reg,mem, <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>९<EFBFBD><E0A5AF><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD>
|
(в примере - команда mov reg,mem, а Вы спросите у преподавателя
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> )
|
какую команду Вам взять )
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ࠣ<EFBFBD><E0A0A3><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> */
|
Измерение времени выполнения фрагмента программы */
|
||||||
|
|
||||||
beep(400,200); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⬥砥<E2ACA5> <20><>砫<EFBFBD> <20><><EFBFBD><EFBFBD>ࢠ<EFBFBD><E0A2A0> (5)
|
beep(400,200); // Сигнал отмечает начало интервала (5)
|
||||||
for ( lCnt=0; lCnt<1000000; lCnt++)
|
for ( lCnt=0; lCnt<1000000; lCnt++)
|
||||||
{
|
{
|
||||||
a1: asm { mov ax,iA
|
a1: asm { mov ax,iA
|
||||||
@ -144,63 +144,63 @@ a1: asm { mov ax,iA
|
|||||||
mov ax,iA
|
mov ax,iA
|
||||||
a2: mov ax,iA }
|
a2: mov ax,iA }
|
||||||
}
|
}
|
||||||
beep(400,200); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⬥砥<E2ACA5> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ࢠ<EFBFBD><E0A2A0> (5)
|
beep(400,200); // Сигнал отмечает конец интервала (5)
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>㪮<EFBFBD><E3AAAE><EFBFBD><EFBFBD> ᨣ<><E1A8A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD> (5)
|
// Функция подачи звукового сигнала заданной высоты и длительности (5)
|
||||||
void beep(unsigned iTone,unsigned iDlit)
|
void beep(unsigned iTone,unsigned iDlit)
|
||||||
{ sound(iTone);
|
{ sound(iTone);
|
||||||
delay(iDlit);
|
delay(iDlit);
|
||||||
nosound();
|
nosound();
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Результаты выполнения
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⨫<EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Запустили программу дважды
|
||||||
// <EFBFBD><EFBFBD><EFBFBD> <20><>ࢮ<EFBFBD> <20><>᪥ <20><><EFBFBD><EFBFBD>⮪ <20><><EFBFBD><EFBFBD><EFBFBD> <20><>⪠<EFBFBD><E2AAA0> a1 <EFBFBD> a2 <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2>
|
// При первом пуске участок между метками a1 и a2 был закомментирован
|
||||||
// <EFBFBD>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⠢<EFBFBD><E2A0A2><EFBFBD> 3.15 +- 0.2 ᥪ㭤 (<28><><EFBFBD> <20>業<EFBFBD><E6A5AD> <20>訡<EFBFBD><E8A8A1>
|
// Время выполнения составило 3.15 +- 0.2 секунд (для оценки ошибки
|
||||||
// <EFBFBD>ண<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>७ 5 ࠧ <20> <20>뫮 <20>業<EFBFBD><E6A5AD><EFBFBD> <20>।<EFBFBD><E0A5A4><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20>
|
// прогон был повторен 5 раз и было оценено среднее значение и
|
||||||
// <EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⪫<EFBFBD><E2AAAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20>ਢ<EFBFBD><E0A8A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠢ<><E0A0A2> 2*<2A><><EFBFBD>)
|
// среднеквадратическое отклонение. Приведенный допуск равен 2*СКО)
|
||||||
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>᪥ <20><><EFBFBD><EFBFBD>⮪ a1-a2 ࠡ<>⠫. <20>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// При втором пуске участок a1-a2 работал. Время выполнения
|
||||||
// <EFBFBD><EFBFBD><EFBFBD>⠢<EFBFBD><EFBFBD><EFBFBD> 7.5 +- 0.2 ᥪ㭤. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><E0A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MOV REG,MEM
|
// составило 7.5 +- 0.2 секунд. Количество повторений команды MOV REG,MEM
|
||||||
// ࠢ<EFBFBD><EFBFBD> 10^7, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD> ࠢ<><E0A0A2> 4.35 +- 0.3 ᥪ㭤, <20>業<EFBFBD><E6A5AD> <20>६<EFBFBD><E0A5AC><EFBFBD>
|
// равно 10^7, добавка времени равна 4.35 +- 0.3 секунд, оценка времени
|
||||||
// <EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.44 +- 0.03 <EFBFBD><EFBFBD><EFBFBD>.
|
// выполнения команды 0.44 +- 0.03 мкс.
|
||||||
// <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TD <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// С помощью TD определили, что компилятор использовал адресацию
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ᬥ饭<E1ACA5><E9A5AD><EFBFBD> [BP+disp]
|
// базовая со смещением [BP+disp]
|
||||||
|
|
||||||
/*
|
/*
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠡ<><E0A0A1><EFBFBD> LAB0-0
|
Задание на выполнение работы LAB0-0
|
||||||
|
|
||||||
1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠩<EFBFBD><EFBFBD> ⥪<><E2A5AA> <20>ணࠬ<E0AEA3><E0A0AC> <20> <20>뤥<EFBFBD><EBA4A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨ <20><>吝<EFBFBD><EFA7AD> <20><><EFBFBD><EFBFBD><EFBFBD>,
|
1. Прочитайте текст программы и выделите логически связные части,
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<><E2A5AA>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
поймите, что делают эти части. Разбирая текст, обратите внимание на
|
||||||
<EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <20><> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>祬. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
то, какие функции Си используются и зачем. Делая это, научитесь
|
||||||
<EFBFBD><EFBFBD><EFBFBD>짮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⥪<EFBFBD><E2A5AA><EFBFBD><EFBFBD><EFBFBD> Help'<EFBFBD><EFBFBD>
|
пользоваться контекстным Help'ом
|
||||||
|
|
||||||
2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20> 㡥<><E3A1A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>訡<EFBFBD><E8A8A1>
|
2. Скомпилируйте программу и убедитесь, что в ней отсутствуют ошибки
|
||||||
|
|
||||||
3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>, <20><><EFBFBD><EFBFBD><EFBFBD><EEA4A0><EFBFBD> १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 㡥<><E3A1A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>-
|
3. Запустите программу, наблюдайте результат и убедитесь, что Вы пони-
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20>ந<EFBFBD>室<EFBFBD><E5AEA4>.
|
маете, что происходит.
|
||||||
|
|
||||||
4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD> <20>⫠<EFBFBD>稪 IDE:
|
4. Научитесь, используя встроенный отладчик IDE:
|
||||||
<EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>窨 <20><>⠭<EFBFBD><E2A0AD><EFBFBD>. <20><> <20><EFBFBD><E0AEA2>
|
Выполнить программу до заданной точки останова. На уровне
|
||||||
<EFBFBD><EFBFBD>室<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-⥪<><E2A5AA><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ᤥ<><E1A4A5><EFBFBD><EFBFBD>, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD> <20>㭪<EFBFBD><E3ADAA> <20><><EFBFBD><EFBFBD> Run
|
исходного Си-текста это можно сделать, используя пункты меню Run
|
||||||
<EFBFBD> Debug/Breakpoints.
|
и Debug/Breakpoints.
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>⠭<EFBFBD><E2A0AD><EFBFBD>.
|
Проверить/изменить содержимое переменных после останова.
|
||||||
<EFBFBD>ᯮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪<EFBFBD> <20><><EFBFBD><EFBFBD> Debug/Evaluate/Modify,
|
Используйте пункт меню Debug/Evaluate/Modify,
|
||||||
Debug/Inspect (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Alt/F4) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Debug/Watches
|
Debug/Inspect (горячая клавиша Alt/F4) либо Debug/Watches
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>९<EFBFBD><E0A5AF><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD><E2A5AB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Измерить время выполнения заданной преподавателем команды
|
||||||
⠪, <20><><EFBFBD> <20><><EFBFBD> ᤥ<><E1A4A5><EFBFBD><EFBFBD> <20> <20>ணࠬ<E0AEA3><E0A0AC> LAB0 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MOV REG,MEM.
|
так, как это сделано в программе LAB0 с командой MOV REG,MEM.
|
||||||
|
|
||||||
5. <EFBFBD>।<EFBFBD>⢠<EFBFBD><EFBFBD> <20>⫠<EFBFBD>稪<EFBFBD> TD <20> <20><><EFBFBD><EFBFBD> CPU (<28>㭪<EFBFBD> <20><><EFBFBD><EFBFBD> View/CPU) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
5. Средствами отладчика TD в окне CPU (пункт меню View/CPU) научитесь:
|
||||||
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> ॣ<><E0A5A3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>㬠<EFBFBD><E3ACA0><EFBFBD>, <20><>-
|
- наблюдать/изменять содержимое регистров процессора (подумайте, ка-
|
||||||
<EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-
|
кие регистры можно менять безболезнено (изменения в некоторых ре-
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>ਢ<EFBFBD><E0A8A2><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>⠫<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>ଠ<EFBFBD>쭮<EFBFBD><ECADAE> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
гистрах могут привести к фатальным для нормального выполнения
|
||||||
<EFBFBD>ணࠬ<EFBFBD><EFBFBD> १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD>⠬)
|
программы результатам)
|
||||||
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>祩<EFBFBD><E7A5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨧<><E4A8A7><EFBFBD>᪨<EFBFBD> <20><><EFBFBD><EFBFBD>ᮬ:
|
- наблюдать/изменять ячейку памяти с известным физическим адресом:
|
||||||
(<EFBFBD>०<EFBFBD><EFBFBD>, 祬 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㤠-<2D><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뫮 <20><> <20><><EFBFBD>㬠<EFBFBD><E3ACA0>: <20><><EFBFBD> <20><><EFBFBD> <20><>
|
(Прежде, чем писать куда-либо, хорошо было бы подумать: что это за
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>(<28><> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
адрес - адрес ОЗУ(не использует ли этот адрес еще какая-нибудь
|
||||||
<EFBFBD>ணࠬ<EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 䨧<><E4A8A7><EFBFBD><EFBFBD> <20><><EFBFBD>ன<EFBFBD>⢮, ᮮ<>-
|
программа), адрес ПЗУ, существует ли физическое устройство, соот-
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>饥 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
ветствующее данному адресу...
|
||||||
<EFBFBD><EFBFBD>ਠ<EFBFBD><EFBFBD><EFBFBD>:
|
Варианты:
|
||||||
1. 0x46C
|
1. 0x46C
|
||||||
0x80000
|
0x80000
|
||||||
0xF000:0xFFF0
|
0xF000:0xFFF0
|
||||||
@ -213,14 +213,14 @@ Debug/Inspect (
|
|||||||
4. 0x0040:0x1E
|
4. 0x0040:0x1E
|
||||||
0xD00000
|
0xD00000
|
||||||
0x8000:0x200
|
0x8000:0x200
|
||||||
5. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 0x41A-0x43C
|
5. область памяти - 0x41A-0x43C
|
||||||
0xD000:0x100
|
0xD000:0x100
|
||||||
0xFFFF:0xE
|
0xFFFF:0xE
|
||||||
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD>ந<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F>뢮<EFBFBD><EBA2AE> (<28><><EFBFBD>ਬ<EFBFBD><E0A8AC>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
- читать/писать в произвольный порт ввода/вывода (например: считать
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x40 <EFBFBD><EFBFBD><EFBFBD>쪮 ࠧ - <20><><EFBFBD><EFBFBD><E0AEA1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>᭨<EFBFBD><E1ADA8> <20><><EFBFBD><EFBFBD><EFBFBD><EEA4A0><EFBFBD><EFBFBD> १<><E0A5A7><EFBFBD>-
|
порт 0x40 несколько раз - попробуйте объяснить наблюдаемый резуль-
|
||||||
<EFBFBD><EFBFBD><EFBFBD>; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3 <EFBFBD> 61 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>⮬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㤠 <20><><EFBFBD><EFBFBD>);
|
тат; записать число 3 в 61 порт, потом быстро записать туда нуль);
|
||||||
|
|
||||||
6. <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<E1ABA8><E0AEA2> <20> <20><>몠 <20><>
|
6. Определите в какие команды Ассемблера оттранслирован с языка СИ
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 横<><E6A8AA>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0AEA2> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD> <> <20><>ਠ<EFBFBD><E0A8A0> 横<><E6A8AA>.
|
оператор цикла. Напишите на уровне Ассемблера свой вариант цикла.
|
||||||
<EFBFBD>ࠢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>।<EFBFBD>⠢<EFBFBD><E2A0A2> <20>९<EFBFBD><E0A5AF><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD>.
|
Сравните, результаты представте преподавателю.
|
||||||
*/
|
*/
|
||||||
|
|||||||
16
Labv12.CPP
16
Labv12.CPP
@ -1,5 +1,5 @@
|
|||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD> <20><><EFBFBD> 䠩<><E4A0A9>
|
/* Структура растрового ВМР файла
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 12
|
Лабораторная работа 12
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
@ -8,7 +8,7 @@ typedef unsigned int WORD;
|
|||||||
typedef unsigned long DWORD;
|
typedef unsigned long DWORD;
|
||||||
struct BITMAPFILEHEADER {
|
struct BITMAPFILEHEADER {
|
||||||
WORD bfType;
|
WORD bfType;
|
||||||
DWORD bfSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䠩<><E4A0A9>
|
DWORD bfSize; // Размер файла
|
||||||
WORD bfReserved1;
|
WORD bfReserved1;
|
||||||
WORD bfReserved2;
|
WORD bfReserved2;
|
||||||
DWORD bfOffBits;
|
DWORD bfOffBits;
|
||||||
@ -18,7 +18,7 @@ struct BITMAPINFOHEADER{
|
|||||||
DWORD biWidth;
|
DWORD biWidth;
|
||||||
DWORD biHeight;
|
DWORD biHeight;
|
||||||
WORD biPlanes;
|
WORD biPlanes;
|
||||||
WORD biBitCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD> <20> <20><><EFBFBD>ᥫ<EFBFBD>
|
WORD biBitCount; // Количество бит в пикселе
|
||||||
DWORD biCompression;
|
DWORD biCompression;
|
||||||
DWORD biSizeImage;
|
DWORD biSizeImage;
|
||||||
DWORD biXPelsPerMeter;
|
DWORD biXPelsPerMeter;
|
||||||
@ -80,8 +80,8 @@ cputs("");
|
|||||||
printf("\n%s is %d bit-per-pixel color depth bitmap\n",a[1],bpp);
|
printf("\n%s is %d bit-per-pixel color depth bitmap\n",a[1],bpp);
|
||||||
puts("Successsfully retrieved to Inversed.bmp");
|
puts("Successsfully retrieved to Inversed.bmp");
|
||||||
}
|
}
|
||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/* Задание
|
||||||
1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD><EFBFBD>ਧ<EFBFBD>樨 <20><><EFBFBD><EFBFBD>ࠦ<EFBFBD><E0A0A6><EFBFBD><EFBFBD>.
|
1. Напишите программу бинаризации изображения.
|
||||||
2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD> <20>室<EFBFBD><E5AEA4><EFBFBD><EFBFBD> 䠩<><E4A0A9> (8 - 24 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
2. Напишите программу тестирования входного файла (8 - 24 бита)
|
||||||
<EFBFBD><EFBFBD>易⥫쭮 <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD>.
|
обязательно используйте структуры для тестирования.
|
||||||
*/
|
*/
|
||||||
10
Labv13.cpp
10
Labv13.cpp
@ -1,5 +1,5 @@
|
|||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 13
|
/* Лабораторная работа 13
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ०<><E0A5A6><EFBFBD> sVGA, VESA
|
Видеоадаптер, графические режимы sVGA, VESA
|
||||||
*/
|
*/
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
#include <bios.h>
|
#include <bios.h>
|
||||||
@ -169,7 +169,7 @@ void main()
|
|||||||
getch();
|
getch();
|
||||||
set_text_mode();
|
set_text_mode();
|
||||||
}
|
}
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задание
|
||||||
// 1. <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>⮭<EFBFBD><E2AEAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> 2 <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
// 1. Выведите полутоновой клин во 2 банке памяти.
|
||||||
// 2. <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>࠭<EFBFBD>.
|
// 2. Определите как располагаются банки памяти на экране.
|
||||||
//
|
//
|
||||||
146
Labv14.cpp
146
Labv14.cpp
@ -1,6 +1,6 @@
|
|||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 14
|
/* Лабораторная работа 14
|
||||||
<EFBFBD><EFBFBD>ꥤ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><>ࠫ<EFBFBD><E0A0AB><EFBFBD>쭮<EFBFBD><ECADAE> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Объединение команд для их параллельного выполнения
|
||||||
(<EFBFBD><EFBFBD>⨬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
(оптимизация уровня команд)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -8,7 +8,7 @@
|
|||||||
void NullProc(void){}
|
void NullProc(void){}
|
||||||
void ExTime(void (*PP)(void))
|
void ExTime(void (*PP)(void))
|
||||||
{
|
{
|
||||||
long far* pTime = (long*)0x46C; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA>
|
long far* pTime = (long*)0x46C; //счетчик тиков
|
||||||
long Time0, Time1, Time2, i;
|
long Time0, Time1, Time2, i;
|
||||||
|
|
||||||
void (*NP)(void);
|
void (*NP)(void);
|
||||||
@ -43,9 +43,9 @@ void ExTime(void (*PP)(void))
|
|||||||
}
|
}
|
||||||
Time2 = *pTime;
|
Time2 = *pTime;
|
||||||
Time2 = (((Time2 - Time1) - (Time1 - Time0))*(6553500L/1193180L));
|
Time2 = (((Time2 - Time1) - (Time1 - Time0))*(6553500L/1193180L));
|
||||||
printf("%ld <EFBFBD><EFBFBD>\n",Time2);
|
printf("%ld нс\n",Time2);
|
||||||
}
|
}
|
||||||
void P1(void) //ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
void P1(void) //регистровые зависимости имеются
|
||||||
{
|
{
|
||||||
asm{
|
asm{
|
||||||
mov ax,bx
|
mov ax,bx
|
||||||
@ -61,17 +61,17 @@ void P1(void) //ॣ
|
|||||||
mov bx,dx
|
mov bx,dx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void P2(void) //ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>
|
void P2(void) //регистровые зависимости устранены
|
||||||
{
|
{
|
||||||
asm{
|
asm{
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void P3(void) //<EFBFBD><EFBFBD>㣨<EFBFBD> <20><><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD>
|
void P3(void) //другие причины неспаренности
|
||||||
{
|
{
|
||||||
asm{
|
asm{
|
||||||
mov cl,3 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD>
|
mov cl,3 //непосредственный операнд
|
||||||
inc bx
|
inc bx
|
||||||
mov cl,3
|
mov cl,3
|
||||||
dec bx
|
dec bx
|
||||||
@ -80,12 +80,12 @@ void P3(void) //
|
|||||||
mov cl,3
|
mov cl,3
|
||||||
dec bx
|
dec bx
|
||||||
|
|
||||||
inc bx //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<><E1A4A2><EFBFBD> <20> cl <20> <20><><EFBFBD><EFBFBD><EFBFBD>⢥ <20><><EFBFBD><EFBFBD>稪<EFBFBD>
|
inc bx //команды сдвига с cl в качестве счетчика
|
||||||
ror ax,cl
|
ror ax,cl
|
||||||
dec bx
|
dec bx
|
||||||
rol ax,cl
|
rol ax,cl
|
||||||
|
|
||||||
inc dx //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>䨪ᠬ<E4A8AA> <20>. <EFBFBD>. <EFBFBD> U - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
inc dx //команды с префиксами м. б. в U - конвейере
|
||||||
mov ax,ds:[bx]
|
mov ax,ds:[bx]
|
||||||
mov ax,ss:[bx]
|
mov ax,ss:[bx]
|
||||||
mov ax,es:[bx]
|
mov ax,es:[bx]
|
||||||
@ -95,13 +95,13 @@ void P3(void) //
|
|||||||
mov cl,3
|
mov cl,3
|
||||||
dec dx
|
dec dx
|
||||||
|
|
||||||
inc dx //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<><E1A4A2><EFBFBD> <20>. <EFBFBD>. <EFBFBD> U - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
inc dx //команды сдвига м. б. в U - конвейере
|
||||||
ror ax,1
|
ror ax,1
|
||||||
rol ax,1
|
rol ax,1
|
||||||
dec dx
|
dec dx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void P4(void) //<EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>
|
void P4(void) //причины неспаренности устранены
|
||||||
{
|
{
|
||||||
asm{
|
asm{
|
||||||
|
|
||||||
@ -110,75 +110,75 @@ void P4(void) //
|
|||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
clrscr();
|
clrscr();
|
||||||
printf("Program1 - ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
printf("Program1 - регистровые зависимости имеются\n");
|
||||||
ExTime(P1);
|
ExTime(P1);
|
||||||
printf("Program2 - ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>\n");
|
printf("Program2 - регистровые зависимости устранены\n");
|
||||||
ExTime(P2);
|
ExTime(P2);
|
||||||
printf("Program3 - <EFBFBD><EFBFBD>㣨<EFBFBD> <20><><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD>\n");
|
printf("Program3 - другие причины неспаренности\n");
|
||||||
ExTime(P3);
|
ExTime(P3);
|
||||||
printf("Program4 - <EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>\n");
|
printf("Program4 - причины неспаренности устранены\n");
|
||||||
ExTime(P4);
|
ExTime(P4);
|
||||||
getch();
|
getch();
|
||||||
}
|
}
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//Задание
|
||||||
// 1. <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
// 1. Устраните причины неспаренности команд.
|
||||||
// 2. <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>᭨<EFBFBD><E1ADA8> <20>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ࠣ<EFBFBD><E0A0A3><EFBFBD>⮢ <20>ணࠬ<E0AEA3>.
|
// 2. Определите и объясните время выполнения фрагментов программ.
|
||||||
//
|
//
|
||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
/* ПРАВИЛА ОБЪЕДИНЕНИЯ КОМАНД
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Pentium <20><><EFBFBD><EFBFBD><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Процессор Pentium может выполнять одну или две команды в каждом
|
||||||
⠪<EFBFBD><EFBFBD>. <20><><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
такте. Для выполнения в процессоре одновременно двух команд они
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㤮<><E3A4AE><EFBFBD>⢮<EFBFBD><E2A2AE><EFBFBD><EFBFBD> <><E1ABA5><EFBFBD>騬 <20><EFBFBD><E1ABAE><EFBFBD><EFBFBD>:
|
должны удовлетворять следующим условиям:
|
||||||
|
|
||||||
-<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><>易<EFBFBD><EFA7A0> <20><><EFBFBD><EFBFBD> <<3C><><EFBFBD><EFBFBD><EFBFBD>묨> <20> <20><><EFBFBD>, <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
-обе команды в паре обязаны быть <простыми> в смысле, определенном
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
ниже;
|
||||||
-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC>⥩ ⨯<> <20>⥭<EFBFBD><E2A5AD>- <20><>-
|
-между ними не должно быть регистровых зависимостей типа чтение- после-
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (read-after-write or write-after-wnte) ,
|
записи или запись-после-записи (read-after-write or write-after-wnte) ,
|
||||||
-<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ঠ<EFBFBD><E0A6A0> ᬥ饭<E1ACA5><E9A5AD> (displacement) <EFBFBD>
|
-ни одна из команд не может содержать смещение (displacement) и
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD>;
|
непосредственный операнд;
|
||||||
-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>䨪ᠬ<E4A8AA> (<28><> <20>᪫<EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> OF <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>室<EFBFBD> JCC)
|
-команды с префиксами (за исключением OF в командах перехода JCC)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20> U-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
могут встречаться только в U-конвейере.
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>묨 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>
|
Под простыми командами понимаются команды, управление
|
||||||
<EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢫<EFBFBD><E2A2AB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⭮, <20><><EFBFBD> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD>
|
выполнением которых осуществляется аппаратно, без использования
|
||||||
<EFBFBD><EFBFBD><EFBFBD>ப<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॠ<><E0A5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> ⠪<>. <20>᪫<EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> <><EFA2AB><EFBFBD><EFBFBD><EFBFBD>
|
микрокоманд, и которые реализуются за один такт. Исключением являются
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ALU mem, reg <EFBFBD> ALU reg, mem, <EFBFBD>ॡ<EFBFBD><EFBFBD>騥 <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> ⠪⮢ <20><><EFBFBD>
|
команды ALU mem, reg и ALU reg, mem, требующие трех и двух тактов для
|
||||||
<EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮮ⢥<E1AEAE><E2A2A5>⢥<EFBFBD><E2A2A5><EFBFBD>. <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>।<EFBFBD>⢠
|
выполнения соответственно. Специальные аппаратные средства
|
||||||
<EFBFBD>ᯮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>騥
|
используются для их выполнения как простых команд. Следующие
|
||||||
楫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᬠ<EFBFBD>ਢ<EFBFBD><E0A8A2><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>⢥ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
целочисленные команды рассматриваются в качестве простых и могут быть
|
||||||
ᯠ७<EFBFBD>:
|
спарены:
|
||||||
-mov reg, reg/mem/imnl
|
-mov reg, reg/mem/imnl
|
||||||
-mov mem, reg/imm (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD>) ;
|
-mov mem, reg/imm (команды передачи) ;
|
||||||
-alu reg, reg/mero/imm (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>䬥<EFBFBD><E4ACA5><EFBFBD><EFBFBD>᪨<EFBFBD>
|
-alu reg, reg/mero/imm (команды арифметических
|
||||||
- alu meln , reg/ imm <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>権) ;
|
- alu meln , reg/ imm и логических операций) ;
|
||||||
- inc reg/mem (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD>,
|
- inc reg/mem (команды инкремента,
|
||||||
- dec reg/mem (<EFBFBD><EFBFBD><EFBFBD>६<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) ;
|
- dec reg/mem (декремента) ;
|
||||||
-push reg/mem (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>饭<EFBFBD><E9A5AD>
|
-push reg/mem (команды обращения
|
||||||
- pop reg (<EFBFBD> <20>⥪<EFBFBD><E2A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) ;
|
- pop reg (к стековой памяти) ;
|
||||||
-lea reg,mem (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㧪<EFBFBD> ᥣ<><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>) ;
|
-lea reg,mem (команды загрузки сегментных регистров) ;
|
||||||
-jmp/call/jcc near (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD> <20><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>) ;
|
-jmp/call/jcc near (команды передачи управления) ;
|
||||||
-n<EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) .
|
-nор (пустая команда) .
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E1ABAE><EFBFBD><EFBFBD> <20> <20><EFBFBD><E1ABAE><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4> <20><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
Команды безусловной и условной передач управления могут
|
||||||
<EFBFBD>6쥤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>, <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>⢥ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>.
|
о6ьединяться в пары, если они встречаются в качестве вторых команд в паре.
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ᯠ७<E1AFA0> <20><> <><E1ABA5><EFBFBD>饩 <20><><EFBFBD><E1ABA5><EFBFBD><EFBFBD>⥫쭮<E2A5AB> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>
|
Они не могут быть спарены со следующей последовательной командой. Также
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SHIFT/ROT <EFBFBD><EFBFBD> ᤢ<><E1A4A2><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> ࠧ<><E0A0A7><EFBFBD> <20> SHIFT <20><> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD>쭮<EFBFBD>
|
команды SHIFT/ROT со сдвигом на один разряд и SHIFT на произвольное
|
||||||
<EFBFBD><EFBFBD> ࠧ<>冷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ᯠਢ<E1AFA0><E0A8A2><EFBFBD><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ( <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>).
|
число разрядов могут спариваться только как первые ( команды в паре).
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD>
|
Регистровые зависимости
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>騥 ᯠਢ<E1AFA0><E0A8A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Регистровые зависимости, запрещающие спаривание команд, включают
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><>१ ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 䫠<><E4ABA0>, <20><> 㪠<><E3AAA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
неявные зависимости через регистры или флаги, не указанные в команде.
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC>⥩ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD> <20><>
|
Все виды зависимостей по данным могут быть классифицированы по
|
||||||
⨯<EFBFBD> <20><><EFBFBD><EFBFBD>樠権: RAR - "<22>⥭<EFBFBD><E2A5AD> <20><> <20>⥭<EFBFBD><E2A5AD>", WAR - "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>⥭<EFBFBD><E2A5AD>" <EFBFBD>
|
типу ассоциаций: RAR - "чтение после чтения", WAR - "запись после чтения" и
|
||||||
WAW - "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", RAW - "<22>⥭<EFBFBD><E2A5AD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>". <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
WAW - "запись после записи", RAW - "чтение после записи". Некоторые из
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᨬ<EFBFBD><EFBFBD>⥩ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>. RAR, <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,
|
зависимостей по данным могут быть устранены. RAR, по сути дела,
|
||||||
ᮮ⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢨<EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC>⥩, <20><><EFBFBD><E1AAAE><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>砥 <20><><EFBFBD>冷<EFBFBD>
|
соответствует отсутствию зависимостей, поскольку в данном случае порядок
|
||||||
<EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD>. <20><><EFBFBD><EFBFBD>⢨⥫쭮<E2A5AB> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD><EFBFBD> <><EFA2AB><EFBFBD><EFBFBD><EFBFBD>
|
выполнения команд не имеет значения. Действительной зависимостью является
|
||||||
⮫쪮 "<22>⥭<EFBFBD><E2A5AD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" (RAW), ⠪ <20><><EFBFBD> <20><><EFBFBD><EFBFBD>室<EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
только "чтение после записи" (RAW), так как необходимо прочитать
|
||||||
<EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫쭮 <20><><EFBFBD><EFBFBD>ᠭ<EFBFBD><E1A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
предварительно записанные новые данные, а не старые.
|
||||||
<EFBFBD><EFBFBD>譨<EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFA2AB><EFBFBD><EFBFBD><EFBFBD> <20> १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
Лишние зависимости по данным появляются в результате "записи после
|
||||||
<EFBFBD>⥭<EFBFBD><EFBFBD>" (WAR) <EFBFBD> "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" (WAW). <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> WAR <20><><EFBFBD>⮨<EFBFBD> <20>
|
чтения" (WAR) и "записи после записи" (WAW). Зависимость WAR состоит в
|
||||||
⮬, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20> <20>祩<EFBFBD><E7A5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD>,
|
том, что команда должна записать новое значение в ячейку памяти или регистр,
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>⥭<EFBFBD><E2A5AD>. <20><>譨<EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFA2AB><EFBFBD><EFBFBD><EFBFBD>
|
из которых должно быть произведено чтение. Лишние зависимости появляются
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD>쪨<EFBFBD> <20><><EFBFBD>稭<EFBFBD><E7A8AD>: <20><> <20><>⨬<EFBFBD><E2A8AC><EFBFBD><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><>࠭<EFBFBD>祭<EFBFBD><E7A5AD>
|
по нескольким причинам: не оптимизированный программный код, ограничение
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢠ ॣ<><E0A5A3><EFBFBD>, <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>稥 <20>ணࠬ<E0AEA3><E0A0AC><EFBFBD><EFBFBD>
|
количества регистров, стремление к экономии памяти, наличие программных
|
||||||
横<EFBFBD><EFBFBD><EFBFBD>.
|
циклов.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
10
Labv15.cpp
10
Labv15.cpp
@ -1,9 +1,9 @@
|
|||||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 15
|
/* Лабораторная работа 15
|
||||||
Saund Blaster
|
Saund Blaster
|
||||||
FM ᨭ⥧
|
FM синтез
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Задание
|
||||||
1. <EFBFBD>ந<EFBFBD>ࠩ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20>맮<EFBFBD><EBA7AE><EFBFBD><EFBFBD> ᯥ<><E1AFA5><EFBFBD>䥪<EFBFBD><E4A5AA>
|
1. Проиграйте гамму, вызовите спецэффекты
|
||||||
2. <EFBFBD><EFBFBD><EFBFBD>ࠩ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2. Сыграйте мелодию
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
|
|||||||
336
Labv2.cpp
336
Labv2.cpp
@ -1,5 +1,5 @@
|
|||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD> <20><><EFBFBD> ࠡ<><E0A0A1><EFBFBD> LAB2
|
// Шаблон программы для лаб работы LAB2
|
||||||
// <EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD>⥬<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Изучение системы команд
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
@ -10,81 +10,81 @@ int main (void)
|
|||||||
clrscr();
|
clrscr();
|
||||||
/*
|
/*
|
||||||
********************************************************
|
********************************************************
|
||||||
1 2 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>騥 ࠡ<><E0A0A1><EFBFBD> <> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
1 2 3 Напишите программы, иллюстрирующие работу след команд:
|
||||||
|
|
||||||
1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JL.
|
1. Команда JL.
|
||||||
JL metka.
|
JL metka.
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢫<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>室 <20><> 㪠<><E3AAA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>,
|
Осуществляет переход на указанную метку,
|
||||||
<EFBFBD> १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>।<EFBFBD><E0A5A4><EFBFBD>饣<EFBFBD> <20>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
если результат предыдущего сравнения: БОЛЬШЕ
|
||||||
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>室 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢫<EFBFBD><E2A2AB><EFBFBD><EFBFBD><EFBFBD>, <20> 䫠<><E4ABA0> SF=0 <EFBFBD> OF =0)
|
(Переход осуществляется, если флаги SF=0 и OF =0)
|
||||||
|
|
||||||
asm {
|
asm {
|
||||||
cmp ax, 13
|
cmp ax, 13
|
||||||
JL metka
|
JL metka
|
||||||
..... ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
..... ; какой-то блок команд
|
||||||
|
|
||||||
metka:
|
metka:
|
||||||
...... ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
...... ; какой-то блок команд
|
||||||
};
|
};
|
||||||
|
|
||||||
2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ROL
|
2. Команда ROL
|
||||||
Rol ax, 1
|
Rol ax, 1
|
||||||
Rol bx, cl
|
Rol bx, cl
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 横<><E6A8AA><EFBFBD><EFBFBD><EFBFBD><E1AAAE> ᤢ<><E1A4A2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
Команда циклического сдвига влево.
|
||||||
<EFBFBD> <20><><EFBFBD>ன <20><><EFBFBD>࠭<EFBFBD> - CL, <20><> <20><> ࠧ<>冷<EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Если второй операнд - CL, то число разрядов, на которые
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<><E1A4A2>, <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> CL.
|
осуществляется сдвиг, определяется содержимым регистра CL.
|
||||||
|
|
||||||
3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LEA.
|
3. Команда LEA.
|
||||||
<EFBFBD><EFBFBD> <20>⮩ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ண<EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD> <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD>
|
По этой команде адрес второго операнда передается в регистр
|
||||||
<EFBFBD><EFBFBD>ࢮ<EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD>.
|
первого операнда.
|
||||||
lea ax, a;
|
lea ax, a;
|
||||||
|
|
||||||
4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NOP
|
4. Команда NOP
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>樨
|
Команда нет операции
|
||||||
|
|
||||||
5. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AND
|
5. Команда AND
|
||||||
and ax,bx
|
and ax,bx
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1AAAE> 㬭<><E3ACAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
Команда логического умножения
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD> <20><><EFBFBD> 㬭<><E3ACAD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EEADAA><EFBFBD>) <20><> <20><><EFBFBD>ன
|
Первый операнд лог умножается (конъюнкция) на второй
|
||||||
१<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
результат в первый */
|
||||||
/*
|
/*
|
||||||
********************************************************
|
********************************************************
|
||||||
4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><> <20><>ப<EFBFBD><E0AEAA>묨 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
4 Напишите программу со строковыми командами
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MOVS.
|
Команда MOVS.
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뫪<EFBFBD> <20><>ப<EFBFBD>.
|
Команда пересылки строки.
|
||||||
<EFBFBD><EFBFBD><EFBFBD>ࠢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뫪<EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> 䫠<><E4ABA0> DF - 䫠<><E4ABA0> <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>.
|
Направление пересылки определяется значением флага DF - флага направления.
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>権 <20> <20><><EFBFBD>⠬<EFBFBD> - MOVSB
|
Для операций с байтами - MOVSB
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>権 <20><> <><E1ABAE><EFBFBD><EFBFBD> - MOVSW
|
Для операций со словами - MOVSW
|
||||||
|
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 䫠<><E4ABA0>.
|
Не имеет операндов. Не воздействует на флаги.
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뫠<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> ॣ<><E0A5A3><EFBFBD> SI - sourse
|
Пересылает из области памяти, адресуемой регистром SI - sourse
|
||||||
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> ॣ<><E0A5A3><EFBFBD> DI - destination.
|
в область памяти, адресуемую регистром DI - destination.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ਢ<EFBFBD><E0A8A2><EFBFBD><EFBFBD> <20>ਬ<EFBFBD><E0A8AC> <20>ணࠬ<E0AEA3><E0A0AC>
|
// Ниже приведен пример программы
|
||||||
int A[10]={2,1,2,3,4,5,6,7,8,9};
|
int A[10]={2,1,2,3,4,5,6,7,8,9};
|
||||||
int B[10]={1,1,0,0,0,0,0,0,0,0};
|
int B[10]={1,1,0,0,0,0,0,0,0,0};
|
||||||
|
|
||||||
asm {
|
asm {
|
||||||
cld //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD> 䫠<> <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>
|
cld //сбрасываем флаг направления
|
||||||
lea si,A
|
lea si,A
|
||||||
lea di,B
|
lea di,B
|
||||||
// mov dx,di
|
// mov dx,di
|
||||||
};
|
};
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ᯥ<EFBFBD><E1AFA5>⠩<EFBFBD><E2A0A9> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>
|
// Задание: Распечатайте значения индексных регистров
|
||||||
// <EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD>
|
// до передачи
|
||||||
// printf ("\n <EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD> is, di = %x %x ", _SI, _DI);
|
// printf ("\n значения индекс регистров is, di = %x %x ", _SI, _DI);
|
||||||
asm mov cx,1 ; // ????
|
asm mov cx,1 ; // ????
|
||||||
asm movsb ; // ?????
|
asm movsb ; // ?????
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><>ᯥ<EFBFBD><E1AFA5>⠩<EFBFBD><E2A0A9> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>
|
// Задание: Распечатайте значения индексных регистров
|
||||||
// <EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD> <20><><EFBFBD>諠? <20><><EFBFBD><EFBFBD>쪮 <> <20><>।<EFBFBD><E0A5A4><EFBFBD>?
|
// после передачи Передача прошла? Сколько слов передано?
|
||||||
|
|
||||||
printf ("\n <EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD> is, di = %x %x ", _SI, _DI);
|
printf ("\n значения индекс регистров is, di = %x %x ", _SI, _DI);
|
||||||
printf ("\n <EFBFBD>뢮<EFBFBD> <20><><EFBFBD>ᨢ<EFBFBD> <20> <20><> <20><>ப<EFBFBD><E0AEAA><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD>");
|
printf ("\n Вывод массива В после строковой передачи");
|
||||||
for (int i=0; i<10; i++)
|
for (int i=0; i<10; i++)
|
||||||
{
|
{
|
||||||
printf (" \n %d ", B[i]);
|
printf (" \n %d ", B[i]);
|
||||||
@ -93,8 +93,8 @@ printf ("\n
|
|||||||
getch();
|
getch();
|
||||||
|
|
||||||
//********************************************************
|
//********************************************************
|
||||||
// 5 <EFBFBD>ணࠬ<EFBFBD><EFBFBD> <20><><EFBFBD>᪠ <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᨬ<><E1A8AC><EFBFBD><EFBFBD>
|
// 5 Программа поиска в видеопамяти символа
|
||||||
printf (" \n <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᨬ<><E1A8AC><EFBFBD><EFBFBD> ");
|
printf (" \n Поиск символа ");
|
||||||
/* asm
|
/* asm
|
||||||
asm
|
asm
|
||||||
e1: asm {
|
e1: asm {
|
||||||
@ -103,87 +103,87 @@ e1: asm {
|
|||||||
mov
|
mov
|
||||||
cmp es:[di],al
|
cmp es:[di],al
|
||||||
jnz e2 };
|
jnz e2 };
|
||||||
printf (" \n <EFBFBD><EFBFBD>諨 ᨬ<><E1A8AC><EFBFBD> ");
|
printf (" \n Нашли символ ");
|
||||||
e2: asm add di, 2
|
e2: asm add di, 2
|
||||||
asm loop e1
|
asm loop e1
|
||||||
printf (" \n <EFBFBD><EFBFBD> <20><>諨 ᨬ<><E1A8AC><EFBFBD> ");
|
printf (" \n Не нашли символ ");
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
*/
|
*/
|
||||||
// return (0);
|
// return (0);
|
||||||
//***************** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ******************
|
//***************** Задания ******************
|
||||||
//
|
//
|
||||||
// 1 <EFBFBD>ந<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC><EFBFBD><EFBFBD> 㪠<><E3AAA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 1 Проиллюстрируйте программами указанные выше команды
|
||||||
// 2 <EFBFBD><EFBFBD><EFBFBD>ᬮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 2 Рассмотрите двоичный код этих команд
|
||||||
// 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD>, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD> TD. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮<EFBFBD><E2A2AE><EFBFBD><EFBFBD>
|
// 3 Заполните таблицу, используя TD. Должны присутствовать
|
||||||
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ଠ<EFBFBD><E0ACA0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
// все поля формата команды.
|
||||||
/*
|
/*
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>䨪<EFBFBD> <20><><EFBFBD> <20><><EFBFBD>⡠<EFBFBD><E2A1A0> <20><><EFBFBD>饭<EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD>࠭<EFBFBD>
|
Мнемоника Префикс КОП Постбайт Смещение Непоср.операнд
|
||||||
<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <EFBFBD> <EFBFBD> <EFBFBD>
|
│ │ │ │ │адресации │ │ │
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ
|
├────┼─────────────┼──────┼──────┼────────────┼─────────┼─────────────┤
|
||||||
<EFBFBD> 1 <EFBFBD>and ax,bx <EFBFBD> - <EFBFBD> <EFBFBD> <EFBFBD> - <EFBFBD> - <EFBFBD>
|
│ 1 │and ax,bx │ - │ │ │ - │ - │
|
||||||
<EFBFBD> 2 <EFBFBD>rep and bx,ax<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
|
│ 2 │rep and bx,ax│ │ │ │ │ │
|
||||||
<EFBFBD> 3 <EFBFBD>add ax,16 <EFBFBD> - <EFBFBD> <EFBFBD> <EFBFBD> - <EFBFBD> <EFBFBD>
|
│ 3 │add ax,16 │ - │ │ │ - │ │
|
||||||
4 add al,[bx+si]
|
4 add al,[bx+si]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><> <20><>ப<EFBFBD><E0AEAA>묨 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 10 <20><>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD>
|
// 4. Напишите программу со строковыми командами при 10 передачах
|
||||||
// 5. <EFBFBD><EFBFBD><EFBFBD>ࠡ<EFBFBD>⠩<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D>奬<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
// 5. Разработайте блок-схему и напишите программу
|
||||||
// <EFBFBD><EFBFBD><EFBFBD>᪠ ᨬ<><E1A8AC><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD>
|
// поиска символа в видеопамяти на первых 4-х видеостраницах
|
||||||
// 6. <EFBFBD>⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>宯<EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 00FF.
|
// 6. Ответьте на вопросы: Какая мнемоника двухоперандной команды 00FF.
|
||||||
// <EFBFBD><EFBFBD><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LDS BX,PtriA
|
// Как выполняется команда LDS BX,PtriA
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> i8086
|
_Структура процессора i8086
|
||||||
|
|
||||||
<EFBFBD>ணࠬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㯭<EFBFBD> <20><><EFBFBD><EFBFBD>ୠ<EFBFBD><E0ADA0><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>-
|
Программисту на уровне команд доступны четырнадцать регист-
|
||||||
. <20><> 㤮<><E3A4AE><EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>㯯<EFBFBD>: 1)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2)<EFBFBD><EFBFBD>-
|
ров. Их удобно разбить на четыре группы: 1)Регистры данных, 2)ад-
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3)ᥣ<><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4)㪠<><E3AAA0>⥫<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD> 䫠<><E4ABA0><EFBFBD><EFBFBD>(<28>ਧ<EFBFBD><E0A8A7>-
|
ресные, 3)сегментные 4)указатель команд и регистр флажков(призна-
|
||||||
<EFBFBD><EFBFBD><EFBFBD>).
|
ков).
|
||||||
1) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>뢠<EFBFBD><EBA2A0> ॣ<><E0A5A3><EFBFBD>ࠬ<EFBFBD> <20><>饣<EFBFBD>
|
1) Регистры данных (в некоторых книгах их называют регистрами общего
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD>). <20><><EFBFBD>࠭<EFBFBD><E0A0AD> <20> <20><><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <><E1ABAE> ⠪ <20>
|
назначения). Операнды в этих регистрах могут быть как слова так и
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20> <20><><EFBFBD>࠭<EFBFBD> - <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 㪠<><E3AAA0><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
байты. Если операнд - байт, может быть указана любая половина
|
||||||
ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <20>⤥<EFBFBD><E2A4A5><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>
|
регистра. Есть ряд команд, в которых функции отдельных регистров
|
||||||
ᯥ樠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>.⠡<>.)
|
специализированы (см.табл.)
|
||||||
2) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
2) Указатели и индексные регистры (адресные регистры, используются для
|
||||||
<EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16-ࠧ<>來<EFBFBD><EFA4AD> <20><><EFBFBD><EFBFBD>ᮢ). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
хранения 16-разрядных адресов). Адресные регистры во многих командах
|
||||||
⠪<EFBFBD><EFBFBD> ᯥ樠<E1AFA5><E6A8A0><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD> (<28><>.⠡<>.)
|
также специализированы (см.табл.)
|
||||||
3) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> (㪠<>뢠<EFBFBD><EBA2A0> <20><>砫<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᥣ<><E1A5A3><EFBFBD>⮢ - <20><><EFBFBD><EFBFBD>⪮<EFBFBD>
|
3) Сегментные регистры (указывают начала четырех сегментов - участков
|
||||||
<EFBFBD><EFBFBD> 64 <EFBFBD> <20><><EFBFBD><EFBFBD> <20> 1<> <20><><EFBFBD>: ᥣ<><E1A5A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CS, ᥣ<><E1A5A3><EFBFBD><EFBFBD> <20>⥪<EFBFBD> SS <20> <20><><EFBFBD>
|
по 64 К байт в 1М ОЗУ: сегмент команд CS, сегмент стека SS и два
|
||||||
ᥣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - DS <EFBFBD> ES extra)
|
сегмента данных - DS и ES extra)
|
||||||
4) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD> 䫠<><E4ABA0><EFBFBD><EFBFBD>
|
4) Указатель команд и регистр флажков
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD>樠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 ॣ<><E0A5A3><EFBFBD> 8086
|
Специальные функции регистров 8086
|
||||||
|
|
||||||
AX <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>-<2D>뢮<EFBFBD> <>
|
AX Аккумулятор Умножение, деление и ввод-вывод слов
|
||||||
AL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>) <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>-<2D>뢮<EFBFBD> <20><><EFBFBD>⮢
|
AL Аккумулятор(мл) Умножение, деление и ввод-вывод байтов
|
||||||
AH <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>) <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢
|
AH Аккумулятор(ст) Умножение и деление байтов
|
||||||
BX <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD>, <20>८<EFBFBD>ࠧ<EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (?)
|
BX База Базовый регистр, преобразование (?)
|
||||||
CX <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 <09><><EFBFBD><EFBFBD><EFBFBD>樨 <20> 楯<>窠<EFBFBD><E7AAA0>, 横<><E6A8AA>
|
CX Счетчик Операции с цепочками, циклы
|
||||||
CL <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 (<28><>) <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ᤢ<><E1A4A2><EFBFBD> <20> <20><><EFBFBD><EFBFBD>樨
|
CL Счетчик (мл) Динамические сдвиги и ротации
|
||||||
DX <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <>,
|
DX Данные Умножение и деление слов,
|
||||||
<EFBFBD><EFBFBD>ᢥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D>뢮<EFBFBD>
|
косвенный ввод-вывод
|
||||||
SP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20>⥪<EFBFBD> <09>⥪<EFBFBD><E2A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>樨
|
SP Указатель стека Стековые операции
|
||||||
BP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD>
|
BP Указатель базы Базовый регистр
|
||||||
SI <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>筨<EFBFBD><E7ADA8> <09><><EFBFBD><EFBFBD><EFBFBD>樨 <20> 楯<>窠<EFBFBD><E7AAA0>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD>
|
SI Индекс источника Операции с цепочками, индексный регистр
|
||||||
DI <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD>樨 <20> 楯<>窠<EFBFBD><E7AAA0>,
|
DI Индекс получателя Операции с цепочками,
|
||||||
|
|
||||||
<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䫠<><E4ABA0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
_Регистр флагов процессора
|
||||||
|
|
||||||
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ
|
├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
|
||||||
OF DF IF TF SF ZF AF PF CF
|
OF DF IF TF SF ZF AF PF CF
|
||||||
|
|
||||||
CF ( Carry Flag ) - 䫠<EFBFBD> <20><>७<EFBFBD><E0A5AD><EFBFBD>;
|
CF ( Carry Flag ) - флаг переноса;
|
||||||
PF ( Parity Flag ) - 䫠<EFBFBD> <20><>⭮<EFBFBD><E2ADAE><EFBFBD>;
|
PF ( Parity Flag ) - флаг четности;
|
||||||
AF ( Auxiliary Carry Flag ) - 䫠<EFBFBD> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD>⥫쭮<E2A5AB><ECADAE> <20><>७<EFBFBD><E0A5AD><EFBFBD>;
|
AF ( Auxiliary Carry Flag ) - флаг вспомогательного переноса;
|
||||||
ZF ( Zero Flag ) - 䫠<EFBFBD> <20><><EFBFBD><EFBFBD>;
|
ZF ( Zero Flag ) - флаг нуля;
|
||||||
SF ( Sign Flag ) - 䫠<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>;
|
SF ( Sign Flag ) - флаг знака;
|
||||||
TF ( Trap Flag ) - 䫠<EFBFBD> <20><><EFBFBD><EFBFBD>誨;
|
TF ( Trap Flag ) - флаг ловушки;
|
||||||
IF ( Interrupt-Enable Flag ) - 䫠<EFBFBD> ࠧ<><E0A0A7>襭<EFBFBD><E8A5AD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>;
|
IF ( Interrupt-Enable Flag ) - флаг разрешения прерывания;
|
||||||
DF ( Direction Flag ) - 䫠<EFBFBD> <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>;
|
DF ( Direction Flag ) - флаг направления;
|
||||||
OF ( Overflow Flag ) - 䫠<EFBFBD> <20><>९<EFBFBD><E0A5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
OF ( Overflow Flag ) - флаг переполнения.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -191,74 +191,74 @@ DI
|
|||||||
|
|
||||||
- 5 -
|
- 5 -
|
||||||
|
|
||||||
<EFBFBD>_<EFBFBD>࣠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
_Организация памяти
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>᭮<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD>⢮) <20>।<EFBFBD>⠢<EFBFBD><E2A0A2><EFBFBD><EFBFBD> ᮡ<><E1AEA1>
|
Адресуемая память (адресное пространство) представляет собой
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 1<> <20><><EFBFBD><EFBFBD>(<28> ॠ<>쭮<EFBFBD> ०<><E0A5A6><EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>ய<EFBFBD><E0AEAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
область из 1М байт(в реальном режиме работы для микропроцессоров
|
||||||
i80286 <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). <20><><EFBFBD> ᬥ<><E1ACA5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ࠧ<EFBFBD><E0A0A7><EFBFBD> <><E1ABAE>. <20><><EFBFBD><EFBFBD>ᮬ <><E1ABAE>
|
i80286 и старше). Два смежных байта образуют слово. Адресом слова
|
||||||
<EFBFBD><EFBFBD><EFBFBD>⠥<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>襣<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD> 8086 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ଠ<EFBFBD><E0ACA0><EFBFBD> <20><>
|
считается адрес младшего байта. МП 8086 считывает информацию из
|
||||||
<EFBFBD><EFBFBD><EFBFBD> 16 <EFBFBD><EFBFBD><EFBFBD>.<><E1ABAE><EFBFBD><EFBFBD>, <20><>稭<EFBFBD><E7A8AD>騬<EFBFBD><E9A8AC><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᮢ, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
ОЗУ 16 бит.словами, начинающимися с четных адресов, хотя команда
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <><E1ABAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
или слово данных могут быть расположены в ОЗУ в любом адресе.
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 20 <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>-
|
Физический адрес памяти имеет длину 20 бит, однако все обра-
|
||||||
<EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>稭<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 16 <20><><EFBFBD>. <20><><EFBFBD> <20><>ନ-
|
батываемые в регистрах МП величины имеют длину 16 бит. Для форми-
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨧<><E4A8A7><EFBFBD>᪨<EFBFBD> <20><><EFBFBD><EFBFBD>ᮢ <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>堭<EFBFBD><E5A0AD><EFBFBD> ᥣ<><E1A5A3><EFBFBD><EFBFBD><EFBFBD>樨 <20><><EFBFBD><EFBFBD>-
|
рования физических адресов используется механизм сегментации памя-
|
||||||
<EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD>⢮ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <20> <20><><EFBFBD><EFBFBD>㯭<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>१ 4 "<22><><EFBFBD><EFBFBD>"
|
ти. Пространство памяти 1 М доступно процессору через 4 "окна"
|
||||||
(ᥣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<><E0A0A7> 64 <20> <20><><EFBFBD><EFBFBD>. <20><>砫<EFBFBD><E7A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᥣ-
|
(сегмента) каждый размером 64 К байт. Начальный адрес каждого сег-
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD> <20> <20><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᥣ<><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
мента содержится в оюном из четырех сегментных регистров. Команды
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>⠬ <20> <><E1ABAE><EFBFBD> <20> <20>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD> ᥣ<><E1A5A3><EFBFBD>⮢, <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD> <20>⭮-
|
обращаются к байтам и словам в пределах сегментов, используя отно-
|
||||||
<EFBFBD><EFBFBD>⥫<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᥣ<EFBFBD><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD>.
|
сительный (внутрисегментный) адрес.
|
||||||
|
|
||||||
<EFBFBD>_<EFBFBD><EFBFBD>騩 <20><>ଠ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1ABA5><EFBFBD>騩:
|
_Общий формат команды следующий:
|
||||||
|
|
||||||
[<EFBFBD><EFBFBD><EFBFBD>䨪<EFBFBD>] <20><><EFBFBD> [<5B><><EFBFBD>⡠<EFBFBD><E2A1A0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨] [ᬥ饭<E1ACA5><E9A5AD>] [<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD>࠭<EFBFBD>]
|
[Префикс] КОП [постбайт адресации] [смещение] [непоср.операнд]
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1AAAE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮<EFBFBD><E2A2AE><EFBFBD><EFBFBD>.
|
Элементы в квадратных скобках могут отсутствовать.
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⮢ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
Назначение элементов команды:
|
||||||
|
|
||||||
<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>䨪<EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD><EFBFBD>.
|
_Префикс .. Длина 1 байт.
|
||||||
<EFBFBD>)<29><><EFBFBD>䨪<EFBFBD> <20><>७<EFBFBD><E0A5AD><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD> ᥣ<><E1A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>७<EFBFBD><E0A5AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᥣ<><E1A5A3><EFBFBD><EFBFBD>
|
а)Префикс переназначения сегмента позволяет переназначить сегмент
|
||||||
<EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20>ந<EFBFBD>室<EFBFBD><E5AEA4> <20><><EFBFBD><EFBFBD>饭<EFBFBD><E9A5AD>.<2E> <20><><EFBFBD>䨪<EFBFBD> <20><>७<EFBFBD><E0A5AD><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD>
|
ОЗУ, к которому происходит обращение.Если префикс переназначения
|
||||||
ᥣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ᥣ<><E1A5A3><EFBFBD><EFBFBD> <20>롨ࠥ<EBA1A8><E0A0A5><EFBFBD> <20><> 㬮<>砭<EFBFBD><E7A0AD>.
|
сегмента отсутствует, сегмент выбирается по умолчанию.
|
||||||
<EFBFBD>)<29><><EFBFBD>䨪<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><E0A5AD> <20><><EFBFBD><EFBFBD>⢨<EFBFBD> <20><><EFBFBD> <20><>ப<EFBFBD><E0AEAA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
б)Префикс повторения действия для строковых команд
|
||||||
<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>. - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>樨. <20><><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD><EFBFBD>. 0-<2D> <20><><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><> <20><> <20><><EFBFBD><EFBFBD>)
|
_КОП . - код операции. Длина 1 байт. 0-й бит КОП во многих (но не во всех)
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0>, <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <><E1ABAE><EFBFBD> ( =1) <EFBFBD><EFBFBD><EFBFBD> <20>
|
командах показывает, производится ли операция со словом ( =1) или с
|
||||||
<EFBFBD><EFBFBD><EFBFBD>⮬ ( =0). 1-<EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD>堤<EFBFBD><E5A0A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<>뢠<EFBFBD><EBA2A0>, <20><><EFBFBD><EFBFBD><EFBFBD>
|
байтом ( =0). 1-й бит КОП в двухадресных командах указывает, какой
|
||||||
<EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> <><EFA2AB><EFBFBD><EFBFBD><EFBFBD> <20>ਥ<EFBFBD><E0A8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
из операндов является приемником.
|
||||||
<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>⡠<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨<EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD><EFBFBD>. <20><><EFBFBD>⡠<EFBFBD><E2A1A0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0>, <20><><EFBFBD>
|
_Постбайт адресации .. Длина 1 байт. Постбайт адресации показывает, где
|
||||||
<EFBFBD><EFBFBD>室<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⥬<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <20><> 8086 <EFBFBD>
|
находятся операнды. Структура системы адресации МП 8086 в
|
||||||
<EFBFBD><EFBFBD><EFBFBD>宯<EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD><EFBFBD>筠. <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD><EFBFBD><EFBFBD>
|
двухоперандной команде несимметрична. Один из операндов (первый) может
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> (ॣ<><E0A5A3><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD> <20> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD>쭮<EFBFBD>
|
быть расположен в регистре (регистровая адресация) или в произвольной
|
||||||
<EFBFBD>祩<EFBFBD><EFBFBD> <20><><EFBFBD> (<28><><EFBFBD> ᯮᮡ<E1AFAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><E2A2A5><EFBFBD><EFBFBD>).
|
ячейке ОЗУ (все способы адресации кроме непосредственной).
|
||||||
<EFBFBD><EFBFBD><EFBFBD>ன <20><><EFBFBD>࠭<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>室<EFBFBD><E5AEA4><EFBFBD><EFBFBD><EFBFBD> <20> ⥫<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><E2A2A5><EFBFBD><EFBFBD>
|
Второй операнд может находиться в теле команды (непосредственная
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> (ॣ<><E0A5A3><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
адресация) или в регистре (регистровая адресация). Каждый из
|
||||||
<EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>筨<EFBFBD><E7ADA8><EFBFBD> ⠪ <20> <20>ਥ<EFBFBD><E0A8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20>᪫<EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD>
|
операндов может быть как источником так и приемником (за исключением
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨: <20><><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><E2A2A5><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
непосредственной адресации: непосредственный операнд может быть
|
||||||
⮫쪮 <20><><EFBFBD><EFBFBD>筨<EFBFBD><E7ADA8><EFBFBD>). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⡠<EFBFBD><E2A1A0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <><E1ABA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
только источником). Структура постбайта адресации следующая:
|
||||||
|
|
||||||
7 6 5 4 3 2 1 0
|
7 6 5 4 3 2 1 0
|
||||||
! mod ! reg ! r/m !
|
! mod ! reg ! r/m !
|
||||||
!-----!-----!-----!-----!-----!-----!-----!----!
|
!-----!-----!-----!-----!-----!-----!-----!----!
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> mod <EFBFBD> r/m <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࢮ<EFBFBD><E0A2AE> <20><><EFBFBD>࠭<EFBFBD><E0A0AD> (<28><><EFBFBD>
|
Поля mod и r/m задают место расположения первого операнда (или
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᭮<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). <20><><EFBFBD><EFBFBD> reg <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
едиственного в одноадресной команде). Поле reg задает положение
|
||||||
<EFBFBD><EFBFBD><EFBFBD>ண<EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD> <20> <20><><EFBFBD>堤<EFBFBD><E5A0A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
второго операнда в двухадресных командах, или используется для
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
расширения КОП в одноадресных командах.
|
||||||
<EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> mod:
|
Значения поля mod:
|
||||||
11 - <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
11 - операнд в регистре
|
||||||
(<EFBFBD><EFBFBD><EFBFBD> <20><>⠫<EFBFBD><E2A0AB><EFBFBD><EFBFBD> mod <20><><EFBFBD>࠭<EFBFBD> <20> <20><><EFBFBD>, <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>, <20><>
|
(при остальных mod операнд в ОЗУ, а регистры, на
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<>뢠<EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD> mod <EFBFBD> r/m, ᮤ<EFBFBD>ঠ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
которые указывают поля mod и r/m, содержат компоненты
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD>)
|
адреса операнда)
|
||||||
10 - ᬥ饭<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
|
10 - смещение два байта (без знака)
|
||||||
|
|
||||||
- 6 -
|
- 6 -
|
||||||
|
|
||||||
01 - ᬥ饭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
01 - смещение один байт (со знаком)
|
||||||
00 - ᬥ饭<EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
00 - смещение в команде отстутствует
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> reg <20> ⠪<><E2A0AA> <20><><EFBFBD><EFBFBD> r/m <EFBFBD><EFBFBD><EFBFBD> mod=0 (<EFBFBD>.<2E>. <20><><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><E0AEA2>
|
Значения поля reg а также поля r/m при mod=0 (т.е. при регистровой
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <><E1ABA5><EFBFBD>騥:
|
адресации следующие:
|
||||||
|
|
||||||
reg <EFBFBD><EFBFBD><EFBFBD> r/m <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
reg или r/m Байт Слово
|
||||||
000 AL AX
|
000 AL AX
|
||||||
001 CL CX
|
001 CL CX
|
||||||
010 DL DX
|
010 DL DX
|
||||||
@ -268,22 +268,22 @@ i80286
|
|||||||
110 DH SI
|
110 DH SI
|
||||||
111 BH DI
|
111 BH DI
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> mod <EFBFBD> r/m <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯮᮡ
|
При адресации в память значения mod и r/m определяют способ
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1ABA5><EFBFBD>騬 <20><>ࠧ<EFBFBD><E0A0A7>:
|
вычисления адреса следующим образом:
|
||||||
|
|
||||||
r/m mod=00 mod=01 <EFBFBD><EFBFBD><EFBFBD> 10
|
r/m mod=00 mod=01 или 10
|
||||||
000 BX+SI BX+SI+ᬥ饭<EFBFBD><EFBFBD>
|
000 BX+SI BX+SI+смещение
|
||||||
001 BX+DI BX+DI+ᬥ饭<EFBFBD><EFBFBD>
|
001 BX+DI BX+DI+смещение
|
||||||
010 BP+SI BP+DI+ᬥ饭<EFBFBD><EFBFBD>
|
010 BP+SI BP+DI+смещение
|
||||||
011 BP+DI BP+DI+ᬥ饭<EFBFBD><EFBFBD>
|
011 BP+DI BP+DI+смещение
|
||||||
100 SI SI+ᬥ饭<EFBFBD><EFBFBD>
|
100 SI SI+смещение
|
||||||
101 DI DI+ᬥ饭<EFBFBD><EFBFBD>
|
101 DI DI+смещение
|
||||||
110 direct BP+ᬥ饭<EFBFBD><EFBFBD>
|
110 direct BP+смещение
|
||||||
111 BX BX+ᬥ饭<EFBFBD><EFBFBD>
|
111 BX BX+смещение
|
||||||
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD>饭<EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> mod-01) <20><><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD> mod=10).
|
Смещение. Длина 1 байт (при mod-01) или 2 байта(при mod=10).
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> 1 <20><><EFBFBD> 2 <20><><EFBFBD><EFBFBD><EFBFBD>
|
Непосредственный операнд. Длина 1 или 2 байта
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࠧ<EFBFBD><E0A0A7>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20>।<EFBFBD><E0A5A4><EFBFBD><EFBFBD> <20><> 1 <EFBFBD><EFBFBD> 7 <EFBFBD><EFBFBD><EFBFBD>⮢.
|
Таким образом, длина команды лежит в пределах от 1 до 7 байтов.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|||||||
62
Labv3.cpp
62
Labv3.cpp
@ -1,36 +1,36 @@
|
|||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LAB3
|
// Работа LAB3
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
// Шаблон программы
|
||||||
// <EFBFBD><EFBFBD><EFBFBD>ᨢ<EFBFBD> <20> ᯮᮡ<E1AFAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨
|
// Массивы и способы адресации
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD>४⨢<EFBFBD> <20>९<EFBFBD><E0A5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Директивы Препроцессора
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> 䠩<><E4A0A9><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᠭ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>⨯<EFBFBD> <20>-権
|
// Включение файлов в которых описаны прототипы ф-ций
|
||||||
// <EFBFBD> 楫<><E6A5AB> ᮮ<>饭<EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ⨯<><E2A8AF> <20>-権 <20> <20><> <20><><EFBFBD>㬥<EFBFBD><E3ACA5><EFBFBD><EFBFBD>
|
// с целью сообщения компилятору о типах ф-ций и их аргументах
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
#include <bios.h>
|
#include <bios.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
// #pragma inline // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0AEA5><EFBFBD><EFBFBD><EFBFBD> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// #pragma inline // Подключение встроенного Ассемблера
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Объявление переменных
|
||||||
int iB=0x1234;
|
int iB=0x1234;
|
||||||
int A[90]={0,1,2,3,4,5,6,7,8,9};
|
int A[90]={0,1,2,3,4,5,6,7,8,9};
|
||||||
|
|
||||||
// <EFBFBD>᭮<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> - <20>㭪<EFBFBD><E3ADAA><EFBFBD>
|
// Основная программа - функция
|
||||||
// void - <EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD>
|
// void - она не возвращ значений
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Объявление переменных
|
||||||
int iA=0x5678;
|
int iA=0x5678;
|
||||||
clrscr();
|
clrscr();
|
||||||
printf ("\n <EFBFBD>ணࠬ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᨢ<EFBFBD> \n");
|
printf ("\n Программа заполнения массива \n");
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD>ᨢ <20><> <20><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
// Заполняем массив на уровне команд Си
|
||||||
for (int i=0; i<10; i++)
|
for (int i=0; i<10; i++)
|
||||||
{
|
{
|
||||||
// ??????? <EFBFBD><EFBFBD>⠢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// ??????? Вставте команды
|
||||||
printf (" \n %d ", A[i]);
|
printf (" \n %d ", A[i]);
|
||||||
}
|
}
|
||||||
getch();
|
getch();
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD>ᨢ <20><> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
// Заполняем массив из ассемблера
|
||||||
asm mov si,0
|
asm mov si,0
|
||||||
e2:
|
e2:
|
||||||
asm {
|
asm {
|
||||||
@ -38,32 +38,32 @@ asm {
|
|||||||
mov cx,10
|
mov cx,10
|
||||||
mov ax,0
|
mov ax,0
|
||||||
};
|
};
|
||||||
e1: asm mov [bx],ax // ???? <EFBFBD>롥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯮᮡ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨
|
e1: asm mov [bx],ax // ???? Выберите способ адресации
|
||||||
asm add bx,2
|
asm add bx,2
|
||||||
asm loop e1
|
asm loop e1
|
||||||
// ??? <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᨢ
|
// ??? Выведите одном массив
|
||||||
asm add si,10 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 蠣 <20><><EFBFBD>ᨢ<EFBFBD>
|
asm add si,10 // Задается шаг массива
|
||||||
asm mov ax,100
|
asm mov ax,100
|
||||||
asm cmp ax,si
|
asm cmp ax,si
|
||||||
asm ja e2
|
asm ja e2
|
||||||
// ??? <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>㬥<EFBFBD><E3ACA5><EFBFBD><EFBFBD> <20><><EFBFBD>ᨢ
|
// ??? Выведите двумерный массив
|
||||||
for (i=0; i<20; i=i+4)
|
for (i=0; i<20; i=i+4)
|
||||||
{ printf (" \n ");
|
{ printf (" \n ");
|
||||||
for (int j=0; j<4; j++)
|
for (int j=0; j<4; j++)
|
||||||
{ printf (" "); // ???? <EFBFBD><EFBFBD>⠢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
{ printf (" "); // ???? Вставте команду
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getch();
|
getch();
|
||||||
}
|
}
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задания
|
||||||
// 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>୮<EFBFBD><E0ADAE> <20><><EFBFBD>ᨢ<EFBFBD> <20><> <20><> <20> <20><><EFBFBD>
|
// 1. Напишите две программы заполнения одномерного массива на Си и Асс
|
||||||
// <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>࠭ <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⮢ <20><><EFBFBD>ᨢ<EFBFBD>
|
// выведите на экран значения элементов массива
|
||||||
// 2. <EFBFBD><EFBFBD><EFBFBD>⠩<EFBFBD><EFBFBD> <20><><EFBFBD>ᨢ <20><>㬥<EFBFBD><E3ACA5><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ப<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>,
|
// 2. Считайте массив двумерным. Заполните его четные строки любым числом,
|
||||||
// <EFBFBD>ᯮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<><E0A0A7><EFBFBD> ᯮᮡ<E1AFAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨
|
// используя разные способы адресации
|
||||||
// - <EFBFBD><EFBFBD>ᢥ<EFBFBD><EFBFBD><EFBFBD>-ॣ<><E0A5A3><EFBFBD><EFBFBD><E0AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// - косвенно-регистровая адресация
|
||||||
// - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD>᭠<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// - базово-индексная адресация
|
||||||
// <EFBFBD>ࠢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> ᯮᮡ<E1AFAE><E1AEA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨.
|
// Сравните количество команд при двух способах адресации.
|
||||||
// 3. <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᨢ<EFBFBD> <20> ᥣ<><E1A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>ᯮ<EFBFBD>짮<EFBFBD>. TD
|
// 3. Определите место массива в сегменте данных с использов. TD
|
||||||
// 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ࠧ<><E0A0A7><EFBFBD> १<><E0A5A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ࠧ<><E0A0A7><EFBFBD>
|
// 4. Напишите программу, которая дает разный результат в разных
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
// моделях памяти.
|
||||||
62
Labv4.cpp
62
Labv4.cpp
@ -1,5 +1,5 @@
|
|||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Lab 4
|
// Лабораторная Работа Lab 4
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD>७<EFBFBD><E0A5AD> <20>६<EFBFBD><E0A5AC><EFBFBD>. <20><><EFBFBD><EFBFBD>
|
// ТАЙМЕР. Измерение времени. Мышь
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ void main()
|
|||||||
long int cl2,cl1,c1,c2;
|
long int cl2,cl1,c1,c2;
|
||||||
unsigned long int t1,t2,t3;
|
unsigned long int t1,t2,t3;
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>⠭<EFBFBD><E2A0AD> <20><><EFBFBD><EFBFBD>稪<EFBFBD>
|
// Изменение константы счетчика
|
||||||
/* asm{
|
/* asm{
|
||||||
mov ax,00110110B // 00 11 011 0
|
mov ax,00110110B // 00 11 011 0
|
||||||
out 43h,ax
|
out 43h,ax
|
||||||
@ -23,9 +23,9 @@ void main()
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢<EFBFBD><E2AEA2> <20>ணࠬ<E0AEA3><E0A0AC> 1
|
// Измерение времени выполнения тестовой программы 1
|
||||||
// <EFBFBD> ⨪<><E2A8AA> (<28> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD><EFBFBD> <20><> 0-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠩<><E2A0A9><EFBFBD><EFBFBD>)
|
// в тиках (в прерываниях от 0-го канала таймера)
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA> <20>祩<EFBFBD><E7A5A9> 46<EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>訩 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Счетчик тиков ячейка 46С - младший байт первый
|
||||||
asm{
|
asm{
|
||||||
mov ax,0x46
|
mov ax,0x46
|
||||||
mov es,ax
|
mov es,ax
|
||||||
@ -33,11 +33,11 @@ void main()
|
|||||||
mov ax,[es:bx]
|
mov ax,[es:bx]
|
||||||
mov cx,[es:(bx+2)]
|
mov cx,[es:(bx+2)]
|
||||||
}
|
}
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>砫쭮<E7A0AB> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD>襥 <20> <20><><EFBFBD><EFBFBD>襥 ???
|
// Запомните начальное значение младшее и старшее ???
|
||||||
// cl2= ; cl1= ;
|
// cl2= ; cl1= ;
|
||||||
c1=cl2+cl1*0x10000;
|
c1=cl2+cl1*0x10000;
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD>⮢<EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> 1
|
//Тестовая программа 1
|
||||||
asm mov cx,1000
|
asm mov cx,1000
|
||||||
met1: asm {
|
met1: asm {
|
||||||
push cx
|
push cx
|
||||||
@ -57,27 +57,27 @@ void main()
|
|||||||
mov ax,[es:bx]
|
mov ax,[es:bx]
|
||||||
mov cx,[es:(bx+2)]
|
mov cx,[es:(bx+2)]
|
||||||
}
|
}
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>筮<EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> ???
|
// Запомните конечное значение ???
|
||||||
// cl2=_AX; cl1= ;
|
// cl2=_AX; cl1= ;
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 楫<><E6A5AB> -
|
// Длинное целое -
|
||||||
c2=cl2+cl1*0x10000;
|
c2=cl2+cl1*0x10000;
|
||||||
|
|
||||||
// clrscr();
|
// clrscr();
|
||||||
// printf("\n<EFBFBD><EFBFBD>ࢮ<EFBFBD> - %d\n",c1);
|
// printf("\nПервое - %d\n",c1);
|
||||||
// printf("<EFBFBD><EFBFBD><EFBFBD> - %d\n",c2);
|
// printf("Второе - %d\n",c2);
|
||||||
cout<<"\n<EFBFBD>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢<EFBFBD><E2AEA2> <20>ணࠬ<E0AEA3><E0A0AC> 1\n";
|
cout<<"\nВремя выполнения тестовой программы 1\n";
|
||||||
cout<<"COUNTs: "<<c2-c1<<"\n";
|
cout<<"COUNTs: "<<c2-c1<<"\n";
|
||||||
printf("\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>쪮 <20><><EFBFBD><EFBFBD><EFBFBD>ᥪ㭤 ??");
|
printf("\n Сколько миллисекунд ??");
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>७<EFBFBD><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢<EFBFBD><E2AEA2> <20>ணࠬ<E0AEA3><E0A0AC>
|
// Измерение времени выполнения тестовой программы
|
||||||
// <EFBFBD><EFBFBD> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> ⠩<><E2A0A9><EFBFBD><EFBFBD>
|
// по содержимому регистра таймера
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 43h - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD> ⠩<><E2A0A9>
|
// Порт 43h - порт управления таймером
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 40h - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠩<><E2A0A9><EFBFBD><EFBFBD>
|
// Порт 40h - порт таймера
|
||||||
|
|
||||||
asm{
|
asm{
|
||||||
mov ax,00000110B // 00 00 011 0
|
mov ax,00000110B // 00 00 011 0
|
||||||
out 43h,ax // <EFBFBD><EFBFBD>⠥<EFBFBD> <20><><EFBFBD><EFBFBD>訩, <20><>⮬ <20><><EFBFBD><EFBFBD>訩
|
out 43h,ax // Читаем младший, потом старший
|
||||||
in al,40h
|
in al,40h
|
||||||
// mov bl,al
|
// mov bl,al
|
||||||
in al,40h
|
in al,40h
|
||||||
@ -87,7 +87,7 @@ c2=cl2+cl1*0x10000;
|
|||||||
t1=_AX;
|
t1=_AX;
|
||||||
|
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD>⮢<EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> 2
|
//Тестовая программа 2
|
||||||
asm mov cx,1
|
asm mov cx,1
|
||||||
met11: asm {
|
met11: asm {
|
||||||
push cx
|
push cx
|
||||||
@ -101,7 +101,7 @@ c2=cl2+cl1*0x10000;
|
|||||||
|
|
||||||
asm{
|
asm{
|
||||||
mov ax,00000110B // 00 00 011 0
|
mov ax,00000110B // 00 00 011 0
|
||||||
out 43h,ax // <EFBFBD><EFBFBD>⠥<EFBFBD> <20><><EFBFBD><EFBFBD>訩, <20><>⮬ <20><><EFBFBD><EFBFBD>訩
|
out 43h,ax // Читаем младший, потом старший
|
||||||
in al,40h
|
in al,40h
|
||||||
// mov bl,al
|
// mov bl,al
|
||||||
in al,40h
|
in al,40h
|
||||||
@ -112,21 +112,21 @@ c2=cl2+cl1*0x10000;
|
|||||||
t3=t1; // ????
|
t3=t1; // ????
|
||||||
|
|
||||||
clrscr();
|
clrscr();
|
||||||
printf("\n<EFBFBD><EFBFBD>ࢮ<EFBFBD> - %d \n",t1);
|
printf("\nПервое - %d \n",t1);
|
||||||
printf("<EFBFBD><EFBFBD><EFBFBD> - %d\n",t2);
|
printf("Второе - %d\n",t2);
|
||||||
cout<<"\n<EFBFBD>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢<EFBFBD><E2AEA2> <20>ணࠬ<E0AEA3><E0A0AC> 2\n";
|
cout<<"\nВремя выполнения тестовой программы 2\n";
|
||||||
printf("%x\n",t3);
|
printf("%x\n",t3);
|
||||||
cout<<"CLOCKs: "<<t3<<"\n";
|
cout<<"CLOCKs: "<<t3<<"\n";
|
||||||
printf("\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>쪮 <20><><EFBFBD><EFBFBD><EFBFBD>ᥪ㭤 ??");
|
printf("\n Сколько микросекунд ??");
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задания
|
||||||
// 1 <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD><E0A5AC><EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20><><EFBFBD>⮢<EFBFBD><E2AEA2> <20>ணࠬ<E0AEA3> 1 <EFBFBD> 2
|
// 1 Определите времена работы тестовых программ 1 и 2
|
||||||
// 2 <EFBFBD><EFBFBD>९ணࠬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠩<><E2A0A9><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD> ࠡ <20>ண1 <20><><EFBFBD><EFBFBD><EFBFBD> <20><>筮
|
// 2 Перепрограммируйте таймер и измерьте время раб прог1 более точно
|
||||||
// 3 <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﬨ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
// 3 Определите время между двумя нажатиями на кнопку мыши (или клавиатуры)
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20>ਧ<EFBFBD><E0A8A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//Эта процедура считывает положение курсора мыши и признак нажатия
|
||||||
//<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>⠩<EFBFBD><E2A0A9> <20><><EFBFBD>ᠭ<EFBFBD><E1A0AD> <20>ࠩ<EFBFBD><E0A0A9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20>ணࠬ<E0AEA3><E0A0AC> Asmous.cpp.
|
//на клавишу. Прочитайте описание драйвера мыши и программу Asmous.cpp.
|
||||||
|
|
||||||
void ReadMouse ()
|
void ReadMouse ()
|
||||||
{
|
{
|
||||||
|
|||||||
40
Labv8.cpp
40
Labv8.cpp
@ -1,6 +1,6 @@
|
|||||||
/* Labv8: Ass, and Ci functions
|
/* Labv8: Ass, and Ci functions
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥬<EFBFBD><E2A5AC>
|
Шаблон программы для работы с видеосистемой
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⮢<EFBFBD><EFBFBD> ०<><E0A5A6>
|
Текстовый режим
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#include <iostream.h>
|
#include <iostream.h>
|
||||||
|
|
||||||
void page(char a) // <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>⨢<EFBFBD><E2A8A2><EFBFBD> <20><>ᯫ<EFBFBD><E1AFAB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>.
|
void page(char a) // Установка номера активной дисплейной стр.
|
||||||
{
|
{
|
||||||
asm {
|
asm {
|
||||||
mov ah,0x05
|
mov ah,0x05
|
||||||
@ -23,42 +23,42 @@ void page(char a) //
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>०<EFBFBD><E0A5A6><EFBFBD>
|
// установка видеорежима
|
||||||
asm{
|
asm{
|
||||||
mov al,02h
|
mov al,02h
|
||||||
mov ah,00h
|
mov ah,00h
|
||||||
int 10h
|
int 10h
|
||||||
} page(0);
|
} page(0);
|
||||||
clrscr();
|
clrscr();
|
||||||
// <EFBFBD>뢮<EFBFBD> ⥪<><E2A5AA><EFBFBD> <20>।<EFBFBD>⢠<EFBFBD><E2A2A0> <20><>
|
// Вывод текста средствами Си
|
||||||
for(char n = 1; n <= 100; n++)
|
for(char n = 1; n <= 100; n++)
|
||||||
// -- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᠬ <20>뢮<EFBFBD> -
|
// -- здесь сам вывод -
|
||||||
|
|
||||||
// <EFBFBD>뮤 ⥪<><E2A5AA><EFBFBD> <20> ०<><E0A5A6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD><E0A5A4><EFBFBD> ࠡ<><E0A0A1><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Выод текста в режиме непосредств работы с видеопамятью
|
||||||
page(0);
|
page(0);
|
||||||
asm mov cx,1000 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ ᨬ<><E1A8AC><EFBFBD><EFBFBD><EFBFBD>
|
asm mov cx,1000 // Задаем количество символов
|
||||||
asm mov di,0 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
asm mov di,0 // Обнуляем индекс
|
||||||
e1: asm { add di, 2
|
e1: asm { add di, 2
|
||||||
mov ax, 0xb800 // <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD>塞 <20><>砫<EFBFBD><E7A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
mov ax, 0xb800 // Определяем начальный адрес
|
||||||
mov es, ax
|
mov es, ax
|
||||||
mov al, cl
|
mov al, cl
|
||||||
mov es: [di],al // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뫠<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov es: [di],al // Пересылаем четный первый байт в видеопамять
|
||||||
mov al, 4
|
mov al, 4
|
||||||
mov es: [di+1],al // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뫠<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ன <20><><EFBFBD><EFBFBD>
|
mov es: [di+1],al // Пересылаем нечетный второй байт
|
||||||
};
|
};
|
||||||
asm loop e1
|
asm loop e1
|
||||||
|
|
||||||
getch();
|
getch();
|
||||||
|
|
||||||
|
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Задания
|
||||||
// 1 <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<><E2A5AA> <20> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD> <20><>.
|
// 1 Выведите текст с использ Си.
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 梥⮬ <20> <20>ᯮ<EFBFBD>짮<EFBFBD><ECA7AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>.
|
// Раскрасте его зеленым цветом с использованием Асс.
|
||||||
// <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>६<EFBFBD> <20>뢮<EFBFBD><EBA2AE> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// Определите время вывода в обоих случаях
|
||||||
// 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<><E0A0A7><EFBFBD> ⥪<>⮢<EFBFBD><E2AEA2> <20><>ᯫ<EFBFBD><E1AFAB><EFBFBD><EFBFBD><EFBFBD> <20><>࠭<EFBFBD><E0A0AD><EFBFBD>.(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 2 Протестируйте размер текстовой дисплейной страницы.(Напишите
|
||||||
// <EFBFBD>ணࠬ<EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20>뢮<EFBFBD><EBA2AE> ᨬ<><E1A8AC><EFBFBD><EFBFBD><EFBFBD> <20> <20><>砫<EFBFBD> <20> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ᯫ<EFBFBD><E1AFAB><EFBFBD><EFBFBD><EFBFBD> <20><>࠭<EFBFBD><E0A0AD><EFBFBD>)
|
// программу на Асс вывода символов в начале и в конце дисплейной страницы)
|
||||||
// 3 <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<><E2A5AA> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>࠭<EFBFBD><E0A0AD><EFBFBD>
|
// 3 Выведите текст на вторую дисп страницу
|
||||||
// 4 <EFBFBD>࣠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>४<EFBFBD><E0A5AA>祭<EFBFBD><E7A5AD> <20><>࠭<EFBFBD><E0A0AD>
|
// 4 Организуйте переключение страниц
|
||||||
/* while (bioskey(1) == 0)
|
/* while (bioskey(1) == 0)
|
||||||
{
|
{
|
||||||
page(0); delay(1000);
|
page(0); delay(1000);
|
||||||
|
|||||||
62
asm/p_2.asm
62
asm/p_2.asm
@ -14,27 +14,27 @@ main:
|
|||||||
mov ax,@data
|
mov ax,@data
|
||||||
mov ds,ax
|
mov ds,ax
|
||||||
mov es,0b:8000h
|
mov es,0b:8000h
|
||||||
;------------------<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-------------
|
;------------------Открываем файл-------------
|
||||||
|
|
||||||
mov di,30h
|
mov di,30h
|
||||||
xor cx,cx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
xor cx,cx ;атрибуты файла - обычный файл
|
||||||
mov bx,2 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov bx,2 ;режим доступа обычный - доступ для чтения-записи
|
||||||
mov dx,1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov dx,1 ;если файл существует, то открыть его. в обратной случае вернуть ошибку
|
||||||
mov dx,offset filename ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
mov dx,offset filename ;формируем указатель на имя файла
|
||||||
mov ah,3dh ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS
|
mov ah,3dh ;номер функции DOS
|
||||||
int 21h ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
int 21h ;открываем файл
|
||||||
mov [Handle], ax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
mov [Handle], ax ;сохраним дескриптор файла
|
||||||
mov bx,ax
|
mov bx,ax
|
||||||
jnc read ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
jnc read ;если файл существовал, то переход
|
||||||
jc ex ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
jc ex ;переход в случае ошибки
|
||||||
|
|
||||||
read: mov ah, 3Fh
|
read: mov ah, 3Fh
|
||||||
mov cx,1
|
mov cx,1
|
||||||
mov dx, buffer
|
mov dx, buffer
|
||||||
int 21h
|
int 21h
|
||||||
|
|
||||||
cmp ax, cx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EOF
|
cmp ax, cx ; Проверка EOF
|
||||||
jne eof ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> EOF, <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
jne eof ; Если EOF, то выходим
|
||||||
|
|
||||||
push ax
|
push ax
|
||||||
push bx
|
push bx
|
||||||
@ -45,12 +45,12 @@ read: mov ah, 3Fh
|
|||||||
pop ax
|
pop ax
|
||||||
|
|
||||||
inc di
|
inc di
|
||||||
; cmp [buffer], 13 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 13-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; cmp [buffer], 13 ; Пропускаем 13-ый символ
|
||||||
; je read
|
; je read
|
||||||
; cmp [buffer], 10 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; cmp [buffer], 10 ; Проверка конца строки
|
||||||
; je exit
|
; je exit
|
||||||
jmp read
|
jmp read
|
||||||
eof: mov bx, Handle ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
eof: mov bx, Handle ; закрываем файл
|
||||||
mov ah, 3Eh
|
mov ah, 3Eh
|
||||||
int 21h
|
int 21h
|
||||||
|
|
||||||
@ -89,28 +89,28 @@ found2:
|
|||||||
mov di,bx
|
mov di,bx
|
||||||
jmp found
|
jmp found
|
||||||
|
|
||||||
write: ; xor cx,cx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
write: ; xor cx,cx ;атрибуты файла - обычный файл
|
||||||
; mov bx,1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
; mov bx,1 ;режим доступа обычный - доступ для чтения-записи
|
||||||
; mov dx,1
|
; mov dx,1
|
||||||
; mov dx,offset filename2 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
; mov dx,offset filename2 ;формируем указатель на имя файла
|
||||||
|
|
||||||
; mov cx,5
|
; mov cx,5
|
||||||
; mov ah,5bh ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS
|
; mov ah,5bh ;номер функции DOS
|
||||||
; int 21h ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
; int 21h ;создаём и открываем файл
|
||||||
|
|
||||||
; mov [Handle2], ax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
; mov [Handle2], ax ;сохраним дескриптор файла
|
||||||
; mov bx,ax
|
; mov bx,ax
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xor cx,cx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
xor cx,cx ;атрибуты файла - обычный файл
|
||||||
mov bx,0002h ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov bx,0002h ;режим доступа обычный - доступ для чтения-записи
|
||||||
mov dx,1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
mov dx,1 ;если файл существует, то открыть его. в обратной случае вернуть ошибку
|
||||||
mov dx,offset filename2 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
mov dx,offset filename2 ;формируем указатель на имя файла
|
||||||
mov al,0001h
|
mov al,0001h
|
||||||
mov ah,3dh ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS
|
mov ah,3dh ;номер функции DOS
|
||||||
int 21h ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
int 21h ;открываем файл
|
||||||
mov [Handle2], ax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
mov [Handle2], ax ;сохраним дескриптор файла
|
||||||
mov bx,ax
|
mov bx,ax
|
||||||
|
|
||||||
|
|
||||||
@ -126,12 +126,12 @@ xor ax,ax
|
|||||||
mov ah,0dh
|
mov ah,0dh
|
||||||
int 21h
|
int 21h
|
||||||
|
|
||||||
cmp ax, cx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EOF
|
cmp ax, cx ; Проверка EOF
|
||||||
|
|
||||||
mov bx, Handle2 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
mov bx, Handle2 ; закрываем файл
|
||||||
mov ah, 3Eh
|
mov ah, 3Eh
|
||||||
int 21h
|
int 21h
|
||||||
jc exit ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
jc exit ;переход в случае ошибки
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
mov ax,4c00h
|
mov ax,4c00h
|
||||||
|
|||||||
Reference in New Issue
Block a user