fix: Кодировка

This commit is contained in:
Mark Zheleznyakov
2024-09-10 22:24:24 +03:00
parent be2b9502d1
commit 67824a5297
19 changed files with 2159 additions and 2159 deletions

View File

@ -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;
}

View File

@ -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
// Определите отличие скан кодов: нажатия и отпускания клавиши

View File

@ -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
View File

@ -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яды пеого слагаемого
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яды пеого слагаемого
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 Реализуйте передачу параметров через регистры или общую память
}

View File

@ -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
}

View File

@ -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
View File

@ -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;
}

View File

@ -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
View File

@ -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. Определите в какие команды Ассемблера оттранслирован с языка СИ
оператор цикла. Напишите на уровне Ассемблера свой вариант цикла.
Сравните, результаты представте преподавателю.
*/

View File

@ -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 бита)
обязательно используйте структуры для тестирования.
*/

View File

@ -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. Определите как располагаются банки памяти на экране.
//

View File

@ -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ор (пустая команда) .
Команды безусловной и условной передач управления могут
оединяться в пары, если они встречаются в качестве вторых команд в паре.
Они не могут быть спарены со следующей последовательной командой. Также
команды SHIFT/ROT со сдвигом на один разряд и SHIFT на произвольное
число разрядов могут спариваться только как первые ( команды в паре).
Регистровые зависимости
Регистровые зависимости, запрещающие спаривание команд, включают
неявные зависимости через регистры или флаги, не указанные в команде.
Все виды зависимостей по данным могут быть классифицированы по
типу ассоциаций: RAR - "чтение после чтения", WAR - "запись после чтения" и
WAW - "запись после записи", RAW - "чтение после записи". Некоторые из
зависимостей по данным могут быть устранены. RAR, по сути дела,
соответствует отсутствию зависимостей, поскольку в данном случае порядок
выполнения команд не имеет значения. Действительной зависимостью является
только "чтение после записи" (RAW), так как необходимо прочитать
предварительно записанные новые данные, а не старые.
Лишние зависимости по данным появляются в результате "записи после
чтения" (WAR) и "записи после записи" (WAW). Зависимость WAR состоит в
том, что команда должна записать новое значение в ячейку памяти или регистр,
из которых должно быть произведено чтение. Лишние зависимости появляются
по нескольким причинам: не оптимизированный программный код, ограничение
количества регистров, стремление к экономии памяти, наличие программных
циклов.
*/

View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -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
View File

@ -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);
}

View File

@ -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