Files
templates/Labv14.cpp
Mark Zheleznyakov be2b9502d1 init
2024-09-07 08:49:36 +03:00

185 lines
5.4 KiB
C++
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ‹ ¡®à â®à­ ï à ¡®â  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. Ž¯à¥¤¥«¨â¥ ¨ ®¡êï᭨⥠¢à¥¬ï ¢ë¯®«­¥­¨ï äà £¬¥­â®¢ ¯à®£à ¬¬.
//
/* <20><>ˆ€ Ž<>š…„ˆ<E2809E><EFBFBD>ˆŸ ŠŽŒ€<C592>
<EFBFBD>à®æ¥áá®à Pentium ¬®¦¥â ¢ë¯®«­ïâì ®¤­ã ¨«¨ ¤¢¥ ª®¬ ­¤ë ¢ ª ¦¤®¬
â ªâ¥. „«ï ¢ë¯®«­¥­¨ï ¢ ¯à®æ¥áá®à¥ ®¤­®¢à¥¬¥­­® ¤¢ãå ª®¬ ­¤ ®­¨
¤®«¦­ë 㤮¢«¥â¢®àïâì á«¥¤ãî騬 ãá«®¢¨ï¬:
-®¡¥ ª®¬ ­¤ë ¢ ¯ à¥ ®¡ï§ ­ë ¡ëâì <¯à®áâ묨> ¢ á¬ëá«¥, ®¯à¥¤¥«¥­­®¬
­¨¦¥;
-¬¥¦¤ã ­¨¬¨ ­¥ ¤®«¦­® ¡ëâì ॣ¨áâ஢ëå § ¢¨á¨¬®á⥩ ⨯  ç⥭¨¥- ¯®á«¥-
§ ¯¨á¨ ¨«¨ § ¯¨áì-¯®á«¥-§ ¯¨á¨ (read-after-write or write-after-wnte) ,
-­¨ ®¤­  ¨§ ª®¬ ­¤ ­¥ ¬®¦¥â ᮤ¥à¦ âì ᬥ饭¨¥ (displacement) ¨
­¥¯®á।á⢥­­ë© ®¯¥à ­¤;
-ª®¬ ­¤ë á ¯à¥ä¨ªá ¬¨ (§  ¨áª«î祭¨¥¬ OF ¢ ª®¬ ­¤ å ¯¥à¥å®¤  JCC)
¬®£ãâ ¢áâà¥ç âìáï ⮫쪮 ¢ U-ª®­¢¥©¥à¥.
<20>®¤ ¯à®áâ묨 ª®¬ ­¤ ¬¨ ¯®­¨¬ îâáï ª®¬ ­¤ë, ã¯à ¢«¥­¨¥
¢ë¯®«­¥­¨¥¬ ª®â®àëå ®áãé¥á⢫ï¥âáï  ¯¯ à â­®, ¡¥§ ¨á¯®«ì§®¢ ­¨ï
¬¨ªà®ª®¬ ­¤, ¨ ª®â®àë¥ à¥ «¨§ãîâáï §  ®¤¨­ â ªâ. ˆáª«î祭¨¥¬ ïîâáï
ª®¬ ­¤ë ALU mem, reg ¨ ALU reg, mem, âॡãî騥 âà¥å ¨ ¤¢ãå ⠪⮢ ¤«ï
¢ë¯®«­¥­¨ï ᮮ⢥âá⢥­­®. ‘¯¥æ¨ «ì­ë¥  ¯¯ à â­ë¥ á।á⢠
¨á¯®«ì§ãîâáï ¤«ï ¨å ¢ë¯®«­¥­¨ï ª ª ¯à®áâëå ª®¬ ­¤. ‘«¥¤ãî騥
楫®ç¨á«¥­­ë¥ ª®¬ ­¤ë à áᬠâਢ îâáï ¢ ª ç¥á⢥ ¯à®áâëå ¨ ¬®£ãâ ¡ëâì
ᯠ७ë:
-mov reg, reg/mem/imnl
-mov mem, reg/imm (ª®¬ ­¤ë ¯¥à¥¤ ç¨) ;
-alu reg, reg/mero/imm (ª®¬ ­¤ë  à¨ä¬¥â¨ç¥áª¨å
- alu meln , reg/ imm ¨ «®£¨ç¥áª¨å ®¯¥à æ¨©) ;
- inc reg/mem (ª®¬ ­¤ë ¨­ªà¥¬¥­â ,
- dec reg/mem (¤¥ªà¥¬¥­â ) ;
-push reg/mem (ª®¬ ­¤ë ®¡à é¥­¨ï
- pop reg (ª á⥪®¢®© ¯ ¬ïâ¨) ;
-lea reg,mem (ª®¬ ­¤ë § £à㧪¨ ᥣ¬¥­â­ëå ॣ¨áâ஢) ;
-jmp/call/jcc near (ª®¬ ­¤ë ¯¥à¥¤ ç¨ ã¯à ¢«¥­¨ï) ;
-n®à (¯ãáâ ï ª®¬ ­¤ ) .
Š®¬ ­¤ë ¡¥§ãá«®¢­®© ¨ ãá«®¢­®© ¯¥à¥¤ ç ã¯à ¢«¥­¨ï ¬®£ãâ
®6쥤¨­ïâìáï ¢ ¯ àë, ¥á«¨ ®­¨ ¢áâà¥ç îâáï ¢ ª ç¥á⢥ ¢â®àëå ª®¬ ­¤ ¢ ¯ à¥.
Ž­¨ ­¥ ¬®£ãâ ¡ëâì ᯠ७ë á® á«¥¤ãî饩 ¯®á«¥¤®¢ â¥«ì­®© ª®¬ ­¤®©. ’ ª¦¥
ª®¬ ­¤ë SHIFT/ROT ᮠᤢ¨£®¬ ­  ®¤¨­ à §àï¤ ¨ SHIFT ­  ¯à®¨§¢®«ì­®¥
ç¨á«® à §à冷¢ ¬®£ãâ ᯠਢ âìáï ⮫쪮 ª ª ¯¥à¢ë¥ ( ª®¬ ­¤ë ¢ ¯ à¥).
<20>¥£¨áâà®¢ë¥ § ¢¨á¨¬®áâ¨
<20>¥£¨áâà®¢ë¥ § ¢¨á¨¬®áâ¨, § ¯à¥é î騥 ᯠਢ ­¨¥ ª®¬ ­¤, ¢ª«îç îâ
­¥ï¢­ë¥ § ¢¨á¨¬®á⨠ç¥à¥§ ॣ¨áâàë ¨«¨ ä« £¨, ­¥ 㪠§ ­­ë¥ ¢ ª®¬ ­¤¥.
‚ᥠ¢¨¤ë § ¢¨á¨¬®á⥩ ¯® ¤ ­­ë¬ ¬®£ãâ ¡ëâì ª« áá¨ä¨æ¨à®¢ ­ë ¯®
â¨¯ã  áá®æ¨ æ¨©: RAR - "ç⥭¨¥ ¯®á«¥ ç⥭¨ï", WAR - "§ ¯¨áì ¯®á«¥ ç⥭¨ï" ¨
WAW - "§ ¯¨áì ¯®á«¥ § ¯¨á¨", RAW - "ç⥭¨¥ ¯®á«¥ § ¯¨á¨". <20>¥ª®â®àë¥ ¨§
§ ¢¨á¨¬®á⥩ ¯® ¤ ­­ë¬ ¬®£ãâ ¡ëâì ãáâà ­¥­ë. RAR, ¯® áã⨠¤¥« ,
ᮮ⢥âáâ¢ã¥â ®âáãâáâ¢¨î § ¢¨á¨¬®á⥩, ¯®áª®«ìªã ¢ ¤ ­­®¬ á«ãç ¥ ¯®à冷ª
¢ë¯®«­¥­¨ï ª®¬ ­¤ ­¥ ¨¬¥¥â §­ ç¥­¨ï. „¥©á⢨⥫쭮© § ¢¨á¨¬®áâìî ï¥âáï
⮫쪮 "ç⥭¨¥ ¯®á«¥ § ¯¨á¨" (RAW), â ª ª ª ­¥®¡å®¤¨¬® ¯à®ç¨â âì
¯à¥¤¢ à¨â¥«ì­® § ¯¨á ­­ë¥ ­®¢ë¥ ¤ ­­ë¥,   ­¥ áâ àë¥.
‹¨è­¨¥ § ¢¨á¨¬®á⨠¯® ¤ ­­ë¬ ¯®ï¢«ïîâáï ¢ १ã«ìâ â¥ "§ ¯¨á¨ ¯®á«¥
ç⥭¨ï" (WAR) ¨ "§ ¯¨á¨ ¯®á«¥ § ¯¨á¨" (WAW). ‡ ¢¨á¨¬®áâì WAR á®á⮨⠢
⮬, çâ® ª®¬ ­¤  ¤®«¦­  § ¯¨á âì ­®¢®¥ §­ ç¥­¨¥ ¢ ï祩ªã ¯ ¬ï⨠¨«¨ ॣ¨áâà,
¨§ ª®â®àëå ¤®«¦­® ¡ëâì ¯à®¨§¢¥¤¥­® ç⥭¨¥. ‹¨è­¨¥ § ¢¨á¨¬®á⨠¯®ï¢«ïîâáï
¯® ­¥áª®«ìª¨¬ ¯à¨ç¨­ ¬: ­¥ ®¯â¨¬¨§¨à®¢ ­­ë© ¯à®£à ¬¬­ë© ª®¤, ®£à ­¨ç¥­¨¥
ª®«¨ç¥á⢠ ॣ¨áâ஢, áâ६«¥­¨¥ ª íª®­®¬¨¨ ¯ ¬ïâ¨, ­ «¨ç¨¥ ¯à®£à ¬¬­ëå
横«®¢.
*/