΢»úÔ­ÀíÓë½Ó¿Ú¼¼Êõ£¨Ç®Ïþ½Ý°æ£©¿ÎºóϰÌâ´ð°¸ ÏÂÔØ±¾ÎÄ

test al,80h jnz status mov al,[bx] out 80h,al ; Êä³öÒ»¸ö×Ö½Ú inc bx jmp again ; Ñ­»· done:

¡²Ï°Ìâ7.10¡³

ÒÔ¿ÉÆÁ±ÎÖжÏΪÀý£¬ËµÃ÷Ò»´ÎÍêÕûµÄÖжϹý³ÌÖ÷Òª°üÀ¨ÄÄЩ»·½Ú£¿ ¡²½â´ð¡³

ÖжÏÇëÇó£ºÍâÉèͨ¹ýÓ²¼þÐźŵÄÐÎʽ¡¢Ïò´¦ÀíÆ÷Òý½Å·¢ËÍÓÐЧÇëÇóÐźš£ ÖжÏÏìÓ¦£ºÔÚÂú×ãÒ»¶¨Ìõ¼þʱ£¬´¦ÀíÆ÷½øÈëÖжÏÏìÓ¦×ÜÏßÖÜÆÚ¡£ ¹ØÖжϣº´¦ÀíÆ÷ÔÚÏìÓ¦ÖжϺó»á×Ô¶¯¹Ø±ÕÖжϡ£

¶Ïµã±£»¤£º´¦ÀíÆ÷ÔÚÏìÓ¦ÖжϺó½«×Ô¶¯±£»¤¶ÏµãµØÖ·¡£ ÖжÏԴʶ±ð£º´¦ÀíÆ÷ʶ±ð³öµ±Ç°¾¿¾¹ÊÇÄĸöÖжÏÔ´Ìá³öÁËÇëÇ󣬲¢Ã÷È·ÓëÖ®ÏàÓ¦µÄÖжϷþÎñ³ÌÐòËùÔÚÖ÷´æÎ»Öá£

ÏÖ³¡±£»¤£º¶Ô´¦ÀíÆ÷Ö´ÐгÌÐòÓÐÓ°ÏìµÄ¹¤×÷»·¾³£¨Ö÷ÒªÊǼĴæÆ÷£©½øÐб£»¤¡£ ÖжϷþÎñ£º´¦ÀíÆ÷Ö´ÐÐÏàÓ¦µÄÖжϷþÎñ³ÌÐò£¬½øÐÐÊý¾Ý´«Ë͵ȴ¦Àí¹¤×÷¡£ »Ö¸´ÏÖ³¡£ºÍê³ÉÖжϷþÎñºó£¬»Ö¸´´¦ÀíÆ÷Ô­À´µÄ¹¤×÷»·¾³¡£ ¿ªÖжϣº´¦ÀíÆ÷ÔÊÐíÐÂµÄ¿ÉÆÁ±ÎÖжϡ£

ÖжϷµ»Ø£º´¦ÀíÆ÷Ö´ÐÐÖжϷµ»ØÖ¸Á³ÌÐò·µ»Ø¶Ïµã¼ÌÐøÖ´ÐÐÔ­À´µÄ³ÌÐò¡£ ¡²Ï°Ìâ7.11¡³

ʲôÊÇÖжÏÔ´£¿ÎªÊ²Ã´Òª°²ÅÅÖжÏÓÅÏȼ¶£¿Ê²Ã´ÊÇÖжÏǶÌ×£¿Ê²Ã´Çé¿öϳÌÐò»á·¢ÉúÖжÏǶÌ×£¿ ¡²½â´ð¡³

¼ÆËã»úϵͳÖУ¬·²ÊÇÄÜÒýÆðÖжϵÄʼþ»òÔ­Òò£¬±»³ÆÎªÖжÏÔ´¡£

´¦ÀíÆ÷ËæÊ±¿ÉÄÜ»áÊÕµ½¶à¸öÖжÏÔ´Ìá³öµÄÖжÏÇëÇó£¬Òò´Ë£¬ÎªÃ¿¸öÖжÏÔ´·ÖÅäÒ»¼¶ÖжÏÓÅÏÈȨ£¬¸ù¾ÝËüÃǵĸߵÍ˳Ðò¾ö¶¨ÏìÓ¦µÄÏȺó¡£

