£Ã¸À¸ì¥×¥í¥°¥é¥ß¥ó¥°
£±¡¥¥× ¥í ¥° ¥é ¥ß ¥ó ¥° ¤Î Âç Í×
¡Ê£á¡Ë£Ã¡¼¥×¥í¥°¥é¥à ¢» ´Ø¿ô¡¢ÊÑ¿ô¡£
¡Ê£â¡Ë´Ø¿ô¤ÈÊÑ¿ô¤ÎÀë¸À¡¢¤Þ¤¿¤ÏÄêµÁ¡£
»ÈÍѤ¹¤ëÁ°¤Ë
Àë¸À ¡Î°À¡¢Ì¾Á°¡Ï ¤Þ¤¿¤Ï¡¢
ÄêµÁ ¡Î°À¡¢Ì¾Á°¡¢¥á¥â¥ê¶õ´Ö¤Ø¤Î³ä¤êÅö¤Æ¡Ï
¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
default¤Ï¡¢int (char) °À¤È¤Ê¤ë¡£½¾¤Ã¤Æ¡¢¤½¤ì°Ê³°¤Î»þ¤Ï¡¢É¬¤º¡¢
Àë¸À¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
¡Ê£ã¡Ë°À
·¿»ØÄê»Ò void;unsigned;char,short(int),long,double(float)
µ²±¥¯¥é¥¹»ØÄê»Ò default,auto,static,extern,register,typedef
¥Ý¥¤¥ó¥¿»ØÄê»Ò¡¢ÇÛÎó»ØÄê»Ò
¡Ê£ä¡ËÀë¸ÀÄêµÁ¤Î¼ïÎà
ÆâÉôÀë¸À¡¦ÄêµÁ
default=auto;
static=¤½¤Î´Ø¿ô¤Î¤ß͸ú¡£
extern= ¤½¤Î´Ø¿ô³°¤Ë¤¢¤ë³°ÉôÀë¸À¡¦ÄêµÁ¤¬´Ø¿ôÆâ
¤Ç͸ú
³°ÉôÀë¸À¡¦ÄêµÁ
default=linker¤¬ÍѰդ·¤¿¥á¥â¥êÎΰè¤Ë½ÐÍè¡¢¥×¥í¥°¥é¥àÁ´
Éô¤Ë͸ú¡£
static= ¤½¤³¤«¤é¡¢¥×¥í¥°¥é¥à¡¦¥â¥¸¡Ý¥ë¤Î½ª¤ï¤ê¤Þ¤Ç͸ú¡£
extern= ¤½¤Î¥â¥¸¥å¡¼¥ë³°¤Ë¤¢¤ë³°ÉôÀë¸À¡¦ÄêµÁ¤¬¥â¥¸¥å¡¼
¥ëÆâ¤Ç͸ú
£²¡¥¥×¥í¥°¥é¥ß¥ó¥°¤ª¤±¤ëÃí°Õ
¡Ê£á¡ËÌ¿Îá¤ò°ì¹Ô¤Ç½ñ¤±¤Ê¤¤¤È¤¤Ï¡¢¡ï
Îã¡§ printf("ABC ...................................\
DEF");
¡Ê£â¡Ë´Ø¿ôÄêµÁ»þ¤Î²¾ÊÑ¿ô
int, char ²¾ÊÑ¿ô¤Ï¡¢
xyz (int x, int y, char z)
¤È½ñ¤¯¤³¤È¤¬½ÐÍè¤ë¡£¤·¤«¤·¡¢float ²¾ÊÑ¿ô¤Ï¡¤
xyz (x, y, z)
float x, y, z;
{....
¤È½ñ¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
¡Ê£ã¡Ërelational operators
ÉÔÅù¹æ¤«¤é½ñ¤¯¡£ ¡ã¡á¡¤¡ä¡á ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
¡á¡ã¡¤¡á¡ä ¤Ï¡¢¥¨¥é¥¢¤È¤Ê¤ë¡£
¡Ê£ä¡ËÊÑ¿ôÁàºî¤Ë¤ª¤¤¤ÆÊÑ¿ô
ÊÑ¿ô¤ÏÊÑ¿ôÈÖÃÏ¤ÎÆâÍÆ¤òɽ¤¹¡£
a=1000
¤Ï a ÈÖÃÏ¤ÎÆâÍÆ¤Ë 1000 ¤òÆþ¤ì¤ë¤³¤È¡£
&a ¤Ï a¤ÎÈÖÃÏ¡Êoffset¡Ë¤òɽ¤¹¡£
*a ¤Ï a¤Î´ÖÀÜ»ØÄê¤ò¼¨¤¹¡£
¡Ê£å¡Ëlong & double integer¤ÎÂåÆþ¡¢½ÐÎÏ¡§
long dd;
dd=1000L=(long)1000;
printf("%ld", .....);
double ddd;
ddd=10.0=(double)10;
printf("%g", .....);
scanf("%lf", ddd) ¡¥¡¥¡¥¡¥¡É£ì¡É¤ò˺¤ì¤ë¤Ê¡ª
¡Ê£æ¡Ëmalloc(size) ´Ø¿ô
£Í£Ó£Ã¤Ï¡¢£Ä£Ó¡Ê£Ó£Ó¡Ë¤Î¹â°Ì¤«¤éÄã°Ì¤Ë¥Ç¡Ý¥¿¡¢¥¹¥¿¥Ã¥¯¤ò³ä¤êÉÕ¤±¤ë¡£
¤½¤Î¸å¤Ë¡¢ ¤Î¥Ç¡Ý¥¿¤¬³ÎÊݽÐÍè¤ë¤«¤òÄ´¤Ù¤ë¡£
½ÐÍè¤Ê¤±¤ì¤Ð¡¢£°¤òÊÖ¤¹¡£
½ÐÍè¤ì¤Ð¡¢ÀèÆ¬ÈÖÃϡʥª¥Õ¥»¥Ã¥È¡Ë¤òÊÖ¤¹¡£
¡Ê£ê¡Ë¥¥ã¥¹¥È(cast)
Àë¸À char far *a; int i;
a ¤Ï char far ·¿¤Î¥Ý¥¤¥ó¥¿(*) ¤Ç¤¢¤ë¡£
¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý
´Ø¿ô a=(char far *)0xa000 8000
¥¥ã¥¹¥È ¥»¥°¥á¥ó¥È¡§¥ª¥Õ¥»¥Ã¥ÈÃÍ
0xa000 8000 ¤È¸À¤¦¿ô»ú¤Ï (char far·¿¤Î¥Ý¥¤¥ó¥¿(*))¤Ç¤¢¤ë¡£
i=*a
a¤Ë´ÖÀÜ¥¢¥É¥ì¥¹±é»»»Ò¤òŬÍÑ¡£¤½¤ì¤ò i ¤ÎÆâÍÆ¤Ë¤¹¤ë¡£
¡Ê£è¡Ë£Ã£Ò£Ô²èÌÌÀ©¸æÌ¿Îá¤ÎÊ£¹ç
printf(\x1b[4;17m) ¥»¥ß¥³¥í¥ó ; ¤Ç¶èÀÚ¤ë
¡Ê£é¡Ëchar, unsigned char ÊÑ¿ô¤ÎȽÄê
#include
unsigned char cc;
¤ÈÄêµÁ¤·¤¿¤È¤¡¤
if (cc== '\x0f7')... ¤È½ñ¤¤¤Æ¡¢'\x0f7' ¤òÆþÎϤ·¤Æ¤âÅù¤·¤¯¤Ê¤é¤Ê¤¤¡£
if (cc== 0x0f7)... ¤È½ñ¤«¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
¢è '\x0f7', (char)'\x0f7' ¤Ï¡¢É乿ÉÕ¤£¸bits¤È¤ß¤Ê¤µ¤ì¤ë¡£¤½¤ì¤Ç¡¢
== ȽÄê»þ¤Ë¤âÉ乿ÉÕ¤¤È¸«¤Ê¤µ¤ì¤ë¡£Åù¹æÈ½Äê¤Ï¡¢16ŽKŽ^Ž/ŽD ¤Ç¤ª¤³¤Ê¤ï¤ì¤ë¡£
¤½¤ì¤Ç¡¢¤Þ¤º¡¢Äê¿ô¤ò£¸ŽKŽ^Ž/ŽD¢ª£±£¶ŽKŽ^Ž/ŽDÊÑ´¹¤¹¤ë¡£¤³¤Î¤È¤¡¢
f7 ¢ª fff7(-8)
¤È¤Ê¤ë¡£¤½¤ì¤ËÈ¿¤·¤Æ¡¢(unsigned char¡ËCC ¤Ï
f7 ¢ª 00f7
¤È¤Ê¤ë¡£
¡Ê£ê¡Ë¥¼¥í³ÈÄ¥¡§ ÂåÆþ¤ÎºÝ¤Î·¿¤ÎÊÑ´¹
¡ã¿Þ£±¡ä
£³¡¥¥Ý¥¤¥ó¥¿¤È¥Ç¡Ý¥¿¡¦¥¢¥ì¥¤
Àë¸À¡ÊÄêµÁ¡Ë¡§
*X ¤Ï¡¢X ¤¬ ¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¤³¤È¤òÀë¸À¡£
´Ø¿ôÆâ¡§
X pointer ¤Î content ¥Ý¥¤¥ó¥¿¤ÎÆâÍÆ¡£
&X address operator X¤Î¥¢¥É¥ì¥¹¡£
*X indirect operator ´ÖÀÜ¥¢¥É¥ì¥¹»ØÄê±é»»»Ò¡£
¥Ý¥¤¥ó¥¿¤Ë¤Ï¡¢
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢»Ø¤µ¤ì¤ë¤â¤Î¤Î·¿ ¨¢ ¥Ý¥¤¥ó¥¿¤Î·¿ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ char ¨¢ *AA ¨¢
¨¢ void * ¨¢ *A (-> double pointer) ¨¢
¨¢ int ¨¢ far *BB; ¨¢
¨¢ long ¨¢ far *CC; ¨¢
¨¢ void far * ¨¢ (far *DD); ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
ºÇ½é¤ÎÎã¤Ç¤Ï¡¢AA ¤Ï default(near) pointer(2 bytes) ¤Ç¤¢¤ë¡£¤Þ¤¿»Ø¤·¼¨
¤¹¤â¤Î¤â¤Î¤Ï¡¢ char(1 byte)¤Ç¤¢¤ë¡£
ÆóÈÖÌܤÎÎã¤Ç¤Ï¡¢A ¤Ï near pointer(2 bytes) ¤Ç¤¢¤ë¡£»Ø¤·¼¨¤¹¤â¤Î¤â¤Î¤â¡¢
near pointer(2 bytes)¤Ç¤¢¤ë¡£
ºÇ¸å¤ÎÎã¤Ç¤Ï¡¢DD ¤Ï far pointer(4 bytes) ¤Ç¤¢¤ë¡£¤Þ¤¿»Ø¤·¼¨¤¹¤â¤Î¤â¤Î¤â¡¢
far *(4 bytes)¤Ç¤¢¤ë¡£
void far * (far *DD); ¡¥¡¥¡¥¡¥Àë¸À
DD =(void far *)0x080; ¡¥¡¥¡¥¡¥Áàºî
*DD =0x0123456L;
¤È¤¹¤ë¤È¡¢00:0x080 ÈÖÃϤ«¤é¡¢56 34 12 00 ¤¬¡¢³ä¤êÉÕ¤±¤é¤ì¤ë¡£¤³¤ì¤Ï¡¢
mov WORD PTR [bp-4],80h ;DD
mov WORD PTR [bp-2],0
sub bx, bx
mov es, bx (es=0)
mov bx, 128 (bx=80h)
mov WORD PTR es:[bx], 5634h
mov WORD PTR es:[bx+2], 12h
¤ÈŸ³«¤µ¤ì¤ë¡£
bp-4 bp-2 bp
¨£¨¡¨¡¨¨¨¡¨¡¨¨¨¡¨¡¨¨¨¡¨¡¨¤
¨¢£¸£°¨¢£°£°¨¢£°£°¨¢£°£°¨¢
¨¦¨¡¨¡¨ª¨¡¨¡¨ª¨¡¨¡¨ª¨¡¨¡¨¥ ¨£¨¡¨¡¨¨¨¡¨¡¨¨¨¡¨¡¨¨¨¡¨¡¨¤
£°£°£°£°¡§£°£°£¸£°¡§¨¢£µ£¶¨¢£³£´¨¢£±£²¨¢£°£°¨¢
¨¦¨¡¨¡¨ª¨¡¨¡¨ª¨¡¨¡¨ª¨¡¨¡¨¥
¡Ê£á¡ËData array ¤Ç¤Ï¡¢Åº¤¨»ú¤Ï¡¢À°¿ô¤ÎÄê¿ô¤«¡¢ÊÑ¿ô¤Î¤ß¡£
´Ø¿ôÉԲġ£
A[i+1] OK
A[strlen(x)] error.
¡Ê£â¡Ë¥Ç¡¼¥¿¥¢¥ì¥¤¤òÀë¸À¤ÈÄêµÁ¤òƱ»þ¤Ë¤¹¤ë¡£
char A[]="ABC";
int A[5]={12, 34, 56};
¤Ë¤è¤¦¤Ë¡¢Àë¸À¡¦ÄêµÁ¤¹¤ë»þ¡¢ ·¿¤Ï¡¢extern ¤« static ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
¡Ê£ã¡Ëindirection & address operator
int *p, x, y;
p=&x; y=*p ¤Ê¤é¤Ð¡¢ x=y
¨£¨¡¨¡¨¡¨¤
&p: ¨¢ p=&x ¨¢
¨¦¨¡¨¡¨¡¨¥
¨¢ ¨£¨¡¨¡¨¡¨¡¨¡¨¤
¨¦¨¡¡ä &x:¨¢x =123 ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨©
¨¢ ¨¢
¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨©
&y:¨¢y= *p =x ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¥
¡Ê£ä¡Ë Àë¸À»þ¡¢int (char) p, *p, P[3] ¤ÎÁê°ã
p ¡§ p ¤Ï¡¢ÊÑ¿ô¡£
*p ¡§ p ¤Ï¡¢¥Ý¥¤¥ó¥¿¡£
P[3]¡§ P ¤Ï¡¢ÈÖÃÏ»ØÄê¸ì¡£ÊѲ½½ÐÍ褺¡£
¡ãÊÑ¿ô¡ä
char p;
¨£¨¡¨¡¨¡¨¡¨¡¨¤
&p:¨¢p= 'A' ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¥
¡ã¥Ý¥¤¥ó¥¿ ÂÐ ÈÖÃÏ»ØÄê¸ì¡ä
char *p; P[3] ="ABC";
p=P ¤Î¤È¤¡£
¨£¨¡¨¡¨¡¨¡¨¡¨¤
&p: ¨¢p= P ÈÖÃÏ ¨¢ ¨¡¨¡¨¡¨¤
¨¢ ¨¢ ¨¢
¨¢ ¨¢ ¨¢
&P: ¨¢P ÈÖÃÏ ¨¢¨¡¨¤ ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¥ ¨¢ ¨¢
¨¢ ¨¢
¨¢ ¨¢ ¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¦¡ä ¨¦¡ä P : ¨¢ P[0]='A' =*p ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
P+1:¨¢ P[1]='B' =*(p+1) ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
P+2:¨¢ P[2]='C' =*(p+2) ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ ¨¢
¡Ê£å¡ËÊ£¹ç¥¢¥ì¥¤¡§
¢¡a[m][n]
jÎó ¢ª ¡Ê¤³¤Î½ç¤Ë¥á¥â¥ê¤Ë³ä¤êÉÕ¤±¤é¤ì¤ë¡Ë
a[0][0], a[0][1],...... a[0][j],....... a[0][n-1],
a[1][0], a[1][1],...... a[1][j],....... a[1][n-1],
.................................................
i .................................................
¹Ô a[i][0], a[i][1],...... a[i][j],....... a[i][n-1],
..................................................
¢ ..................................................
a[m-2][0], a[m-2][1],.....a[m-2][j],..... a[m-2][n-1],
a[m-1][0], a[m-1][1],.... a[m-1][j],..... a[m-1][n-1],
½¾¤Ã¤Æ¡¢a[i][j] =*(a +n *i +j) ¤È¤Ê¤ë¡£
¢¡ ¥Ý¥¤¥ó¥¿²Ã»»¤ÎÃí°Õ
int AA[2][3]= {1, 2, 3, 4, 5, 6, }
¤Î¤È¤¡¢3 ¤ò¥Ý¥¤¥ó¥È¤¹¤ë¤Ë¤Ï¡¢
AA[0][2] ¤«¡¢(int *)AA +3*0 +2;
ñ¤Ë¡¢(AA +2) ¤È½ñ¤¯¤È¡¢
=AA[2][0]
¤ÈÅù²Á¤È¤Ê¤ë¡£¤½¤ì¤Ç¡¢¥Ý¥¤¥ó¥È¤¹¤ë¤Î¤Ï¡¢
AA+9 ÈÖÃÏ
¤È¤Ê¤ë¡£
AA+2 ÈÖÃϤò¥Ý¥¤¥ó¥È¤¹¤ë¤Ë¤Ï¡¢¾å½Ò¤Î¤è¤¦¤Ë¡¢
(int *)AA +2;
¤È¤¹¤ë¡£
¡Ê£æ¡ËCall by reference ÂÐ Call by value
sub-´Ø¿ô¤ËÆþ¤Ã¤¿¤È¤¡¢
main-ÊÑ¿ô¤½¤Îʪ¤ò¤¤¤¸¤ë¡£ value ¤ò sub ¤Ë°Ü¤¹
¡ÎÎã¡Ï main()
{
int x=10;
aaa(&x);
printf("%d\n", x);
}
aaa(int *p)
{
*p=1;
}
pointer p ¤¬»Ø¤·¤Æ¤¤¤ëÈÖÃÏ¡Êp ¤ÎÆâÍÆ¡Ë¤Ï¡¢int x ¤ÎÈÖÃϤǤ¢¤ë¡£¤¹¤Ê¤ï¤Á¡¢p
ointer p ¤Ï¡¢x ÈÖÃϤò»Ø¤·¤Æ¤¤¤ë¡£¤½¤Î x ÈÖÃÏ¤ÎÆâÍÆ¡Ê¨¤Áx¡Ë¤ò£±¤È¤¹¤ë¡£
¡Ê£ç¡Ë¥Ý¥¤¥ó¥¿ÇÛÎó ¤È ¥À¥Ö¥ë¡¦¥Ý¥¤¥ó¥¿
Àë¸À¡ÊÄêµÁ¡Ë¡§
char *P[3], **p;
p=P;
P¤Ï¡¢[3]¤Ç¤¢¤ë¤«¤é ÇÛÎó¡£ ·¿¤Ï¡¢¡ã*¡ä¤Ç¤¢¤ë¤«¤é¡¢near pointer¡£¤·¤«¤â¡¢
¤½¤ì¤Ï¡¢char¤ò»Ø¤¹¡Ê¡á¤Ä¤Þ¤ê¡¢offset+1¤º¤ÄÁý¸º¤¹¤ë¡Ë¡£
£ð¤Ï (*p)¤Ç¤¢¤ë¤«¤é near pointer¡£ ·¿¤Ï¡¢*()¤Ç¤¢¤ë¤«¤é¡¢
near pointer¡£¤½¤Îpointer¤Ï¡¢char¤ò»Ø¤¹¡£
Áàºî¡§
¨£¨¡¨¡¨¡¨¡¨¡¨¤ ¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¤ ¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
&p:¨¢p= P ÈÖÃÏ ¨¢¨¡¨¡¡ä ¨¢P[0] =*p ¨¢ ¨¡¨¡¡ä ¨¢*P[0] =**p ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¥ ¨§¨¡¨¡¨¡¨¡¨¡¨¡¨© ¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢P[1] =*(p+1)¨¢¨¡¨¡¨¤ ¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨© ¨¢ ¨¢ ¨¢
¨¢P[2] =*(p+2)¨¢¨¤ ¨¢ ¨¢ ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¥¨¢ ¨¢ ¨¢ ¨¢
¨¢ ¨¢ ¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ ¨¦¡ä¨¢*P[1] =**(p+1)¨¢
¨¢ ¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ ¨¢ ¨¢
¨¢ ¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¦¨¡¨¡¡ä¨¢*P[2] =**(p+2)¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¡Ê£æ¡Ë¥á¥¤¥ó¡¦¥â¥¸¥å¥ë¤Î¥¢¡¼¥®¥å¥á¥ó¥È
¡§ ¥Ý¥¤¥ó¥¿ÇÛÎó¤Þ¤¿¤Ï¡¢¥À¥Ö¥ë¡¦¥Ý¥¤¥ó¥¿¤È¤Ê¤Ã¤Æ¤¤¤ë¡£
main(argc, argv, envp) ¤Î»þ¡¢
int argc; ÆþÎÏ¥¢¡Ý¥®¥å¥á¥ó¥È¤Î¿ô
char *argv[]; or **argv; ÆþÎÏ¥¢¡Ý¥®¥å¥á¥ó¥È¤Î¥Ý¥¤¥ó¥¿
char *envp[]; or **envp; ´Ä¶¤Î¥Ý¥¤¥ó¥¿
char **argv or *ARGV[]
¨£¨¡¨¡¨¡¨¡¨¡¨¤
&argv :¨¢ argv, ¨¢
&&ARGV:¨¢ &ARGV[0] ¨¢¨¤
¨¦¨¡¨¡¨¡¨¡¨¡¨¥¨¢
¨¢
¨¢ ¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¦¡ä argv: ¨¢ *argv, ¨¢¨¡¨¡¡ä ¥¢¥®¥å£±
&ARGV[0]: ¨¢ ARGV[0] ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨©
argv+1:¨¢ *(argv+1),¨¢¨¡¨¡¡ä ¥¢¥®¥å£²
&ARGV[1]: ¨¢ ARGV[1¡Ï ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ ¡¥ ¨¢
¨¢ ¡¥ ¨¢
¨¢ ¡¥ ¨¢
¡Ê£ç¡Ëfar ¥Ý¥¤¥ó¥¿¤È near ¥Ý¥¤¥ó¥¿
¥»¥°¥á¥ó¥ÈÆâ¤Î¥Ç¡¼¥¿¤Ï¡¢¥ª¥Õ¥»¥Ã¥ÈÃͤò¡¢£î£å£á£ò¥Ý¥¤¥ó¥¿¡Ê£²¥Ð¥¤¥È¡Ë¡¢¥»
¥°¥á¥ó¥È³°¤Î¥Ç¡¼¥¿¤Ï¥»¥°¥á¥ó¥ÈÃÍ¡§¥ª¥Õ¥»¥Ã¥ÈÃͤò¡¢far ¥Ý¥¤¥ó¥¿¡Ê£´¥Ð¥¤
¥È¡Ë¤Ç»²¾È¤¹¤ë¡£
¥Ç¥£¥Õ¥©¥ë¥È¤Î¥Ý¥¤¥ó¥¿¡§
¥¹¥â¡¼¥ë¡¦¥â¥Ç¥ë¡§ near
¥ß¥Ç¥£¥¢¥à¡¦¥â¥Ç¥ë¡§ ¥³¡¼¥É¡¦¥Ý¥¤¥ó¥¿¤Ï far¡¢¥Ç¡¼¥¿¥Ý¥¤¥ó¥¿¤Ï near
¥é¡¼¥¸¡¦¥â¥Ç¥ë¡§ far ¥Ý¥¤¥ó¥¿
far¥Ý¥¤¥ó¥¿¤Ï¼¡¤Î¤è¤¦¤Ê£´¥Ð¥¤¥È¤«¤é¤Ê¤ê¡¢¾å°Ì£²¥Ð¥¤¥È¤Ç¥»¥°¥á¥ó¥ÈÃÍ¡¢²¼
°Ì£²¥Ð¥¤¥È¤Ç¥ª¥Õ¥»¥Ã¥ÈÃͤòɽ¤·¤Æ¤¤¤ë¡£
a=(char far *)0xa0008000L /* ʪÍý¥¢¥É¥ì¥¹ 0xa8000 */
far¥Ý¥¤¥ó¥¿¤«¤é¥»¥°¥á¥ó¥ÈÃͤȥª¥Õ¥»¥Ã¥ÈÃͤòʬΥ¤¹¤ë¤Ë¤Ï¡¢
FP_SEG(a) ¡¦¡¦¡¦0xa000 ¤¬ÊÖ¤µ¤ì¤ë¡£
FP_OFF(a) ¡¦¡¦¡¦0x8000 ¤¬ÊÖ¤µ¤ì¤ë¡£
¡Ê£è¡Ëfar ¥Ý¥¤¥ó¥¿¤È far data
static char far buf[100]; /* far¥Ç¡¼¥¿ */
char far *pa; /* far¥Ý¥¤¥ó¥¿ */
¤ÈÀë¸À¤µ¤ì¤Æ¤¤¤¿¤È¤¡¢pa¤Ï£´¥Ð¥¤¥È¤Î¥Ý¥¤¥ó¥¿ÊÑ¿ô¡¢buf¤Ï£´¥Ð¥¤¥È¤Î¥Ç¡¼¥¿¡¦
¥¢¥ì¥¤¡£
far¥Ý¥¤¥ó¥¿pa¤òÍѤ¤¤Æfar¥Ç¡¼¥¿buf¤ò»²¾È¤¹¤ë¤Ë¤Ï¡¢
pa=(char far *)buf;
far¥Ý¥¤¥ó¥¿pa¤Ï¡¢¼«Æ°ÊÑ¿ô¤È¤·¤Æ¥¹¥¿¥Ã¥¯¾å¤Ë¤È¤é¤ì¤ë¡£
far¥Ç¡¼¥¿¤Îbuf¤Ï¡¢DGROUP ¤È¤Ï°Û¤Ê¤ë far ¥Ç¡¼¥¿¡¦¥»¥°¥á¥ó¥È¤Ë¼è¤é¤ì¤ë¡£
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¥×¥í¥°¥é¥à¨¢ _TEXT ¨¢
ÎÎ°è ¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ far¥Ç¡¼¥¿¡¦¥»¥°¥á¥ó¥È¨¢ ¢« ¤³¤³¤Ëbuf[100]¤ÎÎΰ褬¤È¤é¤ì¤ë¡£
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ NULL ¨¢
¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
DGROUP ¨¢ _DATA ¨¢ ÀÅŪ¤Þ¤¿¤Ï³°Éô¥Ç¡¼¥¿
¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ CONSTANT ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ _BSS ¤È c_common ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨© ¢«far ¥Ý¥¤¥ó¥¿£ð£á¤ÏÊÑ¿ô¤Ê¤Î¤Ç
¨¢ ¨¢ ¤³¤³¤Ë³ä¤êÅö¤Æ¤é¤ì¤ë¡£
¨¢ STACK ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢ ¥Ò¡¼¥× ¨¢
¨¢ ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
£´¡¥¹½Â¤ÂΡ¢¶¦ÍÑÂÎ
¹½Â¤ÂΡ§
¹àÌܤ´¤È¤Ë¡¢¼¡¡¹¤ËÎΰè¤ò¼è¤ë¡£
struct WORDREGS { <-- ¹½Â¤ÂÎ¥¿¥°¡Ê¡á¹½Â¤ÂÎ̾¡Ë
unsigned int ax;
unsigned int bx; <-- ¹½Â¤ÂÎ¥á¥ó¥Ð¡¼
unsigned int cx;
} A[3], <--¹½Â¤ÂÎÇÛÎó
x, y, z; <--¹½Â¤ÂΥݥ¤¥ó¥¿
¹½Â¤ÂÎ¥¿¥°¡Ê¡á¹½Â¤ÂÎ̾¡Ë¡§Ê̤Υ⥸¥å¡¼¥ë¤Ç¡¢³°ÉôÀë¸À¤¹¤ë¤È¤¡¢Æ±¤¸¹½Â¤
¤Î¤â¤Î¤È¸«¤Ê¤µ¤ì¤ë¡£ ¡Ê£±¤Ä¤Î¥â¥¸¥å¡¼¥ëÆâ¤Î¤ßɬÍפΤȤ¡¢¾Êά²Ä¡£¡Ë
¹½Â¤ÂÎ¥á¥ó¥Ð¡¼¡§¶ö¿ôÈÖÃϤ«¤é³ä¤êÉÕ¤±¤é¤ì¤ë¡£
struct { char x; char y; char z; }
¤Î»þ
¨£¨¡¨¨¨¡¨¨¨¡¨¨¨¡¨¤
¨¢x ¨¢0 ¨¢y ¨¢z ¨¢ ¤È¤Ê¤ë¡£
¨¦¨¡¨ª¨¡¨ª¨¡¨ª¨¡¨¥
¹½Â¤ÂÎÇÛÎ󡧳ƥá¥ó¥Ð¡¼¤Ï¡¢A[2].ax ¤Î¤è¤¦¤Ëɽ¤¹¡£
¹½Â¤ÂΥݥ¤¥ó¥¿¡§¹½Â¤ÂΥݥ¤¥ó¥¿¡¼¤Ï¡¢¤½¤Î¹½Â¤¤ÎÀèÆ¬¤ò»Ø¤·¼¨¤¹¡£
¡ÊÃúÅÙ¡¢char pointer ¤¬¡¢ char string ¤ÎÀèÆ¬¤ò»Ø¤¹¤è¤¦¤Ë¡Ë¡£
½¾¤Ã¤Æ¡¢x+1 (=x+1 -> ax) ¤Ï¡¢x ¤Î sizeof(struct WORDREGS) ÈÖÃÏ
¡Ê¥Ð¥¤¥È¡ËÌܤò»Ø¤¹¡£
¶¦ÍÑÂΡ§
Á´¹àÌÜ¡¢Æ±¤¸ÀèÆ¬ÈÖÃϤ«¤é¼è¤ëÎΰè¤ò¼è¤ë¡£
¹½Â¤ÂΡ¢¶¦ÍÑÂΤÎŵ·¿Åª¤ÊÎã¤Ï¡¢¥ì¥¸¥¹¥¿¡¦¥»¥Ã¥È¡£
¡Ê£á¡Ë¥»¥°¥á¥ó¥È¡¦¥ì¥¸¥¹¥¿: ¹½Â¤ÂÎ
struct SREGS{ ¥¿¥° (TAG)
unsigned int es;
unsigned int cs;
unsigned int ss;
unsigned int ds;
};
¤È¡¢Àë¸À¤µ¤ì¤ë¡£¤½¤ì¤Ç¡¢
struct SREGS segregs <-- Àë¸À»Ò (DECLARATOR)
¤ÈÄêµÁ¤·¡¢¸Ä¡¹¤Î¥ì¥¸¥¹¥¿¤Ï¡¢¥á¥ó¥Ð¡Ý¤È¤·¤Æ¡¢
segreg.ds; segreg.cs; segreg.ss; segreg.es
¤Èɽ¤¹¡£
¡Ê£â¡Ë ¤½¤Î¾¤Î¥ì¥¸¥¹¥¿¡§ ¶¦ÍÑÂÎ
struct WORDREGS { struct BYTEREGS {
unsigned int ax; unsigned char al, ah;
unsigned int bx; unsigned char bl, bh;
unsigned int cx; unsigned char cl, ch;
unsigned int dx; unsigned char dl, dh;
unsigned int si; };
unsigned int di;
unsigned int cflag;
};
union REGS {
struct WORDREGS x;
struct BYTEREGS h;
};
¤È¶¦ÍÑÂΤȤ·¤Æ¡¢Àë¸À¤·¡¢¤µ¤é¤Ë¡¢
union REGS regset;
¤ÈÄêµÁ¤·¡¢¸Ä¡¹¤Î¥ì¥¸¥¹¥¿¤Ï¡¢¥á¥ó¥Ð¡Ý¤È¤·¤Æ¡¢
regset.h.al; regset.h.ah; regset.x.ax ....
¤Èɽ¤¹¡£
¨£¨¡¨¡¨¡¨¡¨¡¨¤
regset.h.al ¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨© regset.x.ax
regset.h.ah ¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨©
regset.h.bl ¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨© regset.x.bx
regset.h.bh ¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨©
regset.h.cl ¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨© regset.x.cx
¡¦ ¨¢ ¨¢
¡¦ ¨§¨¡¨¡¨¡¨¡¨¡¨©
¡¦ ¨¢ ¨¢
¡¦ ¨¢ ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¥
¡Ê£ã¡Ë¡¥¥ì¥¸¥¹¥¿¹½Â¤ÂÎ SREGS¡¢¶¦ÍÑÂÎ REGS ¤ò»È¤¦Îã
¢¡¥»¥°¥á¥ó¥È¡¦¥ì¥¸¥¹¥¿·²¤Î¹½Â¤ÂÎ SREGS ¤Ø¤ÎÆÉ¤ß¹þ¤ß
segread(&segregs);
¤È¤¹¤ë¡£
¢¡¥½¥Õ¥È¥¦¥§¥¢¡¦³ä¤ê¹þ¤ß
int86x(vect, ®set, ®set, &segregs);
¥Ù¥¯¥È¥ë¡¢ÆþÎϥ쥰¥»¥Ã¥È¡¢½ÐÎϥ쥰¥»¥Ã¥È¡¢ÆþÎÏ¥»¥°¡¦¥ì¥°¥»¥Ã¥È
¤È¤¹¤ë¡£
¢¡¥á¥â¥ê´Ö¤Î¥Ö¥í¥Ã¥¯Å¾Á÷
movedata(sourceseg, sourceoff, destseg, destoff, nbyte);
¥½¡¼¥¹¡¦¥»¥°¥á¥ó¥È¡¢¥ª¥Õ¥»¥Ã¥È ¢ª ¥Ç¥¹¥Æ¥Í¥¤¥·¥ç¥ó¡¢ ¥Ð¥¤¥È¿ô
£µ. ¥Õ¥¡¥¤¥ë½èÍý
¡Îa¡Ï¥Õ¥¡¥¤¥ë̾
¥É¥é¥¤¥Ö̾¡§¡ï¥Ñ¥¹Ì¾¡ï¥Õ¥¡¥¤¥ë̾¤ò¡¢ £Ã¸À¸ì¤Ç½ñ¤¯¤Ë¤Ï¡¢
¡Ý¡ä¡É¥É¥é¥¤¥Ö̾¡§¡ï¡ï¥Ñ¥¹Ì¾¡ï¡ï¥Õ¥¡¥¤¥ë̾¡É
¡Îb¡Ï¥Õ¥¡¥¤¥ë¤Î¼ïÎà
¢¡¥é¥¤¥È¡¦¥¤¥á¡¼¥¸¤Î¤è¤ëʬÎà
£á¡¥¥Ð¥¤¥Ê¥ê¡¦¥â¡¼¥É
£â¡¥¥Æ¥¥¹¥È¡¦¥â¡¼¥É
¢¡¥Õ¥¡¥¤¥ëÊÔÀ®¤Î¼ïÎà
£á¡¥¥·¡¼¥±¥ó¥·¥ã¥¹¡¦¥Õ¥¡¥¤¥ë
£â¡¥¥é¥ó¥À¥à¡¦¥Õ¥¡¥¤¥ë
£ã¡¥¥ì¥³¡¼¥É·¿¥Õ¥¡¥¤¥ë
¢¡¥Õ¥¡¥¤¥ëI/O ¤Ë¤è¤ëʬÎà
£á¡¥Äã¿å½à¥Õ¥¡¥¤¥ëÆþ½ÐÎÏ
£â¡¥¹â¿å½à¥Õ¥¡¥¤¥ë¡Ê¥¹¥È¥ê¡¼¥à¡ËÆþ½ÐÎÏ
¡Îc¡Ï¥é¥¤¥È¡¦¥¤¥á¡¼¥¸¡Ê¥â¡¼¥É¡Ë
¥Æ¥¥¹¥È¡¦¥â¡¼¥É
°õ»ú²Äǽʸ»ú¤È¥³¥ó¥È¥í¡¼¥ë¡¦¥³¡¼¥É¡Ê'\t', '\t'¤Ê¤É¡Ë¤«¤é¤Ê¤ë¡£
¤¿¤È¤¨¤Ð¡¢fprint(fp, "%d",10) --> ...31 30 ...
¥¨¥Ç¥¿¤Ç½ÐÍè¤ë¥Æ¥¥¹¥È¡¦¥Õ¥¡¥¤¥ë¤Ï¤³¤Î¥â¡¼¥É¡£
¥á¥â¥ê¡¦¥Õ¥¡¥¤¥ë´Ö¤Ç CR¡¦LF¡Ý'\n' ¤Î¼«Æ°ÊÑ´¹¡£0x1a¢ªEOF¤È¤ß¤Ê¤¹¡£
¥Ð¥¤¥Ê¥ê¡¦¥â¡Ý¥É
0Ž0255 ¤Î¤¹¤Ù¤Æ¤Î¥³¡¼¥É¤¬Â¸ºß¤¹¤ë¡£
¤¿¤È¤¨¤Ð¡¢putw(10,fp) --> ...0a 00 ...
*.obj, *.exe ¤Ï¡¢¤³¤Î¥â¡¼¥É¡£
¥á¥â¥ê¡¦¥Õ¥¡¥¤¥ë´Ö¤Ç CR¡¦LF¡Ý¤½¤Î¤Þ¤Þ
0x1a¢ªEOF¤Ç¤Ê¤¤
»°¤Ä¤Î¥â¡¼¥É»ØÄêË¡
¥ª¡¼¥×¥ó»þ¤Î»ØÄê¡§
fd=open("abc.x", O_RDONLY | O_BINARY);
fp=fopen("abc.x", "rb");
¥Ç¥Õ¥©¥ë¥È¤Ï¡¢t-mode
¥°¥í¡¼¥Ð¥ëÊÑ¿ô_fmode¤Ë¤è¤ë»ØÄê¡§
#include ¢» _fmode
#include ¢» open
_fmode=O_BINARY;
¤È¤·¤ÆÃÖ¤¯¤È¡¢open »þ¤Î¥Ç¥Õ¥©¥ë¥È¤Ï¡¢b-mode¤È¤Ê¤ë¡£
¥ê¥ó¥¯»þ¤Î»ØÄê¡§
BINMODE.OBJ ¤òLINK¤¹¤ë¤È¡¢stdin,sdout,stderrµÚ¤Ót-mode¤Ç
¥ª¡¼¥×¥ó¤·¤¿¥Õ¥¡¥¤¥ë°Ê³°¤Ï¡¢b-mode¤È¤Ê¤ë¡£
¡Îd¡Ï¥Õ¥¡¥¤¥ëÊÔÀ®¤Î¼ïÎà
¥Ð¥¤¥È¢ª¥Õ¥£¡¼¥ë¥É¢ª ¥ì¥³¡¼¥É¢ª¥Õ¥¡¥¤¥ë¡£
£á¡¥¥·¡¼¥±¥ó¥·¥ã¥¹¡¦¥Õ¥¡¥¤¥ë
¥Õ¥¡¥¤¥ëÀèÆ¬¤«¤éÃ༡½ñ¤¹þ¤ß¡¿ÆÉ¤ß½Ð¤·
£â¡¥¥é¥ó¥À¥à¡¦¥Õ¥¡¥¤¥ë
¥Õ¥¡¥¤¥ë¤ÎǤ°Õ°ÌÃ֤ؤνñ¤¹þ¤ß¡¿ÆÉ¤ß½Ð¤·
£ã¡¥¥ì¥³¡¼¥É¡Ê¹½Â¤ÂΡ˷¿¥Õ¥¡¥¤¥ë
¥Õ¥¡¥¤¥ë¤ò¥ì¥³¡¼¥Éñ°Ì¤Ç°·¤¦¤È¤¡¢fscanf/fprintf¤òÍѤ¤¤ë¡£
¸ÇÄêĹ¥ì¥³¡¼¥É ¢ª ¥é¥ó¥À¥à¡¦¥Õ¥¡¥¤¥ë¤ËŬ¤¹
²ÄÊÑĹ¥ì¥³¡¼¥É¡¥¡¥¶èÀÚ¤êɬÍ× ¢ª ¥·¡¼¥±¥ó¥·¥ã¥¹¡¦¥Õ¥¡¥¤¥ë¤ËŬ¤¹
¤¬¤¢¤ë¡£
[e¡ÏÄã¿å½à¥Õ¥¡¥¤¥ëÆþ½ÐÎÏ´Ø¿ô
ÂçÎ̤Υǡ¼¥¿¤ò¹â®¤ËŽXŽ0ŽDŽ^/ŽWŽ2ŽD¤¹¤ë¾ì¹ç¤ËÍÍø
£á¡¥MS_DOS ¤Î¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¸Æ¤Ó½Ð¤¹´Ø¿ô¡£¥Õ¥¡¥¤¥ë¤Î¼±Ê̤ϡ¢¥Õ¥¡
¥¤¥ëµ½Ò»Ò¤ò»È¤¦¡£¤³¤ì¤Ï¡¢MS_DOS ¤Î¥Ï¥¤¥ë¡¦¥Ï¥ó¥É¥ë¤ÈƱ°ì¤Ç¤¢¤ë¡£
£â¡¥create ´Ø¿ô¡§¥Õ¥¡¥¤¥ë¤ÎºîÀ®¡Ü¥ª¡¼¥×¥ó
fd=creat (, )
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢ mode ¨¢ ¥Æ¥¥¹¥È¡¦¥â¡¼¥É ¨¢¥Ð¥¤¥Ê¥ê¡¦¥â¡¼¥É ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢¥ê¡¼¥É¡¿¥é¥¤¥È¨¢ 0 ¨¢ 0x8000 ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
£ã¡¥open ´Ø¿ô¡§¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó
fd=open (, )
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢ mode ¨¢¥Æ¥¥¹¥È¡¦¥â¡¼¥É¨¢¥Ð¥¤¥Ê¥ê¡¦¥â¡¼¥É ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢¥ê¡¼¥É ¨¢ 0 ¨¢ 0x8000 ¨¢
¨¢¥é¥¤¥È ¨¢ 1 ¨¢ 0x8001 ¨¢
¨¢¥ê¡¼¥É¡¿¥é¥¤¥È¨¢ 2 ¨¢ 0x8002 ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
£ä¡¥¥Õ¥¡¥¤¥ë¤ÎÆþ½ÐÎÏ¡£¥Õ¥¡¥¤¥ëµ½Ò»Ò¤ò»È¤¦¡£
char buff[SIZE];
read (fd, buff, nbytes);
write (fd, buff, nbytes);
£å¡¥close ´Ø¿ô
close (fd);
£æ¡¥¥Õ¥¡¥¤¥ë°ÌÃÖ¤Î°ÜÆ°/¼èÆÀ
lseek (fd, offset, mode) Àµ¾ï¥Õ¥¡¥¤¥ë°ÌÃÖ¡¢°Û¾ï-1L
0: ÀèÆ¬¤«¤é
1: ¸½ºß°ÌÃÖ¤«¤é
2: ½ª¤ï¤ê¤«¤é
ftell
g.¤½¤Î¾
¥Õ¥¡¥¤¥ë¡¦¥¨¥ó¥É¤Î¸¡ÃÎ eof
¥Ï¥ó¥É¥ë¤Î¥³¥Ô¡¼ dup/dup2
ÆÃ¼ì¤Ê¥ª¡¼¥×¥ó sopen
¢§Äã¿å½à¥Õ¥¡¥¤¥ë
¡ã¿Þ£²
¡Î£æ¡Ï¹â¿å½à¥Õ¥¡¥¤¥ëÆþ½ÐÎÏ´Ø¿ô
ʸ»ú/¹Ôñ°Ì¤Ç½èÍý²Äǽ¤Î¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°ÉÕ¤¤Î¤¿¤áŽCŽ7Ž=ŽD¡¦ŽLŽ'Ž2ŽY¤Î°·¤¤¤ËÍÍø¤Î´Ø
¿ô¡£¤³¤ì¤Ë¤Ï¡¢¥Ð¥Ã¥Õ¥¡¥É¡¦¥³¥ó¥½¥ëÆþ½ÐÎÏ´Ø¿ô¤¬´Þ¤Þ¤ì¤ë¡£
£á¡¥¥Õ¥¡¥¤¥ë¤Î¼±ÊÌ¡§ ¥Õ¥¡¥¤¥ë¡Ê¹½Â¤ÂΡ˥ݥ¤¥ó¥¿¡£
¥Õ¥¡¥¤¥ë¤Ë´Ø¤¹¤ë¹½Â¤ÂΤϡ¢
struct _iobuf { /* = FILE ¤È define ¤µ¤ì¤Æ¤¤¤ë¡£*/
char *_ptr; /* ¥«¥ì¥ó¥È¡¦¥Ð¥Ã¥Õ¥¡¡¦¥Ý¥¤¥ó¥¿ */
int _cnt; /* ¥Ð¥Ã¥Õ¥¡Æâ¤Î͸ú¥Ç¡¼¥¿¿ô */
char *_base; /* I/O ¥Ð¥Ã¥Õ¥¡¤Î¥Ù¡¼¥¹¥¢¥É¥ì¥¹ */
char _flg; /* ¥³¥ó¥È¥í¡¼¥ë¡¦¥Õ¥é¥° */
char _file; /* ¥Õ¥¡¥¤¥ëÀë¸À»Ò */
} _iob [_NFILE]; /* ɸ½àÆþ½ÐÎϹ½Â¤ÂΥݥ¤¥ó¥¿ÇÛÎó */
¤ÈÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£_NFILE=20
¤³¤Î¹½Â¤ÂΤΥݥ¤¥ó¥¿¤Ï¡¢
struct _iobuf(or FILE) *fp;
¤ÈÀë¸À¤¹¤ì¤Ð¤è¤¤¡£
¤Þ¤¿¡¢É¸½àÆþ½ÐÎϤΠstdin, stdout, stdaux, stdprn ¥Ý¥¤¥ó¥¿¤Ï¡¢¹½Â¤ÂΥݥ¤
¥ó¥¿ ÇÛÎó _iob ¤Ç¡¢
#define stdin (&_iob[0])
#define stdout (&_iob[1])
#define stdaux (&_iob[2])
#define stdprn (&_iob[3])
¤ÈÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£¤½¤ì¤Ç¡¢_iob[0]._ptr ¤È¤¹¤ì¤Ð¡¢stdin ¤Î¥Ð¥Ã¥Õ¥¡¤òľÀÜ¥¢
¥¯¥»¥¹½ÐÍè¤ë¡£
£â¡¥¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó/¥¯¥í¡¼¥º fopen/fclose/fcoseall/freopen
FILE *fp0, fopen();
fp=fopen (, mode) ¡¥¡¥¡¥¥¨¥é¡Ý»þ¡¤ NULL
Âè°ì»ú r: ¤¢¤ë¤â¤Î¤ò¥ª¡¼¥×¥ó
w: ¡Ê¤¢¤ì¤Ð¡¢ºï½ü¤·¡¢¡Ë¿·¶õ¥Õ¥¡¥¤¥ëºîÀ®
a: ̵¤±¤ì¤Ð¡¢¿·¶õ¥Õ¥¡¥¤¥ëºîÀ®
ÂèÆó»ú b: ¥Ð¥¤¥Ê¥ê¡¦¥Õ¥¡¥¤¥ë
t: ¥Æ¥¥¹¥È¡¦¥Õ¥¡¥¤¥ë
£ã¡¥¥Õ¥¡¥¤¥ë¤ÎÆþ½ÐÎÏ¡£
¢¡£±Ê¸»úñ°Ì¤ÎÆþ½ÐÎÏ
getc/fgetc/putc/fputc/unget (c, fp);
c= putc/fputc (fp);
¢¡£±¥ï¡¼¥Éñ°Ì¤Î¥ê¡¼¥É/¥é¥¤¥È
getw (c, fp); c=putw (fp);
¢¡£±¹Ôñ°Ì¤ÎÆþ½ÐÎÏ
fgets (buff, maxbytes, fp); fputs (buff, fp);
¢¡½ñ¼°ÉÕ¤Æþ½ÐÎÏ fscanf/fprintf
¢¡¥ê¡¼¥É/¥é¥¤¥È¡© fread/fwrite
x ¥Ð¥¤¥È¤ò n ¸Ä fread(buff, x, n, fp);
¢¡¥Ð¥Ã¥Õ¥¡¥É¡¦¥³¥ó¥½¡¼¥ëÆþ½ÐÎϡʥê¥À¥¤¥ì¥¯¥È²Ä¡Ë
getchar/fgetchar (c); c=putchar/fputchar();
gets (sbuff, nbytes); puts (sbuff, nbytes);
scanf ("%format",data); printf ("%format",data);
£å¡¥¥Õ¥¡¥¤¥ë°ÌÃÖ¤Î°ÜÆ°/¼èÆÀ fseek/rewind/ftell
fseek (fp, position, mode)
(long) 0: ÀèÆ¬¤«¤é
1: ¸½ºß°ÌÃÖ¤«¤é
2: ½ª¤ï¤ê¤«¤é
Ìá¤êÃÍ¡§ Àµ¾ï¥Õ¥¡¥¤¥ë°ÌÃÖ¡¢°Û¾ï-1L
£æ.¤½¤Î¾
¥Õ¥¡¥¤¥ë¡¦¥¨¥ó¥É¡¦¥¨¥é¡¼¤Î¸¡½Ð feof/ferror/clearerr
¥Ð¥Ã¥Õ¥¡¤ÎÀßÄê/¥Õ¥é¥Ã¥·¥å setbuf/fflush/flushall
Äã¿å½à¤È¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹ fdopen/fileno
¢§¥Ð¥Ã¥Õ¥¡¥É¡¦¥Õ¥¡¥¤¥ë
¡ã¿Þ£³
£¶¡¥I/O ¥ê¥À¥¤¥ì¥¯¥È¡¢¥Õ¥£¥ë¥¿¡¢¥Ñ¥¤¥Õ
¡Ê£á¡Ëɸ½àÆþ½ÐÎÏ¥Õ¥¡¥¤¥ë
ɸ½àÆþ½ÐÎÏ¥Õ¥¡¥¤¥ë¤ÏMSC ¤Î¥×¥í¥°¥é¥àµ¯Æ°»þ¤Ë¼«Æ°Åª¤Ë¥ª¡¼¥×¥ó¤µ¤ì¤ë¡£
¤½¤Î»þ¤Î¥Õ¥¡¥¤¥ë¡¦¥Ý¥¤¥ó¥¿¤ª¤è¤Ó¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ï¼¡¤ÎÄ̤ꡣ
¢§É¸½àÆþ½ÐÎÏ¥Õ¥¡¥¤¥ë
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢ ¥Õ¥¡¥¤¥ë ¨¢ŽLŽ'Ž2ŽY¡¦ ¨¢ŽLŽ'Ž2ŽY¡¦ ¨¢ È÷ ¹Í ¨¢
¨¢ ¨¢ ŽNŽ_Ž2Ž]Ž@ ¨¢ ŽCŽ^Ž(Ž=Ž8ŽXŽLŽ_Ž@¨¢ ¨¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©
¨¢É¸½àÆþÎÏ ¨¢ stdin ¨¢ £° ¨¢ÄÌ¾ï ¥¡¼¥Ü¡¼¥É ¨¢
¨¢É¸½à½ÐÎÏ ¨¢ stdout ¨¢ £± ¨¢ÄÌ¾ï ¥¹¥¯¥ê¡¼¥ó ¨¢
¨¢É¸½à¥¨¥é¡¼ ¨¢ stderr ¨¢ £² ¨¢ÄÌ¾ï ¥¹¥¯¥ê¡¼¥ó ¨¢
¨¢É¸½àÊä½õÆþ½ÐÎϨ¢ stdaux ¨¢ £³ ¨¢Ä̾ï COM(RS-232C)ŽNŽ_Ž0ŽD ¨¢
¨¢É¸½à¥×¥ê¥ó¥¿ ¨¢ stdprn ¨¢ £´ ¨¢ÄÌ¾ï ¥×¥ê¥ó¥¿ ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¥Ð¥Ã¥Õ¥¡¥É¡¦¥Õ¥¡¥¤¥ëÆþ½ÐÎÏ´Ø¿ô gete/pute ¤òÍѤ¤¤ÆÉ¸½àÆþ½ÐÎϤ˥¢¥¯¥»¥¹¤¹
¤ë¤Ë¤Ï¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£
getc(stdin) ¡¦¡¦¡¦stdin ¤«¤é¤Î£±Ê¸»úÆþÎÏ¡£ getchar( )¤ÈƱ¤¸
putc(c, stdout) ¡¦¡¦¡¦stdout ¤ØÊ¸»ú c ¤ò½ÐÎÏ¡£ putchar(c)¤ÈƱ¤¸
putc(c, stderr) ¡¦¡¦¡¦stderr ¤ØÊ¸»ú c ¤ò½ÐÎÏ
getc(stdaux) ¡¦¡¦¡¦stdaux ¤«¤é¤Î£±Ê¸»úÆþÎÏ
putc(c, stdaux) ¡¦¡¦¡¦stdaux ¤ØÊ¸»ú c ¤ò½ÐÎÏ
putc(c, stdprn) ¡¦¡¦¡¦stdprn ¤ØÊ¸»ú c ¤ò½ÐÎÏ
¡Ê£²¡Ëɸ½àÆþ½ÐÎÏ¥Õ¥¡¥¤¥ë¤ÎºÆ¥ª¡¼¥×¥ó
¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤Ï¡¢¥æ¡¼¥¶¡¼¤¬ÆÈ¼«¤Ë¥Ç¥Ð¥¤¥¹Ì¾¤òÍѤ¤¤Æ¥ª¡¼¥×¥ó¤¹¤ë¤³¤È¤â
¤Ç¤¤ë¡£¤¿¤À¤·¡¢¥æ¡¼¥¶¡¼¤¬¡¢¤³¤ì¤é¤Î¥Ç¥Ð¥¤¥¹¤ò¥ª¡¼¥×¥ó¤¹¤ë¤È¤¡¢£Í£Ó¡Ý£Ä£Ï
£Ó¤¬¥µ¥Ý¡¼¥È¤¹¤ë£É£Ð¤Î¥Ç¥Ð¥¤¥¹Ì¾¤ò»È¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
con ¡¡ ¡¦¡¦¡¦¥³¥ó¥½¡¼¥ë¡Ê¥¡¼¥Ü¡¼¥É¡¿¥¹¥¯¥ê¡¼¥ó¡Ë
aux ¡¦¡¦¡¦Êä½õÆþ½ÐÎÏ
prn ¡¦¡¦¡¦¥×¥ê¥ó¥¿
nul ¡¦¡¦¡¦¥Ì¥ë
clock ¡¦¡¦¡¦¥¯¥í¥Ã¥¯
Î㡨
stdout²¼¤Î¥Î¥ó¡¦¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¥â¡¼¥É¢ª¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¡¦¥â¡¼¥É¤È¤¹¤ë
putc('a', stdout) = putchar('a')
¤Ï '\n' ¤¬¤¯¤ë¡¢¤³¤Ê¤¤¤Ë´Ø·¸¤Ê¤¯Â¨ºÂ¤Ë¥¹¥¯¥ê¡¼¥ó¤Ø½ÐÎϤ¹¤ë¡£
¤½¤ì¤ò£±¹Ô¤º¤Ä½ÐÎϤ¹¤ë¤Ë¤Ï¡¢¥Õ¥¡¥¤¥ë¡¦¥Ý¥¤¥ó¥¿ bufcon¤òÍѤ¤¤Æ¡¢
FILE *bufcon;
bufcon=fopen ("con", "wt");
putc('a', bufcon);
¤È¤¹¤ë¤È¡¢putc('\n', bufcon); ¤¬¹Ô¤ï¤ì¤ë¤Þ¤Çʸ»ú'a'¤Ï¥¹¥¯¥ê¡¼¥ó¤Ë¤Ï½ÐÎϤµ
¤ì¤Ê¤¯¤Ê¤ë¡£
¡Ê£³¡Ë¥Õ¥£¥ë¥¿·¿¥×¥í¥°¥é¥à¤È£é¡¿£ï¥ê¥À¥¤¥ì¥¯¥È
¥Õ¥£¥ë¥¿·¿¥×¥í¥°¥é¥à¤Ï¡¢É¸½àÆþ½ÐÎÏ(stdin)¤«¤é¥Ç¡¼¥¿¤òÆþÎϤ·¡¢¤½¤Î¥Ç¡¼¥¿
¤ò²Ã¹©¤·¤ÆÉ¸½à½ÐÎÏ(stdout) ¤Ë½ÐÎϤ¹¤ë¡£
stdin¤Èstdout¤Ï£é¡¿£ï¥ê¥À¥¤¥ì¥¯¥È¡Ê¾¤ÎÆþÎϤˤ«¤¨¤ë¤³¤È¡Ë¤Ç¤¤ë¡£Æþ½ÐÎÏ
¤Ï¥¡¼¥Ü¡¼¥É¤È¥¹¥¯¥ê¡¼¥ó¤Ë¸ÂÄꤵ¤ì¤ºÈÆÍÑŪ¤Ê½èÍý¤¬¹Ô¤¨¤ë¡£
stderr¤Ï¡¢stdout¤ÈƱ¤¸¤¯¥¹¥¯¥ê¡¼¥ó½ÐÎϤˤʤäƤ¤¤ë¡£¤·¤«¤·¡¢
stderr¤Ï¡¢¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Ê¤¤¡£¤½¤ì¤Ç¡¢stdout¤¬¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Æ¤â¡¢¤¤¤Ä
¤â¥¹¥¯¥ê¡¼¥ó½ÐÎϤȤʤ롣
¥Õ¥£¥ë¥¿¤Ï¡¢¥Ñ¥¤¥×¤òÍѤ¤¤Æ¤¤¤¯¤Ä¤Ç¤â¤Ä¤Ê¤²¤Æ¤¤¤¯¤³¤È¤¬¤Ç¤¤ë¡£¥Ñ¥¤¥×¤ÏMS
-DOS¤Î¥³¥Þ¥ó¥É¡¦¥é¥¤¥ó¤Ç¡Ö¡Ã¡×¤Îµ¹æ¤Çɽ¤ï¤¹¡£
¡ã¿Þ£´
¡Ê£´¡ËI/O ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Ê¤¤¥³¥ó¥½¡¼¥ëÆþ½ÐÎÏ
¥Õ¥£¥ë¥¿·¿¥×¥í¥°¥é¥àÃæ¡¢stdin¤ästdout¤ò¡¢¥Õ¥¡¥¤¥ë¤Ê¤É¤Ë¥ê¥À¥¤¥ì¥¯¥È¤¹¤ì
¤Ð¡¢getcha/putchar; getch/putch ¤Ê¤É¤ÎÌ¿Îá¤Ï¡¢¤¹¤Ù¤ÆI/O ¥ê¥À¥¤¥ì¥¯¥È¤Î
ÂоݤȤʤ롣¤·¤«¤·¡¢¤³¤Î¤è¤¦¤Ê¤ê¥À¥¤¥ì¥¯¥ÈÃæ¤â¡¢¤È¤¤Ë¥¡¼¥Ü¡¼¥ÉÆþÎÏ¡¢¥¹¥¯
¥ê¡¼¥ó½ÐÎϤ·¤¿¤¤¤³¤È¤¬¤¢¤ë¡£
¤³¤Î¤è¤¦¤Ê¤È¤¡¢MSC ´Ø¿ô¤òÍѤ¤¤ÆI/O ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Ê¤¤¥³¥ó¥½¡¼¥ë
Æþ½ÐÎϤò¹Ô¤¦¤³¤È¤¬½ÐÍè¤ë¡£¥Ç¥Ð¥¤¥¹CON¤òÆÈ¼«¤Ë¥ª¡¼¥×¥ó¤·¡¢DUP´Ø¿ô¤Ë¤è¤ê¥Ï¥ó
¥É¥ë¡Ê¥Õ¥¡¥¤¥ë¡¦¥Ç¥£¥¹¥¯¥ê¥×¥¿¡Ë¤ÎÆó½Å²½¤ò¹Ô¤¤¡¢stdin¤Ècon¤ò¤¦¤Þ¤¯ÀÚ¤êÂØ¤¨
¤ë¡£¼ê½ç¤Ï¼¡¤ÎÄ̤ꡣ
¡¥Ç¥Ð¥¤¥¹con¤ò¥ª¡¼¥×¥ó¤¹¤ë¡£
¢stdin¡Ê¥Ï¥ó¥É¥ë£°¡Ë¤òÂàÈò¤¹¤ë¡£
£con¤òstdin¤Ë¥³¥Ô¡¼¤¹¤ë¡£¤³¤ì¤Ë¤è¤ê¡¢stdin¤«¤é¤ÎÆþÎϤò¹Ô¤Ã¤Æ¤¤¤ë´Ø¿ô¡Êg
etchar,getch¤Ê¤É¡Ë¤Ïcon¤«¤é¤ÎÆþÎϤˤʤ롣
¤con¤«¤é¤ÎÆþÎϤò¹Ô¤¦¡£
¥ÂàÈò¤·¤Æ¤¢¤Ã¤¿¥Ï¥ó¥É¥ë¤òstdin¤ËÌ᤹¡£¤³¤ì¤Ë¤è¤êstdin¤ÏÁ°¤Î¥ê¥À¥¤¥ì¥¯¥È
Àè¤ËÌᤵ¤ì¤ë¡£
¡ã¿Þ£µ
¢£¥ê¥À¥¤¥ì¥¯¥È²Äǽ¤Êɸ½àÆþ½ÐÎϤòÍѤ¤¤¿ÈÆÍÑ¥×¥í¥°¥é¥à
#include
main()
{
int c;
while ((c=getchar()) != EOF) putchar(c);
}
¡ü£ç£å£ô£ó¡¿£ð£õ£ô£ó ¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
#include
main()
{
char buf[256];
while (gets(buf) != NULL) puts(buf);
}
¡ü£ó£ã£á£î£æ¡¿£ð£ò£é£î£ô£æ ¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
#include
main()
{
int year;
char name[21];
while (scanf("%s %d", name, &year)!=EOF)
printf("%20s%3d\n", name, year);
}
¢£¥Õ¥£¥ë¥¿³Æ¼ï
¡ü¥¿¥Ö¤ò¥¹¥Ú¡¼¥¹¤Ë´¹¤¨¤ë¥Õ¥£¥ë¥¿
¥¿¥Ö¥³¡¼¥É("\t")¤Ï¡¢¥¹¥¯¥ê¡¼¥ó¡¢¥×¥ê¥ó¥¿¤Ê¤É¤Î¥Ç¥Ð¥¤¥¹¤Ç°Û¤Ê¤Ã¤¿°·¤¤¤ò¤¹
¤ë¤³¤È¤¬¤¢¤ë¡£¤¿¤È¤¨¤Ð¡¢¥¹¥¯¥ê¡¼¥ó½ÐÎϤò prn ¤Ø¥ê¥À¥¤¥ì¥¯¥È¤·¤¿¾ì¹ç¡¢¥×¥ê
¥ó¥¿¤Ë¤ª¤¤¤Æ¥¿¥Ö°ÌÃ֤Υ»¥Ã¥È¥¢¥Ã¥×¤¬¤Ê¤±¤ì¤Ð¡¢¥¿¥Ö¡¦¥³¡¼¥É¤ò̵»ë¤·¤Æ¤·¤Þ¤¦¡£
¤½¤³¤Ç¡¢¥¿¥Ö¡¦¥³¡¼¥É¤ò¤Ä¤®¤Î¤è¤¦¤Ë¤·¤Æ¡¢¥¹¥Ú¡¼¥¹¤ËÃÖ¤´¹¤¨¤ë¡£
/*--------- ¥¿¥Ö¤ò¥¹¥Ú¡¼¥¹¤Ë´¹¤¨¤ë¥Õ¥£¥ë¥¿ tabspac ----------------*/
#include
main()
{
int c, i, count=0
while ((c=getchar())!=EOF){
if (c == '\t'){
for (i=8-count%8; i>0; i--){
putchar(' '); count++;
}
}
else {
putchar(c); count++;
}
if (c=='\n' || c == '\f' ) count=0;
}
}
¥Æ¥¥¹¥È£±¹Ô¤Ï¡¢'\n'¤Ç½ª¤ï¤Ã¤Æ¤¤¤ë¤â¤Î¤È¤·¡¢count¤Ï¤½¤Î¹Ô¤Î²¿Ê¸»úÌܤˤ¤
¤ë¤«¤ò¼¨¤¹¡£¥¿¥Ö°ÌÃ֤ϣ¸Ê¸»ú´Ö³Ö¤Ç¤È¤ë¤â¤Î¤È¤¹¤ë¡£'\t'¤¬¸½¤ì¤¿¤é¡Ê8-count%
8¡Ë¸Ä¤Î¥¹¥Ú¡¼¥¹¤òÊ䤦¡£
¥Õ¥¡¥¤¥ë abc.c ¤ò¥Õ¥£¥ë¥¿tabspc ¤òÄ̤·¤Æ¥×¥ê¥ó¥¿¤Ë½ÐÎϤ¹¤ë¤È¡¢¥¿¥Ö°ÌÃÖ¤¬
¥»¥Ã¥È¥¢¥Ã¥×¤µ¤ì¤Æ¤¤¤Ê¤¯¤Æ¤âÀµ¾ï¤Ê½ÐÎϤ¬ÆÀ¤é¤ì¤ë¡£
¡ã¿Þ£¶
¡ü¹ÔÈÖ¹æ¤òÉղ乤ë¥Õ¥£¥ë¥¿
¥Æ¥¥¹¥È¤ò£±¹Ôñ°Ì¤Ç¥ê¡¼¥É¤·¡¢£´·å¤Î¹ÔÈÖ¹æ¤òÀèÆ¬¤ËÉղ乤ë¥Õ¥£¥ë¥¿ LI
NE¤ò¼¡¤Ë¼¨¤¹¡£
#include
main
{
int count=1;
char buf[256];
while (fgets(buf, 256, stdin)!=NULL)
printf("%04d: %s", count++, buf);
}
¡ü¾®Ê¸»ú¢ªÂçʸ»úÊÑ´¹¥Õ¥£¥ë¥¿
¾®Ê¸»ú¤òÂçʸ»ú¤ËÊÑ´¹¤¹¤ë¥Õ¥£¥ë¥¿toupper¤ò¼¨¤¹¡£
#include
main()
{
char c;
while ((c=getchar()) != EOF) putchar(toupper(c));
}
¤³¤Î¥Õ¥£¥ë¥¿¤òÍѤ¤¤Æ a.c ¤Î¥Õ¥¡¥¤¥ë¤òÂçʸ»úÊÑ´¹¤·¤Æ b.c ¤Ë¥³¥Ô¡¼¤¹¤ë¤Ë¤Ï
¼¡¤Î¤è¤¦¤¹¤ë¡£
B>toupper < a.c > b.c
¢£¥Ñ¥¤¥×
Àè¤Ë¼¨¤·¤¿£³¤Ä¤Î¥Õ¥£¥ë¥¿ toupper, tabspc, line ¤òÍѤ¤¡¢¥Õ¥¡¥¤¥ë a.c¤ÎÆâ
ÍÆ¤òÂçʸ»ú¤ËÊÑ´¹¤·¡¢¥¿¥Ö¤ò¥¹¥Ú¡¼¥¹¤ËÊÑ´¹¤·¡¢¤µ¤é¤Ë¹ÔÈÖ¹æ¤òÉÕ¤±¤Æ¥×¥ê¥ó¥¿¤Ë
½ÐÎϤ¹¤ë¤Ë¤Ï
A>type a.c | toupper | tabspc | line > prn
¤È¤¹¤ë¡£
¢£I/O ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Ê¤¤¥³¥ó¥½¡¼¥ëÆþÎÏ
°Ê¾å¤«¤é¡¢I/O ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤º¡¢¾ï¤Ë¥³¥ó¥½¡¼¥ë¤«¤é£±Ê¸»úÆþÎϤ¹¤ë´Ø¿ô
getkey() ¤Ï¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
getkey()
{
FILE *con;
int std, c;
if (( con=fopen("CON", "rb"))==NULL){
printf("Can't open CON.\n");
exit();
}
std=dup(0); /* stdin ¤Î ÂàÈò */
dup2(fileno(con), 0); /* stdin ¤ò con ¤Ë¥ê¥À¥¤¥ì¥¯¥È */
c=getch(); /* ¥¡¼ ÆþÎÏ */
dup2(std, 0); /* stdin ¤ÎÉüµ¢ */
return(c);
}
¤³¤Î´Ø¿ô¤òÍøÍѤ·¤¿¥Õ¥£¥ë¥¿ more ¤ò¼¡¤Ë¼¨¤·¤Þ¤¹¡£
#include
main()
{
char buff[256];
int count=0;
while (gets(buff != NULL){
puts(buff);
if (++count==22){
printf("--- more --- Hit Any Key\n");
getkey();
count=0;
}
}
}
¥Õ¥£¥ë¥¿ more ¤Ï¡¢¥ê¡¼¥É¤·¤¿¥Æ¥¥¹¥È¤ò£±²èÌ̡ʣ²£²¹Ô¡Ëɽ¼¨¤·¡¢¥¡¼ÆþÎϤ¬
¤¢¤ë¤Þ¤ÇÂÔ¤Á¡¢¥¡¼ÆþÎϤ¬¤¢¤ì¤Ð¼¡¤Ë¿Ê¤à¤È¤¤¤¦¤â¤Î¡£¤³¤Î¤è¤¦¤Ê¾ì¹ç¡¢¤É¤¦¤·¤Æ
¤â I/O ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Ê¤¤¥³¥ó¥½¡¼¥ëÆþÎÏ´Ø¿ô¤¬É¬Íפˤʤê¤Þ¤¹¡£
¢£ I/O ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Ê¤¤¥³¥ó¥½¡¼¥ë½ÐÎÏ
I/O ¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Ê¤¤¥³¥ó¥½¡¼¥ë½ÐÎϤϡ¢¥³¥ó¥½¡¼¥ëÆþÎϤξì¹ç¤ÈƱÍÍ
¤ÊÊýË¡¤Ç¹Ô¤¨¤ë¡£¤·¤«¤·¡¢stderr¤Ë½ÐÎϤ¹¤ë¤³¤È¤Ç´Êñ¤Ë¼Â¸½¤Ç¤¤ë¡£
fprintf(stderr, "Not Text File\n");
£·¡¥£Ã¥×¥í¥°¥é¥à¤ÎŸ³«¤È¥ê¥ó¥¯
¡Î£°¡Ïdata array Ÿ³«¤Ë´Ø¤¹¤ëÃí°Õ
¥Ç¡¼¥¿¤ò¼¡¤Î¤è¤¦¤ËÀë¸À¤¹¤ë¡£
int a, b, c, d; int x[2]; char y[2];
¥¢¥»¥ó¥Ö¥éŸ³«¤Ï¡¢Àë¸À¤Î½ç¤ÎÄ̤ꡢ¤¹¤Ê¤ï¤Á
a, b, c, d, x[0], x[1], y[0], y[1]
¤Î¤è¤¦¤Ë¥¢¥É¥ì¥¹¤Ë³ä¤êÉÕ¤±¤é¤ì¤Ê¤¤¡£
d, x[0], x[1], c, b, a, y[0], y[1]
¤È¤Ê¤ë¡£
¡Î£±¡Ï £Ã¥×¥í¥°¥é¥à¤ÎŸ³«
¥¹¥â¡¼¥ë¡¿¥³¥ó¥Ñ¥¯¥È¡¿¥ß¥Ç¥£¥¢¥à/¥é¡¼¥¸/¥Ò¥å¡¼¥¸¤Î³Æ¥â¥Ç¥ë¡¢´ðËÜŪ¤Ë¤ÏƱ¤¸
¹½Â¤¡£ÊÑ¿ô¡¿ÇÛÎóÀë¸À¤Î¤È¤¡¢Ìµ»ØÄêÊÑ¿ô¡ÊÇÛÎó¡Ë¤ònear/far/huge¤È¤¹¤ë¤«¤¬°Û
¤Ê¤ë¡£
¡ünear»ØÄꤢ¤ê¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥Ç¥Õ¥©¥ë¥È¡¦¥»¥°¥á¥ó¥È¡ÊDGROUP¡Ë
¡üfar¤Þ¤¿¤Ïhuge»ØÄꤢ¤ê¡¦¡¦¡¦¡¦¡¦¡¦¥¯¥é¥¹FAR_BSS¤Þ¤¿¤ÏFAR_DATA¤ËÆÈΩ
¤·¤¿¥»¥°¥á¥ó¥È¤È¤·¤Æ¼è¤é¤ì¤ë¡£
¡ü»ØÄê¤Ê¤·
¥¹¥â¡¼¥ë/¥ß¥Ç¥£¥¢¥à¡¦¡¦¡¦¡¦¡¦¥Ç¥Õ¥©¥ë¥È¡¦¥»¥°¥á¥ó¥È¡ÊDGROUP¡Ë
¥é¡¼¥¸/¥Ò¥å¡¼¥¸/¥³¥ó¥Ñ¥¯¥È¡¦¡¦¡¦¾®¤µ¤Ê¥Ç¡¼¥¿¤Ï¥Ç¥Õ¥©¥ë¥È¡¦¥»¥°¥á¥ó
¥È¡¨Â礤ʥǡ¼¥¿¤ÏFAR_BSS/FAR_DATA¥»¥°¥á¥ó¥È¤È¤·¤Æ¼è¤é¤ì¤ë¡£
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤¢¬ »Ä¤ê¤Î¥á¥â¥êÁ´Éô
¨¢ far¥Ò¡¼¥× ¨¢¢
¨§¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨©¢¬
¨¢ near¥Ò¡¼¥× ¨¢¨¢
¨¢ -----------------------------¨¢¨¢ ¨¡¨¨¨¡
¹â¥¢¥É¥ì¥¹ ¨¢ ¥¹¥¿¥Ã¥¯ ¨¢¨¢ ¨¢ SS:SP
¢¬ ¨¢ STACK¥¯¥é¥¹'STACK' ¨¢¨¢¡¡¡¡¢
¨¢ ¨¢ -----------------------------¨¢¨¢
¨¢ ¨¢ ½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ç¡¼¥¿ ¨¢¨¢
¨¢ ¨¢ _BSS¥¯¥é¥¹'BSS'¤ª¤è¤Ó ¨¢¨¢ ºÇÂç64K¥Ð¥¤¥È
¨¢ ¨¢ c_common¥¯¥é¥¹'BSS' ¨¢¨¢¡¡(DGROUP)
¨¢ ¨¢ -----------------------------¨¢¨¢
¨¢ ¨¢ CONST¥¯¥é¥¹'CONST' ¨¢¨¢
¨¢ ¨¢ Äê¿ôÀìÍѥǡ¼¥¿ ¨¢¨¢
¨¢ ¨¢ CONST¥¯¥é¥¹'CONST' ¨¢¨¢
¨¢ ¨¢ ½é´ü²½¤µ¤ì¤Æ¤¤¤ë¥Ç¡¼¥¿ ¨¢¨¢¡¡¡¡¢¬
¨¢ ¨¢ DATA¥¯¥é¥¹'DATA' ¨¢¢ ¨¢
¨¢ DGROUP¡á ¢ª¨¢ -----------------------------¨¢¢¬ ¨¡¨ª¨¡ DS:
¨¢ ES¡áDS¡áSS ¨¢ ½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤far·¿¥Ç¡¼¥¿¨¢¨¢
¨¢ ¨¢ ????_BSS¥¯¥é¥¹'FAR_BSS' ¨¢¨¢far/huge¤Ç»ØÄꤵ¤ì¤¿¥Ç¡¼¥¿
¢ ¨¢ -----------------------------¨¢¨¢ºÇÂ磶£´¥Ð¥¤¥È¤Î¥»¥°¥á¥ó¥È
Ä㥢¥É¥ì¥¹ ¨¢ ½é´ü²½¤µ¤ì¤Æ¤¤¤ëfar·¿¥Ç¡¼¥¿ ¨¢¨¢¤¬Ê£¿ôºî¤é¤ì¤ë
¨¢ ????_DATA¥¯¥é¥¹'FAR_DATA' ¨¢¨¢
¨¢ -----------------------------¨¢¢¥ß¥Ç¥£¥¢¥àŽ$¥é¡¼¥¸Ž$¥Ò¥å¡¼¥¸
¨¢ ¥³¡¼¥É ¨¢¢¬ºÇÂ磶£´¥Ð¥¤¥È¤Î¥³¡¼¥É¡¦¥»
¨¢ _TEXT¥¯¥é¥¹'CODE' ¨¢¨¢¥°¥á¥ó¥È¤¬¥â¥¸¥å¡¼¥ë¤´¤È¤Ë
CS ¢ª¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥¢ºî¤é¤ì¤ë
¡Î£²¡ÏÊÑ¿ô¤ÎŸ³«
£á¡¥ÂçÍ×
ÆâÉô¥ì¥Ù¥ë
(auto) block Ãæ¤Ç͸ú
register
£ó£ô£á£ô£é£ã ³°Éô¥ì¥Ù¥ë¤Îstatic¤ÈƱ¤¸
£å£ø£ô£å£ò£î ³°Éô¥ì¥Ù¥ë¤Îextern¤ÈƱ¤¸
³°Éô¥ì¥Ù¥ë ÊÑ¿ô
¡¦static ÄêµÁ¤È¤ß¤Ê¤µ¤ì¤ë
Îã static int k=16;
static int k;(=static int k=0)
¡¦extern Ê̤ξì½ê¤ÇÄêµÁ¤·¤¿ÊÑ¿ô¤Î»²¾È¤òÀë¸À¡ÊÄêµÁ¤Ï¤Ç¤¤Ê¤¤¡Ë
¡¦¡Ê¤Ê¤·¡Ë extern¤ÈƱ¤¸
⤷int k=1;¤È¤¹¤ì¤ÐÄêµÁ¤È¤Ê¤ë¡£¤Þ¤¿¡¢¤É¤³¤Ë¤âÄêµÁ¤Ê¤±¤ì¤ÐÄêµÁ¤È¤Ê¤ë
£â¡¥public ¤ÈŸ³«¤µ¤ì¤ë¤â¤Î
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢#include
¨¢int RSIZE=75; ¢ª¡¡³°ÉôÄêµÁ¤Ï
¨¢FILE *fpo, *fopen();
¨¢int N, N1, N9, L2;
¨¢
¨¢main()
¨¢{
¨¢ char fn[20], term;
¨¢ char buff[512];
¨¢ unsigned I, ln;
¨¢
¨¢ ginit();
¨¢
¨¢/*open file */
¨¢ printf("FILENAME: "); scanf ("%s", fn);
¨¢ fpo=fopen (fn, "r");
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¤òŸ³«¤¹¤ë¤È
EXTRN _atoi:NEAR
EXTRN _DISPL:NEAR
EXTRN _locate:NEAR
EXTRN _close:NEAR
EXTRN _fpo:WORD
EXTRN _N0:WORD
EXTRN _N1:WORD
EXTRN _N9:WORD
EXTRN _L2:WORD
DATA SEGMENT
$SG35 DB FILENAME: ', 00H
EVEN
$SG37 DB '%s', 00H
EVEN
$SG38 DB 'r', 00H
$SG41 DB '%d', 0aH, 00H
$SG42 DB '%x', 0aH, 00H
PUBLIC RSIZE ¢«¡¡¤³¤Î¤è¤¦¤ËŸ³«¤µ¤ì¤ë
_RSIZE DW 04BH
; .com _fpo,02H NEAR
: .com _N0,02H NEAR
; .com _N1,02H NEAR
; .com _N9,02H NEAR
; .com _L2,02H NEAR
DATA ENDS
¤È¤Ê¤ë¡£
£ã¡¥extern ¤ÈŸ³«¤µ¤ì¤ë¤â¤Î
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢int N0, N9; ¢ª¡¡³°Éô
¨¢/********** SUB DISPL *****************************/
¨¢DISPL ()
¨¢{
¨¢ int y, n, nn;
¨¢ char term,buf[100];
¨¢ cls(3);
¨¢ nn=N0+21; if (nn>N9) nn=9;
¨¢ for (y=0, n=N0; n < nn;y++,n++){
¨¢ LREAD (y,buf, &term);
¨¢ locate (1,y); printf ("%s", buf);
¨¢ TERM (term);
¨¢ }
¨¢}
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¤Ï¡¢
extern
EXTRN _N0:WORD
EXTRN _N9:WORD
_DATA SEGMENT
$SG39 DB '%s', 00H
EVEN
$SG44 DB '%c', 00H
¤ÈŸ³«¤µ¤ì¤ë¤«¡¢default¤Î»þ¤Ï¤½¤ì°Ê³°¤Ë
;.comm_N0, 02H NEAR
;.comm_N9, 02H NEAR
¼¡¤Î¤è¤¦¤Ë½ñ¤¤¤Æ¤âƱ¤¸Å¸³«¤ÏƱ¤¸¡£
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢/********** SUB DISPL **************/
¨¢DISPL ()
¨¢{
¨¢extern int N0, N9 ¢ª¡¡ÆâÉô
¨¢ ..........
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
£ä¡¥static ¤ÎŸ³« £Ä£Ó¤Ë³ä¤êÉÕ¤±¤é¤ì¤ë
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢static init N0, N9 ¨¢static int N0=5
¨¢ ¨¢ ¡¦
¨¢/********** SUB DISPL **************/¡¡¡¡¡¡ ¨¢¡¡¡¡ ¡¦
¨¢DISPL ()¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¨¢¡¡¡¡ ¡¡ ¡¦
¨¢{¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¨¢¡¡¡¡¡¡¡¡¡¦
¨¢ int y, n, nn;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¨¢¡¡¡¡¡¡¡¡¡¦
¨¢ char term,buf[100];¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¨¢¡¡¡¡¡¡¡¡¡¦
¨¢ ......... ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¤Ï¡¢¼¡¤Î¤è¤¦¤ËŸ³«¤µ¤ì¤ë
_BSS SEGMENT _DATA ENDS
$S20_N0 DW 01H DUP (?) $S22_N0 DW 05H
$S21_N9 DW 01H DUP (?) _DATA SEGMENT
_BSS ENDS
¡Î£³¡ÏÇÛÎó¤ÎŸ³«
static auto,default extrn
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
¢ ¢ ¢
DS¤Ë¤È¤ë¡¡¡¡ ¡¡STACK¤Ë¤È¤ë¡¡ ¡¡DS¤Ë¤È¤ë
³°Éô¤ÈƱ¤¸ ³°Éô¤ÈƱ¤¸
¥×¥í¥°¥é¥à³°Éô¤Ë½ñ¤¯»þ
static default extrn (comÉôʬ¤Ê¤·)
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
static char buff[100]¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡char buff[100]
¢ ¢
_BSS SEG EXTRN _buf:BYTE
_DATA SEGMENT $S20_buff DW 32H DUP(?)
BSS ENDS .comm _buf,064H NEAR
_DATA ENDS
¡Î£´¡Ï´Ø¿ô¤«¤é´Ø¿ô¤Ø¤Î¥Ç¡¼¥¿¤Î°úÅϤ·
£Ã¤Ë¤ª¤¤¤Æ¤Ï¡¢£±¤Ä¤Î´Ø¿ôÆâ¤Ç¤Ï¡¢bp ¤ò´ð½à¤È¤·¤Æ»²¾È¤µ¤ì¤ë¡£
´Ø¿ô¤«¤é
proc (x, y, z);
¤Î¤è¤¦¤Ë°ú¤¿ô parameters ¤ò¤â¤Ã¤Æ¡¢´Ø¿ô¤ò°Ü¹Ô¤¹¤ë¡£¤³¤Î¤È¤¡¢ÊÑ¿ô¤Ï¥¹¥¿¥Ã
¥¯¤ËÀѤó¤Ç°ú¤ÅϤµ¤ì¤ë¡£¥ê¥¿¡¼¥ó¸å¡¢sp¤Ë°ú¿ô¤Î¿ô¤ò²Ã¤¨¤Æ¡¢°ÊÁ°¤Îbp¤È¤¹¤ë¡£
¨£¨¡¨¤
¨¢j ¨¢bp-4
¨¢ ¨¢
¨§¨¡¨©
¨¢i ¨¢bp-2
sp¢ªbp ¨¢ ¨¢ bp¢ªsp
¨£¨¡¨¡¨¨¨¡¨¡¨ª¨¡¨ª¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¤
¨¢push¨¢ bp ¨¢pop ¨¢
¨¢bp ¨¢ ¨¢bp ¨¢
¨£¨¡¨¡¨¡¨«¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨«¨¡¨¡¨¡¨¤
¨¢return¨¢ bp+2 ¨¢return¨¢
¨¢addr ¨¢ ¨¢addr ¨¢
¨£¨¡¨«¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨¡¨«¨¡¨¤
bp-6¨¢z ¨¢ bp+4 ¨¢ ¨¢
¨¢ ¨¢ ¨¢ ¨¢
¨§¨¡¨© ¨§¨¡¨©
bp-4¨¢y ¨¢ bp+6 ¨¢ ¨¢
¨¢ ¨¢ ¨¢ ¨¢
¨§¨¡¨© ¨§¨¡¨©
bp-2¨¢x ¨¢ bp+8 ¨¢ ¨¢
¨¢ ¨¢ ¨¢ ¨¢
¨¡¨¡¨ª¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨ª¨¡¨¡
¢¬sp ¢¬bp ¢bp ¢sp
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
MAIN ¡¡ ¨¢ PROC ¡¡¡¡ ¨¢ MAIN
¡Î£µ¡Ï´Ø¿ô¤«¤é´Ø¿ô¤Ø¤Î¥Ç¡¼¥¿¤ÎÊÖ¤·
£Ã¤Ç¤Ï¡¢´Ø¿ô¤Î°ú¿ô¤ò¥×¥í¥»¥¸¥ãÆâ¤ÇÊѲ½¤µ¤»¤Æ¤â¡¢¥á¥¤¥ó¤Ëµ¢¤ë¤È¡¢¸µ¤ÎÃͤË
Ìá¤ë¡£¡Êalgol¤ÎvalueÀë¸À¤·¤¿¤Î¤ÈƱ¤¸¡Ë
¥×¥í¥»¥¸¥ã´Ø¿ôÆâ¤Ç¤Î°ú¿ôÊѲ½¤ò¥á¥¤¥óÉüµ¢¸å»Ä¤¹¤Ë¤Ï¡¢
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¨¨¡¨¡¨¨¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
¥á¥¤¥ó ¨¢ ¨¢ ¥×¥í¥»¥¸¥ã
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨«¨¡¨¡¨«¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
& (ÊÑ¿ô) ¤ò°ú¤ÅϤ¹ ¨¢--> ¨¢ *(¥Ý¥¤¥ó¥¿) ¤È¤·¤Æ¼õ¤±¤È¤ë¡£
ÇÛÎó¤Î¥Ý¥¤¥ó¥¿¤ò°ú¤ÅϤ¹ ¨¢--> ¨¢ ¥Ý¥¤¥ó¥¿¤È¤·¤Æ¼õ¤±¤È¤ë¡£
´Ø¿ô¤Ë»ý¤Ã¤Æµ¢¤ë ¨¢<-- ¨¢ RETURN (°ú¿ô) ¤È¤·¤Æ¡¢
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨ª¨¡¨¡¨ª¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
ds Îΰè¤Ï¡¢Êݾڤµ¤ì¤Ê¤¤¡£¥¢¥Ã¥»¥ó¥Ö¥éÃʳ¬¤Ç¥³¡Ý¥Ç¥ó¥°¤·¤Æ¤â¡¢
_DATA SEGMENT
M DW 10 ¢«MAIN¤Ëµ¢¤Ã¤¿¤È¤Êݾ㤵¤ì¤Ê¤¤¡£
_DATA ENDS
_TEXT SEG
.
MOV A, M MOV A, CS:M
. ¢¬
(M DW 10) ¢«¤Î¤è¤¦¤ËCSÆâ¤ÇÄêµÁ¤·¤Ê¤±¤ì¤¬¤Ê¤é¤Ê¤¤¡£
_TEXT ENDS
¡Î£¶¡ÏÇÛÎó¥Ý¥¤¥ó¥¿¡Ê¤ª¤è¤ÓÊÑ¿ô¡Ë¤Î¼õ¤±ÅϤ·
FILE:SREAD.C
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢#include
¨¢#include
¨¢
¨¢main()
¨¢
¨¢{
¨¢static char buf[1024];
¨¢int I, j, drive, sectnum, sectbgn;
¨¢
¨¢ printf("DRIVE= ");scanf("%d", &drive);
¨¢ printf("SECTBGN= ");scanf("%d", §bgn);
¨¢ buf[0]='Z';
¨¢
¨¢ sread (but,drive,1,sectbgn);
¨¢
¨¢ for (j=0; j++){
¨¢ printf("%04x": ",j*16);
¨¢ for (I=0; I< 16; I++)
¨¢ printf("%02x": ",buf[j*16+i]);
¨¢ printf(" ");
¨¢ for (i=0; I< 16; i++){
¨¢ if (isprint(buf[j+1]))
¨¢ putchar(buf[j*16+i]);
¨¢ else
¨¢ putchar('.');
¨¢ }
¨¢ printf("\n");
¨¢ }
¨¢}
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢FILE: SSUB.C
¨¢
¨¢sread (buf, drive, sectnum, sectbgn)
¨¢char *buf;
¨¢unsigned int drive, sectnum, sectbgn;
¨¢{
¨¢ printf("%d %c %d %d %d\n" ,buf, *buf, drive, sectbgn, sectnum);
¨¢}
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¡¨Static Name Aliases
¡¨ $25_buf EQU buf
TITLE sread
.287
_TEXT SEGMENT BYTE PUBLIC 'CODE'
_TEXT ENDS
.
.
.
_DATA ENDS
_BSS SEGMENT
$S25_BUF DW 0200H DUP(?)
_BSS ENDS
_TEXT SEGMENT
;Line 5
PUBLIC _main
_main PROC NEAR
*** 000000 55 push bp
*** 000001 8b ec mov bp,sp
*** 000003 b8 0a 00 mov ax,10
*** 000006 e8 00 00 call __chkstk[check stack]
*** 000009 57 push di
*** 00000a 56 push si
; sectbgn =-2
: i =-4
; j =-6
; sectnum =-8
drive =-10
.
.
.
;Line13
*** 000040 ff 76 fe push WORD PRT[bp-2];setbgn
*** 000043 b8 01 00 mov ax,1
*** 000046 50 push ax
*** 000047 ff 76 f6 push WORD PRT[bp-10] ;drive
*** 00004a b8 00 00 mov ax,OFFSET DGROUP:$S25_ BUF
*** 00004d 50 push ax
*** 00004e+2 e8 00 00 call sread
*** 000051 83 c4 08 add sp,8
.
.
.
;Line 29
*** 00013b 5e pop si
*** 00013c 5f pop di
*** 00013d 8b e5 mov sp,bp
*** 00013f 5d pop bp
*** 000140 c3 ret
_main ENDP
_TEXT ENDS
END
; Static Name Allases
;
TITLE ssub
.287
_TEXT SEGMENT BYTE PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
_CONST SEGMENT WORD PUBLIC 'CONST'
_CONST ENDS
_BSS SEGMENT WORD PUBLIC 'BSS'
_BSS ENDS
DGROUP GROUP CONST, _BSS, _DATA
ASSUME CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
EXTRN _printf:NEAR
EXTRN __chkstk:NEAR
_DATA SEGMENT
$SG DB '%d %c %d %d %d', 0aH, 00H
_DATA ENDS
_TEXT SEGMENT
; buf = 4
; drive = 6
; sectnum = 8
; sectbgn = 10
; Line 2
PUBLIC _sread
_sread PROC NEAR
*** 000000 55 push bp
*** 000001 8b ec mov bp,sp
*** 000003 33 c0 xor ax,ax
*** 000005 e8 00 00 call __chkstk
; Line 5
*** 000008 ff 76 08 push WORD PTR [BP+8] ;sectnum
*** 00000b ff 76 0a push WORD PTR [BP+10] ;sectb
*** 00000e ff 76 06 push WORD PTR [BP+6] ;drive
*** 000011 8b 5e 04 mov bx,[BP+4] ;buf
*** 000014 8a 07 mov al,[bx]
*** 000016 98 cbw
*** 000017 50 push ax
*** 000018 53 push bx
*** 000019 b8 00 00 mov ax,offset DGROUP:$SG14
*** 00001c 50 push ax
*** 00001d e8 00 00 call _printf
; Line 6
*** 000020 8b ec mov bp,sp
*** 000022 5d pop bp
*** 000023 c3 ret
_sread ENDP
_TEXT ENDS
END
[£·]¥Þ¥È¥ê¥Ã¥¯¥¹¡¦¥Ý¥¤¥ó¥¿¤Î´Ø¿ô¤È¤Î¼õ¤±ÅϤ·
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢#include
¨¢#include
¨¢#include
¨¢#include
¨¢
¨¢main()
¨¢{
¨¢ int I, j, m, n;
¨¢ double *Dat, *Norm;
¨¢
¨¢ printf ("Category: "); scanf ("%d", &m);
¨¢ printf ("Total: "); scanf ("%d", &n);
¨¢
¨¢ if ((Dat=(double *)malloc(n*m*8) )==0 ) {
¨¢ printf ("can't be memory !!\n");
¨¢ sleep(2);
¨¢ exit(1);
¨¢}
¨¢ if ((Norm=(double *)malloc(n*m*8) )==0 ) {
¨¢ printf ("can't be memory !!\n");
¨¢ sleep(2);
¨¢ exit(1);
¨¢}
¨¢ /*------- Data matrix: Dat[n][m] -------*/
¨¢ for (I=0; i< n; I++) {
¨¢ printf ("#%3d: ", I);
¨¢ for (j=0; j< m; j++) {
¨¢ scanf ( "%1f", (Dat+i*m+j) );¢Í&Dat[i*m+j]¤Ç¤â¤è¤¤
¨¢ }
¨¢ }
¨¢ printf("---\n");
¨¢ /*------- Normalization -------*/
¨¢ mat_type (Dat, n,m);
¨¢ printf ("\n");
¨¢
¨¢ normalize( Dat, Norm, n, m );
¨¢ mat_type (Norm, n,m);
¨¢ printf ("\n");
¨¢
¨¢ free(Dat);
¨¢ free(Norm);
¨¢}
¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢/*************************************************************/
¨¢normalize (Data, _Norm, n, m)
¨¢ double *Data, *_Norm; int n, m; ¢Í Dat[]¤Ç¤â¤è¤¤
¨¢{
¨¢ mat_equ (Norm, Dat, n, m);
¨¢}
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
£¸¡££Ã¤È¥¢¥Ã¥»¥ó¥Ö¥é¤Î·ë¹ç
¤¢¤ë¼ï¤Î¥×¥í¥°¥é¥à¤Ï¡¢µ¡³£¸ì¤ÇÁȤष¤«¤Ê¤¤¡£Î㤨¤Ð¡¢int 25h¡¢int 26h ¤Î
¥»¥¯¥¿¡¦¥ê¡¼¥É¡¿¥é¥¤¥È¤Ç¤Ï¡¢³ä¤ê¹þ¤ß¸å¡¢bp ¤¬ÊѲ½¤·¤Æ¤·¤Þ¤¦¡£¤Þ¤¿¡¢É¬¤º po
pf ¤ò¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤³¤ì¤ò£Ã¤Î int86x() ´Ø¿ô¤Ç¼Â¸½¤Ï½ÐÍè¤Ê¤¤¡£¤½¤ì¤Ç¡¢
¥¢¥Ã¥»¥ó¥Ö¥é¤Ç½ñ¤¤¤¿¥×¥í¥°¥é¥à¤È£Ã¥×¥í¥°¥é¥à¤È¤Î·ë¹ç¤¬É¬ÍפȤʤ롣Æó¤Ä¤ÎÊý
Ë¡¤¬¤¢¤ë¡£
¡Î£±¡Ï¥¢¥»¥ó¥Ö¥é¤ÇºîÀ®¡¢¥ê¥ó¥«¡¼¤Ç£Ã¥×¥í¥°¥é¥à¤È·ë¹ç
¥×¥í¥»¥¸¥ã¡¦¥ë¡¼¥Á¥ó¤È¤¹¤ë¡££ã£óÆâ¤ËŸ³«¤·¡¢Ä¾ÀÜnear¥³¡¼¥ë¤¹¤ë¡£link»þ¤Ë
·ë¹ç¤¹¤ë¡£
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢ _TEXT segment public 'CODE' ¨¢
¨¢ assume cs:_TEXT ¨¢
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤ ¨¢ ¨¢
¨¢ main() ¨¢ ¨¢ push bp ¨¢
¨¢ { ¨¢ ¨¢ mov pbsp ¨¢
¨¢ _sread proc near ¨¢¢ª ¨¢ ¨¢
¨¢ . ¨¢¢« ¨¢ ¨¢
¨¢ . ¨¢ ¨¢ . ¨¢
¨¢ { ¨¢ ¨¢ ret ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥ ¨¢ _machine endp ¨¢
¨¢ _TEXT ends ¨¢
¨¢ end ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
´Ø¿ôÍѥݥ¤¥ó¥¿¤ò»È¤Ã¤Æ´ÖÀÜ¥³¡¼¥ë¤¹¤ë»ö¤â½ÐÍè¤ë¡£
main()
{
void (*ff)();
ff=(void *()) spred;
(*ff)(x,y,z);
}
°¿¤Ï¡¢¥Ý¥¤¥ó¥¿´Ø¿ô¤ò»È¤¦»ö¤â½ÐÍè¤ë¡£
main()
{
dd (void *()) spread;
}
dd(void *ff() )
{
ff(x,y,z);
}
Îã¡§ ¥»¥¯¥¿¡¦¥ê¡¼¥É¡¿¥é¥¤¥È´Ø¿ô
; sread (buf, drive, sectnum, sectbgn)
; swrite (buf, drive, sectnum, sectbgn)
_TEXT segment byte public 'CODE'
assume cs:_TEXT
public _sread, _swrite
_sread proc near
push bp
mov bp,sp
mov bx,[BP+4] ;buf
mov ax,[BP+6] ;drive
mov cx,[BP+8] ;sectnum
mov dx,[BP+10] ;sectbgn
push bp ;bp save
int 25h ;int25 use bp
popf
pop bp ;bp retriev
mov sp,bp
pop bp
ret
_sread endp
_swrite proc near
push bp
mov bp,sp
mov bx,[BP+4]
mov ax,[BP+6]
mov cx,[BP+8]
mov dx,[BP+10]
push bp
int 26h
popf
pop bp
mov sp,bp
pop bp
ret
_swrite endp
_TEXT ends
end
¡Î£²¡Ï¥×¥í¥°¥é¥à¤Ëµ¡³£¸ì´Ø¿ô¤òËä¤á¹þ¤à
û¤¤µ¡³£¸ì¥×¥í¥°¥é¥à¤Î»þ¡¢¤½¤Îµ¡³£¸ì¥³¡¼¥É¤ò¡¢¥Ç¡¼¥¿¡¦¥¢¥ì¥¤¤È¤·¤Æ¡¢£Ã¥×
¥í¥°¥é¥àÆâ¤Ëµ½Ò¤¹¤ë¡£¥Ç¡¼¥¿¡¦¥¢¥ì¥¤¤Ï¡¢ds Æâ¤ËŸ³«¤µ¤ì¤ë¡£¤½¤ì¤ò¡¢¡Ö´Ø¿ô
¤Î far ¥Ý¥¤¥ó¥¿¡×¤Ç¥³¡¼¥ë¤¬É¬Íס£¤·¤«¤â¡¢¥Ç¡¼¥¿¡¦¥¢¥ì¥¤¤È¤·¤ÆÀë¸À¤¹¤ë¤Î¤Ç¡¢
ľÀÜ¥³¡¼¥ë¤Ç¤Ï°ú¿ôÄêµÁ¤Ç¤¤Ê¤¤¡£
¤½¤ì¤Ç¡¢´Ø¿ô¥Ý¥¤¥ó¥¿¤Ë¤è¤ë´ÖÀÜ¥³¡¼¥ë¤¬É¬ÍפȤʤ롣¥Ý¥¤¥ó¥¿¤Ë¤è¤ë´ÖÀÜ¥³¡¼
¥ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤¹¤ë
far ´Ø¿ô¤ÎÀë¸À¡§ ·¿»ØÄê»Ò far ´Ø¿ô̾¡Ê¡Ë¡¨
far ¥Ý¥¤¥ó¥¿¤ÎÀë¸À¡§ ·¿»ØÄê»Ò ¡Êfar *¥Ý¥¤¥ó¥¿Ì¾¡Ë¡Ê¡Ë¡¨
far ¥Ý¥¤¥ó¥¿¤Ë¤è¤ëfar ´Ø¿ôÀèÆ¬»ØÄê¡§
¥Ý¥¤¥ó¥¿Ì¾¡á¡Ê void (far *)() ) ´Ø¿ô̾¡¨
far ´Ø¿ô¤Î¼Â¹Ô¡§ ( *¥Ý¥¤¥ó¥¿Ì¾)();
code segment data segment
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢ void far machine[]; ¨¢¨¢ ¨¢
¨¢ main() { ¨¢¨¢ machine[ ] ¨¢
¨¢ void (far *secred)(); ¨¢¨¢¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¤push bp ¨¢
¨¢ secread=(void (far *)())machine;¨¢¨¢¨¢ 0x55 ¨¢mov pb,sp ¨¢
¨¢ ¨¢¨¢¨¢ 0x8b, 0xec¨¢ ¨¢
¨¢ ¨¢¨¢¨¢ . ¨¢ ¨¢
¨¢ (*secread)("x")¡¨ ¨¢¢ª¨¢ . ¨¢ ¨¢
¨¢ ¨¢¢«¨¢ . ¨¢ ¨¢
¨¢ } ¨¢¨¢¨¢ 0xcb ¨¢ret ¨¢
¨¢ ¨¢¨¢¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¥ ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
°¿¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¥Ý¥¤¥ó¥¿´Ø¿ô£ä£ä¤òÀë¸À¤·¤Æ¤â¤è¤¤¡£
code segment data segment
¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤ ¨£¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¤
¨¢ void far machine[]; ¨¢ ¨¢ ¨¢
¨¢ main() { ¨¢ ¨¢ ¨¢
¨¢ dd( (void (far *)())machine );¨¢ ¨¢ machine[ ] ¨¢
¨¢ } ¨¢ ¨¢ ¨¢
¨¢ void (far *secred)(); ¨¢ ¨¢¨£¨¡¨¡¨¡¨¡¨¡¨¤push bp ¨¢
¨¢ dd(secread)¡¨ ¨¢ ¨¢¨¢ 0x55 ¨¢mov pb,sp ¨¢
¨¢ void (far *secread)(); ¨¢ ¨¢¨¢ 0x8b,0xec¨¢ ¨¢
¨¢ ¨¢ ¨¢¨¢ . ¨¢ ¨¢
¨¢ (*secread)("x")¡¨ ¨¢ ¨¢¨¢ . ¨¢ ¨¢
¨¢ } ¨¢ ¨¢¨¢ 0xcb ¨¢ret ¨¢
¨¢ ¨¢ ¨¢¨¦¨¡¨¡¨¡¨¡¨¡¨¥ ¨¢
¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥ ¨¦¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¥
Îã¡§ ¥»¥¯¥¿¡¦¥ê¡¼¥É
#include
#include
#define SECTBYTE 1024
main()
{
void (far *secread)();
int I, j, drive, sectbgn;
unsigned char buf[SECTBYTE];
static char machin[]={
0x55, /* push bp
0x8b, 0xec /* mov bp,sp
0x8b, 0x5e, 0x06, /* mov bx,[bp+6]
0x8b, 0x46, 0x08, /* mov ax,[bp+8]
0x8b, 0x4e, 0x0a, /* mov cx,[bp+10]
0x8b, 0x56, 0x0c, /* mov dx,[bp+12]
0xcd, 0x25, /* int 25h
0x9d, /* popf
0x5d, /* pop bp
0xcb, /* retf
};
secread=(void (far *)())machine;
printf("DRIVE= ")scanf("%d", &drive);
printf("SECTBGN= "); scanf("%d", §bgn);
buf[0]='Z';
(*secread) (buf, drive, 1, sectbgn);
for (j=0; j£¹.¥×¥í¥°¥é¥à´Ö¥¸¥ã¥ó¥×
(a) ¥×¥í¥°¥é¥à´Ö¥¸¥ã¥ó¥×
´Ø¿ôÆâ¤Î¥¸¥ã¥ó¥× goto ¤Ç¹Ô¤¦¡£¿ô³°¤Ø¤Î¥¸¥ã¥ó¥×¤Ï
setjmp(env) / longjmp(env, value)
¤ÎÌ¿ÎáÂФˤè¤ê¹Ô¤¦¡£
setjmp (env) ¤ò¼Â¹Ô¤¹¤ë¤È¡¢¸½ºß¤Î¥¹¥¿¥Ã¥¯¾ðÊó¤òenv ¥Ð¥Ã¥Õ¥¡¤Ë
¥»¥Ã¥È¤·¡¢Ìµ¾ò·ï¤Ë£°¡Êµ¶¡Ë¤òÊÖ¤¹¡£longjmp(env, value) ¤¬¼Â
¹Ô¤µ¤ì¤ë¤È¡¢setjmp »þ¤Ë¥»¡Ý¥Ö¤·¤¿ env ¾ðÊó¤ò¥ê¥¹¥È¥¢¤·¡¢setjmp
°ÌÃ֤˥¸¥ã¥ó¥×¤¹¤ë¡£¤³¤Î¤È¤¡¢setjmp ¤Ï¤¢¤¿¤«¤â value ¤ÎÃͤòÊÖ¤¹¤è
¤¦¤ËƯ¤¯¡£
¢£setjmp / longjmp ¤òÍѤ¤¤¿¥¨¥é¡Ý½¤Éüµ¡¹½
COPY ¥³¥Þ¥ó¥É¤Ê¤É¤Ç¤Ï¡¢¥Õ¥¡¥¤¥ë̾¤ò´Ö°ã¤¨¤ëÅù¤Ë¤è¤Ã¤Æ¡¢¥Õ¥¡¥¤¥ë¡¦¥ª¡Ý
¥×¥ó¤Ç¤¤Ê¤¤»þ¡¢OS ¤ËÌá¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£¤³¤³¤Ç¤Ï¡¢¤â¤·¥Õ¥¡¥¤¥ë¡¦¥ª¡Ý¥×
¥ó¤Ç¤¤Ê¤±¤ì¤ÐºÆÅÙ¥Õ¥¡¥¤¥ë̾¤òÆþÎϤ·¡¢ºÇ½é¤«¤é¤ä¤êľ¤¹¤³¤È¤¬½ÐÍè¤ë¥×¥í¥°¥é
¥à¤òºî¤ê¤Þ¤¹¡£
#include
#include
jmp_buf env;
main(int argc¡¤char *argv[]¡Ë
{
int err;
char fname[64]
if (err==setjmp(env)) {
switch (err) {
case 1:
printf("Source filename ???\n");
printf("Input file name ? ");
scanf("%s",fname);
argv[1]=fname;
break;
case 2:
printf("Destinate filename ???\n");
printf("Input file name ? ");
scanf("%s",fname);
argv[2]=fname;
}
}
copy(argv[1], argv[2]);
}
copy (char fname1, char *fname2)
{
FILE *fp1,*fp2;
int c;
if ((fp1=fopen(fname1,"rb"))==0) longjmp(env,1);
if ((fp2=fopen(fname2,"wb"))==0) longjmp(env,2);
while ((c=getc(fp1))!=EOF) putc(c,fp2);
fclose(fp1);
fclose(fp2);
}
£±£°¡¥¥×¥í¥»¥¹¤Î¥ê¥ó¥¯
¡Î1] ¥×¥í¥»¥¹
¥×¥í¥»¥¹¤Ï¥Þ¥ë¥Á¥¿¥¹¥¯¤Î£Ï£Ó¾å¤Î³µÇ°¡£
MS_DOS¤Ç¡¢¥×¥í¥»¥¹¤È¤Ï¡¢¥á¥â¥ê¤Ë¥í¡Ý¥É¤µ¤ì¡¢¼Â¹ÔÃæ¤Î¥×¥í¥°¥é¥à¡£
£±¤Ä¤Î¥×¥í¥»¥¹¡Ê¿Æ¥×¥í¥»¥¹¡Ë¤«¤é¡¢ÊÌ¤Î¥×¥í¥°¥é¥à¡Ê»Ò¥×¥í¥»¥¹¡Ë¤ò¥í¡Ý¥É¡¢
¼Â¹Ô½ÐÍè¤ë¡£»Ò¥×¥í¥»¥¹¤«¤é¡¢¤µ¤é¤Ë»Ò¥×¥í¥»¥¹¤òµ¯Æ°¤Ç¤¤ë¡£
£á¡¥¿Æ¥×¥í¥»¥¹¤«¤é¡¢»Ò¥×¥í¥»¥¹¤Îµ¯Æ°
exec ¡§ »Ò¥×¥í¥»¥¹¤ò¿Æ¥×¥í¥»¥¹¤Ë¥ª¡Ý¥Ð¡¦¥ì¥¤¡Ê»Ò¤«¤é¿Æ¤ËÌá¤ì¤Ê¤¤¡Ë¡£
spawn¡§ ¿Æ¥×¥í¥»¥¹¤ËÌá¤ë¤³¤È¤¬½ÐÍè¤ë¡£
system ¡§ MS-DOS ¥³¥Þ¥ó¥É¤ò»Ò¥×¥í¥»¥¹¤È¤·¤Æ¼Â¹Ô¤·¡¢¿Æ¥×¥í¥»¥¹¤ËÌá¤ë¡£
¤³¤Î»þ¡¢¿Æ¥×¥í¥»¥¹¤Î´Ä¶¤Ï¡¢Ì¿Îá¥Ñ¥é¥á¡¼¥¿¤Ë¤è¤Ã¤Æ¡¢»Ò¥×¥í¥»¥¹¤Ë°ú¤·Ñ
¤¬¤ì¤ë¡£
£â¡¥»Ò¤«¤é¿Æ¥×¥í¥»¥¹¤Ø¤ÎÌá¤ê
exitŽ$abort
¤³¤ì¤é¤ÎÌ¿Îá¤Ï¡¢¿Æ¥×¥í¥»¥¹¤Ø¤Î¡Ö¥ê¥¿¡Ý¥ó¡¦¥³¡Ý¥É¡×¤ò»ý¤Ä¡£
¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ë¤è¤Ã¤Æ¡¢¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤¿¤È¤¡¢¿Æ¥×¥í¥»¥¹¤Ï¡¢
MS_DOS(COMMAND.COM)¡£
£ã¡¥¥Ð¥Ã¥Á¡¦¥Õ¥¡¥¤¥ë¡§
¡Ö¥ê¥¿¡Ý¥ó¡¦¥³¡Ý¥É¡×¤òÆÀ¤ë¤Ë¤Ï¡¢¡Çif errorlevel n¡Á¡Çʸ
¤ò»È¤¤¤ë¡£¤³¤ì¤Ï¥ê¥¿¡Ý¥ó¡¦¥³¡Ý¥É¤¬ n °Ê¾å¤Ê¤é¡Á¤»¤è¤È¸À¤¦°ÕÌ£¡£
¼¡¤ÎÎã¤Ï¡¢ ¥×¥í¥»¥¹(recode) -¡ä ¥×¥í¥»¥¹(child) ¤Î½ç¤Ë¼Â¹Ô¡£
CHILD Æâ¤Î¥ê¥¿¡Ý¥ó¡¦¥³¡Ý¥É ¡ãret¡ä ¤Ï¡¢¿Æ¥×¥í¥»¥¹¤ËÊÖ¤¹¡£
/******** ¥Ð¥Ã¥Á¡¦¥Õ¥¡¥¤¥ëtest.bat ***********************/
B:retcode
if errorlevel 1 dir b:/w
/******* ¥×¥í¥»¥¹retcode ********************************/
#include
#include
main()
{
int ret;
ret=spawnlp(P_WAIT, "child.exe", "", NULL);
if (ret==-1) {
printf("exec error\n");
exit(1);
}
printf("child process ret-code=%d\n", ret);
return(ret);
}
/********* ¥×¥í¥»¥¹child ********************************/
#include
main()
{
int ret;
printf("input retcode --> ");
scanf("%d",&ret);
exit(ret);
}
¡Î2] ¥Þ¥¯¥í¡¦¥¢¥»¥ó¥Ö¥é³«È¯»Ù±ç¥Ä¡Ý¥ë
¥×¥í¥»¥¹¤òÍøÍѤ¹¤ì¤Ð¡¢¥á¥¤¥ó¥×¥í¥°¥é¥à¤«¤é¥¨¥Ç¥£¥¿¡¢¥¢¥»¥ó¥Ö¥é¡¢¥ê¥ó¥«¤ò
¸Æ¤Ó½Ð¤¹¤³¤È¤¬½ÐÍè¤ë¡£
¤½¤³¤Ç¡¢
A>PROCESS ABC
¤Èµ¯Æ°¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢ABC.asm ¤Î¥¨¥Ç¥£¥È¡¢¥¢¥»¥ó¥Ö¥ë¡¿¥ê¥ó¥¯¡¢µÚ¤Ó ABC.exe
¤Î¼Â¹Ô¡¢¥Ç¥Ð¥Ã¥°¤ò¡¢¥á¥Ë¥å¡ÝÁªÂò¤Ç¹Ô¤¦¤³¤È¤¬½ÐÍè¤ë¡£½¾¤Ã¤Æ¡¢¥¢¥»¥ó¥Ö¥ë¤Ç
¥¨¥é¡Ý¤¬À¸¤¸¤ì¤Ð¡¢¤¹¤°¥¨¥Ç¥£¥¿¤òµ¯Æ°¤·¤Æ½¤Àµ¤·¡¢ºÆ¤Ó¥¢¥»¥ó¥Ö¥ë¤¹¤ë¤È¤¤¤¦¤³
¤È¤¬´Êñ¤Ë¹Ô¤¨¤ë¡£
#include
#include
main(argc,argv)
int argc
char *argv[];
{
int ret,c;
static char fname[4][64];
strcpy(fname[0],argv[1];strcat(fname[0],".asm");
strcpy(fname[1],argv[1];strcat(fname[1],";");
strcpy(fname[2],argv[1];strcat(fname[2],".exe");
while ((c=menu())!='6'){
switch (c){
case '1': spawnlp(P_WAIT,"wm","wm",fname[0],NULL);
break;
case '2': ret=spawnlp(P_WAIT,"masm","masm",fname[1],NUL);
if (ret==0){
sapwnlp(P_WAIT,"link","link",fname[1},NULL);
}
break;
case '3': spawnlp(P_WAIT,argv[1],argv[1],NULL); break;
case '4': spawnlp(P_WAIT,"symdeb","symdeb",fname[2],NUL);
break;
case '5': exit();
}
}
}
menu()
{
int c;
printf("1: edit\n");
printf("2: assemble\n");
printf("3: excute\n");
printf("4: debug\n");
printf("5: exit\n");
printf("number --> ");
c=getchar();
rewind(stdin);
return(c);
}
¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¡¢¥¨¥Ç¥£¥¿¤ä¥¢¥»¥ó¥Ö¥é¤ò¼«Á°¤Çºî¤é¤º¡¢´û¸¤Î¤â¤Î¤ò
spawn
¤Ç¸Æ¤Ó½Ð¤·¤ÆÍøÍѤ·¤Æ¤¤¤ë¡£
MASM ¤ò spawan ¤Çµ¯Æ°¤¹¤ë¤È¡¢¤½¤Î¥ê¥¿¡Ý¥ó¡¦¥³¡¼¥É¤¬Ìá¤êÃͤˤʤ롣¤³¤ÎÃÍ
¤ò¤ß¤Æ¡¢LINK¤ò¹Ô¤¦¤«¤ò·è¤á¤é¤ì¤ë¡£MASM ¤Ï,¥¨¥é¡Ý¤¬¤Ê¤±¤ì¤Ð 0 ¤òÊÖ¤¹¡£¤Ê¤ª¡¢
¥ê¥¿¡¼¥ó¡¦¥³¡¼¥É¤Ï MASM ¤Î¥Ð¡Ý¥¸¥ç¥ó¤Ë¤è¤ê°Û¤Ê¤ë¡£
¤Ê¤ª¡¢MSC ¥³¥ó¥Ñ¥¤¥é (msc.exe) ¤Î¤è¤¦¤Ê¥ª¡Ý¥Ð¡¦¥ì¥¤¤ò¹Ô¤¦¥×¥í¥°¥é¥à
¤Ï¡¢spawn ¤Ç¤Ï¸Æ¤Ó½Ð¤»¤Ê¤¤¡Êexec¤Ï¡¢½ÐÍè¤ë¡Ë¡£¤³¤Î¥×¥í¥°¥é¥à¤Îµ¯Æ°¤Ë¤Ï¡¢
process ¤ò¤½¤Î¤Þ¤Þ»È¤¨¤Ê¤¤¡£
¡Î£³¡Ï »Ò¥×¥í¥»¥¹¤Î´Ä¶
MS-DOS ¤Ë¤ª¤±¤ë°ì¤Ä¤Î¥×¥í¥»¥¹¤Ë³ä¤êÅö¤Æ¤é¤ì¤ë¥á¥â¥ê¡¦¥Ö¥í¥Ã¥¯¤Î¹½À®
¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥¡¥
»Ò¥×¥í¥»¥¹³«»Ï»þ¡¢¿Æ¥×¥í¥»¥¹¤Î¡Ö´Ä¶¥Æ¡Ý¥Ö¥ë¡×¤ÎÆâÍÆ¤Ï¡¤¡¢¥×¥í¥»¥¹¤ÎPSP
¤ÎÀèÆ¬¤Ë¥³¥Ô¡Ý¤µ¤ì¤ë¡£¡Êputenv() getenv() ¤Ç¤³¤Î´Ä¶¥Æ¡Ý¥Ö¥ë¤ÎÆâÍÆ¤ò»²
¾È½ÐÍè¤ë¡Ë¡£
¿Æ¥×¥í¥»¥¹¤È°Û¤Ê¤ë´Ä¶¤Ç¤Î¡¢»Ò¥×¥í¥»¥¹¤Îµ¯Æ°¤Ë¤Ï¡¢
spawnle, spanwnve, execle, execve
¤òÍѤ¤¤ë¡£¤³¤Î»þ¡¢¥Õ¥¡¥¤¥ë¤Ï¡¢¥«¥ì¥ó¥È¡¦¥Ç¥£¥ì¥¯¥È¥êÆâ¤·¤«Ãµ¤»¤Ê¤¤¡£
(path¤Ë½¾¤Ã¤ÆÃµ¤¹¤³¤È¤Ï½ÐÍè¤Ê¤¤¡£¡Ë
exec: ¿Æ¤Î´Ä¶¤òÊѹ¹¤·¤Æ¤è¤¤¾ì¹ç¤¢¤ê¡£¤³¤Î¤è¤¦ PATH ¤Ë¤·¤¿¤¬¤Ã¤Æ
¥Õ¥¡¥¤¥ë¤òõ¤¹¤¿¤á¡¢putenv ¤Ë¤è¤ê¿Æ¤Î´Ä¶¥Æ¡Ý¥Ö¥ë¤ò»Ò¥×¥í¥»¥¹ÍѤËÊѹ¹
¤·¤¿¸å¡¢execlp, execvp ¤Ë¤è¤êµ¯Æ°¤ò¹Ô¤Ê¤ë¾ì¹ç¤â¤¢¤ë¡£
¢£°Û¤Ê¤ë´Ä¶¤Ç¤Î¥³¥ó¥Ñ¥¤¥ë¡¿¥ê¥ó¥¯
MSC ¤Ç¥³¥ó¥Ñ¥¤¥ë¡¿¥ê¥ó¥¯¤¹¤ë¤È¤¡¢INCLUDE ¤ä LIB ¤È¤¤¤Ã¤¿´Ä¶
ÊÑ¿ô¤Ç»ØÄꤵ¤ì¤¿¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¥¤¥ó¥¯¥ë¡Ý¥É¡¦¥Õ¥¡¥¤¥ë¤ä¥é¥¤¥Ö¥é¥ê¤òõ¤¹¡£
»þ¤È¤·¤Æ°Û¤Ê¤ë´Ä¶¤Î¥Ç¥£¥ì¥¯¥È¥ê¤«¤é¡¢¤³¤ì¤é¤òõ¤·¤¿¤¤¤È¤¤¬¤¢¤ë¡£¤³¤Î¤È
¤¡¢SET ¥³¥Þ¥ó¥É¤Ç¤¤¤Á¤¤¤Á´Ä¶¤òÊѹ¹¤¹¤ë¤³¤È¤ÏÈÑ»¨¤Ç¤¹¡£¤½¤³¤Ç°Û¤Ê¤ë´Ä¶
¤Ç¤Î¥³¥ó¥Ñ¥¤¥ë¡¿¥ê¥ó¥¯¤ò¹Ô¤¦ cl ¥³¥Þ¥ó¥É¤òºî¤ë¤ÈÊØÍø¤Ç¤¹¡£
/***** °Û¤Ê¤ë´Ä¶¤Ç¤Î¥³¥ó¥Ñ¥¤¥ë¡¿¥ê¥ó¥¯¤ò¤¹¤ë£ã£ì¥³¥Þ¥ó¥É *****/
#include
#include
main(int argc, char *argv[])
{
putenv("INCLUDE=B:\\");
putenv("LIB=B:\\LIB");
printf("°Ê²¼¤Î´Ä¶¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹¡ï£î");
printf ( "INCLUDE=%s\n", getenv("INCLUDE") );
printf ( "LIB=%s\n", getenv("LIB") 1);
execvp ("cl",argv);
}
A>b:env q.c
°Ê²¼¤Î´Ä¶¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹
INCLUDE=B:\
LIB=B:\LIB
Microsoft (R) C Compailer Version 3.00.17
Copyright (C) Microsoft Corp 1984. 1985. All rights reserved
MS-DOS ¤Î¥³¥Þ¥ó¥É¡¦¥é¥¤¥ó¤Ç¤Ï¡¢¾®Ê¸»ú¤ÏÂçʸ»ú¤ËÊÑ´¹¤µ¤ì¤ë¡£SET ¤ÇÀß
Äꤵ¤ì¤¿Ê¸»úÎó¤ÏÂçʸ»ú¤ÇÆþ¤Ã¤Æ¤¤¤ë¡£°ìÊý¡¢£Ã¤Ç¤Ï¡¢¾®Ê¸»ú¤ÈÂçʸ»ú¤Ï¶èÊ̤µ¤ì
¤ë¤Î¤Ç¡¢iclude ¤ÈINCLUDE ¤Ï°Û¤Ê¤ë¤â¤Î¤Ë¤Ê¤ë¡£ÆÃÊ̤ʾì¹ç¤ò½ü¤¤
¤ÆÂçʸ»ú¤Ç½ñ¤¤¤Æ¤ª¤¯Êý¤¬°ÂÁ´¡£