£Ã¸À¸ì¥×¥í¥°¥é¥ß¥ó¥°

£±¡¥¥× ¥í ¥° ¥é ¥ß ¥ó ¥° ¤Î Âç Í×

¡Ê£á¡Ë£Ã¡¼¥×¥í¥°¥é¥à ¢» ´Ø¿ô¡¢ÊÑ¿ô¡£ ¡Ê£â¡Ë´Ø¿ô¤ÈÊÑ¿ô¤ÎÀë¸À¡¢¤Þ¤¿¤ÏÄêµÁ¡£ »ÈÍѤ¹¤ëÁ°¤Ë Àë¸À ¡Î°À­¡¢Ì¾Á°¡Ï ¤Þ¤¿¤Ï¡¢ ÄêµÁ ¡Î°À­¡¢Ì¾Á°¡¢¥á¥â¥ê¶õ´Ö¤Ø¤Î³ä¤êÅö¤Æ¡Ï ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ 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 ¤Ï°Û¤Ê¤ë¤â¤Î¤Ë¤Ê¤ë¡£ÆÃÊ̤ʾì¹ç¤ò½ü¤¤ ¤ÆÂçʸ»ú¤Ç½ñ¤¤¤Æ¤ª¤¯Êý¤¬°ÂÁ´¡£