Ò»¸öÖжϴ¦Àí¹ý³ÌÖÐÓÖÓÐÒ»¸öÖжÏÇëÇó¡¢²¢±»ÏìÓ¦´¦Àí£¬±»³ÆÎªÖжÏǶÌס£ ±ØÐëÔÚÖжϷþÎñ³ÌÐòÖдò¿ªÖжϣ¬³ÌÐò²Å»á·¢ÉúÖжÏǶÌס£ ¡²Ï°Ìâ7.12¡³

Ã÷È·ÈçÏÂÖжÏÓйصĸÅÄÖжÏÔ´¡¢ÖжÏÇëÇó¡¢ÖжÏÏìÓ¦¡¢¹ØÖжϡ¢¿ªÖжϡ¢ÖжϷµ»Ø¡¢ÖжÏʶ±ð¡¢ÖжÏÓÅÏÈȨ¡¢ÖжÏǶÌס¢Öжϴ¦Àí¡¢ÖжϷþÎñ¡£ ¡²½â´ð¡³

ÖжÏÔ´£ºÄÜÒýÆðÖжϵÄʼþ»òÔ­Òò¡£

ÖжÏÇëÇó£ºÊÇÍâÉèͨ¹ýÓ²¼þÐźŵÄÐÎʽ¡¢Ïò´¦ÀíÆ÷Òý½Å·¢ËÍÓÐЧÇëÇóÐźš£ ÖжÏÏìÓ¦£ºÖжÏÏìÓ¦ÊÇÔÚÂú×ãÒ»¶¨Ìõ¼þʱ£¬´¦ÀíÆ÷½øÈëÖжÏÏìÓ¦×ÜÏßÖÜÆÚ¡£ ¹ØÖжϣº½ûÖ¹´¦ÀíÆ÷ÏìÓ¦¿ÉÆÁ±ÎÖжϡ£ ¿ªÖжϣºÔÊÐí´¦ÀíÆ÷ÏìÓ¦¿ÉÆÁ±ÎÖжϡ£

ÖжϷµ»Ø£º´¦ÀíÆ÷Ö´ÐÐÖжϷµ»ØÖ¸Á½«¶ÏµãµØÖ·´Ó¶ÑÕ»Öе¯³ö£¬³ÌÐò·µ»Ø¶Ïµã¼ÌÐøÖ´ÐÐÔ­À´µÄ³ÌÐò¡£

ÖжÏʶ±ð£º´¦ÀíÆ÷ʶ±ð³öµ±Ç°¾¿¾¹ÊÇÄĸöÖжÏÔ´Ìá³öÁËÇëÇ󣬲¢Ã÷È·ÓëÖ®ÏàÓ¦µÄÖжϷþÎñ³ÌÐòËùÔÚÖ÷´æÎ»ÖᣠÖжÏÓÅÏÈȨ£ºÎªÃ¿¸öÖжÏÔ´·ÖÅäÒ»¼¶ÖжÏÓÅÏÈȨ£¬¼´ÏµÍ³Éè¼ÆÕßÊÂÏÈΪÿ¸öÖжÏÔ´È·¶¨´¦ÀíÆ÷ÏìÓ¦ËûÃǵÄÏȺó˳Ðò¡£

ÖжÏǶÌ×£ºÔÚÒ»¸öÖжϴ¦Àí¹ý³ÌÖÐÓÖÓÐÒ»¸öÖжÏÇëÇó±»ÏìÓ¦´¦Àí£¬³ÆÎªÖжÏǶÌס£ Öжϴ¦Àí£º½Óµ½ÖжÏÇëÇóÐźźó£¬ËæÖ®²úÉúµÄÕû¸ö¹¤×÷¹ý³Ì£¬³ÆÖжϴ¦Àí¡£ ÖжϷþÎñ£ºÖ¸´¦ÀíÆ÷Ö´ÐÐÏàÓ¦µÄÖжϷþÎñ³ÌÐò£¬½øÐÐÊý¾Ý´«Ë͵ȴ¦Àí¹¤×÷¡£ ¡²Ï°Ìâ7.13¡³

