fix: Кодировка
This commit is contained in:
260
ASMOUSE.CPP
260
ASMOUSE.CPP
@ -1,131 +1,131 @@
|
||||
/****************************************************************************
|
||||
** <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 <stdio.h>
|
||||
#include <dos.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;
|
||||
|
||||
char IfMouse ();
|
||||
void ShowMouse ();
|
||||
void HideMouse ();
|
||||
void ReadMouse ();
|
||||
void SetMouseXY (unsigned int X, unsigned int Y);
|
||||
void SetMinMaxX (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 ()
|
||||
{
|
||||
unsigned int Result;
|
||||
asm mov ax, 0
|
||||
asm int 0x33
|
||||
asm mov Result, ax
|
||||
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 ()
|
||||
{
|
||||
asm mov ax, 0x1
|
||||
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 ()
|
||||
{
|
||||
asm mov ax, 0x2
|
||||
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 ()
|
||||
{
|
||||
asm mov ax, 0x3
|
||||
asm int 0x33
|
||||
asm mov MouseB, bx
|
||||
asm mov MouseX, cx
|
||||
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)
|
||||
{
|
||||
asm mov ax, 0x4
|
||||
asm mov cx, X
|
||||
asm mov dx, Y
|
||||
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)
|
||||
{
|
||||
asm mov ax, 0x7
|
||||
asm mov cx, Min
|
||||
asm mov dx, Max
|
||||
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)
|
||||
{
|
||||
asm mov ax, 0x8
|
||||
asm mov cx, Min
|
||||
asm mov dx, Max
|
||||
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(){
|
||||
clrscr();
|
||||
IfMouse();
|
||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㯭<EFBFBD> <20> <20><><EFBFBD>⥬<EFBFBD>.\n";
|
||||
delay(3000);
|
||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFA2A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>প<EFBFBD> 3 ᥪ.\n";
|
||||
delay(3000);
|
||||
ShowMouse();
|
||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>祧<EFBFBD><E7A5A7><EFBFBD> - <20><><EFBFBD><EFBFBD>প<EFBFBD> 3 ᥪ.\n";
|
||||
delay(3000);
|
||||
HideMouse();
|
||||
cout<<"<EFBFBD><EFBFBD>१ 3 ᥪ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFA2A8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.\n";
|
||||
delay(3000);
|
||||
ShowMouse();
|
||||
ReadMouse();
|
||||
cout<<"\n<EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #1:\n";
|
||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD>: "<<MouseX<<"\n";
|
||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> "<<MouseY<<"\n";
|
||||
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";
|
||||
delay(3000);
|
||||
SetMouseXY(120,120);
|
||||
ReadMouse();
|
||||
cout<<"\n<EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #2:\n";
|
||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD>: "<<MouseX<<"\n";
|
||||
cout<<"<EFBFBD>-<2D><><EFBFBD>न<EFBFBD><E0A4A8><EFBFBD><EFBFBD> "<<MouseY<<"\n";
|
||||
delay(3000);
|
||||
cout<<"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.\n";
|
||||
delay(3000);
|
||||
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) cout<<"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.";
|
||||
else cout<<"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.";
|
||||
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<<"100<X<300\n";
|
||||
cout<<"0<Y<10\n";
|
||||
SetMinMaxX(100,300);
|
||||
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";
|
||||
getch();
|
||||
return 0;
|
||||
/****************************************************************************
|
||||
** Эта программа демонстрирует, как можно добиться взаимодействия с мышкой,**
|
||||
** используя С++ и Ассемблер. **
|
||||
****************************************************************************/
|
||||
|
||||
#include <conio.h>
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <iostream.h>
|
||||
|
||||
//Глобальные переменные, хранящие координаты и признак нажатия на кнопку
|
||||
//мыши.
|
||||
unsigned int MouseX, MouseY, MouseB;
|
||||
|
||||
char IfMouse ();
|
||||
void ShowMouse ();
|
||||
void HideMouse ();
|
||||
void ReadMouse ();
|
||||
void SetMouseXY (unsigned int X, unsigned int Y);
|
||||
void SetMinMaxX (unsigned int Min, unsigned int Max);
|
||||
void SetMinMaxY (unsigned int Min, unsigned int Max);
|
||||
|
||||
//Эта процедура проверяет доступна ли мышь
|
||||
char IfMouse ()
|
||||
{
|
||||
unsigned int Result;
|
||||
asm mov ax, 0
|
||||
asm int 0x33
|
||||
asm mov Result, ax
|
||||
return Result;
|
||||
}
|
||||
|
||||
//Эта процедура делает видимым курсор мыши
|
||||
void ShowMouse ()
|
||||
{
|
||||
asm mov ax, 0x1
|
||||
asm int 0x33
|
||||
}
|
||||
|
||||
//Эта процедура делает невидимым курсор мыши
|
||||
void HideMouse ()
|
||||
{
|
||||
asm mov ax, 0x2
|
||||
asm int 0x33
|
||||
}
|
||||
|
||||
//Эта процедура считывает положение курсора мыши и признак нажатия
|
||||
//на клавишу
|
||||
void ReadMouse ()
|
||||
{
|
||||
asm mov ax, 0x3
|
||||
asm int 0x33
|
||||
asm mov MouseB, bx
|
||||
asm mov MouseX, cx
|
||||
asm mov MouseY, dx
|
||||
}
|
||||
|
||||
//Эта процедура устанавливает курсор в другие координаты
|
||||
void SetMouseXY (unsigned int X, unsigned int Y)
|
||||
{
|
||||
asm mov ax, 0x4
|
||||
asm mov cx, X
|
||||
asm mov dx, Y
|
||||
asm int 0x33
|
||||
}
|
||||
|
||||
//Эта процедура устанавливает минимальное и максимальное значение
|
||||
//границ промежутка, в котором может двигаться курсор мыши
|
||||
//в горизонтальном положении.
|
||||
void SetMinMaxX (unsigned int Min, unsigned int Max)
|
||||
{
|
||||
asm mov ax, 0x7
|
||||
asm mov cx, Min
|
||||
asm mov dx, Max
|
||||
asm int 0x33
|
||||
}
|
||||
|
||||
//Эта процедура устанавливает минимальное и максимальное значение
|
||||
//границ промежутка, в котором может двигаться курсор мыши
|
||||
//в вертикальном положении.
|
||||
void SetMinMaxY (unsigned int Min, unsigned int Max)
|
||||
{
|
||||
asm mov ax, 0x8
|
||||
asm mov cx, Min
|
||||
asm mov dx, Max
|
||||
asm int 0x33
|
||||
}
|
||||
//Главная пограмма - тестирует мышь и процедуры описанные выше.
|
||||
main(){
|
||||
clrscr();
|
||||
IfMouse();
|
||||
cout<<"Мышь доступна в системе.\n";
|
||||
delay(3000);
|
||||
cout<<"Сейчас появится курсор - задержка 3 сек.\n";
|
||||
delay(3000);
|
||||
ShowMouse();
|
||||
cout<<"Сейчас курсор исчезнет - задержка 3 сек.\n";
|
||||
delay(3000);
|
||||
HideMouse();
|
||||
cout<<"Через 3 сек курсор появится вновь.\n";
|
||||
delay(3000);
|
||||
ShowMouse();
|
||||
ReadMouse();
|
||||
cout<<"\nКоординаты мыши на момент #1:\n";
|
||||
cout<<"Х-координата: "<<MouseX<<"\n";
|
||||
cout<<"У-координата "<<MouseY<<"\n";
|
||||
delay(3000);
|
||||
cout<<"Через 3 сек поменяем координаты мыши на х=120 и у=120\n";
|
||||
delay(3000);
|
||||
SetMouseXY(120,120);
|
||||
ReadMouse();
|
||||
cout<<"\nКоординаты мыши на момент #2:\n";
|
||||
cout<<"Х-координата: "<<MouseX<<"\n";
|
||||
cout<<"У-координата "<<MouseY<<"\n";
|
||||
delay(3000);
|
||||
cout<<"\nНажмите клавишу мыши.\n";
|
||||
delay(3000);
|
||||
ReadMouse();
|
||||
//if ((MouseB&1)==1) cout<<"\nКлавиша мыши нажата.";
|
||||
if (MouseB==1) cout<<"\nКлавиша мыши нажата.";
|
||||
else cout<<"\nКлавиша мыши не нажата.";
|
||||
delay(3000);
|
||||
cout<<"\nУстановим границы движения мыши по экрану:\n";
|
||||
cout<<"100<X<300\n";
|
||||
cout<<"0<Y<10\n";
|
||||
SetMinMaxX(100,300);
|
||||
SetMinMaxY(0,10);
|
||||
cout<<"\nДля завершения работы программы нажмите любую клавишу.\n";
|
||||
getch();
|
||||
return 0;
|
||||
}
|
||||
152
LABV10.CPP
152
LABV10.CPP
@ -1,76 +1,76 @@
|
||||
// "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IBM PC <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ன"
|
||||
// Labv10
|
||||
|
||||
#include <iostream.h>
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#define Port8042 0x60
|
||||
|
||||
long far * pTime=(long far*)0x46C; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA>
|
||||
|
||||
// <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 * pTailPtr=(int far *)0x41C; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><> 㪠<><E3AAA0>⥫<EFBFBD> 墮<><E5A2AE><EFBFBD> <20><><EFBFBD>.<2E><>.
|
||||
unsigned char far * pBuf;
|
||||
|
||||
void main()
|
||||
{
|
||||
// 3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> N1.
|
||||
clrscr();
|
||||
|
||||
cout << "\n 3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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 <EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n";
|
||||
char cScan,cAsci;
|
||||
int iAdres;
|
||||
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
|
||||
asm{
|
||||
push ds //
|
||||
push si // <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
push di //
|
||||
mov ax,0x40 //
|
||||
mov ds,ax // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>㧨<EFBFBD><EFBFBD> ᥣ<><E1A5A3><EFBFBD><EFBFBD>
|
||||
mov si,0x1A // <EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov di,0x1C // <EFBFBD> <20><> 墮<><E5A2AE>
|
||||
}
|
||||
wait_kbd:
|
||||
asm{
|
||||
mov ax,[si] // <EFBFBD>ࠢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> -
|
||||
cmp ax,[di] // <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
je wait_kbd
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>㧨<EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD> di <20><><EFBFBD>祭<EFBFBD><E7A5AD><EFBFBD> 0x1C
|
||||
// <EFBFBD>ࠢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD>
|
||||
mov si,[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]
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> _AL <EFBFBD> _AH ᮤ<EFBFBD>ঠ<EFBFBD> ᪠<>-<2D><><EFBFBD> <20> ASCII-<EFBFBD><EFBFBD><EFBFBD>
|
||||
asm pop di
|
||||
asm pop si
|
||||
asm pop ds
|
||||
cScan=_AH;
|
||||
cAsci=_AL;
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %x <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %d ASCII = %d \n",iAdres,cScan,cAsci);
|
||||
} while(getch() != 32);
|
||||
cout << "\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࢮ<EFBFBD><E0A2AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Press any key...\n";
|
||||
getch();
|
||||
|
||||
delay(1000);
|
||||
asm in al,0x60
|
||||
cScan=0; // ??????
|
||||
printf(" <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = %x \n",cScan);
|
||||
// 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>
|
||||
// <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>
|
||||
// 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
|
||||
// <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>
|
||||
// "Обмен IBM PC с клавиатурой"
|
||||
// Labv10
|
||||
|
||||
#include <iostream.h>
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#define Port8042 0x60
|
||||
|
||||
long far * pTime=(long far*)0x46C; // Указатель на счетчик тиков
|
||||
|
||||
// Определим указатели начала и конца буфера
|
||||
|
||||
int far * pHeadPtr=(int far *)0x41A; // Указатель на указатель головы буф.кл.
|
||||
int far * pTailPtr=(int far *)0x41C; // Указатель на указатель хвоста буф.кл.
|
||||
unsigned char far * pBuf;
|
||||
|
||||
void main()
|
||||
{
|
||||
// 3адание N1.
|
||||
clrscr();
|
||||
|
||||
cout << "\n 3адание N1:\n";
|
||||
cout << "\n Нажимайте клавиши для получения кодов!";
|
||||
cout << "\n Пробел - идем дальше.\n";
|
||||
char cScan,cAsci;
|
||||
int iAdres;
|
||||
do
|
||||
{
|
||||
// Загрузить пару регистров, например ds:si значением 0x40:0x1A
|
||||
asm{
|
||||
push ds //
|
||||
push si // Сохранили регистры
|
||||
push di //
|
||||
mov ax,0x40 //
|
||||
mov ds,ax // Загрузили сегмент
|
||||
mov si,0x1A // и указатели на голову
|
||||
mov di,0x1C // и на хвост
|
||||
}
|
||||
wait_kbd:
|
||||
asm{
|
||||
mov ax,[si] // Сравниваем указатели -
|
||||
cmp ax,[di] // т.е. ждем нажатия
|
||||
je wait_kbd
|
||||
// Загрузить регистр di значением 0x1C
|
||||
// Сравнить указатели
|
||||
// Прочитать указатель
|
||||
mov si,[si]
|
||||
}
|
||||
iAdres=_SI;
|
||||
// Прочитать значение из буфера
|
||||
asm mov ax,[si]
|
||||
// Теперь _AL и _AH содержат скан-код и ASCII-код
|
||||
asm pop di
|
||||
asm pop si
|
||||
asm pop ds
|
||||
cScan=_AH;
|
||||
cAsci=_AL;
|
||||
printf("Адрес = %x Скан = %d ASCII = %d \n",iAdres,cScan,cAsci);
|
||||
} while(getch() != 32);
|
||||
cout << "\n Конец первого задания. Press any key...\n";
|
||||
getch();
|
||||
|
||||
delay(1000);
|
||||
asm in al,0x60
|
||||
cScan=0; // ??????
|
||||
printf(" Скан = %x \n",cScan);
|
||||
// goto met;
|
||||
//
|
||||
}
|
||||
// Задание
|
||||
// 1 Разберите представленную программу
|
||||
// Определите отличие ASCII кодов: основных и служебных клавиш
|
||||
// 2 Напишите мини программу циклического чтения скан кодов из порта 60
|
||||
// Определите отличие скан кодов: нажатия и отпускания клавиши
|
||||
|
||||
80
LABV11.CPP
80
LABV11.CPP
@ -1,40 +1,40 @@
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 11
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ०<><E0A5A6><EFBFBD> sVGA
|
||||
*/
|
||||
#include <dos.h>
|
||||
#include <mem.h>
|
||||
#include <conio.h>
|
||||
|
||||
void set_mode(int mode)
|
||||
{
|
||||
asm{
|
||||
mov ax,0x4f02;
|
||||
mov bx,mode ;
|
||||
int 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
set_mode(0x0112);
|
||||
unsigned char c=0;
|
||||
for (int i=2; i<640*4;i+=4)
|
||||
{
|
||||
asm {
|
||||
mov ax,0xa000;
|
||||
mov es,ax;
|
||||
mov si,i
|
||||
mov bh,c
|
||||
mov bl,c
|
||||
mov es:[si],bl
|
||||
|
||||
}
|
||||
|
||||
c++;
|
||||
}
|
||||
getch();
|
||||
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>
|
||||
//<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>
|
||||
/* Лабораторная работа 11
|
||||
Видеоадаптер, графические режимы sVGA
|
||||
*/
|
||||
#include <dos.h>
|
||||
#include <mem.h>
|
||||
#include <conio.h>
|
||||
|
||||
void set_mode(int mode)
|
||||
{
|
||||
asm{
|
||||
mov ax,0x4f02;
|
||||
mov bx,mode ;
|
||||
int 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
set_mode(0x0112);
|
||||
unsigned char c=0;
|
||||
for (int i=2; i<640*4;i+=4)
|
||||
{
|
||||
asm {
|
||||
mov ax,0xa000;
|
||||
mov es,ax;
|
||||
mov si,i
|
||||
mov bh,c
|
||||
mov bl,c
|
||||
mov es:[si],bl
|
||||
|
||||
}
|
||||
|
||||
c++;
|
||||
}
|
||||
getch();
|
||||
set_mode(0x3);
|
||||
}
|
||||
// Задание
|
||||
//Определите в каком порядке кодируются цвета в 111 и 112 режимах
|
||||
//Напишите программу вывода полутонового клина на Асс
|
||||
|
||||
114
LABV5.CPP
114
LABV5.CPP
@ -1,57 +1,57 @@
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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<conio.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
|
||||
<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>
|
||||
<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>,
|
||||
<EFBFBD><EFBFBD><EFBFBD>饩 <20><> Call. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᥣ<EFBFBD><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>맮<EFBFBD> <20><><EFBFBD>楤<EFBFBD><E6A5A4><EFBFBD>)
|
||||
<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.
|
||||
*/
|
||||
|
||||
//<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)
|
||||
{
|
||||
/* 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 DX,[BP+8] //DX - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>訥 p<><70>p<EFBFBD><70><EFBFBD> <20><><EFBFBD>ண<EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov SI,[BP+12] //SI - <EFBFBD>㬬<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> p<><70>p冷<70>
|
||||
add AX,DX //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> p<><70>p冷<70>
|
||||
mov [SI],AX //p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ᢥ<EFBFBD><E1A2A5><EFBFBD> <20> 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 DX,[BP+10] //DX - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>訥 p<><70>p<EFBFBD><70><EFBFBD> <20><><EFBFBD>ண<EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>p<EFBFBD><70><EFBFBD> p<><70>p冷<70>
|
||||
mov [SI+2],AX //p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> SI
|
||||
}*/
|
||||
sum=sl_2;
|
||||
}
|
||||
|
||||
void main ( void )
|
||||
{
|
||||
long a,b;
|
||||
long sum;
|
||||
|
||||
cout<<"\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࢮ<EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ";
|
||||
cin>>a;
|
||||
cout<<" <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <><E1ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ";
|
||||
cin>>b;
|
||||
|
||||
addition(a,b,sum);
|
||||
|
||||
cout<<"a + b = "<<sum;
|
||||
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><>
|
||||
// 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>)
|
||||
// 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>
|
||||
// <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
|
||||
// <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>
|
||||
}
|
||||
// Работа N LAB5
|
||||
// Шаблон программы
|
||||
// Тема - ПОДПРПОГРАММЫ
|
||||
|
||||
#include <stdio.h>
|
||||
#include<conio.h>
|
||||
#include<iostream.h>
|
||||
|
||||
/*
|
||||
При вызове функции в Си, она интерпретируется как команда Call
|
||||
в Assembler. При этом передаваемые в функцию параметры, заносятся в
|
||||
СТЕК по принципу справа налево. Затем заносится IP следующей команды,
|
||||
идущей за Call. (внутрисегментный вызов процедуры)
|
||||
Выход из функции осуществляется с помощью команды RET.
|
||||
*/
|
||||
|
||||
//Функция, выполняющая сложение, параметры перед через стек
|
||||
void addition(long sl_1,long sl_2, long &sum)
|
||||
{
|
||||
/* asm{
|
||||
mov AX,[BP+4] //AX - младшие pазpяды пеpвого слагаемого
|
||||
mov DX,[BP+8] //DX - младшие pазpяды второго слагаемого
|
||||
mov SI,[BP+12] //SI - сумма младших pазpядов
|
||||
add AX,DX //сложение младших pазpядов
|
||||
mov [SI],AX //pезультат косвенно в SI
|
||||
mov AX,[BP+6] //AX - стаpшие pазpяды пеpвого слагаемого
|
||||
mov DX,[BP+10] //DX - младшие pазpяды второго слагаемого
|
||||
//сложение стаpших pазpядов
|
||||
mov [SI+2],AX //pезультат в SI
|
||||
}*/
|
||||
sum=sl_2;
|
||||
}
|
||||
|
||||
void main ( void )
|
||||
{
|
||||
long a,b;
|
||||
long sum;
|
||||
|
||||
cout<<"\n Введите первое слагаемое: ";
|
||||
cin>>a;
|
||||
cout<<" Введите второе слагаемое: ";
|
||||
cin>>b;
|
||||
|
||||
addition(a,b,sum);
|
||||
|
||||
cout<<"a + b = "<<sum;
|
||||
getch();
|
||||
|
||||
// Задания
|
||||
// 1 Напишите программу сложения двух 32-х разрядных чисел на Си
|
||||
// 2 Оформите сложение подпрограммой на Ассемблере (смотри пример)
|
||||
// 3 Проведите внутрисегментный (ближний) вызов подрограммы
|
||||
// Проведите межсегментный вызов подпрограммы (процедуры)
|
||||
// путем изменения модели распределения памяти Tiny - Large
|
||||
// Что изменилось ?
|
||||
// 4 Реализуйте передачу параметров через регистры или общую память
|
||||
}
|
||||
|
||||
92
LABV6.CPP
92
LABV6.CPP
@ -1,46 +1,46 @@
|
||||
/* 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.
|
||||
<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>
|
||||
<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>
|
||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD> CS, IP <20> 䫠<><E4ABA0><EFBFBD>.
|
||||
<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
|
||||
<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>,
|
||||
<EFBFBD> ⠪<><E2A0AA> <20><><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2>.
|
||||
*/
|
||||
#include<stdio.h>
|
||||
#include<dos.h>
|
||||
#include<iostream.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 cmp_int(...) // <EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><>ࠡ<EFBFBD><E0A0A1>稪
|
||||
{
|
||||
cout<<"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD><EFBFBD> ";
|
||||
getch();
|
||||
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{ int aa;
|
||||
aa=1;
|
||||
old=getvect(0xf0);
|
||||
disable();
|
||||
setvect(0xf0,cmp_int);
|
||||
enable();
|
||||
// aa=aa/0;
|
||||
geninterrupt(0xf0);
|
||||
|
||||
puts("v1=v2");
|
||||
setvect(0xf0,old);
|
||||
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>
|
||||
// 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>
|
||||
// 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
|
||||
}
|
||||
/* LAB6
|
||||
Лабораторная работа по теме
|
||||
"Программные прерывания"
|
||||
|
||||
|
||||
При вызове функции - прерывания из СИ, используется INT.
|
||||
В связи с этим стек заполняется несколько иначе.
|
||||
В стеке сохраняются значения IP, СS (сегмент кода),от куда вызывается
|
||||
прерывание, и флаги.
|
||||
Выход из INT осуществляется с помощью IRet,которая вынимает из стека
|
||||
все старые регистров CS, IP и флагов.
|
||||
Так же при вызове прерывания,флажок прерывания i и t
|
||||
устанавливается в 0, что запрещает вызов любых других прерываний,
|
||||
а также запрещает трассировку.
|
||||
*/
|
||||
#include<stdio.h>
|
||||
#include<dos.h>
|
||||
#include<iostream.h>
|
||||
#include <conio.h>
|
||||
|
||||
void interrupt (*old)(...); // здесь будем сохранять старый вектор
|
||||
void interrupt cmp_int(...) // а это наш обработчик
|
||||
{
|
||||
cout<<"Прерывание ";
|
||||
getch();
|
||||
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{ int aa;
|
||||
aa=1;
|
||||
old=getvect(0xf0);
|
||||
disable();
|
||||
setvect(0xf0,cmp_int);
|
||||
enable();
|
||||
// aa=aa/0;
|
||||
geninterrupt(0xf0);
|
||||
|
||||
puts("v1=v2");
|
||||
setvect(0xf0,old);
|
||||
return;
|
||||
// Задания
|
||||
// 1 Напишите программу обработки прерывания
|
||||
// 2 Вызовите прерывание путем организации особого случая
|
||||
// 3 Покажите использование команды int3, определите ее код с испол. TD
|
||||
}
|
||||
|
||||
82
LABV7.CPP
82
LABV7.CPP
@ -1,41 +1,41 @@
|
||||
/* 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<dos.h>
|
||||
#include<iostream.h>
|
||||
#include <conio.h>
|
||||
#include <float.h>
|
||||
|
||||
void main(void)
|
||||
{ int aa;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>饩 <20><><EFBFBD><EFBFBD>⮩ <20><> <20><EFBFBD><E0AEA2> <20><>
|
||||
float bb,ad;
|
||||
aa=1; bb=5.0;ad=3.1;
|
||||
bb=aa;
|
||||
cout<<"\n Ci "<<bb;
|
||||
// cin>>bb;
|
||||
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
|
||||
fld ad
|
||||
fld bb
|
||||
fadd
|
||||
fstp bb
|
||||
}
|
||||
cout<<" Acc "<<bb;
|
||||
getch();
|
||||
|
||||
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><>
|
||||
// 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><>,
|
||||
// <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>
|
||||
// <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 ?
|
||||
// 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>
|
||||
// <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
|
||||
}
|
||||
/* LAB-7
|
||||
Лабораторная работа по теме
|
||||
"Числа сплавающей запятой"
|
||||
|
||||
*/
|
||||
#include<stdio.h>
|
||||
#include<dos.h>
|
||||
#include<iostream.h>
|
||||
#include <conio.h>
|
||||
#include <float.h>
|
||||
|
||||
void main(void)
|
||||
{ int aa;
|
||||
// Операции с плавающей запятой на уровне Си
|
||||
float bb,ad;
|
||||
aa=1; bb=5.0;ad=3.1;
|
||||
bb=aa;
|
||||
cout<<"\n Ci "<<bb;
|
||||
// cin>>bb;
|
||||
getch();
|
||||
|
||||
// Операции с плавающей запятой на уровне Ассемблера
|
||||
asm { finit
|
||||
fld ad
|
||||
fld bb
|
||||
fadd
|
||||
fstp bb
|
||||
}
|
||||
cout<<" Acc "<<bb;
|
||||
getch();
|
||||
|
||||
return;
|
||||
// Задания
|
||||
// 1 Выполните операции над числами с ПЗ на уровне Си
|
||||
// 2 Напишите программу на Асс (см пример): Введите в диалоге три числа,
|
||||
// загрузите их в регистры FPU, просуммируйте, выведите результат
|
||||
// Проследите работу FPU в TD. Как используются регистры FPU ?
|
||||
// 3 Получите в FPU нечисло (NaN), покажите его в TD. Вызовите
|
||||
// прерывание по этому особому случаю.
|
||||
// 4 Напишите на Асс выражение для чисел с ПЗ: x=x/y. Проверьте в TD
|
||||
}
|
||||
|
||||
142
LABV9.CPP
142
LABV9.CPP
@ -1,72 +1,72 @@
|
||||
/* 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
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ०<><E0A5A6><EFBFBD>
|
||||
*/
|
||||
#include <graphics.h>
|
||||
#include <dos.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <conio.h>
|
||||
|
||||
#include <time.h>;
|
||||
|
||||
union REGS r;
|
||||
|
||||
void main()
|
||||
{
|
||||
// <EFBFBD><EFBFBD>⠭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>०<EFBFBD><E0A5A6><EFBFBD>
|
||||
int j,i,ii,color=0;
|
||||
r.h.ah=0x0;
|
||||
r.h.al=0x13;
|
||||
//_asm int 0x10;
|
||||
int86(0x10,&r,&r);
|
||||
// <EFBFBD>뢮<EFBFBD> 梥⭮<E6A2A5><E2ADAE> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
for( j =1 ; j <319 ; j ++)
|
||||
{ color=color+1;
|
||||
_AH=0x0c;
|
||||
_AL=color;
|
||||
if(color==256) color=0;
|
||||
_BH=0;
|
||||
_DX=50;
|
||||
_CX=j;
|
||||
geninterrupt(0x10);
|
||||
}
|
||||
getch();
|
||||
|
||||
//<EFBFBD><EFBFBD>९ணࠬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ii=clock();
|
||||
for( i = 0 ; i < 255 ; i++)
|
||||
{ _AH=0x10;
|
||||
_AL=0x10;
|
||||
_BX=i; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
_CH=i; /* G */
|
||||
_CL=i; /* B */
|
||||
_DH=i; /* R */
|
||||
geninterrupt(0x10);
|
||||
} /* */
|
||||
color=256;
|
||||
i=clock()-ii;
|
||||
|
||||
// <EFBFBD>뢮<EFBFBD> <20><><EFBFBD><EFBFBD>⮭<EFBFBD><E2AEAD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
for( j =1 ; j <319 ; j ++) /* */
|
||||
{ color=color-1;
|
||||
_AH=0x0c;
|
||||
_AL=color;
|
||||
if(color==0) color=256;
|
||||
_BH=0;
|
||||
_DX=100; // <EFBFBD><EFBFBD>ப<EFBFBD> <20>뢮<EFBFBD><EBA2AE>
|
||||
_CX=j;
|
||||
geninterrupt(0x10);
|
||||
}
|
||||
// printf("<EFBFBD>६<EFBFBD> <20><>९ணࠬ<E0AEA3><E0A0AC><EFBFBD><E0AEA2><EFBFBD><EFBFBD> ⠡<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : %d",i);
|
||||
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> 梥⮬
|
||||
// 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>
|
||||
// (<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)
|
||||
// 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()
|
||||
// 4 <EFBFBD>ਤ㬠<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ࠪ<EFBFBD><E0A0AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>뢥<EFBFBD><EBA2A5> <20><><EFBFBD>쪮
|
||||
// 梥⮢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>쥢 <20> 横<><E6A8AA><EFBFBD><EFBFBD>᪨ <20><>९ணࠬ<E0AEA3><E0A0AC><EFBFBD><EFBFBD><EFBFBD> ⠡<> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return;
|
||||
/* Lab: Ass, BIOS and Ci functions
|
||||
Шаблон программы для работы с видеосистемой Labv9
|
||||
Графические режимы
|
||||
*/
|
||||
#include <graphics.h>
|
||||
#include <dos.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <conio.h>
|
||||
|
||||
#include <time.h>;
|
||||
|
||||
union REGS r;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Устан номера видеорежима
|
||||
int j,i,ii,color=0;
|
||||
r.h.ah=0x0;
|
||||
r.h.al=0x13;
|
||||
//_asm int 0x10;
|
||||
int86(0x10,&r,&r);
|
||||
// Вывод цветного клина
|
||||
for( j =1 ; j <319 ; j ++)
|
||||
{ color=color+1;
|
||||
_AH=0x0c;
|
||||
_AL=color;
|
||||
if(color==256) color=0;
|
||||
_BH=0;
|
||||
_DX=50;
|
||||
_CX=j;
|
||||
geninterrupt(0x10);
|
||||
}
|
||||
getch();
|
||||
|
||||
//Перепрограммирование таблицы палитры
|
||||
ii=clock();
|
||||
for( i = 0 ; i < 255 ; i++)
|
||||
{ _AH=0x10;
|
||||
_AL=0x10;
|
||||
_BX=i; // Номер регистра
|
||||
_CH=i; /* G */
|
||||
_CL=i; /* B */
|
||||
_DH=i; /* R */
|
||||
geninterrupt(0x10);
|
||||
} /* */
|
||||
color=256;
|
||||
i=clock()-ii;
|
||||
|
||||
// Вывод полутонового клина
|
||||
for( j =1 ; j <319 ; j ++) /* */
|
||||
{ color=color-1;
|
||||
_AH=0x0c;
|
||||
_AL=color;
|
||||
if(color==0) color=256;
|
||||
_BH=0;
|
||||
_DX=100; // строка вывода
|
||||
_CX=j;
|
||||
geninterrupt(0x10);
|
||||
}
|
||||
// printf("Время перепрограммирования табл палитр : %d",i);
|
||||
getch();
|
||||
|
||||
// Задания
|
||||
// 1 Подкрасьте полутоновой клин красным цветом
|
||||
// 2 Выведите клин в режиме прямой работы с видео памятью
|
||||
// (напишите Асс программу вывода возрастающ кода, начиная с a0000)
|
||||
// 3 Измерьте время вывода и перепрограммир табл палитры используя i=clock()
|
||||
// 4 Придумайте абстрактную анимацию, выведя несколько
|
||||
// цветовых клиньев и циклически перепрограммируя табл палитры
|
||||
return;
|
||||
}
|
||||
20
Lab_asm.asm
20
Lab_asm.asm
@ -2,16 +2,16 @@
|
||||
.MODEL TINY
|
||||
.STACK 100h
|
||||
.DATA
|
||||
Message DB 13,10,'Hi <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! ',13,10,'$'
|
||||
Message DB 13,10,'Hi Привет! ',13,10,'$'
|
||||
.CODE
|
||||
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>
|
||||
; <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 dx,OFFSET Message ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"
|
||||
int 21h ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!" <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ah,4ch ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
; <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>
|
||||
mov ds,ax ; установить регистр DS таким
|
||||
; образом, чтобы он указывал
|
||||
; на сегмент данных
|
||||
mov ah,9 ; функция DOS вывода строки
|
||||
mov dx,OFFSET Message ; ссылка на сообщение "Привет!"
|
||||
int 21h ; вывести "Привет!" на экран
|
||||
mov ah,4ch ; функция DOS завершения
|
||||
; программы
|
||||
int 21h ; завершить программу
|
||||
END
|
||||
452
Labv1.cpp
452
Labv1.cpp
@ -1,226 +1,226 @@
|
||||
// <EFBFBD>ਬ<EFBFBD><EFBFBD> <20><><EFBFBD>ଫ<EFBFBD><E0ACAB><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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>
|
||||
//
|
||||
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
|
||||
#define PortCan0 0x40
|
||||
|
||||
|
||||
void beep(unsigned iTone,unsigned iDlit); // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>⨯ <20>㭪樨
|
||||
// <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)
|
||||
{
|
||||
|
||||
// <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>
|
||||
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>
|
||||
|
||||
/*************************************************************************\
|
||||
/* <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
|
||||
//<EFBFBD><EFBFBD><EFBFBD>塞 far-㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> ⨯<> char <20> <20><><EFBFBD>樠<EFBFBD><E6A8A0><EFBFBD><EFBFBD><EFBFBD>㥬
|
||||
//<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 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");
|
||||
for (int i=0; i<10; i++)
|
||||
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");
|
||||
getch(); // <EFBFBD>ணࠬ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
/******************************************\
|
||||
\* <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><>
|
||||
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" );
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.5 <EFBFBD>
|
||||
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" );
|
||||
|
||||
|
||||
while (bioskey(1)==0) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>㤥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
printf (" \n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>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()
|
||||
// <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>)
|
||||
}
|
||||
getch(); // <EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/**************************************************************************\
|
||||
<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>, *
|
||||
<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> *
|
||||
<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 *
|
||||
<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 *
|
||||
<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>ᥪ㭤 *
|
||||
<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>. *
|
||||
<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" );
|
||||
|
||||
while (bioskey(1) == 0 ) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 横<> <20>㤥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
// <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)
|
||||
{
|
||||
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>
|
||||
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
|
||||
// !! <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>⮬ <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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>
|
||||
delay (500);
|
||||
printf (" \n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>40 = %d ", Tmm );
|
||||
// <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><>室
|
||||
}
|
||||
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 ");
|
||||
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><> */
|
||||
|
||||
long far * pTime=(long *)0x46C; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA>
|
||||
while (bioskey(1) == 0)
|
||||
{
|
||||
printf ("\n %ld",*pTime);
|
||||
delay(1000);
|
||||
}
|
||||
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>
|
||||
int Time;
|
||||
while (bioskey(1) == 0)
|
||||
{
|
||||
asm push ds // <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD> <20><> <20><>直<EFBFBD> <20><><EFBFBD>砩 ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
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 ds,ax
|
||||
asm mov si,0x6C // ... <EFBFBD><EFBFBD><EFBFBD> ⠪
|
||||
asm mov ax,[ds:si]
|
||||
asm mov Time,ax
|
||||
asm pop si // <EFBFBD> ⥯<><E2A5AF><EFBFBD> <20><><EFBFBD><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm pop ds // (<EFBFBD><EFBFBD> <20><>९<EFBFBD>⠩<EFBFBD><E2A0A9> <20><><EFBFBD>冷<EFBFBD> !!!)
|
||||
|
||||
printf ("\n %d",Time);
|
||||
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>
|
||||
<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)
|
||||
for ( lCnt=0; lCnt<1000000; lCnt++)
|
||||
{
|
||||
a1: asm { mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
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)
|
||||
}
|
||||
|
||||
// <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)
|
||||
void beep(unsigned iTone,unsigned iDlit)
|
||||
{ sound(iTone);
|
||||
delay(iDlit);
|
||||
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>
|
||||
// <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>
|
||||
// <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>
|
||||
// <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>)
|
||||
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>᪥ <20><><EFBFBD><EFBFBD>⮪ a1-a2 ࠡ<>⠫. <20>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <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
|
||||
// ࠢ<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>
|
||||
// <EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0.44 +- 0.03 <EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <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>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ᬥ饭<E1ACA5><E9A5AD><EFBFBD> [BP+disp]
|
||||
|
||||
/*
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠡ<><E0A0A1><EFBFBD> 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>,
|
||||
<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>
|
||||
|
||||
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>
|
||||
|
||||
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>-
|
||||
<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:
|
||||
<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
|
||||
<EFBFBD> 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/Inspect (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Alt/F4) <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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.
|
||||
|
||||
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>:
|
||||
- <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
|
||||
0x80000
|
||||
0xF000:0xFFF0
|
||||
2. 0x0040:0x6D
|
||||
0x8000:0x0010
|
||||
0xFFFFE
|
||||
3. 0x41A
|
||||
0x80210
|
||||
0xFFFF:0x100
|
||||
4. 0x0040:0x1E
|
||||
0xD00000
|
||||
0x8000:0x200
|
||||
5. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 0x41A-0x43C
|
||||
0xD000:0x100
|
||||
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>-
|
||||
<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>);
|
||||
|
||||
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><>
|
||||
<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>.
|
||||
*/
|
||||
// Пример оформления программы
|
||||
|
||||
// Работа N 0
|
||||
// Измерение времени выполнения фрагмента программы
|
||||
// Студенты гр 000.0 Иванофф, Петрофф, & Сидорофф
|
||||
//
|
||||
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
|
||||
#define PortCan0 0x40
|
||||
|
||||
|
||||
void beep(unsigned iTone,unsigned iDlit); // Это прототип функции
|
||||
// звукового сигнала, используемой при измерении времени
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
// Объявление переменных
|
||||
long int lCnt=0; // Ячейка - счетчик повторений
|
||||
int iA=0x1234; // Думми-ячейка, используемая в исследуемой команде
|
||||
|
||||
/*************************************************************************\
|
||||
/* Как из Си посмотреть содержимое байта с известным физическим адресом */
|
||||
|
||||
// Если хотим напечатать содержимое байта с адресом 0046Сh
|
||||
//объявляем far-указатель на переменную типа char и инициализируем
|
||||
//этот указатель значением адреса, предварительно преобразовав
|
||||
//его к типу char *
|
||||
char far * pT=(char *)0x46C; // (1)
|
||||
printf ("\n Печатаем 10 раз значение байта с известным адресом \n");
|
||||
for (int i=0; i<10; i++)
|
||||
printf (" \n %d ", * pT); // (1)
|
||||
printf ("\n Для продолжения нажмите любую клавишу \n");
|
||||
getch(); // Программа ждет нажатия клавиши
|
||||
|
||||
|
||||
/******************************************\
|
||||
\* Как из Си посмотреть содержимое порта */
|
||||
|
||||
// Читаем содержимое порта с адресом 40 с помощью функции Си
|
||||
printf ("\n Читаем содержимое порта с адресом 40 с помощью функции Си \n" );
|
||||
// Цикл повторяется каждые 0.5 с
|
||||
printf ("\n Для выхода из цикла - нажмите любую клавишу \n" );
|
||||
|
||||
|
||||
while (bioskey(1)==0) // пока не будет нажата любая клавиша
|
||||
{
|
||||
printf (" \n Порт40 = %d ", inp(PortCan0)); //(2)
|
||||
// С помощью TD посмотрите, во что превращается ф-ция inp()
|
||||
// на уровне машинных команд
|
||||
delay(500); // Задержка на полсекунды (500 мс)
|
||||
}
|
||||
getch(); // Очищаем буфер клавиатуры
|
||||
/**************************************************************************\
|
||||
Примечания: *
|
||||
Функция printf (...) позволяет распечатать на экране значения переменных, *
|
||||
а также произвольный текст. *
|
||||
Функция bioskey(1) позволяет определить, нажата ли клавиша *
|
||||
Функция inp(uPort) позволяет считать байт из порта Port *
|
||||
Функция outp(uPort,iValue) позволяет вывести величину iValue в порт uPort *
|
||||
Функция delay(uTime) организует программную задержку на uTime миллисекунд *
|
||||
Функция getch() считывает один символ из буфера клавиатуры. *
|
||||
В данном случае это надо для очистки буфера клавиатуры *
|
||||
\**************************************************************************/
|
||||
|
||||
// Снова читаем тот же порт с помощью программы на встроенном ассемблере
|
||||
printf ("\n Читаем содержимое порта с адресом 40 ассемблером \n" );
|
||||
|
||||
while (bioskey(1) == 0 ) // Этот цикл будет повторяться,
|
||||
// пока не нажмем клавишу
|
||||
|
||||
// Примеры использования встроенного ассемблера (3)
|
||||
{
|
||||
asm { push ax // Один способ записи на встроенном ассемблере
|
||||
in al,0x40
|
||||
}
|
||||
|
||||
unsigned char Tmm = _AL; // Эта команда эквивалентна mov Tmm,al
|
||||
// !! Убедитесь в этом с помощью TD
|
||||
|
||||
asm pop ax // Другой способ записи на встроенном ассемблере
|
||||
delay (500);
|
||||
printf (" \n Порт40 = %d ", Tmm );
|
||||
// Если нажата клавиша - то выход
|
||||
}
|
||||
getch();
|
||||
printf ("\n Для продолжения - нажмите любую клавишу \n ");
|
||||
getch();
|
||||
|
||||
/*************************************************************
|
||||
Как посмотреть содержимое длинной (например)четырехбайтовой
|
||||
переменной с адреса 0046С c помощью средств Си */
|
||||
|
||||
long far * pTime=(long *)0x46C; // Указатель на счетчик тиков
|
||||
while (bioskey(1) == 0)
|
||||
{
|
||||
printf ("\n %ld",*pTime);
|
||||
delay(1000);
|
||||
}
|
||||
getch();
|
||||
// Читаем и печатаем содержимое двухбайтовой переменной
|
||||
// с адреса 0046C средствами встроенного ассемблера
|
||||
int Time;
|
||||
while (bioskey(1) == 0)
|
||||
{
|
||||
asm push ds // Сохраним на всякий случай регистры
|
||||
asm push si
|
||||
// Во встроенном ассемблере
|
||||
asm mov ax,40h // можно записывать hex-константы так ...
|
||||
asm mov ds,ax
|
||||
asm mov si,0x6C // ... или так
|
||||
asm mov ax,[ds:si]
|
||||
asm mov Time,ax
|
||||
asm pop si // А теперь восстановим регистры
|
||||
asm pop ds // (не перепутайте порядок !!!)
|
||||
|
||||
printf ("\n %d",Time);
|
||||
delay(300);
|
||||
}
|
||||
|
||||
/****************************************************************
|
||||
Пример выполнения задания типа И
|
||||
Требуется измерить время выполнения заданной команды
|
||||
(в примере - команда mov reg,mem, а Вы спросите у преподавателя
|
||||
какую команду Вам взять )
|
||||
|
||||
Измерение времени выполнения фрагмента программы */
|
||||
|
||||
beep(400,200); // Сигнал отмечает начало интервала (5)
|
||||
for ( lCnt=0; lCnt<1000000; lCnt++)
|
||||
{
|
||||
a1: asm { mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
mov ax,iA
|
||||
a2: mov ax,iA }
|
||||
}
|
||||
beep(400,200); // Сигнал отмечает конец интервала (5)
|
||||
}
|
||||
|
||||
// Функция подачи звукового сигнала заданной высоты и длительности (5)
|
||||
void beep(unsigned iTone,unsigned iDlit)
|
||||
{ sound(iTone);
|
||||
delay(iDlit);
|
||||
nosound();
|
||||
}
|
||||
|
||||
// Результаты выполнения
|
||||
// Запустили программу дважды
|
||||
// При первом пуске участок между метками a1 и a2 был закомментирован
|
||||
// Время выполнения составило 3.15 +- 0.2 секунд (для оценки ошибки
|
||||
// прогон был повторен 5 раз и было оценено среднее значение и
|
||||
// среднеквадратическое отклонение. Приведенный допуск равен 2*СКО)
|
||||
// При втором пуске участок a1-a2 работал. Время выполнения
|
||||
// составило 7.5 +- 0.2 секунд. Количество повторений команды MOV REG,MEM
|
||||
// равно 10^7, добавка времени равна 4.35 +- 0.3 секунд, оценка времени
|
||||
// выполнения команды 0.44 +- 0.03 мкс.
|
||||
// С помощью TD определили, что компилятор использовал адресацию
|
||||
// базовая со смещением [BP+disp]
|
||||
|
||||
/*
|
||||
Задание на выполнение работы LAB0-0
|
||||
|
||||
1. Прочитайте текст программы и выделите логически связные части,
|
||||
поймите, что делают эти части. Разбирая текст, обратите внимание на
|
||||
то, какие функции Си используются и зачем. Делая это, научитесь
|
||||
пользоваться контекстным Help'ом
|
||||
|
||||
2. Скомпилируйте программу и убедитесь, что в ней отсутствуют ошибки
|
||||
|
||||
3. Запустите программу, наблюдайте результат и убедитесь, что Вы пони-
|
||||
маете, что происходит.
|
||||
|
||||
4. Научитесь, используя встроенный отладчик IDE:
|
||||
Выполнить программу до заданной точки останова. На уровне
|
||||
исходного Си-текста это можно сделать, используя пункты меню Run
|
||||
и Debug/Breakpoints.
|
||||
Проверить/изменить содержимое переменных после останова.
|
||||
Используйте пункт меню Debug/Evaluate/Modify,
|
||||
Debug/Inspect (горячая клавиша Alt/F4) либо Debug/Watches
|
||||
Измерить время выполнения заданной преподавателем команды
|
||||
так, как это сделано в программе LAB0 с командой MOV REG,MEM.
|
||||
|
||||
5. Средствами отладчика TD в окне CPU (пункт меню View/CPU) научитесь:
|
||||
- наблюдать/изменять содержимое регистров процессора (подумайте, ка-
|
||||
кие регистры можно менять безболезнено (изменения в некоторых ре-
|
||||
гистрах могут привести к фатальным для нормального выполнения
|
||||
программы результатам)
|
||||
- наблюдать/изменять ячейку памяти с известным физическим адресом:
|
||||
(Прежде, чем писать куда-либо, хорошо было бы подумать: что это за
|
||||
адрес - адрес ОЗУ(не использует ли этот адрес еще какая-нибудь
|
||||
программа), адрес ПЗУ, существует ли физическое устройство, соот-
|
||||
ветствующее данному адресу...
|
||||
Варианты:
|
||||
1. 0x46C
|
||||
0x80000
|
||||
0xF000:0xFFF0
|
||||
2. 0x0040:0x6D
|
||||
0x8000:0x0010
|
||||
0xFFFFE
|
||||
3. 0x41A
|
||||
0x80210
|
||||
0xFFFF:0x100
|
||||
4. 0x0040:0x1E
|
||||
0xD00000
|
||||
0x8000:0x200
|
||||
5. область памяти - 0x41A-0x43C
|
||||
0xD000:0x100
|
||||
0xFFFF:0xE
|
||||
- читать/писать в произвольный порт ввода/вывода (например: считать
|
||||
порт 0x40 несколько раз - попробуйте объяснить наблюдаемый резуль-
|
||||
тат; записать число 3 в 61 порт, потом быстро записать туда нуль);
|
||||
|
||||
6. Определите в какие команды Ассемблера оттранслирован с языка СИ
|
||||
оператор цикла. Напишите на уровне Ассемблера свой вариант цикла.
|
||||
Сравните, результаты представте преподавателю.
|
||||
*/
|
||||
|
||||
172
Labv12.CPP
172
Labv12.CPP
@ -1,87 +1,87 @@
|
||||
/* <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
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
|
||||
typedef unsigned int WORD;
|
||||
typedef unsigned long DWORD;
|
||||
struct BITMAPFILEHEADER {
|
||||
WORD bfType;
|
||||
DWORD bfSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䠩<><E4A0A9>
|
||||
WORD bfReserved1;
|
||||
WORD bfReserved2;
|
||||
DWORD bfOffBits;
|
||||
};
|
||||
struct BITMAPINFOHEADER{
|
||||
DWORD biSize;
|
||||
DWORD biWidth;
|
||||
DWORD biHeight;
|
||||
WORD biPlanes;
|
||||
WORD biBitCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD> <20> <20><><EFBFBD>ᥫ<EFBFBD>
|
||||
DWORD biCompression;
|
||||
DWORD biSizeImage;
|
||||
DWORD biXPelsPerMeter;
|
||||
DWORD biYPelsPerMeter;
|
||||
DWORD biClrUsed;
|
||||
DWORD biClrImportant;
|
||||
};
|
||||
|
||||
|
||||
void main(int c,char **a)
|
||||
{
|
||||
FILE *in, *out;
|
||||
highvideo();
|
||||
BITMAPFILEHEADER bfh;
|
||||
BITMAPINFOHEADER bih;
|
||||
/* FILE *po;
|
||||
if(argc==0) return 0;
|
||||
if(argc==2) { mode=257;} else mode=atoi(argv[2]);
|
||||
po=fopen(argv[1],"rb");
|
||||
fread(&bfh,14,1,po);
|
||||
fread(&bih,40,1,po);
|
||||
if(bih.biBitCount!=8) return 1;
|
||||
if(bih.biClrUsed==0){ cmax=256; }
|
||||
else cmax=bih.biClrUsed;
|
||||
*/
|
||||
cputs("(c) Rex Software'99 Bmp Universal Invertor v1.0");
|
||||
normvideo();
|
||||
cputs("");
|
||||
|
||||
int n,bpp;
|
||||
if (c!=2)
|
||||
{
|
||||
puts("\nNeeds some bmps");
|
||||
return ;
|
||||
}
|
||||
|
||||
in = fopen(a[1], "rb");
|
||||
if ((out = fopen("inversed.bmp", "wb"))== NULL)
|
||||
{
|
||||
puts("Cannot open output file"); return ;
|
||||
}
|
||||
cprintf("\n");
|
||||
cputs("Please wait");
|
||||
for (int i=0;i<54;i++) {
|
||||
int c=fgetc(in);
|
||||
fputc(c,out);
|
||||
if (i==28) bpp=c;}
|
||||
if (bpp==8)
|
||||
{
|
||||
for (i=0;i<1024;i++) fputc(255-fgetc(in),out);
|
||||
|
||||
while (!feof(in)) fputc(fgetc(in),out);
|
||||
}
|
||||
if (bpp==24)
|
||||
{ for (int i=0;i<54;i++) fputc(fgetc(in),out);
|
||||
while (!feof(in)) fputc(255-fgetc(in),out);}
|
||||
|
||||
fcloseall();
|
||||
printf("\n%s is %d bit-per-pixel color depth bitmap\n",a[1],bpp);
|
||||
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>.
|
||||
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>)
|
||||
<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>.
|
||||
/* Структура растрового ВМР файла
|
||||
Лабораторная работа 12
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
|
||||
typedef unsigned int WORD;
|
||||
typedef unsigned long DWORD;
|
||||
struct BITMAPFILEHEADER {
|
||||
WORD bfType;
|
||||
DWORD bfSize; // Размер файла
|
||||
WORD bfReserved1;
|
||||
WORD bfReserved2;
|
||||
DWORD bfOffBits;
|
||||
};
|
||||
struct BITMAPINFOHEADER{
|
||||
DWORD biSize;
|
||||
DWORD biWidth;
|
||||
DWORD biHeight;
|
||||
WORD biPlanes;
|
||||
WORD biBitCount; // Количество бит в пикселе
|
||||
DWORD biCompression;
|
||||
DWORD biSizeImage;
|
||||
DWORD biXPelsPerMeter;
|
||||
DWORD biYPelsPerMeter;
|
||||
DWORD biClrUsed;
|
||||
DWORD biClrImportant;
|
||||
};
|
||||
|
||||
|
||||
void main(int c,char **a)
|
||||
{
|
||||
FILE *in, *out;
|
||||
highvideo();
|
||||
BITMAPFILEHEADER bfh;
|
||||
BITMAPINFOHEADER bih;
|
||||
/* FILE *po;
|
||||
if(argc==0) return 0;
|
||||
if(argc==2) { mode=257;} else mode=atoi(argv[2]);
|
||||
po=fopen(argv[1],"rb");
|
||||
fread(&bfh,14,1,po);
|
||||
fread(&bih,40,1,po);
|
||||
if(bih.biBitCount!=8) return 1;
|
||||
if(bih.biClrUsed==0){ cmax=256; }
|
||||
else cmax=bih.biClrUsed;
|
||||
*/
|
||||
cputs("(c) Rex Software'99 Bmp Universal Invertor v1.0");
|
||||
normvideo();
|
||||
cputs("");
|
||||
|
||||
int n,bpp;
|
||||
if (c!=2)
|
||||
{
|
||||
puts("\nNeeds some bmps");
|
||||
return ;
|
||||
}
|
||||
|
||||
in = fopen(a[1], "rb");
|
||||
if ((out = fopen("inversed.bmp", "wb"))== NULL)
|
||||
{
|
||||
puts("Cannot open output file"); return ;
|
||||
}
|
||||
cprintf("\n");
|
||||
cputs("Please wait");
|
||||
for (int i=0;i<54;i++) {
|
||||
int c=fgetc(in);
|
||||
fputc(c,out);
|
||||
if (i==28) bpp=c;}
|
||||
if (bpp==8)
|
||||
{
|
||||
for (i=0;i<1024;i++) fputc(255-fgetc(in),out);
|
||||
|
||||
while (!feof(in)) fputc(fgetc(in),out);
|
||||
}
|
||||
if (bpp==24)
|
||||
{ for (int i=0;i<54;i++) fputc(fgetc(in),out);
|
||||
while (!feof(in)) fputc(255-fgetc(in),out);}
|
||||
|
||||
fcloseall();
|
||||
printf("\n%s is %d bit-per-pixel color depth bitmap\n",a[1],bpp);
|
||||
puts("Successsfully retrieved to Inversed.bmp");
|
||||
}
|
||||
/* Задание
|
||||
1. Напишите программу бинаризации изображения.
|
||||
2. Напишите программу тестирования входного файла (8 - 24 бита)
|
||||
обязательно используйте структуры для тестирования.
|
||||
*/
|
||||
348
Labv13.cpp
348
Labv13.cpp
@ -1,175 +1,175 @@
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 13
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ०<><E0A5A6><EFBFBD> sVGA, VESA
|
||||
*/
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#include <conio.h>
|
||||
#include <stdio.h>
|
||||
#define LOWORD(l) ((int)(1))
|
||||
#define HIWORD(l) ((int)((l) >> 16))
|
||||
#define MYMODE1 113h //800x600x32k
|
||||
#define MYMODE2 101h //640x480x256
|
||||
#define MYMODE3 105h //1024x768x256
|
||||
|
||||
int pattern_ust=1;
|
||||
int current_b=0;
|
||||
|
||||
/* struct Vesainfo {
|
||||
int attr_m;
|
||||
char attr_a;
|
||||
char attr_b;
|
||||
int h_ust;
|
||||
int size;
|
||||
unsigned segm_a;
|
||||
unsigned segm_b;
|
||||
void far (*fun)();
|
||||
int byte_str;
|
||||
int resx;
|
||||
int resy;
|
||||
char xchsize;
|
||||
char ychsize;
|
||||
char kolvo;
|
||||
char bit_pix;
|
||||
char kolvobank;
|
||||
char memmod;
|
||||
char size_bank;
|
||||
char pages;
|
||||
char reserved;
|
||||
char red_mask_s;
|
||||
char red_mask_p;
|
||||
char green_mask_s;
|
||||
char green_mask_p;
|
||||
char blue_mask_s;
|
||||
char blue_mask_p;
|
||||
char reserved_mask_s;
|
||||
char reserved_mask_p;
|
||||
char colour_info;
|
||||
char reserved2[216];
|
||||
}mine; */
|
||||
|
||||
|
||||
struct SvgaModeInfo
|
||||
{
|
||||
unsigned state;
|
||||
char a_window_state;
|
||||
char b_window_state;
|
||||
unsigned window_multiplicity;
|
||||
unsigned window_size;
|
||||
unsigned a_window_segment;
|
||||
unsigned b_window_segment;
|
||||
void far (*fun)();
|
||||
unsigned string_width;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
char symbol_height;
|
||||
char symbol_width;
|
||||
char switches_count;
|
||||
char bits_per_pixel;
|
||||
char banks_count;
|
||||
char memory_model;
|
||||
char bank_size;
|
||||
char pages_count;
|
||||
char reserved1;
|
||||
char red_mask;
|
||||
char red_bit;
|
||||
char green_mask;
|
||||
char green_bit;
|
||||
char blue_mask;
|
||||
char blue_bit;
|
||||
char reserved_mask;
|
||||
char reserved_bit;
|
||||
char palette_state;
|
||||
char lfb[10];
|
||||
char resrved2[206];
|
||||
}mine;
|
||||
|
||||
void Bank_ust(int begin)
|
||||
{
|
||||
if (begin==current_b)
|
||||
return;
|
||||
current_b=begin;
|
||||
begin *= pattern_ust;
|
||||
asm{
|
||||
mov ax,4F05h
|
||||
mov bx,0
|
||||
mov dx,begin
|
||||
push dx
|
||||
int 10h
|
||||
pop dx
|
||||
mov bx,1
|
||||
int 10h
|
||||
};
|
||||
}
|
||||
|
||||
inline int RGBcolour(int red,int green,int blue)
|
||||
{
|
||||
return ((red >> 3)<<10) | ((green >> 3)<<5) | (blue >> 3);
|
||||
}
|
||||
void set_text_mode()
|
||||
{
|
||||
asm mov ax,0x0003
|
||||
asm int 0x10
|
||||
}
|
||||
void draw(int x,int y,int colour)
|
||||
{
|
||||
long ttt;
|
||||
asm{
|
||||
mov dx,y //bank number
|
||||
shr dx,6
|
||||
mov bx,0
|
||||
};
|
||||
mine.fun();
|
||||
ttt = (y*1024%65536)+x;
|
||||
_SI = (unsigned int)ttt;
|
||||
asm{
|
||||
mov ax,colour
|
||||
mov bx,0xA000
|
||||
mov es,bx
|
||||
mov es:[si],al
|
||||
};
|
||||
}
|
||||
|
||||
void paint(int begx,int begy,int endx,int endy,int colour)
|
||||
{
|
||||
int x,y;
|
||||
for(y=begy;y<=endy;y++)
|
||||
for(x=begx;x<=endx;x++)
|
||||
draw(x,y,colour);
|
||||
|
||||
}
|
||||
void main()
|
||||
{
|
||||
int colour,x,y;
|
||||
asm{
|
||||
//information
|
||||
mov cx,MYMODE3
|
||||
lea di,mine
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
|
||||
mov ax,0x4F01
|
||||
|
||||
int 10h
|
||||
};
|
||||
asm{ //setting of this mode
|
||||
mov ax,4F02h
|
||||
mov bx,MYMODE3
|
||||
int 10h
|
||||
};
|
||||
x=0;
|
||||
y=0;
|
||||
for(colour=1;colour<255;colour++){
|
||||
if(x>1024){
|
||||
x=0;
|
||||
y=y+48;
|
||||
}
|
||||
paint(x,y,x+64,y+48,colour);
|
||||
x=x+64;
|
||||
}
|
||||
getch();
|
||||
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>.
|
||||
// 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>.
|
||||
/* Лабораторная работа 13
|
||||
Видеоадаптер, графические режимы sVGA, VESA
|
||||
*/
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#include <conio.h>
|
||||
#include <stdio.h>
|
||||
#define LOWORD(l) ((int)(1))
|
||||
#define HIWORD(l) ((int)((l) >> 16))
|
||||
#define MYMODE1 113h //800x600x32k
|
||||
#define MYMODE2 101h //640x480x256
|
||||
#define MYMODE3 105h //1024x768x256
|
||||
|
||||
int pattern_ust=1;
|
||||
int current_b=0;
|
||||
|
||||
/* struct Vesainfo {
|
||||
int attr_m;
|
||||
char attr_a;
|
||||
char attr_b;
|
||||
int h_ust;
|
||||
int size;
|
||||
unsigned segm_a;
|
||||
unsigned segm_b;
|
||||
void far (*fun)();
|
||||
int byte_str;
|
||||
int resx;
|
||||
int resy;
|
||||
char xchsize;
|
||||
char ychsize;
|
||||
char kolvo;
|
||||
char bit_pix;
|
||||
char kolvobank;
|
||||
char memmod;
|
||||
char size_bank;
|
||||
char pages;
|
||||
char reserved;
|
||||
char red_mask_s;
|
||||
char red_mask_p;
|
||||
char green_mask_s;
|
||||
char green_mask_p;
|
||||
char blue_mask_s;
|
||||
char blue_mask_p;
|
||||
char reserved_mask_s;
|
||||
char reserved_mask_p;
|
||||
char colour_info;
|
||||
char reserved2[216];
|
||||
}mine; */
|
||||
|
||||
|
||||
struct SvgaModeInfo
|
||||
{
|
||||
unsigned state;
|
||||
char a_window_state;
|
||||
char b_window_state;
|
||||
unsigned window_multiplicity;
|
||||
unsigned window_size;
|
||||
unsigned a_window_segment;
|
||||
unsigned b_window_segment;
|
||||
void far (*fun)();
|
||||
unsigned string_width;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
char symbol_height;
|
||||
char symbol_width;
|
||||
char switches_count;
|
||||
char bits_per_pixel;
|
||||
char banks_count;
|
||||
char memory_model;
|
||||
char bank_size;
|
||||
char pages_count;
|
||||
char reserved1;
|
||||
char red_mask;
|
||||
char red_bit;
|
||||
char green_mask;
|
||||
char green_bit;
|
||||
char blue_mask;
|
||||
char blue_bit;
|
||||
char reserved_mask;
|
||||
char reserved_bit;
|
||||
char palette_state;
|
||||
char lfb[10];
|
||||
char resrved2[206];
|
||||
}mine;
|
||||
|
||||
void Bank_ust(int begin)
|
||||
{
|
||||
if (begin==current_b)
|
||||
return;
|
||||
current_b=begin;
|
||||
begin *= pattern_ust;
|
||||
asm{
|
||||
mov ax,4F05h
|
||||
mov bx,0
|
||||
mov dx,begin
|
||||
push dx
|
||||
int 10h
|
||||
pop dx
|
||||
mov bx,1
|
||||
int 10h
|
||||
};
|
||||
}
|
||||
|
||||
inline int RGBcolour(int red,int green,int blue)
|
||||
{
|
||||
return ((red >> 3)<<10) | ((green >> 3)<<5) | (blue >> 3);
|
||||
}
|
||||
void set_text_mode()
|
||||
{
|
||||
asm mov ax,0x0003
|
||||
asm int 0x10
|
||||
}
|
||||
void draw(int x,int y,int colour)
|
||||
{
|
||||
long ttt;
|
||||
asm{
|
||||
mov dx,y //bank number
|
||||
shr dx,6
|
||||
mov bx,0
|
||||
};
|
||||
mine.fun();
|
||||
ttt = (y*1024%65536)+x;
|
||||
_SI = (unsigned int)ttt;
|
||||
asm{
|
||||
mov ax,colour
|
||||
mov bx,0xA000
|
||||
mov es,bx
|
||||
mov es:[si],al
|
||||
};
|
||||
}
|
||||
|
||||
void paint(int begx,int begy,int endx,int endy,int colour)
|
||||
{
|
||||
int x,y;
|
||||
for(y=begy;y<=endy;y++)
|
||||
for(x=begx;x<=endx;x++)
|
||||
draw(x,y,colour);
|
||||
|
||||
}
|
||||
void main()
|
||||
{
|
||||
int colour,x,y;
|
||||
asm{
|
||||
//information
|
||||
mov cx,MYMODE3
|
||||
lea di,mine
|
||||
mov ax,ds
|
||||
mov es,ax
|
||||
|
||||
mov ax,0x4F01
|
||||
|
||||
int 10h
|
||||
};
|
||||
asm{ //setting of this mode
|
||||
mov ax,4F02h
|
||||
mov bx,MYMODE3
|
||||
int 10h
|
||||
};
|
||||
x=0;
|
||||
y=0;
|
||||
for(colour=1;colour<255;colour++){
|
||||
if(x>1024){
|
||||
x=0;
|
||||
y=y+48;
|
||||
}
|
||||
paint(x,y,x+64,y+48,colour);
|
||||
x=x+64;
|
||||
}
|
||||
getch();
|
||||
set_text_mode();
|
||||
}
|
||||
// Задание
|
||||
// 1. Выведите полутоновой клин во 2 банке памяти.
|
||||
// 2. Определите как располагаются банки памяти на экране.
|
||||
//
|
||||
368
Labv14.cpp
368
Labv14.cpp
@ -1,184 +1,184 @@
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 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 <conio.h>
|
||||
void NullProc(void){}
|
||||
void ExTime(void (*PP)(void))
|
||||
{
|
||||
long far* pTime = (long*)0x46C; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA>
|
||||
long Time0, Time1, Time2, i;
|
||||
|
||||
void (*NP)(void);
|
||||
NP = NullProc;
|
||||
Time0 = *pTime;
|
||||
for (i = 1; i<1000000L; i++)
|
||||
{
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
}
|
||||
Time1 = *pTime;
|
||||
for (i = 1; i<1000000L; i++)
|
||||
{
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
}
|
||||
Time2 = *pTime;
|
||||
Time2 = (((Time2 - Time1) - (Time1 - Time0))*(6553500L/1193180L));
|
||||
printf("%ld <EFBFBD><EFBFBD>\n",Time2);
|
||||
}
|
||||
void P1(void) //ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
asm{
|
||||
mov ax,bx
|
||||
mov dx,ax
|
||||
stc
|
||||
adc bx,cx
|
||||
stc
|
||||
sbb dx,ax
|
||||
|
||||
add ax,bx
|
||||
mov cx,ax
|
||||
sub dx,bx
|
||||
mov bx,dx
|
||||
}
|
||||
}
|
||||
void P2(void) //ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>
|
||||
{
|
||||
asm{
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
void P3(void) //<EFBFBD><EFBFBD>㣨<EFBFBD> <20><><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
asm{
|
||||
mov cl,3 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>।<EFBFBD>⢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD>
|
||||
inc bx
|
||||
mov cl,3
|
||||
dec bx
|
||||
mov cl,3
|
||||
inc bx
|
||||
mov cl,3
|
||||
dec bx
|
||||
|
||||
inc bx //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<><E1A4A2><EFBFBD> <20> cl <20> <20><><EFBFBD><EFBFBD><EFBFBD>⢥ <20><><EFBFBD><EFBFBD>稪<EFBFBD>
|
||||
ror ax,cl
|
||||
dec bx
|
||||
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>
|
||||
mov ax,ds:[bx]
|
||||
mov ax,ss:[bx]
|
||||
mov ax,es:[bx]
|
||||
mov ax,cs:[bx]
|
||||
mov cl,3
|
||||
mov cl,3
|
||||
mov cl,3
|
||||
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>
|
||||
ror ax,1
|
||||
rol ax,1
|
||||
dec dx
|
||||
}
|
||||
}
|
||||
void P4(void) //<EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>
|
||||
{
|
||||
asm{
|
||||
|
||||
}
|
||||
}
|
||||
void main(void)
|
||||
{
|
||||
clrscr();
|
||||
printf("Program1 - ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
ExTime(P1);
|
||||
printf("Program2 - ॣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ᨬ<EFBFBD><E1A8AC><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>\n");
|
||||
ExTime(P2);
|
||||
printf("Program3 - <EFBFBD><EFBFBD>㣨<EFBFBD> <20><><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
ExTime(P3);
|
||||
printf("Program4 - <EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> <20><>ᯠ७<E1AFA0><E0A5AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>\n");
|
||||
ExTime(P4);
|
||||
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>.
|
||||
// 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>.
|
||||
//
|
||||
/* <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>
|
||||
⠪<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) ,
|
||||
-<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> ᮤ<>ঠ<EFBFBD><E0A6A0> ᬥ饭<E1ACA5><E9A5AD> (displacement) <EFBFBD>
|
||||
<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)
|
||||
<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>.
|
||||
<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>
|
||||
<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 mem, reg/imm (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD>) ;
|
||||
-alu reg, reg/mero/imm (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>䬥<EFBFBD><E4ACA5><EFBFBD><EFBFBD>᪨<EFBFBD>
|
||||
- alu meln , reg/ imm <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>権) ;
|
||||
- inc reg/mem (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD>,
|
||||
- dec reg/mem (<EFBFBD><EFBFBD><EFBFBD>६<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) ;
|
||||
-push reg/mem (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>饭<EFBFBD><E9A5AD>
|
||||
- pop reg (<EFBFBD> <20>⥪<EFBFBD><E2A5AA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) ;
|
||||
-lea reg,mem (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>㧪<EFBFBD> ᥣ<><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD>) ;
|
||||
-jmp/call/jcc near (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD> <20><>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>) ;
|
||||
-n<EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) .
|
||||
<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>.
|
||||
<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>
|
||||
<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>
|
||||
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><>
|
||||
<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>,
|
||||
ᮮ⢥<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>
|
||||
<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>
|
||||
⮬, <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>.
|
||||
|
||||
*/
|
||||
/* Лабораторная работа 14
|
||||
Объединение команд для их параллельного выполнения
|
||||
(оптимизация уровня команд)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
void NullProc(void){}
|
||||
void ExTime(void (*PP)(void))
|
||||
{
|
||||
long far* pTime = (long*)0x46C; //счетчик тиков
|
||||
long Time0, Time1, Time2, i;
|
||||
|
||||
void (*NP)(void);
|
||||
NP = NullProc;
|
||||
Time0 = *pTime;
|
||||
for (i = 1; i<1000000L; i++)
|
||||
{
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
NP();
|
||||
}
|
||||
Time1 = *pTime;
|
||||
for (i = 1; i<1000000L; i++)
|
||||
{
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
PP();
|
||||
}
|
||||
Time2 = *pTime;
|
||||
Time2 = (((Time2 - Time1) - (Time1 - Time0))*(6553500L/1193180L));
|
||||
printf("%ld нс\n",Time2);
|
||||
}
|
||||
void P1(void) //регистровые зависимости имеются
|
||||
{
|
||||
asm{
|
||||
mov ax,bx
|
||||
mov dx,ax
|
||||
stc
|
||||
adc bx,cx
|
||||
stc
|
||||
sbb dx,ax
|
||||
|
||||
add ax,bx
|
||||
mov cx,ax
|
||||
sub dx,bx
|
||||
mov bx,dx
|
||||
}
|
||||
}
|
||||
void P2(void) //регистровые зависимости устранены
|
||||
{
|
||||
asm{
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
void P3(void) //другие причины неспаренности
|
||||
{
|
||||
asm{
|
||||
mov cl,3 //непосредственный операнд
|
||||
inc bx
|
||||
mov cl,3
|
||||
dec bx
|
||||
mov cl,3
|
||||
inc bx
|
||||
mov cl,3
|
||||
dec bx
|
||||
|
||||
inc bx //команды сдвига с cl в качестве счетчика
|
||||
ror ax,cl
|
||||
dec bx
|
||||
rol ax,cl
|
||||
|
||||
inc dx //команды с префиксами м. б. в U - конвейере
|
||||
mov ax,ds:[bx]
|
||||
mov ax,ss:[bx]
|
||||
mov ax,es:[bx]
|
||||
mov ax,cs:[bx]
|
||||
mov cl,3
|
||||
mov cl,3
|
||||
mov cl,3
|
||||
dec dx
|
||||
|
||||
inc dx //команды сдвига м. б. в U - конвейере
|
||||
ror ax,1
|
||||
rol ax,1
|
||||
dec dx
|
||||
}
|
||||
}
|
||||
void P4(void) //причины неспаренности устранены
|
||||
{
|
||||
asm{
|
||||
|
||||
}
|
||||
}
|
||||
void main(void)
|
||||
{
|
||||
clrscr();
|
||||
printf("Program1 - регистровые зависимости имеются\n");
|
||||
ExTime(P1);
|
||||
printf("Program2 - регистровые зависимости устранены\n");
|
||||
ExTime(P2);
|
||||
printf("Program3 - другие причины неспаренности\n");
|
||||
ExTime(P3);
|
||||
printf("Program4 - причины неспаренности устранены\n");
|
||||
ExTime(P4);
|
||||
getch();
|
||||
}
|
||||
|
||||
//Задание
|
||||
// 1. Устраните причины неспаренности команд.
|
||||
// 2. Определите и объясните время выполнения фрагментов программ.
|
||||
//
|
||||
/* ПРАВИЛА ОБЪЕДИНЕНИЯ КОМАНД
|
||||
Процессор Pentium может выполнять одну или две команды в каждом
|
||||
такте. Для выполнения в процессоре одновременно двух команд они
|
||||
должны удовлетворять следующим условиям:
|
||||
|
||||
-обе команды в паре обязаны быть <простыми> в смысле, определенном
|
||||
ниже;
|
||||
-между ними не должно быть регистровых зависимостей типа чтение- после-
|
||||
записи или запись-после-записи (read-after-write or write-after-wnte) ,
|
||||
-ни одна из команд не может содержать смещение (displacement) и
|
||||
непосредственный операнд;
|
||||
-команды с префиксами (за исключением OF в командах перехода JCC)
|
||||
могут встречаться только в U-конвейере.
|
||||
Под простыми командами понимаются команды, управление
|
||||
выполнением которых осуществляется аппаратно, без использования
|
||||
микрокоманд, и которые реализуются за один такт. Исключением являются
|
||||
команды ALU mem, reg и ALU reg, mem, требующие трех и двух тактов для
|
||||
выполнения соответственно. Специальные аппаратные средства
|
||||
используются для их выполнения как простых команд. Следующие
|
||||
целочисленные команды рассматриваются в качестве простых и могут быть
|
||||
спарены:
|
||||
-mov reg, reg/mem/imnl
|
||||
-mov mem, reg/imm (команды передачи) ;
|
||||
-alu reg, reg/mero/imm (команды арифметических
|
||||
- alu meln , reg/ imm и логических операций) ;
|
||||
- inc reg/mem (команды инкремента,
|
||||
- dec reg/mem (декремента) ;
|
||||
-push reg/mem (команды обращения
|
||||
- pop reg (к стековой памяти) ;
|
||||
-lea reg,mem (команды загрузки сегментных регистров) ;
|
||||
-jmp/call/jcc near (команды передачи управления) ;
|
||||
-nор (пустая команда) .
|
||||
Команды безусловной и условной передач управления могут
|
||||
о6ьединяться в пары, если они встречаются в качестве вторых команд в паре.
|
||||
Они не могут быть спарены со следующей последовательной командой. Также
|
||||
команды SHIFT/ROT со сдвигом на один разряд и SHIFT на произвольное
|
||||
число разрядов могут спариваться только как первые ( команды в паре).
|
||||
Регистровые зависимости
|
||||
Регистровые зависимости, запрещающие спаривание команд, включают
|
||||
неявные зависимости через регистры или флаги, не указанные в команде.
|
||||
Все виды зависимостей по данным могут быть классифицированы по
|
||||
типу ассоциаций: RAR - "чтение после чтения", WAR - "запись после чтения" и
|
||||
WAW - "запись после записи", RAW - "чтение после записи". Некоторые из
|
||||
зависимостей по данным могут быть устранены. RAR, по сути дела,
|
||||
соответствует отсутствию зависимостей, поскольку в данном случае порядок
|
||||
выполнения команд не имеет значения. Действительной зависимостью является
|
||||
только "чтение после записи" (RAW), так как необходимо прочитать
|
||||
предварительно записанные новые данные, а не старые.
|
||||
Лишние зависимости по данным появляются в результате "записи после
|
||||
чтения" (WAR) и "записи после записи" (WAW). Зависимость WAR состоит в
|
||||
том, что команда должна записать новое значение в ячейку памяти или регистр,
|
||||
из которых должно быть произведено чтение. Лишние зависимости появляются
|
||||
по нескольким причинам: не оптимизированный программный код, ограничение
|
||||
количества регистров, стремление к экономии памяти, наличие программных
|
||||
циклов.
|
||||
|
||||
*/
|
||||
|
||||
512
Labv15.cpp
512
Labv15.cpp
@ -1,256 +1,256 @@
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> ࠡ<><E0A0A1><EFBFBD> 15
|
||||
Saund Blaster
|
||||
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>
|
||||
2. <EFBFBD><EFBFBD><EFBFBD>ࠩ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <conio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
|
||||
#define KEYON 0x20 // key-on bit in regs b0 - b8
|
||||
#define FM 8 // SB (mono) ports (e.g. 228H and 229H)
|
||||
|
||||
unsigned IOport=544; // Sound Blaster port address
|
||||
|
||||
void mydelay(unsigned long clocks)
|
||||
// time = clocks / 2386360
|
||||
{
|
||||
unsigned long elapsed=0;
|
||||
unsigned int last,next,ncopy,diff;
|
||||
|
||||
/* Read the counter value. */
|
||||
outp(0x43,0); /* want to read timer 0 */
|
||||
last=inp(0x40); /* low byte */
|
||||
last=~((inp(0x40)<< 8) + last); /* high byte */
|
||||
|
||||
do {
|
||||
/* Read the counter value. */
|
||||
outp(0x43,0); /* want to read timer 0 */
|
||||
next=inp(0x40); /* low byte */
|
||||
ncopy=next=~((inp(0x40)<< 8) + next); /* high byte */
|
||||
|
||||
next-=last; /* this is now number of elapsed clock pulses since last read */
|
||||
|
||||
elapsed += next; /* add to total elapsed clock pulses */
|
||||
last=ncopy;
|
||||
} while (elapsed<clocks);
|
||||
}
|
||||
|
||||
void FMoutput(unsigned port, int reg, int val)
|
||||
/* This outputs a value to a specified FM register at a specified FM port. */
|
||||
{
|
||||
outp(port, reg);
|
||||
mydelay(8); /* need to wait 3.3 microsec */
|
||||
outp(port+1, val);
|
||||
mydelay(55); /* need to wait 23 microsec */
|
||||
}
|
||||
|
||||
|
||||
|
||||
void fm(int reg, int val)
|
||||
/* This function outputs a value to a specified FM register at the Sound
|
||||
* Blaster (mono) port address.
|
||||
*/
|
||||
{
|
||||
FMoutput(IOport+FM, reg, val);
|
||||
}
|
||||
|
||||
|
||||
void outdsp (unsigned char ch)
|
||||
{
|
||||
while (inportb(0x022C)&0x80);
|
||||
outportb(0x022C,ch);
|
||||
}
|
||||
|
||||
void midimain(void)
|
||||
{
|
||||
int i,val1,val2;
|
||||
|
||||
int block,b,m,f,fn;
|
||||
|
||||
clrscr();
|
||||
|
||||
printf("Program compiled for Sound Blaster 1.0 - 2.0 .\n");
|
||||
|
||||
|
||||
fm(1,0); /* must initialize this to zero */
|
||||
|
||||
fm(0xC0,1); /* parallel connection */
|
||||
|
||||
/***************************************
|
||||
* Set parameters for the carrier cell *
|
||||
***************************************/
|
||||
|
||||
fm(0x23,0x21); /* no amplitude modulation (D7=0), no vibrato (D6=0),
|
||||
* sustained envelope type (D5=1), KSR=0 (D4=0),
|
||||
* frequency multiplier=1 (D4-D0=1)
|
||||
*/
|
||||
|
||||
fm(0x43,0x0); /* no volume decrease with pitch (D7-D6=0),
|
||||
* no attenuation (D5-D0=0)
|
||||
*/
|
||||
|
||||
fm(0x63,0xff); /* fast attack (D7-D4=0xF) and decay (D3-D0=0xF) */
|
||||
fm(0x83,0x05); /* high sustain level (D7-D4=0), slow release rate (D3-D0=5) */
|
||||
|
||||
|
||||
/*****************************************
|
||||
* Set parameters for the modulator cell *
|
||||
*****************************************/
|
||||
|
||||
fm(0x20,0x20); /* sustained envelope type, frequency multiplier=0 */
|
||||
fm(0x40,0x3f); /* maximum attenuation, no volume decrease with pitch */
|
||||
|
||||
/* Since the modulator signal is attenuated as much as possible, these
|
||||
* next two values shouldn't have any effect.
|
||||
*/
|
||||
fm(0x60,0x44); /* slow attack and decay */
|
||||
fm(0x80,0x05); /* high sustain level, slow release rate */
|
||||
|
||||
|
||||
/*************************************************
|
||||
* Generate tone from values looked up in table. *
|
||||
*************************************************/
|
||||
|
||||
printf("440 Hz tone, values looked up in table.\n");
|
||||
fm(0xa0,0x41); /* 440 Hz */
|
||||
fm(0x20,0x40);
|
||||
|
||||
fm(0xb0,0x32); /* 440 Hz, block 0, key on */
|
||||
|
||||
|
||||
|
||||
|
||||
getche();
|
||||
|
||||
fm(0xb0,0x12); /* key off */
|
||||
|
||||
|
||||
/*********************************************************
|
||||
* Generate a range of octaves by changing block number. *
|
||||
*********************************************************/
|
||||
|
||||
printf("Range of frequencies created by changing block number.\n");
|
||||
for (block=0; block<=7; block++) {
|
||||
printf("f=%5ld Hz (press Enter)\n",(long)440*(1 << block)/16);
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2) | KEYON);
|
||||
getche();
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
* Generate a range of frequencies by changing frequency number. *
|
||||
*****************************************************************/
|
||||
|
||||
printf("Range of frequencies created by changing frequency number.\n");
|
||||
block=4;
|
||||
for (fn=0; fn<1024; fn++) {
|
||||
fm(0xA0,(fn & 0xFF));
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2) | KEYON);
|
||||
delay(1);
|
||||
}
|
||||
|
||||
/*********************************
|
||||
* Attenuate the signal by 3 dB. *
|
||||
*********************************/
|
||||
|
||||
getche();
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2) | KEYON);
|
||||
printf("Attenuated by 3 dB.\n");
|
||||
fm(0x43,4); /* attenuate by 3 dB */
|
||||
getche();
|
||||
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2));
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
unsigned int x;
|
||||
FILE *fp;
|
||||
char buf,key;
|
||||
unsigned long playtime,showtime;
|
||||
unsigned char gstring[80];
|
||||
|
||||
|
||||
int main ( int argc, char *argv[] )
|
||||
{
|
||||
//----------------
|
||||
// Initialize DSP for Voice
|
||||
//-------------
|
||||
outportb(0x0226,0x01);
|
||||
delay(3);
|
||||
outportb(0x0226,0x00);
|
||||
for(x=0;x<100;x++)
|
||||
{
|
||||
if(inportb(0x022E)&0x80)
|
||||
{
|
||||
if(inportb(0x022A)==0xAA) break;
|
||||
}
|
||||
}
|
||||
if(x==100)
|
||||
{
|
||||
printf("Sound Blaster not found at 0220h\n");
|
||||
exit(1);
|
||||
}
|
||||
//------------
|
||||
// Menu
|
||||
//-----------------
|
||||
clrscr();
|
||||
printf("1) Play original\n2) Play reduced\n3) FM Synth\n4) Exit\n");
|
||||
key=getch();
|
||||
if (key=='4') exit(0);
|
||||
if (key=='3') midimain();
|
||||
//------------
|
||||
// Read file & play
|
||||
//-----------------
|
||||
clrscr();
|
||||
printf("Program compiled for Sound Blaster ver. 1.0 (8bit 44100Hz mono).\n\n");
|
||||
if (key=='1') printf("Normal play.\n");
|
||||
if (key=='2') printf("Reduced play.\n");
|
||||
printf("Playing .wav ...\n\n");
|
||||
if(argc==1)
|
||||
{
|
||||
printf(".WAV file not specified\n");
|
||||
exit(1);
|
||||
}
|
||||
strcpy(gstring,argv[1]);
|
||||
strcat(gstring,".WAV");
|
||||
if((fp=fopen(gstring,"rb"))==0)
|
||||
{
|
||||
strcpy(gstring,argv[1]);
|
||||
if((fp=fopen(gstring,"rb"))==0)
|
||||
{
|
||||
printf("Error opening .WAV file [%s]\n",argv[1]);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
printf("FILE: [%s]\n",gstring);
|
||||
fseek(fp,36L,SEEK_SET);
|
||||
while (inportb(0x022C)&0x80);
|
||||
outdsp(0xD1); //speaker on
|
||||
playtime=0;
|
||||
while (fread(&buf,1,1,fp)!=0)
|
||||
{
|
||||
if(key=='2') fread(&buf,1,1,fp);
|
||||
if(key=='2') mydelay(15);
|
||||
if(key=='2') playtime++;
|
||||
if(key=='2') showtime=playtime/100000;
|
||||
if(key=='2') if (showtime*100000== playtime) printf("Time: %u \r",showtime);
|
||||
outdsp(0x10);
|
||||
outdsp(buf);
|
||||
mydelay(15);
|
||||
playtime++;
|
||||
showtime=playtime/100000;
|
||||
if (showtime*100000== playtime) printf("Time: %u r",showtime);
|
||||
|
||||
}
|
||||
outdsp(0xD3); //speaker off
|
||||
fclose(fp);
|
||||
return 0;
|
||||
};
|
||||
/* Лабораторная работа 15
|
||||
Saund Blaster
|
||||
FM синтез
|
||||
Задание
|
||||
1. Проиграйте гамму, вызовите спецэффекты
|
||||
2. Сыграйте мелодию
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <conio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
|
||||
#define KEYON 0x20 // key-on bit in regs b0 - b8
|
||||
#define FM 8 // SB (mono) ports (e.g. 228H and 229H)
|
||||
|
||||
unsigned IOport=544; // Sound Blaster port address
|
||||
|
||||
void mydelay(unsigned long clocks)
|
||||
// time = clocks / 2386360
|
||||
{
|
||||
unsigned long elapsed=0;
|
||||
unsigned int last,next,ncopy,diff;
|
||||
|
||||
/* Read the counter value. */
|
||||
outp(0x43,0); /* want to read timer 0 */
|
||||
last=inp(0x40); /* low byte */
|
||||
last=~((inp(0x40)<< 8) + last); /* high byte */
|
||||
|
||||
do {
|
||||
/* Read the counter value. */
|
||||
outp(0x43,0); /* want to read timer 0 */
|
||||
next=inp(0x40); /* low byte */
|
||||
ncopy=next=~((inp(0x40)<< 8) + next); /* high byte */
|
||||
|
||||
next-=last; /* this is now number of elapsed clock pulses since last read */
|
||||
|
||||
elapsed += next; /* add to total elapsed clock pulses */
|
||||
last=ncopy;
|
||||
} while (elapsed<clocks);
|
||||
}
|
||||
|
||||
void FMoutput(unsigned port, int reg, int val)
|
||||
/* This outputs a value to a specified FM register at a specified FM port. */
|
||||
{
|
||||
outp(port, reg);
|
||||
mydelay(8); /* need to wait 3.3 microsec */
|
||||
outp(port+1, val);
|
||||
mydelay(55); /* need to wait 23 microsec */
|
||||
}
|
||||
|
||||
|
||||
|
||||
void fm(int reg, int val)
|
||||
/* This function outputs a value to a specified FM register at the Sound
|
||||
* Blaster (mono) port address.
|
||||
*/
|
||||
{
|
||||
FMoutput(IOport+FM, reg, val);
|
||||
}
|
||||
|
||||
|
||||
void outdsp (unsigned char ch)
|
||||
{
|
||||
while (inportb(0x022C)&0x80);
|
||||
outportb(0x022C,ch);
|
||||
}
|
||||
|
||||
void midimain(void)
|
||||
{
|
||||
int i,val1,val2;
|
||||
|
||||
int block,b,m,f,fn;
|
||||
|
||||
clrscr();
|
||||
|
||||
printf("Program compiled for Sound Blaster 1.0 - 2.0 .\n");
|
||||
|
||||
|
||||
fm(1,0); /* must initialize this to zero */
|
||||
|
||||
fm(0xC0,1); /* parallel connection */
|
||||
|
||||
/***************************************
|
||||
* Set parameters for the carrier cell *
|
||||
***************************************/
|
||||
|
||||
fm(0x23,0x21); /* no amplitude modulation (D7=0), no vibrato (D6=0),
|
||||
* sustained envelope type (D5=1), KSR=0 (D4=0),
|
||||
* frequency multiplier=1 (D4-D0=1)
|
||||
*/
|
||||
|
||||
fm(0x43,0x0); /* no volume decrease with pitch (D7-D6=0),
|
||||
* no attenuation (D5-D0=0)
|
||||
*/
|
||||
|
||||
fm(0x63,0xff); /* fast attack (D7-D4=0xF) and decay (D3-D0=0xF) */
|
||||
fm(0x83,0x05); /* high sustain level (D7-D4=0), slow release rate (D3-D0=5) */
|
||||
|
||||
|
||||
/*****************************************
|
||||
* Set parameters for the modulator cell *
|
||||
*****************************************/
|
||||
|
||||
fm(0x20,0x20); /* sustained envelope type, frequency multiplier=0 */
|
||||
fm(0x40,0x3f); /* maximum attenuation, no volume decrease with pitch */
|
||||
|
||||
/* Since the modulator signal is attenuated as much as possible, these
|
||||
* next two values shouldn't have any effect.
|
||||
*/
|
||||
fm(0x60,0x44); /* slow attack and decay */
|
||||
fm(0x80,0x05); /* high sustain level, slow release rate */
|
||||
|
||||
|
||||
/*************************************************
|
||||
* Generate tone from values looked up in table. *
|
||||
*************************************************/
|
||||
|
||||
printf("440 Hz tone, values looked up in table.\n");
|
||||
fm(0xa0,0x41); /* 440 Hz */
|
||||
fm(0x20,0x40);
|
||||
|
||||
fm(0xb0,0x32); /* 440 Hz, block 0, key on */
|
||||
|
||||
|
||||
|
||||
|
||||
getche();
|
||||
|
||||
fm(0xb0,0x12); /* key off */
|
||||
|
||||
|
||||
/*********************************************************
|
||||
* Generate a range of octaves by changing block number. *
|
||||
*********************************************************/
|
||||
|
||||
printf("Range of frequencies created by changing block number.\n");
|
||||
for (block=0; block<=7; block++) {
|
||||
printf("f=%5ld Hz (press Enter)\n",(long)440*(1 << block)/16);
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2) | KEYON);
|
||||
getche();
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
* Generate a range of frequencies by changing frequency number. *
|
||||
*****************************************************************/
|
||||
|
||||
printf("Range of frequencies created by changing frequency number.\n");
|
||||
block=4;
|
||||
for (fn=0; fn<1024; fn++) {
|
||||
fm(0xA0,(fn & 0xFF));
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2) | KEYON);
|
||||
delay(1);
|
||||
}
|
||||
|
||||
/*********************************
|
||||
* Attenuate the signal by 3 dB. *
|
||||
*********************************/
|
||||
|
||||
getche();
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2) | KEYON);
|
||||
printf("Attenuated by 3 dB.\n");
|
||||
fm(0x43,4); /* attenuate by 3 dB */
|
||||
getche();
|
||||
|
||||
fm(0xB0,((fn >> 8) & 0x3) + (block << 2));
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
unsigned int x;
|
||||
FILE *fp;
|
||||
char buf,key;
|
||||
unsigned long playtime,showtime;
|
||||
unsigned char gstring[80];
|
||||
|
||||
|
||||
int main ( int argc, char *argv[] )
|
||||
{
|
||||
//----------------
|
||||
// Initialize DSP for Voice
|
||||
//-------------
|
||||
outportb(0x0226,0x01);
|
||||
delay(3);
|
||||
outportb(0x0226,0x00);
|
||||
for(x=0;x<100;x++)
|
||||
{
|
||||
if(inportb(0x022E)&0x80)
|
||||
{
|
||||
if(inportb(0x022A)==0xAA) break;
|
||||
}
|
||||
}
|
||||
if(x==100)
|
||||
{
|
||||
printf("Sound Blaster not found at 0220h\n");
|
||||
exit(1);
|
||||
}
|
||||
//------------
|
||||
// Menu
|
||||
//-----------------
|
||||
clrscr();
|
||||
printf("1) Play original\n2) Play reduced\n3) FM Synth\n4) Exit\n");
|
||||
key=getch();
|
||||
if (key=='4') exit(0);
|
||||
if (key=='3') midimain();
|
||||
//------------
|
||||
// Read file & play
|
||||
//-----------------
|
||||
clrscr();
|
||||
printf("Program compiled for Sound Blaster ver. 1.0 (8bit 44100Hz mono).\n\n");
|
||||
if (key=='1') printf("Normal play.\n");
|
||||
if (key=='2') printf("Reduced play.\n");
|
||||
printf("Playing .wav ...\n\n");
|
||||
if(argc==1)
|
||||
{
|
||||
printf(".WAV file not specified\n");
|
||||
exit(1);
|
||||
}
|
||||
strcpy(gstring,argv[1]);
|
||||
strcat(gstring,".WAV");
|
||||
if((fp=fopen(gstring,"rb"))==0)
|
||||
{
|
||||
strcpy(gstring,argv[1]);
|
||||
if((fp=fopen(gstring,"rb"))==0)
|
||||
{
|
||||
printf("Error opening .WAV file [%s]\n",argv[1]);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
printf("FILE: [%s]\n",gstring);
|
||||
fseek(fp,36L,SEEK_SET);
|
||||
while (inportb(0x022C)&0x80);
|
||||
outdsp(0xD1); //speaker on
|
||||
playtime=0;
|
||||
while (fread(&buf,1,1,fp)!=0)
|
||||
{
|
||||
if(key=='2') fread(&buf,1,1,fp);
|
||||
if(key=='2') mydelay(15);
|
||||
if(key=='2') playtime++;
|
||||
if(key=='2') showtime=playtime/100000;
|
||||
if(key=='2') if (showtime*100000== playtime) printf("Time: %u \r",showtime);
|
||||
outdsp(0x10);
|
||||
outdsp(buf);
|
||||
mydelay(15);
|
||||
playtime++;
|
||||
showtime=playtime/100000;
|
||||
if (showtime*100000== playtime) printf("Time: %u r",showtime);
|
||||
|
||||
}
|
||||
outdsp(0xD3); //speaker off
|
||||
fclose(fp);
|
||||
return 0;
|
||||
};
|
||||
|
||||
578
Labv2.cpp
578
Labv2.cpp
@ -1,289 +1,289 @@
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20><><EFBFBD> <20><><EFBFBD> ࠡ<><E0A0A1><EFBFBD> LAB2
|
||||
// <EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <20><><EFBFBD>⥬<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
|
||||
int main (void)
|
||||
{ int aa;
|
||||
|
||||
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. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> JL.
|
||||
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)
|
||||
|
||||
asm {
|
||||
cmp ax, 13
|
||||
JL metka
|
||||
..... ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
metka:
|
||||
...... ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ROL
|
||||
Rol ax, 1
|
||||
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>
|
||||
<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.
|
||||
|
||||
3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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;
|
||||
|
||||
4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NOP
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>樨
|
||||
|
||||
5. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AND
|
||||
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>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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>.
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>権 <20> <20><><EFBFBD>⠬<EFBFBD> - MOVSB
|
||||
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>権 <20><> <><E1ABAE><EFBFBD><EFBFBD> - 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
|
||||
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>㥬<EFBFBD><E3A5AC> ॣ<><E0A5A3><EFBFBD> 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 B[10]={1,1,0,0,0,0,0,0,0,0};
|
||||
|
||||
asm {
|
||||
cld //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD> 䫠<> <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>
|
||||
lea si,A
|
||||
lea di,B
|
||||
// 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);
|
||||
asm mov cx,1 ; // ????
|
||||
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 <EFBFBD>뢮<EFBFBD> <20><><EFBFBD>ᨢ<EFBFBD> <20> <20><> <20><>ப<EFBFBD><E0AEAA><EFBFBD><EFBFBD> <20><>।<EFBFBD><E0A5A4><EFBFBD>");
|
||||
for (int i=0; i<10; i++)
|
||||
{
|
||||
printf (" \n %d ", B[i]);
|
||||
}
|
||||
|
||||
getch();
|
||||
|
||||
//********************************************************
|
||||
// 5 <EFBFBD>ணࠬ<EFBFBD><EFBFBD> <20><><EFBFBD>᪠ <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᨬ<><E1A8AC><EFBFBD><EFBFBD>
|
||||
printf (" \n <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᨬ<><E1A8AC><EFBFBD><EFBFBD> ");
|
||||
/* asm
|
||||
asm
|
||||
e1: asm {
|
||||
mov ax, 0xb800
|
||||
mov es, ax
|
||||
mov
|
||||
cmp es:[di],al
|
||||
jnz e2 };
|
||||
printf (" \n <EFBFBD><EFBFBD>諨 ᨬ<><E1A8AC><EFBFBD> ");
|
||||
e2: asm add di, 2
|
||||
asm loop e1
|
||||
printf (" \n <EFBFBD><EFBFBD> <20><>諨 ᨬ<><E1A8AC><EFBFBD> ");
|
||||
getch();
|
||||
|
||||
*/
|
||||
// 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>
|
||||
// 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>
|
||||
// 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>
|
||||
// <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>
|
||||
<EFBFBD> 2 <EFBFBD>rep and bx,ax<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
|
||||
<EFBFBD> 3 <EFBFBD>add ax,16 <EFBFBD> - <EFBFBD> <EFBFBD> <EFBFBD> - <EFBFBD> <EFBFBD>
|
||||
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>
|
||||
// 5. <EFBFBD><EFBFBD><EFBFBD>ࠡ<EFBFBD>⠩<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D>奬<EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
|
||||
// <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>
|
||||
// 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.
|
||||
// <EFBFBD><EFBFBD><EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> LDS BX,PtriA
|
||||
|
||||
/*
|
||||
|
||||
<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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>-
|
||||
<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>-
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
⠪<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>
|
||||
<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>
|
||||
ᥣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - DS <EFBFBD> ES extra)
|
||||
4) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD> 䫠<><E4ABA0><EFBFBD><EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>樠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 ॣ<><E0A5A3><EFBFBD> 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> <>
|
||||
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>⮢
|
||||
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>⮢
|
||||
BX <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD>, <20>८<EFBFBD>ࠧ<EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (?)
|
||||
CX <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 <09><><EFBFBD><EFBFBD><EFBFBD>樨 <20> 楯<>窠<EFBFBD><E7AAA0>, 横<><E6A8AA>
|
||||
CL <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 (<28><>) <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> ᤢ<><E1A4A2><EFBFBD> <20> <20><><EFBFBD><EFBFBD>樨
|
||||
DX <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <>,
|
||||
<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>樨
|
||||
BP <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <20><><EFBFBD><EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD>
|
||||
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>
|
||||
DI <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫<EFBFBD> <09><><EFBFBD><EFBFBD><EFBFBD>樨 <20> 楯<>窠<EFBFBD><E7AAA0>,
|
||||
|
||||
<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
|
||||
<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
|
||||
|
||||
CF ( Carry Flag ) - 䫠<EFBFBD> <20><>७<EFBFBD><E0A5AD><EFBFBD>;
|
||||
PF ( Parity Flag ) - 䫠<EFBFBD> <20><>⭮<EFBFBD><E2ADAE><EFBFBD>;
|
||||
AF ( Auxiliary Carry Flag ) - 䫠<EFBFBD> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD><EFBFBD>⥫쭮<E2A5AB><ECADAE> <20><>७<EFBFBD><E0A5AD><EFBFBD>;
|
||||
ZF ( Zero Flag ) - 䫠<EFBFBD> <20><><EFBFBD><EFBFBD>;
|
||||
SF ( Sign Flag ) - 䫠<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>;
|
||||
TF ( Trap Flag ) - 䫠<EFBFBD> <20><><EFBFBD><EFBFBD>誨;
|
||||
IF ( Interrupt-Enable Flag ) - 䫠<EFBFBD> ࠧ<><E0A0A7>襭<EFBFBD><E8A5AD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD>;
|
||||
DF ( Direction Flag ) - 䫠<EFBFBD> <20><><EFBFBD>ࠢ<EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD>;
|
||||
OF ( Overflow Flag ) - 䫠<EFBFBD> <20><>९<EFBFBD><E0A5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 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>
|
||||
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>
|
||||
<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><>
|
||||
<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>
|
||||
<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>-
|
||||
<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><>ନ-
|
||||
<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>"
|
||||
(ᥣ<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> ᥣ-
|
||||
<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>.
|
||||
<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>)
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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
|
||||
! 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>
|
||||
<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>
|
||||
<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:
|
||||
11 - <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
(<EFBFBD><EFBFBD><EFBFBD> <20><>⠫<EFBFBD><E2A0AB><EFBFBD><EFBFBD> mod <20><><EFBFBD>࠭<EFBFBD> <20> <20><><EFBFBD>, <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>, <20><>
|
||||
<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>
|
||||
<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>)
|
||||
|
||||
- 6 -
|
||||
|
||||
01 - ᬥ饭<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
00 - ᬥ饭<EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
<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>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 <><E1ABA5><EFBFBD>騥:
|
||||
|
||||
reg <EFBFBD><EFBFBD><EFBFBD> r/m <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
000 AL AX
|
||||
001 CL CX
|
||||
010 DL DX
|
||||
011 BL BX
|
||||
100 AH SP
|
||||
101 CH BP
|
||||
110 DH SI
|
||||
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> ᯮᮡ
|
||||
<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
|
||||
000 BX+SI BX+SI+ᬥ饭<EFBFBD><EFBFBD>
|
||||
001 BX+DI BX+DI+ᬥ饭<EFBFBD><EFBFBD>
|
||||
010 BP+SI BP+DI+ᬥ饭<EFBFBD><EFBFBD>
|
||||
011 BP+DI BP+DI+ᬥ饭<EFBFBD><EFBFBD>
|
||||
100 SI SI+ᬥ饭<EFBFBD><EFBFBD>
|
||||
101 DI DI+ᬥ饭<EFBFBD><EFBFBD>
|
||||
110 direct BP+ᬥ饭<EFBFBD><EFBFBD>
|
||||
111 BX BX+ᬥ饭<EFBFBD><EFBFBD>
|
||||
|
||||
<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).
|
||||
<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>
|
||||
<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>⮢.
|
||||
|
||||
*/
|
||||
};
|
||||
// Шаблон программы для лаб работы LAB2
|
||||
// Изучение системы команд
|
||||
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
|
||||
int main (void)
|
||||
{ int aa;
|
||||
|
||||
clrscr();
|
||||
/*
|
||||
********************************************************
|
||||
1 2 3 Напишите программы, иллюстрирующие работу след команд:
|
||||
|
||||
1. Команда JL.
|
||||
JL metka.
|
||||
Осуществляет переход на указанную метку,
|
||||
если результат предыдущего сравнения: БОЛЬШЕ
|
||||
(Переход осуществляется, если флаги SF=0 и OF =0)
|
||||
|
||||
asm {
|
||||
cmp ax, 13
|
||||
JL metka
|
||||
..... ; какой-то блок команд
|
||||
|
||||
metka:
|
||||
...... ; какой-то блок команд
|
||||
};
|
||||
|
||||
2. Команда ROL
|
||||
Rol ax, 1
|
||||
Rol bx, cl
|
||||
|
||||
Команда циклического сдвига влево.
|
||||
Если второй операнд - CL, то число разрядов, на которые
|
||||
осуществляется сдвиг, определяется содержимым регистра CL.
|
||||
|
||||
3. Команда LEA.
|
||||
По этой команде адрес второго операнда передается в регистр
|
||||
первого операнда.
|
||||
lea ax, a;
|
||||
|
||||
4. Команда NOP
|
||||
Команда нет операции
|
||||
|
||||
5. Команда AND
|
||||
and ax,bx
|
||||
Команда логического умножения
|
||||
Первый операнд лог умножается (конъюнкция) на второй
|
||||
результат в первый */
|
||||
/*
|
||||
********************************************************
|
||||
4 Напишите программу со строковыми командами
|
||||
Команда MOVS.
|
||||
Команда пересылки строки.
|
||||
Направление пересылки определяется значением флага DF - флага направления.
|
||||
|
||||
Для операций с байтами - MOVSB
|
||||
Для операций со словами - MOVSW
|
||||
|
||||
Не имеет операндов. Не воздействует на флаги.
|
||||
|
||||
Пересылает из области памяти, адресуемой регистром SI - sourse
|
||||
в область памяти, адресуемую регистром DI - destination.
|
||||
|
||||
*/
|
||||
// Ниже приведен пример программы
|
||||
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};
|
||||
|
||||
asm {
|
||||
cld //сбрасываем флаг направления
|
||||
lea si,A
|
||||
lea di,B
|
||||
// mov dx,di
|
||||
};
|
||||
// Задание: Распечатайте значения индексных регистров
|
||||
// до передачи
|
||||
// printf ("\n значения индекс регистров is, di = %x %x ", _SI, _DI);
|
||||
asm mov cx,1 ; // ????
|
||||
asm movsb ; // ?????
|
||||
|
||||
// Задание: Распечатайте значения индексных регистров
|
||||
// после передачи Передача прошла? Сколько слов передано?
|
||||
|
||||
printf ("\n значения индекс регистров is, di = %x %x ", _SI, _DI);
|
||||
printf ("\n Вывод массива В после строковой передачи");
|
||||
for (int i=0; i<10; i++)
|
||||
{
|
||||
printf (" \n %d ", B[i]);
|
||||
}
|
||||
|
||||
getch();
|
||||
|
||||
//********************************************************
|
||||
// 5 Программа поиска в видеопамяти символа
|
||||
printf (" \n Поиск символа ");
|
||||
/* asm
|
||||
asm
|
||||
e1: asm {
|
||||
mov ax, 0xb800
|
||||
mov es, ax
|
||||
mov
|
||||
cmp es:[di],al
|
||||
jnz e2 };
|
||||
printf (" \n Нашли символ ");
|
||||
e2: asm add di, 2
|
||||
asm loop e1
|
||||
printf (" \n Не нашли символ ");
|
||||
getch();
|
||||
|
||||
*/
|
||||
// return (0);
|
||||
//***************** Задания ******************
|
||||
//
|
||||
// 1 Проиллюстрируйте программами указанные выше команды
|
||||
// 2 Рассмотрите двоичный код этих команд
|
||||
// 3 Заполните таблицу, используя TD. Должны присутствовать
|
||||
// все поля формата команды.
|
||||
/*
|
||||
Мнемоника Префикс КОП Постбайт Смещение Непоср.операнд
|
||||
│ │ │ │ │адресации │ │ │
|
||||
├────┼─────────────┼──────┼──────┼────────────┼─────────┼─────────────┤
|
||||
│ 1 │and ax,bx │ - │ │ │ - │ - │
|
||||
│ 2 │rep and bx,ax│ │ │ │ │ │
|
||||
│ 3 │add ax,16 │ - │ │ │ - │ │
|
||||
4 add al,[bx+si]
|
||||
*/
|
||||
|
||||
// 4. Напишите программу со строковыми командами при 10 передачах
|
||||
// 5. Разработайте блок-схему и напишите программу
|
||||
// поиска символа в видеопамяти на первых 4-х видеостраницах
|
||||
// 6. Ответьте на вопросы: Какая мнемоника двухоперандной команды 00FF.
|
||||
// Как выполняется команда LDS BX,PtriA
|
||||
|
||||
/*
|
||||
|
||||
_Структура процессора i8086
|
||||
|
||||
Программисту на уровне команд доступны четырнадцать регист-
|
||||
ров. Их удобно разбить на четыре группы: 1)Регистры данных, 2)ад-
|
||||
ресные, 3)сегментные 4)указатель команд и регистр флажков(призна-
|
||||
ков).
|
||||
1) Регистры данных (в некоторых книгах их называют регистрами общего
|
||||
назначения). Операнды в этих регистрах могут быть как слова так и
|
||||
байты. Если операнд - байт, может быть указана любая половина
|
||||
регистра. Есть ряд команд, в которых функции отдельных регистров
|
||||
специализированы (см.табл.)
|
||||
2) Указатели и индексные регистры (адресные регистры, используются для
|
||||
хранения 16-разрядных адресов). Адресные регистры во многих командах
|
||||
также специализированы (см.табл.)
|
||||
3) Сегментные регистры (указывают начала четырех сегментов - участков
|
||||
по 64 К байт в 1М ОЗУ: сегмент команд CS, сегмент стека SS и два
|
||||
сегмента данных - DS и ES extra)
|
||||
4) Указатель команд и регистр флажков
|
||||
|
||||
Специальные функции регистров 8086
|
||||
|
||||
AX Аккумулятор Умножение, деление и ввод-вывод слов
|
||||
AL Аккумулятор(мл) Умножение, деление и ввод-вывод байтов
|
||||
AH Аккумулятор(ст) Умножение и деление байтов
|
||||
BX База Базовый регистр, преобразование (?)
|
||||
CX Счетчик Операции с цепочками, циклы
|
||||
CL Счетчик (мл) Динамические сдвиги и ротации
|
||||
DX Данные Умножение и деление слов,
|
||||
косвенный ввод-вывод
|
||||
SP Указатель стека Стековые операции
|
||||
BP Указатель базы Базовый регистр
|
||||
SI Индекс источника Операции с цепочками, индексный регистр
|
||||
DI Индекс получателя Операции с цепочками,
|
||||
|
||||
_Регистр флагов процессора
|
||||
|
||||
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
|
||||
├──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┤
|
||||
OF DF IF TF SF ZF AF PF CF
|
||||
|
||||
CF ( Carry Flag ) - флаг переноса;
|
||||
PF ( Parity Flag ) - флаг четности;
|
||||
AF ( Auxiliary Carry Flag ) - флаг вспомогательного переноса;
|
||||
ZF ( Zero Flag ) - флаг нуля;
|
||||
SF ( Sign Flag ) - флаг знака;
|
||||
TF ( Trap Flag ) - флаг ловушки;
|
||||
IF ( Interrupt-Enable Flag ) - флаг разрешения прерывания;
|
||||
DF ( Direction Flag ) - флаг направления;
|
||||
OF ( Overflow Flag ) - флаг переполнения.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 5 -
|
||||
|
||||
_Организация памяти
|
||||
|
||||
Адресуемая память (адресное пространство) представляет собой
|
||||
область из 1М байт(в реальном режиме работы для микропроцессоров
|
||||
i80286 и старше). Два смежных байта образуют слово. Адресом слова
|
||||
считается адрес младшего байта. МП 8086 считывает информацию из
|
||||
ОЗУ 16 бит.словами, начинающимися с четных адресов, хотя команда
|
||||
или слово данных могут быть расположены в ОЗУ в любом адресе.
|
||||
Физический адрес памяти имеет длину 20 бит, однако все обра-
|
||||
батываемые в регистрах МП величины имеют длину 16 бит. Для форми-
|
||||
рования физических адресов используется механизм сегментации памя-
|
||||
ти. Пространство памяти 1 М доступно процессору через 4 "окна"
|
||||
(сегмента) каждый размером 64 К байт. Начальный адрес каждого сег-
|
||||
мента содержится в оюном из четырех сегментных регистров. Команды
|
||||
обращаются к байтам и словам в пределах сегментов, используя отно-
|
||||
сительный (внутрисегментный) адрес.
|
||||
|
||||
_Общий формат команды следующий:
|
||||
|
||||
[Префикс] КОП [постбайт адресации] [смещение] [непоср.операнд]
|
||||
Элементы в квадратных скобках могут отсутствовать.
|
||||
|
||||
Назначение элементов команды:
|
||||
|
||||
_Префикс .. Длина 1 байт.
|
||||
а)Префикс переназначения сегмента позволяет переназначить сегмент
|
||||
ОЗУ, к которому происходит обращение.Если префикс переназначения
|
||||
сегмента отсутствует, сегмент выбирается по умолчанию.
|
||||
б)Префикс повторения действия для строковых команд
|
||||
_КОП . - код операции. Длина 1 байт. 0-й бит КОП во многих (но не во всех)
|
||||
командах показывает, производится ли операция со словом ( =1) или с
|
||||
байтом ( =0). 1-й бит КОП в двухадресных командах указывает, какой
|
||||
из операндов является приемником.
|
||||
_Постбайт адресации .. Длина 1 байт. Постбайт адресации показывает, где
|
||||
находятся операнды. Структура системы адресации МП 8086 в
|
||||
двухоперандной команде несимметрична. Один из операндов (первый) может
|
||||
быть расположен в регистре (регистровая адресация) или в произвольной
|
||||
ячейке ОЗУ (все способы адресации кроме непосредственной).
|
||||
Второй операнд может находиться в теле команды (непосредственная
|
||||
адресация) или в регистре (регистровая адресация). Каждый из
|
||||
операндов может быть как источником так и приемником (за исключением
|
||||
непосредственной адресации: непосредственный операнд может быть
|
||||
только источником). Структура постбайта адресации следующая:
|
||||
|
||||
7 6 5 4 3 2 1 0
|
||||
! mod ! reg ! r/m !
|
||||
!-----!-----!-----!-----!-----!-----!-----!----!
|
||||
|
||||
Поля mod и r/m задают место расположения первого операнда (или
|
||||
едиственного в одноадресной команде). Поле reg задает положение
|
||||
второго операнда в двухадресных командах, или используется для
|
||||
расширения КОП в одноадресных командах.
|
||||
Значения поля mod:
|
||||
11 - операнд в регистре
|
||||
(при остальных mod операнд в ОЗУ, а регистры, на
|
||||
которые указывают поля mod и r/m, содержат компоненты
|
||||
адреса операнда)
|
||||
10 - смещение два байта (без знака)
|
||||
|
||||
- 6 -
|
||||
|
||||
01 - смещение один байт (со знаком)
|
||||
00 - смещение в команде отстутствует
|
||||
|
||||
Значения поля reg а также поля r/m при mod=0 (т.е. при регистровой
|
||||
адресации следующие:
|
||||
|
||||
reg или r/m Байт Слово
|
||||
000 AL AX
|
||||
001 CL CX
|
||||
010 DL DX
|
||||
011 BL BX
|
||||
100 AH SP
|
||||
101 CH BP
|
||||
110 DH SI
|
||||
111 BH DI
|
||||
|
||||
При адресации в память значения mod и r/m определяют способ
|
||||
вычисления адреса следующим образом:
|
||||
|
||||
r/m mod=00 mod=01 или 10
|
||||
000 BX+SI BX+SI+смещение
|
||||
001 BX+DI BX+DI+смещение
|
||||
010 BP+SI BP+DI+смещение
|
||||
011 BP+DI BP+DI+смещение
|
||||
100 SI SI+смещение
|
||||
101 DI DI+смещение
|
||||
110 direct BP+смещение
|
||||
111 BX BX+смещение
|
||||
|
||||
Смещение. Длина 1 байт (при mod-01) или 2 байта(при mod=10).
|
||||
Непосредственный операнд. Длина 1 или 2 байта
|
||||
Таким образом, длина команды лежит в пределах от 1 до 7 байтов.
|
||||
|
||||
*/
|
||||
};
|
||||
|
||||
138
Labv3.cpp
138
Labv3.cpp
@ -1,69 +1,69 @@
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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 <bios.h>
|
||||
#include <stdio.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>
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
|
||||
int iB=0x1234;
|
||||
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 main(void)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
|
||||
int iA=0x5678;
|
||||
clrscr();
|
||||
printf ("\n <EFBFBD>ணࠬ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ᨢ<EFBFBD> \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++)
|
||||
{
|
||||
// ??????? <EFBFBD><EFBFBD>⠢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
printf (" \n %d ", A[i]);
|
||||
}
|
||||
getch();
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD>ᨢ <20><> <20><>ᥬ<EFBFBD><E1A5AC><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm mov si,0
|
||||
e2:
|
||||
asm {
|
||||
lea bx,A
|
||||
mov cx,10
|
||||
mov ax,0
|
||||
};
|
||||
e1: asm mov [bx],ax // ???? <EFBFBD>롥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯮᮡ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨
|
||||
asm add bx,2
|
||||
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 mov ax,100
|
||||
asm cmp ax,si
|
||||
asm ja e2
|
||||
// ??? <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>㬥<EFBFBD><E3ACA5><EFBFBD><EFBFBD> <20><><EFBFBD>ᨢ
|
||||
for (i=0; i<20; i=i+4)
|
||||
{ printf (" \n ");
|
||||
for (int j=0; j<4; j++)
|
||||
{ printf (" "); // ???? <EFBFBD><EFBFBD>⠢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
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>
|
||||
// <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>,
|
||||
// <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
|
||||
// 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>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// Работа LAB3
|
||||
// Шаблон программы
|
||||
// Массивы и способы адресации
|
||||
|
||||
// Директивы Препроцессора
|
||||
// Включение файлов в которых описаны прототипы ф-ций
|
||||
// с целью сообщения компилятору о типах ф-ций и их аргументах
|
||||
#include <dos.h>
|
||||
#include <bios.h>
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
// #pragma inline // Подключение встроенного Ассемблера
|
||||
|
||||
// Объявление переменных
|
||||
int iB=0x1234;
|
||||
int A[90]={0,1,2,3,4,5,6,7,8,9};
|
||||
|
||||
// Основная программа - функция
|
||||
// void - она не возвращ значений
|
||||
void main(void)
|
||||
{
|
||||
// Объявление переменных
|
||||
int iA=0x5678;
|
||||
clrscr();
|
||||
printf ("\n Программа заполнения массива \n");
|
||||
// Заполняем массив на уровне команд Си
|
||||
for (int i=0; i<10; i++)
|
||||
{
|
||||
// ??????? Вставте команды
|
||||
printf (" \n %d ", A[i]);
|
||||
}
|
||||
getch();
|
||||
// Заполняем массив из ассемблера
|
||||
asm mov si,0
|
||||
e2:
|
||||
asm {
|
||||
lea bx,A
|
||||
mov cx,10
|
||||
mov ax,0
|
||||
};
|
||||
e1: asm mov [bx],ax // ???? Выберите способ адресации
|
||||
asm add bx,2
|
||||
asm loop e1
|
||||
// ??? Выведите одном массив
|
||||
asm add si,10 // Задается шаг массива
|
||||
asm mov ax,100
|
||||
asm cmp ax,si
|
||||
asm ja e2
|
||||
// ??? Выведите двумерный массив
|
||||
for (i=0; i<20; i=i+4)
|
||||
{ printf (" \n ");
|
||||
for (int j=0; j<4; j++)
|
||||
{ printf (" "); // ???? Вставте команду
|
||||
}
|
||||
}
|
||||
getch();
|
||||
}
|
||||
|
||||
// Задания
|
||||
// 1. Напишите две программы заполнения одномерного массива на Си и Асс
|
||||
// выведите на экран значения элементов массива
|
||||
// 2. Считайте массив двумерным. Заполните его четные строки любым числом,
|
||||
// используя разные способы адресации
|
||||
// - косвенно-регистровая адресация
|
||||
// - базово-индексная адресация
|
||||
// Сравните количество команд при двух способах адресации.
|
||||
// 3. Определите место массива в сегменте данных с использов. TD
|
||||
// 4. Напишите программу, которая дает разный результат в разных
|
||||
// моделях памяти.
|
||||
280
Labv4.cpp
280
Labv4.cpp
@ -1,141 +1,141 @@
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ୠ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Lab 4
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD>७<EFBFBD><E0A5AD> <20>६<EFBFBD><E0A5AC><EFBFBD>. <20><><EFBFBD><EFBFBD>
|
||||
//
|
||||
|
||||
|
||||
#include<iostream.h>
|
||||
#include<conio.h>
|
||||
#include<stdio.h>
|
||||
|
||||
void main()
|
||||
{
|
||||
long int cl2,cl1,c1,c2;
|
||||
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{
|
||||
mov ax,00110110B // 00 11 011 0
|
||||
out 43h,ax
|
||||
mov ax,0000000000000000B
|
||||
out 40h,al
|
||||
mov al,ah
|
||||
out 40h,al
|
||||
}
|
||||
*/
|
||||
|
||||
// <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
|
||||
// <EFBFBD> ⨪<><E2A8AA> (<28> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD><EFBFBD> <20><> 0-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠩<><E2A0A9><EFBFBD><EFBFBD>)
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稪 ⨪<><E2A8AA> <20>祩<EFBFBD><E7A5A9> 46<EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>訩 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm{
|
||||
mov ax,0x46
|
||||
mov es,ax
|
||||
mov bx,0xC
|
||||
mov ax,[es:bx]
|
||||
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= ;
|
||||
c1=cl2+cl1*0x10000;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD>⮢<EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> 1
|
||||
asm mov cx,1000
|
||||
met1: asm {
|
||||
push cx
|
||||
mov cx,1000
|
||||
}
|
||||
met2: asm {
|
||||
loop met2
|
||||
pop cx
|
||||
loop met1
|
||||
}
|
||||
|
||||
//
|
||||
asm{
|
||||
mov ax,0x46
|
||||
mov es,ax
|
||||
mov bx,0xC
|
||||
mov ax,[es:bx]
|
||||
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= ;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 楫<><E6A5AB> -
|
||||
c2=cl2+cl1*0x10000;
|
||||
|
||||
// clrscr();
|
||||
// printf("\n<EFBFBD><EFBFBD>ࢮ<EFBFBD> - %d\n",c1);
|
||||
// printf("<EFBFBD><EFBFBD><EFBFBD> - %d\n",c2);
|
||||
cout<<"\n<EFBFBD>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢<EFBFBD><E2AEA2> <20>ணࠬ<E0AEA3><E0A0AC> 1\n";
|
||||
cout<<"COUNTs: "<<c2-c1<<"\n";
|
||||
printf("\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>쪮 <20><><EFBFBD><EFBFBD><EFBFBD>ᥪ㭤 ??");
|
||||
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>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 40h - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⠩<><E2A0A9><EFBFBD><EFBFBD>
|
||||
|
||||
asm{
|
||||
mov ax,00000110B // 00 00 011 0
|
||||
out 43h,ax // <EFBFBD><EFBFBD>⠥<EFBFBD> <20><><EFBFBD><EFBFBD>訩, <20><>⮬ <20><><EFBFBD><EFBFBD>訩
|
||||
in al,40h
|
||||
// mov bl,al
|
||||
in al,40h
|
||||
// mov ah,al
|
||||
// mov al,bl
|
||||
}
|
||||
t1=_AX;
|
||||
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD>⮢<EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> 2
|
||||
asm mov cx,1
|
||||
met11: asm {
|
||||
push cx
|
||||
mov cx,1000
|
||||
}
|
||||
met22: asm {
|
||||
loop met22
|
||||
pop cx
|
||||
loop met11
|
||||
}
|
||||
|
||||
asm{
|
||||
mov ax,00000110B // 00 00 011 0
|
||||
out 43h,ax // <EFBFBD><EFBFBD>⠥<EFBFBD> <20><><EFBFBD><EFBFBD>訩, <20><>⮬ <20><><EFBFBD><EFBFBD>訩
|
||||
in al,40h
|
||||
// mov bl,al
|
||||
in al,40h
|
||||
// mov ah,al
|
||||
// mov al,bl
|
||||
}
|
||||
t2=_AX;
|
||||
t3=t1; // ????
|
||||
|
||||
clrscr();
|
||||
printf("\n<EFBFBD><EFBFBD>ࢮ<EFBFBD> - %d \n",t1);
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD> - %d\n",t2);
|
||||
cout<<"\n<EFBFBD>६<EFBFBD> <20>믮<EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⮢<EFBFBD><E2AEA2> <20>ணࠬ<E0AEA3><E0A0AC> 2\n";
|
||||
printf("%x\n",t3);
|
||||
cout<<"CLOCKs: "<<t3<<"\n";
|
||||
printf("\n <EFBFBD><EFBFBD><EFBFBD><EFBFBD>쪮 <20><><EFBFBD><EFBFBD><EFBFBD>ᥪ㭤 ??");
|
||||
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
|
||||
// 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><>筮
|
||||
// 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>)
|
||||
|
||||
//<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.
|
||||
|
||||
void ReadMouse ()
|
||||
{
|
||||
asm mov ax, 0x3
|
||||
asm int 0x33
|
||||
asm mov MouseB, bx
|
||||
asm mov MouseX, cx
|
||||
asm mov MouseY, dx
|
||||
}
|
||||
|
||||
|
||||
// Лабораторная Работа Lab 4
|
||||
// ТАЙМЕР. Измерение времени. Мышь
|
||||
//
|
||||
|
||||
|
||||
#include<iostream.h>
|
||||
#include<conio.h>
|
||||
#include<stdio.h>
|
||||
|
||||
void main()
|
||||
{
|
||||
long int cl2,cl1,c1,c2;
|
||||
unsigned long int t1,t2,t3;
|
||||
|
||||
// Изменение константы счетчика
|
||||
/* asm{
|
||||
mov ax,00110110B // 00 11 011 0
|
||||
out 43h,ax
|
||||
mov ax,0000000000000000B
|
||||
out 40h,al
|
||||
mov al,ah
|
||||
out 40h,al
|
||||
}
|
||||
*/
|
||||
|
||||
// Измерение времени выполнения тестовой программы 1
|
||||
// в тиках (в прерываниях от 0-го канала таймера)
|
||||
// Счетчик тиков ячейка 46С - младший байт первый
|
||||
asm{
|
||||
mov ax,0x46
|
||||
mov es,ax
|
||||
mov bx,0xC
|
||||
mov ax,[es:bx]
|
||||
mov cx,[es:(bx+2)]
|
||||
}
|
||||
// Запомните начальное значение младшее и старшее ???
|
||||
// cl2= ; cl1= ;
|
||||
c1=cl2+cl1*0x10000;
|
||||
|
||||
//Тестовая программа 1
|
||||
asm mov cx,1000
|
||||
met1: asm {
|
||||
push cx
|
||||
mov cx,1000
|
||||
}
|
||||
met2: asm {
|
||||
loop met2
|
||||
pop cx
|
||||
loop met1
|
||||
}
|
||||
|
||||
//
|
||||
asm{
|
||||
mov ax,0x46
|
||||
mov es,ax
|
||||
mov bx,0xC
|
||||
mov ax,[es:bx]
|
||||
mov cx,[es:(bx+2)]
|
||||
}
|
||||
// Запомните конечное значение ???
|
||||
// cl2=_AX; cl1= ;
|
||||
// Длинное целое -
|
||||
c2=cl2+cl1*0x10000;
|
||||
|
||||
// clrscr();
|
||||
// printf("\nПервое - %d\n",c1);
|
||||
// printf("Второе - %d\n",c2);
|
||||
cout<<"\nВремя выполнения тестовой программы 1\n";
|
||||
cout<<"COUNTs: "<<c2-c1<<"\n";
|
||||
printf("\n Сколько миллисекунд ??");
|
||||
getch();
|
||||
|
||||
// Измерение времени выполнения тестовой программы
|
||||
// по содержимому регистра таймера
|
||||
// Порт 43h - порт управления таймером
|
||||
// Порт 40h - порт таймера
|
||||
|
||||
asm{
|
||||
mov ax,00000110B // 00 00 011 0
|
||||
out 43h,ax // Читаем младший, потом старший
|
||||
in al,40h
|
||||
// mov bl,al
|
||||
in al,40h
|
||||
// mov ah,al
|
||||
// mov al,bl
|
||||
}
|
||||
t1=_AX;
|
||||
|
||||
|
||||
//Тестовая программа 2
|
||||
asm mov cx,1
|
||||
met11: asm {
|
||||
push cx
|
||||
mov cx,1000
|
||||
}
|
||||
met22: asm {
|
||||
loop met22
|
||||
pop cx
|
||||
loop met11
|
||||
}
|
||||
|
||||
asm{
|
||||
mov ax,00000110B // 00 00 011 0
|
||||
out 43h,ax // Читаем младший, потом старший
|
||||
in al,40h
|
||||
// mov bl,al
|
||||
in al,40h
|
||||
// mov ah,al
|
||||
// mov al,bl
|
||||
}
|
||||
t2=_AX;
|
||||
t3=t1; // ????
|
||||
|
||||
clrscr();
|
||||
printf("\nПервое - %d \n",t1);
|
||||
printf("Второе - %d\n",t2);
|
||||
cout<<"\nВремя выполнения тестовой программы 2\n";
|
||||
printf("%x\n",t3);
|
||||
cout<<"CLOCKs: "<<t3<<"\n";
|
||||
printf("\n Сколько микросекунд ??");
|
||||
getch();
|
||||
|
||||
// Задания
|
||||
// 1 Определите времена работы тестовых программ 1 и 2
|
||||
// 2 Перепрограммируйте таймер и измерьте время раб прог1 более точно
|
||||
// 3 Определите время между двумя нажатиями на кнопку мыши (или клавиатуры)
|
||||
|
||||
//Эта процедура считывает положение курсора мыши и признак нажатия
|
||||
//на клавишу. Прочитайте описание драйвера мыши и программу Asmous.cpp.
|
||||
|
||||
void ReadMouse ()
|
||||
{
|
||||
asm mov ax, 0x3
|
||||
asm int 0x33
|
||||
asm mov MouseB, bx
|
||||
asm mov MouseX, cx
|
||||
asm mov MouseY, dx
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
136
Labv8.cpp
136
Labv8.cpp
@ -1,68 +1,68 @@
|
||||
/* 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 <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <conio.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>.
|
||||
{
|
||||
asm {
|
||||
mov ah,0x05
|
||||
mov al,a
|
||||
int 0x10
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
// <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>०<EFBFBD><E0A5A6><EFBFBD>
|
||||
asm{
|
||||
mov al,02h
|
||||
mov ah,00h
|
||||
int 10h
|
||||
} page(0);
|
||||
clrscr();
|
||||
// <EFBFBD>뢮<EFBFBD> ⥪<><E2A5AA><EFBFBD> <20>।<EFBFBD>⢠<EFBFBD><E2A2A0> <20><>
|
||||
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);
|
||||
asm mov cx,1000 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ ᨬ<><E1A8AC><EFBFBD><EFBFBD><EFBFBD>
|
||||
asm mov di,0 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
e1: asm { add di, 2
|
||||
mov ax, 0xb800 // <EFBFBD><EFBFBD>।<EFBFBD><EFBFBD>塞 <20><>砫<EFBFBD><E7A0AB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov es, ax
|
||||
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 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>
|
||||
};
|
||||
asm loop e1
|
||||
|
||||
getch();
|
||||
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 1 <EFBFBD>뢥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<><E2A5AA> <20> <20>ᯮ<EFBFBD><E1AFAE><EFBFBD> <20><>.
|
||||
// <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>
|
||||
// <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>
|
||||
// 4 <EFBFBD>࣠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>४<EFBFBD><E0A5AA>祭<EFBFBD><E7A5AD> <20><>࠭<EFBFBD><E0A0AD>
|
||||
/* while (bioskey(1) == 0)
|
||||
{
|
||||
page(0); delay(1000);
|
||||
|
||||
} */
|
||||
return;
|
||||
}
|
||||
/* Labv8: Ass, and Ci functions
|
||||
Шаблон программы для работы с видеосистемой
|
||||
Текстовый режим
|
||||
*/
|
||||
|
||||
#include <dos.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <conio.h>
|
||||
|
||||
|
||||
#include <iostream.h>
|
||||
|
||||
void page(char a) // Установка номера активной дисплейной стр.
|
||||
{
|
||||
asm {
|
||||
mov ah,0x05
|
||||
mov al,a
|
||||
int 0x10
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
// установка видеорежима
|
||||
asm{
|
||||
mov al,02h
|
||||
mov ah,00h
|
||||
int 10h
|
||||
} page(0);
|
||||
clrscr();
|
||||
// Вывод текста средствами Си
|
||||
for(char n = 1; n <= 100; n++)
|
||||
// -- здесь сам вывод -
|
||||
|
||||
// Выод текста в режиме непосредств работы с видеопамятью
|
||||
page(0);
|
||||
asm mov cx,1000 // Задаем количество символов
|
||||
asm mov di,0 // Обнуляем индекс
|
||||
e1: asm { add di, 2
|
||||
mov ax, 0xb800 // Определяем начальный адрес
|
||||
mov es, ax
|
||||
mov al, cl
|
||||
mov es: [di],al // Пересылаем четный первый байт в видеопамять
|
||||
mov al, 4
|
||||
mov es: [di+1],al // Пересылаем нечетный второй байт
|
||||
};
|
||||
asm loop e1
|
||||
|
||||
getch();
|
||||
|
||||
|
||||
// Задания
|
||||
// 1 Выведите текст с использ Си.
|
||||
// Раскрасте его зеленым цветом с использованием Асс.
|
||||
// Определите время вывода в обоих случаях
|
||||
// 2 Протестируйте размер текстовой дисплейной страницы.(Напишите
|
||||
// программу на Асс вывода символов в начале и в конце дисплейной страницы)
|
||||
// 3 Выведите текст на вторую дисп страницу
|
||||
// 4 Организуйте переключение страниц
|
||||
/* while (bioskey(1) == 0)
|
||||
{
|
||||
page(0); delay(1000);
|
||||
|
||||
} */
|
||||
return;
|
||||
}
|
||||
|
||||
330
MTASK.CPP
330
MTASK.CPP
@ -1,166 +1,166 @@
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <mem.h>
|
||||
#include <conio.h>
|
||||
|
||||
struct ProcStats //struktura soderjashaya kontext zadachi
|
||||
{
|
||||
unsigned int rax, rbx, rcx, rdx; // 0 2 4 6
|
||||
unsigned int rsi, rdi, rbp, rsp; // 8 10 12 14
|
||||
unsigned int rcs, rds, res, rss; //16 18 20 22
|
||||
unsigned int rip, rflags, a, b; //24 26 28 30
|
||||
} Stats[3]; //massiv iz treh takih struktur
|
||||
|
||||
unsigned int current_proc; //nomer tekushey zadachi
|
||||
unsigned int stats_offset; //adres konteksta zadachi
|
||||
void interrupt (*oldHandler)(...); //ukazatel na staryi obrabotchik preryvaniya
|
||||
|
||||
void interrupt IntHandler(...) //svoy obrabotchik
|
||||
{
|
||||
asm {
|
||||
mov si, [current_proc]; //nomer procedury
|
||||
mov cl, 5 //umnojaem nar 32 (razmer struktury)
|
||||
shl si, cl
|
||||
//mov ax, offset Stats
|
||||
mov ax, [stats_offset] //pribavlyaem adres nachala massiva struktur
|
||||
add si, ax //poluchaem adres nujnogo konteksta
|
||||
pop ax //zapisyvaem v nego registry
|
||||
mov [si+12], ax //bp
|
||||
pop ax
|
||||
mov [si+10], ax //di
|
||||
pop ax
|
||||
mov [si+ 8], ax //si
|
||||
pop ax
|
||||
mov [si+18], ax //ds
|
||||
pop ax
|
||||
mov [si+20], ax //es
|
||||
pop ax
|
||||
mov [si+ 6], ax //dx
|
||||
pop ax
|
||||
mov [si+ 4], ax //cx
|
||||
pop ax
|
||||
mov [si+ 2], ax //bx
|
||||
pop ax
|
||||
mov [si+ 0], ax //ax
|
||||
pop ax
|
||||
mov [si+24], ax //ip
|
||||
pop ax
|
||||
mov [si+16], ax //cs
|
||||
pop ax
|
||||
mov [si+26], ax //flags
|
||||
mov ax, sp
|
||||
mov [si+14], ax //sp
|
||||
mov ax, ss
|
||||
mov [si+22], ax //ss
|
||||
|
||||
mov ax, [current_proc] //perehodim k sleduyushey zadache
|
||||
inc ax
|
||||
cmp ax, 3
|
||||
jb label1
|
||||
mov ax, 0
|
||||
}
|
||||
label1:
|
||||
asm {
|
||||
mov [current_proc], ax //vychislyaem adres eyo konteksta
|
||||
mov si, ax
|
||||
mov cl, 5
|
||||
shl si, cl
|
||||
//mov ax, offset Stats
|
||||
mov ax, [stats_offset]
|
||||
add si, ax //zagrujaem registry
|
||||
mov ax, [si+22] //ss
|
||||
mov ss, ax
|
||||
mov ax, [si+14] //sp
|
||||
mov sp, ax
|
||||
mov ax, [si+26] //flags
|
||||
push ax
|
||||
mov ax, [si+16] //cs
|
||||
push ax
|
||||
mov ax, [si+24] //ip
|
||||
push ax
|
||||
mov ax, [si+ 0] //ax
|
||||
push ax
|
||||
mov ax, [si+ 2] //bx
|
||||
push ax
|
||||
mov ax, [si+ 4] //cx
|
||||
push ax
|
||||
mov ax, [si+ 6] //dx
|
||||
push ax
|
||||
mov ax, [si+20] //es
|
||||
push ax
|
||||
mov ax, [si+18] //ds
|
||||
push ax
|
||||
mov ax, [si+ 8] //si
|
||||
push ax
|
||||
mov ax, [si+10] //di
|
||||
push ax
|
||||
mov ax, [si+12] //bp
|
||||
push ax
|
||||
}
|
||||
oldHandler(); //vyzyvaem staryi obrabotchik
|
||||
}
|
||||
|
||||
void Proc1(void);
|
||||
void Proc2(void);
|
||||
void Proc3(void);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned int i, rd, rc, re, rs, ri0, ri1, ri2, f;
|
||||
|
||||
for(i=0;i<3;i++)
|
||||
memset(&Stats[i],0,sizeof(ProcStats));
|
||||
asm { //zapisyvaem registry vo vremennye peremennye
|
||||
mov ax, cs
|
||||
mov [rc], ax
|
||||
mov ax, ds
|
||||
mov [rd], ax
|
||||
mov ax, es
|
||||
mov [re], ax
|
||||
mov ax, ss
|
||||
mov [rs], ax
|
||||
mov [ri0], offset Proc1 //adresa nachala procedur
|
||||
mov [ri1], offset Proc2
|
||||
mov [ri2], offset Proc3
|
||||
pushf
|
||||
pop ax
|
||||
mov [f], ax
|
||||
}
|
||||
for(i=0;i<3;i++) //zapisyvaem znacheniya segmentnyh registrov,
|
||||
{ //flagov
|
||||
Stats[i].rcs = rc; //i adresa nacha procedur
|
||||
Stats[i].rds = rd; //v sootvetstvuyushye konteksty
|
||||
Stats[i].res = re;
|
||||
Stats[i].rss = rs;
|
||||
Stats[i].rflags = f;
|
||||
}
|
||||
Stats[0].rip = ri0;
|
||||
Stats[1].rip = ri1;
|
||||
Stats[2].rip = ri2;
|
||||
current_proc = 0; //tekushaya procedura - pervaya
|
||||
stats_offset = (unsigned)&Stats; //adres nachala massiva
|
||||
oldHandler = getvect(0x9); //perekluchaemsya po najatiyu klavishy
|
||||
setvect(0x9,IntHandler);
|
||||
Proc1();
|
||||
setvect(0x9,oldHandler);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Proc1(void)
|
||||
{
|
||||
while(1)
|
||||
printf("Proc1 is working %d\n",current_proc);
|
||||
}
|
||||
|
||||
void Proc2(void)
|
||||
{
|
||||
while(1)
|
||||
printf("Proc2 is working %d\n",current_proc);
|
||||
}
|
||||
|
||||
void Proc3(void)
|
||||
{
|
||||
while(1)
|
||||
printf("Proc3 is working %d\n",current_proc);
|
||||
#include <stdio.h>
|
||||
#include <dos.h>
|
||||
#include <mem.h>
|
||||
#include <conio.h>
|
||||
|
||||
struct ProcStats //struktura soderjashaya kontext zadachi
|
||||
{
|
||||
unsigned int rax, rbx, rcx, rdx; // 0 2 4 6
|
||||
unsigned int rsi, rdi, rbp, rsp; // 8 10 12 14
|
||||
unsigned int rcs, rds, res, rss; //16 18 20 22
|
||||
unsigned int rip, rflags, a, b; //24 26 28 30
|
||||
} Stats[3]; //massiv iz treh takih struktur
|
||||
|
||||
unsigned int current_proc; //nomer tekushey zadachi
|
||||
unsigned int stats_offset; //adres konteksta zadachi
|
||||
void interrupt (*oldHandler)(...); //ukazatel na staryi obrabotchik preryvaniya
|
||||
|
||||
void interrupt IntHandler(...) //svoy obrabotchik
|
||||
{
|
||||
asm {
|
||||
mov si, [current_proc]; //nomer procedury
|
||||
mov cl, 5 //umnojaem nar 32 (razmer struktury)
|
||||
shl si, cl
|
||||
//mov ax, offset Stats
|
||||
mov ax, [stats_offset] //pribavlyaem adres nachala massiva struktur
|
||||
add si, ax //poluchaem adres nujnogo konteksta
|
||||
pop ax //zapisyvaem v nego registry
|
||||
mov [si+12], ax //bp
|
||||
pop ax
|
||||
mov [si+10], ax //di
|
||||
pop ax
|
||||
mov [si+ 8], ax //si
|
||||
pop ax
|
||||
mov [si+18], ax //ds
|
||||
pop ax
|
||||
mov [si+20], ax //es
|
||||
pop ax
|
||||
mov [si+ 6], ax //dx
|
||||
pop ax
|
||||
mov [si+ 4], ax //cx
|
||||
pop ax
|
||||
mov [si+ 2], ax //bx
|
||||
pop ax
|
||||
mov [si+ 0], ax //ax
|
||||
pop ax
|
||||
mov [si+24], ax //ip
|
||||
pop ax
|
||||
mov [si+16], ax //cs
|
||||
pop ax
|
||||
mov [si+26], ax //flags
|
||||
mov ax, sp
|
||||
mov [si+14], ax //sp
|
||||
mov ax, ss
|
||||
mov [si+22], ax //ss
|
||||
|
||||
mov ax, [current_proc] //perehodim k sleduyushey zadache
|
||||
inc ax
|
||||
cmp ax, 3
|
||||
jb label1
|
||||
mov ax, 0
|
||||
}
|
||||
label1:
|
||||
asm {
|
||||
mov [current_proc], ax //vychislyaem adres eyo konteksta
|
||||
mov si, ax
|
||||
mov cl, 5
|
||||
shl si, cl
|
||||
//mov ax, offset Stats
|
||||
mov ax, [stats_offset]
|
||||
add si, ax //zagrujaem registry
|
||||
mov ax, [si+22] //ss
|
||||
mov ss, ax
|
||||
mov ax, [si+14] //sp
|
||||
mov sp, ax
|
||||
mov ax, [si+26] //flags
|
||||
push ax
|
||||
mov ax, [si+16] //cs
|
||||
push ax
|
||||
mov ax, [si+24] //ip
|
||||
push ax
|
||||
mov ax, [si+ 0] //ax
|
||||
push ax
|
||||
mov ax, [si+ 2] //bx
|
||||
push ax
|
||||
mov ax, [si+ 4] //cx
|
||||
push ax
|
||||
mov ax, [si+ 6] //dx
|
||||
push ax
|
||||
mov ax, [si+20] //es
|
||||
push ax
|
||||
mov ax, [si+18] //ds
|
||||
push ax
|
||||
mov ax, [si+ 8] //si
|
||||
push ax
|
||||
mov ax, [si+10] //di
|
||||
push ax
|
||||
mov ax, [si+12] //bp
|
||||
push ax
|
||||
}
|
||||
oldHandler(); //vyzyvaem staryi obrabotchik
|
||||
}
|
||||
|
||||
void Proc1(void);
|
||||
void Proc2(void);
|
||||
void Proc3(void);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned int i, rd, rc, re, rs, ri0, ri1, ri2, f;
|
||||
|
||||
for(i=0;i<3;i++)
|
||||
memset(&Stats[i],0,sizeof(ProcStats));
|
||||
asm { //zapisyvaem registry vo vremennye peremennye
|
||||
mov ax, cs
|
||||
mov [rc], ax
|
||||
mov ax, ds
|
||||
mov [rd], ax
|
||||
mov ax, es
|
||||
mov [re], ax
|
||||
mov ax, ss
|
||||
mov [rs], ax
|
||||
mov [ri0], offset Proc1 //adresa nachala procedur
|
||||
mov [ri1], offset Proc2
|
||||
mov [ri2], offset Proc3
|
||||
pushf
|
||||
pop ax
|
||||
mov [f], ax
|
||||
}
|
||||
for(i=0;i<3;i++) //zapisyvaem znacheniya segmentnyh registrov,
|
||||
{ //flagov
|
||||
Stats[i].rcs = rc; //i adresa nacha procedur
|
||||
Stats[i].rds = rd; //v sootvetstvuyushye konteksty
|
||||
Stats[i].res = re;
|
||||
Stats[i].rss = rs;
|
||||
Stats[i].rflags = f;
|
||||
}
|
||||
Stats[0].rip = ri0;
|
||||
Stats[1].rip = ri1;
|
||||
Stats[2].rip = ri2;
|
||||
current_proc = 0; //tekushaya procedura - pervaya
|
||||
stats_offset = (unsigned)&Stats; //adres nachala massiva
|
||||
oldHandler = getvect(0x9); //perekluchaemsya po najatiyu klavishy
|
||||
setvect(0x9,IntHandler);
|
||||
Proc1();
|
||||
setvect(0x9,oldHandler);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Proc1(void)
|
||||
{
|
||||
while(1)
|
||||
printf("Proc1 is working %d\n",current_proc);
|
||||
}
|
||||
|
||||
void Proc2(void)
|
||||
{
|
||||
while(1)
|
||||
printf("Proc2 is working %d\n",current_proc);
|
||||
}
|
||||
|
||||
void Proc3(void)
|
||||
{
|
||||
while(1)
|
||||
printf("Proc3 is working %d\n",current_proc);
|
||||
}
|
||||
62
asm/p_2.asm
62
asm/p_2.asm
@ -14,27 +14,27 @@ main:
|
||||
mov ax,@data
|
||||
mov ds,ax
|
||||
mov es,0b:8000h
|
||||
;------------------<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-------------
|
||||
;------------------Открываем файл-------------
|
||||
|
||||
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>
|
||||
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 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,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 ah,3dh ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS
|
||||
int 21h ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
mov [Handle], ax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
xor cx,cx ;атрибуты файла - обычный файл
|
||||
mov bx,2 ;режим доступа обычный - доступ для чтения-записи
|
||||
mov dx,1 ;если файл существует, то открыть его. в обратной случае вернуть ошибку
|
||||
mov dx,offset filename ;формируем указатель на имя файла
|
||||
mov ah,3dh ;номер функции DOS
|
||||
int 21h ;открываем файл
|
||||
mov [Handle], 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>
|
||||
jc ex ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
jnc read ;если файл существовал, то переход
|
||||
jc ex ;переход в случае ошибки
|
||||
|
||||
read: mov ah, 3Fh
|
||||
mov cx,1
|
||||
mov dx, buffer
|
||||
int 21h
|
||||
|
||||
cmp ax, cx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EOF
|
||||
jne eof ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> EOF, <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cmp ax, cx ; Проверка EOF
|
||||
jne eof ; Если EOF, то выходим
|
||||
|
||||
push ax
|
||||
push bx
|
||||
@ -45,12 +45,12 @@ read: mov ah, 3Fh
|
||||
pop ax
|
||||
|
||||
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
|
||||
; 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
|
||||
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
|
||||
int 21h
|
||||
|
||||
@ -89,28 +89,28 @@ found2:
|
||||
mov di,bx
|
||||
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>
|
||||
; 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>
|
||||
write: ; xor cx,cx ;атрибуты файла - обычный файл
|
||||
; mov bx,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 ah,5bh ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS
|
||||
; int 21h ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
; mov ah,5bh ;номер функции DOS
|
||||
; 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
|
||||
|
||||
|
||||
|
||||
xor cx,cx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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 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,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>
|
||||
xor cx,cx ;атрибуты файла - обычный файл
|
||||
mov bx,0002h ;режим доступа обычный - доступ для чтения-записи
|
||||
mov dx,1 ;если файл существует, то открыть его. в обратной случае вернуть ошибку
|
||||
mov dx,offset filename2 ;формируем указатель на имя файла
|
||||
mov al,0001h
|
||||
mov ah,3dh ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOS
|
||||
int 21h ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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 ah,3dh ;номер функции DOS
|
||||
int 21h ;открываем файл
|
||||
mov [Handle2], ax ;сохраним дескриптор файла
|
||||
mov bx,ax
|
||||
|
||||
|
||||
@ -126,12 +126,12 @@ xor ax,ax
|
||||
mov ah,0dh
|
||||
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
|
||||
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:
|
||||
mov ax,4c00h
|
||||
|
||||
Reference in New Issue
Block a user