°´ÕÕͼ7-10ËùʾµÄÖжϲéѯ½Ó¿ÚÓëÏàÓ¦µÄÁ÷³Ìͼ£¬±àдÓÃÓÚÖжϷþÎñµÄ³ÌÐò¶Î¡£¾ßÌåÒªÇóÊÇ£¬µ±³ÌÐò²éµ½ÖжÏÉ豸0ÓÐÖжÏÇëÇ󣨶ÔÓ¦Êý¾ÝÏßD0£©£¬Ëü½«µ÷ÓÃÃûΪPROC0µÄ×Ó³ÌÐò£»Èç´Ë£¬ÒÀ´ÎÈ¥²éÖжÏÉ豸1¡«ÖжÏÉ豸3£¬²¢·Ö±ðµ÷ÓÃÃûΪPROC1¡«PROC3µÄ×Ó³ÌÐò¡£ ¡²½â´ð¡³ sti push ax push dx ? mov dx,4000h status: in al,dx test al,01h jnz service0 test al,02h jnz service1 test al,04h jnz service2 test al,08h jnz service3 ?

service0: call proc0 jmp done

service1: call proc1 jmp done

service2: call proc2 jmp done

service3: call proc3 jmp done ??

done: pop dx pop ax iret

¡²Ï°Ìâ7.14¡³

ʲôÊÇDMA¶ÁºÍDMAд£¿Ê²Ã´ÊÇDMA¿ØÖÆÆ÷8237AµÄµ¥×Ö½Ú´«ËÍ¡¢Êý¾Ý¿é´«ËͺÍÇëÇó´«ËÍ£¿ ¡²½â´ð¡³

DMA¶Á£º´æ´¢Æ÷µÄÊý¾ÝÔÚDMA¿ØÖÆÆ÷¿ØÖÆÏ±»¶Á³ö´«Ë͸øÍâÉè¡£ DMAд£ºÍâÉèµÄÊý¾ÝÔÚDMA¿ØÖÆÆ÷¿ØÖÆÏ±»Ð´Èë´æ´¢Æ÷¡£

µ¥×Ö½Ú´«ËÍ·½Ê½£ºÃ¿´ÎDMA´«ËÍʱ½ö´«ËÍÒ»¸ö×Ö½Ú¡£´«ËÍÒ»¸ö×Ö½ÚÖ®ºó£¬DMA¿ØÖÆÆ÷ÊÍ·Åϵͳ×ÜÏߣ¬½«¿ØÖÆÈ¨»¹¸ø´¦ÀíÆ÷¡£

Êý¾Ý¿é´«ËÍ£º DMA´«ËÍÆô¶¯ºó¾ÍÁ¬ÐøµØ´«ËÍÊý¾Ý£¬Ö±µ½¹æ¶¨µÄ×Ö½ÚÊý´«ËÍÍê¡£

ÇëÇó´«ËÍ£ºDMA´«ËÍÓÉÇëÇóÐźſØÖÆ¡£Èç¹ûÇëÇóÐźÅÒ»Ö±ÓÐЧ£¬¾ÍÁ¬Ðø´«ËÍÊý¾Ý£»µ«µ±ÇëÇóÐźÅÎÞЧʱ£¬DMA´«Ëͱ»ÔÝʱÖÐÖ¹¡£ ¡²Ï°Ìâ7.15¡³

IA-32´¦ÀíÆ÷ºÎʱ´¦ÓÚ¿ªÖжÏ״̬¡¢ºÎʱ´¦ÓÚ¹ØÖжÏ״̬£¿ ¡²½â´ð¡³

ÔÚIA-32´¦ÀíÆ÷ÖУ¬ÈôIF£½1£¬Ôò´¦ÀíÆ÷´¦ÓÚ¿ªÖжÏ״̬¡£

ÈôIF£½0£¬Ôò´¦ÀíÆ÷´¦ÓÚ¹ØÖжÏ״̬¡£IF£½0¹ØÖжϵÄÇé¿öÓУºÏµÍ³¸´Î»ºó£¬ÈκÎÒ»¸öÖжϣ¨°üÀ¨ÍⲿÖжϺÍÄÚ²¿Öжϣ©±»ÏìÓ¦ºó£¬Ö´ÐйØÖжÏÖ¸ÁîCLIºó¡£ ¡²Ï°Ìâ7.16¡³

¼òÊöIA-32´¦ÀíÆ÷µÄÖжϹ¤×÷¹ý³Ì¡£ ¡²½â´ð¡³

IA-32´¦ÀíÆ÷»ñµÃÏòÁ¿ºÅʶ±ð³öÖжÏÔ´ºó£¬ÖжϻòÒì³£½Ó×ŵŤ×÷¹ý³ÌÈçÏ£º

£¨1£©½«±êÖ¾¼Ä´æÆ÷EFLAGSѹÈë¶ÑÕ»£¬±£»¤¸÷¸ö±ê־λ£»½«±»ÖжÏÖ¸ÁîµÄÂß¼­µØÖ·£¨´úÂë¶Î¼Ä´æÆ÷ºÍÖ¸ÁîÖ¸Õë¼Ä´æÆ÷ÄÚÈÝ£©Ñ¹Èë¶ÑÕ»£¬±£»¤¶Ïµã¡£

£¨2£©Èç¹ûÓдíÎó´úÂ룬½«ÆäѹÈë¶ÑÕ»£¨ÓÐЩÒì³£²úÉú´íÎó´úÂ룬¸ü¾ßÌ嵨±íÃ÷²úÉúÒì³£µÄÔ­Òò£©¡£ÊµµØÖ··½Ê½µÄÒì³£²»·µ»Ø´íÎó´úÂë¡£

£¨3£©¸ù¾ÝÏòÁ¿ºÅ»ñµÃÖжϷþÎñ³ÌÐò£¨ÖжϻòÒì³£µÄ´¦Àí³ÌÐò£©µÄ¶ÎÑ¡ÔñÆ÷ºÍÖ¸ÁîÖ¸Õ룬·Ö±ð´«Ë͸ø´úÂë¶Î¼Ä´æÆ÷CSºÍÖ¸ÁîÖ¸Õë¼Ä´æÆ÷EIP¡£

£¨4£©¶ÔÓÚÖжϣ¬ÒªÉèÖÃÖжÏÔÊÐí±êÖ¾IFΪ0£¬¼´½ûÖ¹½øÒ»²½µÄ¿ÉÆÁ±ÎÖжϡ£ £¨5£©¿ØÖÆ×ªÒÆÖÁÖжϷþÎñ³ÌÐòÈë¿ÚµØÖ·£¨Ê×µØÖ·£©£¬¿ªÊ¼Ö´ÐÐÖжϻòÒì³£´¦Àí³ÌÐò¡£

ÖжϷþÎñ³ÌÐò×îºóÊÇÖжϷµ»ØÖ¸ÁîIRET¡£ÖжϷµ»ØÖ¸ÁîIRET½«¶ÏµãµØÖ·ºÍ±êÖ¾¼Ä´æÆ÷³öÕ»»Ö¸´£¬Èç¹ûѹÈëÁË´íÎó´úÂ뻹ÐèÒªÏàÓ¦ÔöÁ¿¶ÑÕ»Ö¸Õ룬ÓÚÊÇ¿ØÖÆÓÖ·µ»Øµ½¶ÏµãÖ¸Áî¼ÌÐøÖ´ÐС£ ¡²Ï°Ìâ7.17¡³

IA-32´¦ÀíÆ÷µÄÖжÏÏòÁ¿±íºÍÖжÏÃèÊö·û±íµÄ×÷ÓÃÊÇʲô£¿ ¡²½â´ð¡³

IA-32´¦ÀíÆ÷µÄÖжÏÏòÁ¿±íºÍÖжÏÃèÊö·û±íµÄ×÷Óö¼ÊÇ»ñÈ¡ÖжϷþÎñ³ÌÐòµÄÈë¿ÚµØÖ·£¨³ÆÎªÖжÏÏòÁ¿£©£¬½ø¶ø¿ØÖÆ×ªÒƵ½ÖжϷþÎñ³ÌÐòÖС£ ¡²Ï°Ìâ7.18¡³

˵Ã÷ÈçϳÌÐò¶ÎµÄ¹¦ÄÜ£º cli mov ax,0 mov es,ax mov di,80h*4 mov ax,offset intproc ; intprocÊÇÒ»¸ö¹ý³ÌÃû cld mov es:[di],ax mov ax,seg intproc mov es:[di+2],ax sti ¡²½â´ð¡³

ÉèÖÃ80HºÅÖжÏÏòÁ¿¡£ ¡²Ï°Ìâ7.19¡³

ÖжϿØÖÆÆ÷8259AÖÐIRR£¬IMRºÍISRÈý¸ö¼Ä´æÆ÷µÄ×÷ÓÃÊÇʲô£¿ ¡²½â´ð¡³

ÖжÏÇëÇó¼Ä´æÆ÷IRR£º±£´æ8ÌõÍâ½çÖжÏÇëÇóÐźÅIR0¡«IR7µÄÇëÇó״̬¡£DiλΪ1±íʾIRiÒý½ÅÓÐÖжÏÇëÇó£»Îª0±íʾ¸ÃÒý½ÅÎÞÇëÇó¡£ ÖÐ¶ÏÆÁ±Î¼Ä´æÆ÷IMR£º±£´æ¶ÔÖжÏÇëÇóÐźÅIRµÄÆÁ±Î״̬¡£DiλΪ1±íʾIRiÖжϱ»ÆÁ±Î£¨½ûÖ¹£©£»Îª0±íʾÔÊÐí¸ÃÖжϡ£

ÖжϷþÎñ¼Ä´æÆ÷ISR£º±£´æÕýÔÚ±»8259A·þÎñ×ŵÄÖжÏ״̬¡£DiλΪ1±íʾIRiÖжÏÕýÔÚ·þÎñÖУ»Îª0±íʾûÓб»·þÎñ¡£ ¡²Ï°Ìâ7.20¡³

ÏÂÃæÊÇIBM PC/XT»úROM-BIOSÖеÄ08ºÅÖжϷþÎñ³ÌÐò£¬Çë˵Ã÷¸÷¸öÖ¸ÁîµÄ×÷Óᣠint08h proc sti push ds push ax push dx

?? ; ÈÕʱÖÓ¼ÆÊ± ?? ; ¿ØÖÆÈíÇýÂí´ï int 1ch mov al,20h out 20h,al pop ax pop dx pop ds iret

int08h endp ¡²½â´ð¡³

int08h proc far ; Ô¶¹ý³Ì sti ; ¿ªÖÐ¶Ï push ds ; ±£»¤ÏÖ³¡ push ax push dx ?? ; ÈÕʱÖÓ¼ÆÊ± ?? ; ¿ØÖÆÈíÇýÂí´ï int 1ch ; µ÷ÓÃ1CHºÅÖÐ¶Ï mov al,20h ; ·¢ËÍEOIÖжϽáÊøÃüÁî out 20h,al pop ax ; »Ö¸´ÏÖ³¡ pop dx pop ds iret ; ÖжϷµ»Ø int08h endp ¡²Ï°Ìâ7.21¡³

±àдһ¸ö³ÌÐò£¬½«ÀýÌâ7-5µÄINT 80HÄÚ²¿ÖжϷþÎñ³ÌÐòפÁôÄڴ档ȻºóÔÚµ÷ÊÔ³ÌÐòÖлòÆäËû³ÌÐòÖÐÖ´ÐÐINT 80H£¬¿´ÄÜ·ñʵÏÖÆäÏÔʾ¹¦ÄÜ¡£ ¡²½â´ð¡³ ; ´úÂë¶Î jmp start ; 80HÄÚ²¿ÖжϷþÎñ³ÌÐò£ºÏÔʾ×Ö·û´®£¨ÒÔ0½á⣩£»DS¡ÃDX£½»º³åÇøÊ×µØÖ· new80h proc ; ¹ý³Ì¶¨Òå sti ; ¿ªÖÐ¶Ï push ax ; ±£»¤¼Ä´æÆ÷ push bx push si mov si,offset intmsg

new1: mov al,cs:[si] ; »ñÈ¡ÓûÏÔʾ×Ö·û cmp al,0 ; Ϊ¡°0¡±½áÊø jz new2 mov bx,0 ; ²ÉÓÃROM-BIOSµ÷ÓÃÏÔʾһ¸ö×Ö·û mov ah,0eh int 10h inc si ; ÏÔʾÏÂÒ»¸ö×Ö·û jmp new1

new2: pop si ; »Ö¸´¼Ä´æÆ÷