΢»úÔ­ÀíÓë½Ó¿Ú¼¼Êõ+²Î¿¼´ð°¸ ÏÂÔر¾ÎÄ

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

ÖжÏÇëÇó£ºÊÇÍâÉèͨ¹ýÓ²¼þÐźŵÄÐÎʽ¡¢Ïò´¦ÀíÆ÷Òý½Å·¢ËÍÓÐЧÇëÇóÐźš£ ÖжÏÏìÓ¦£ºÖжÏÏìÓ¦ÊÇÔÚÂú×ãÒ»¶¨Ìõ¼þʱ£¬´¦ÀíÆ÷½øÈëÖжÏÏìÓ¦×ÜÏßÖÜÆÚ¡£ ¹ØÖжϣº½ûÖ¹´¦ÀíÆ÷ÏìÓ¦¿ÉÆÁ±ÎÖжϡ£ ¿ªÖжϣºÔÊÐí´¦ÀíÆ÷ÏìÓ¦¿ÉÆÁ±ÎÖжϡ£ ÖжϷµ»Ø£º´¦ÀíÆ÷Ö´ÐÐÖжϷµ»ØÖ¸Á½«¶ÏµãµØÖ·´Ó¶ÑÕ»Öе¯³ö£¬³ÌÐò·µ»Ø¶Ïµã¼ÌÐøÖ´ÐÐÔ­À´µÄ³ÌÐò¡£ ÖжÏʶ±ð£º´¦ÀíÆ÷ʶ±ð³öµ±Ç°¾¿¾¹ÊÇÄĸöÖжÏÔ´Ìá³öÁËÇëÇ󣬲¢Ã÷È·ÓëÖ®ÏàÓ¦µÄÖжϷþÎñ³ÌÐòËùÔÚÖ÷´æλÖá£

ÖжÏÓÅÏÈȨ£ºÎªÃ¿¸öÖжÏÔ´·ÖÅäÒ»¼¶ÖжÏÓÅÏÈȨ£¬¼´ÏµÍ³Éè¼ÆÕßÊÂÏÈΪÿ¸öÖжÏÔ´È·¶¨´¦ÀíÆ÷ÏìÓ¦ËûÃǵÄÏȺó˳Ðò¡£

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

°´ÕÕͼ7-10ËùʾµÄÖжϲéѯ½Ó¿ÚÓëÏàÓ¦µÄÁ÷³Ìͼ£¬±àдÓÃÓÚÖжϷþÎñµÄ³ÌÐò¶Î¡£¾ßÌåÒªÇóÊÇ£¬µ±³ÌÐò²éµ½ÖжÏÉ豸0ÓÐÖжÏÇëÇ󣨶ÔÓ¦Êý¾ÝÏßD0£©£¬Ëü½«µ÷ÓÃÃûΪPROC0µÄ×Ó³ÌÐò£»Èç´Ë£¬ÒÀ´ÎÈ¥²éÖжÏÉ豸1¡«ÖжÏÉ豸3£¬²¢·Ö±ðµ÷ÓÃÃûΪPROC1¡«PROC3µÄ×Ó³ÌÐò¡£ ¡²½â´ð¡³

status: done:

sti push ax push dx ¡­

mov dx,4000h in al,dx test al,01h jnz service0 test al,02h jnz service1 test al,04h jnz service2 test al,08h jnz service3 ¡­ jmp done jmp done jmp done jmp done ¡­¡­ pop dx pop ax iret

service0: call proc0 service1: call proc1 service2: call proc2 service3: call proc3

¡²Ï°Ìâ7.14¡³

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

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

£­ £­45

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Èý¸ö¼Ä´æÆ÷µÄ×÷ÓÃÊÇʲô£¿

£­ £­46

¡²½â´ð¡³

ÖжÏÇëÇó¼Ä´æÆ÷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 int08h

proc sti push ds push ax push dx ?? ?? int 1ch mov al,20h out 20h,al pop ax pop dx pop ds iret endp

; ÈÕʱÖÓ¼Æʱ ; ¿ØÖÆÈíÇýÂí´ï

¡²½â´ð¡³

int08h int08h

proc far sti push ds push ax push dx ?? ?? int 1ch mov al,20h out 20h,al pop ax pop dx pop ds iret endp

; ÖжϷµ»Ø ; »Ö¸´ÏÖ³¡ ; ÈÕʱÖÓ¼Æʱ ; ¿ØÖÆÈíÇýÂí´ï ; µ÷ÓÃ1CHºÅÖÐ¶Ï ; ·¢ËÍEOIÖжϽáÊøÃüÁî ; Ô¶¹ý³Ì ; ¿ªÖÐ¶Ï ; ±£»¤ÏÖ³¡

¡²Ï°Ìâ7.21¡³

±àдһ¸ö³ÌÐò£¬½«ÀýÌâ7-5µÄINT 80HÄÚ²¿ÖжϷþÎñ³ÌÐòפÁôÄڴ档ȻºóÔÚµ÷ÊÔ³ÌÐòÖлòÆäËû³ÌÐòÖÐÖ´ÐÐINT 80H£¬¿´ÄÜ·ñʵÏÖÆäÏÔʾ¹¦ÄÜ¡£ ¡²½â´ð¡³

new80h

; ´úÂë¶Î jmp start

; 80HÄÚ²¿ÖжϷþÎñ³ÌÐò£ºÏÔʾ×Ö·û´®£¨ÒÔ0½á⣩£»DS¡ÃDX£½»º³åÇøÊ×µØÖ· proc sti

; ¹ý³Ì¶¨Òå ; ¿ªÖжÏ

£­ £­47

new1: new2: intmsg new80h start: tsrmsg

push ax push bx push si

mov si,offset intmsg mov al,cs:[si] cmp al,0 jz new2 mov bx,0 mov ah,0eh int 10h inc si jmp new1 pop si pop bx pop ax iret endp ; Ö÷³ÌÐò mov ax,cs mov ds,ax

mov dx,offset new80h cli

mov ax,2580h int 21h sti

mov eax,offset tsrmsg call dispmsg mov dx,offset start add dx,15 shr dx,4 mov ax,3100h int 21h

; ±£»¤¼Ä´æÆ÷

; »ñÈ¡ÓûÏÔʾ×Ö·û ; Ϊ¡°0¡±½áÊø

; ²ÉÓÃROM-BIOSµ÷ÓÃÏÔʾһ¸ö×Ö·û

; ÏÔʾÏÂÒ»¸ö×Ö·û ; »Ö¸´¼Ä´æÆ÷

; ÖжϷµ»Ø

; ×Ö·û´®£¨ÒÔ0½á⣩

; ÖжϷþÎñ³ÌÐò½áÊø

db 'A Instruction Interrupt !',0dh,0ah,0

; ÉèÖÃ04HÖжÏÏòÁ¿

; ÏÔʾ°²×°ÐÅÏ¢

; ¼ÆËãפÁôÄÚ´æ³ÌÐòµÄ³¤¶È

; µ÷ÕûΪÒÔ¡°½Ú¡±£¨16¸ö×Ö½Ú£©Îªµ¥Î» ; ³ÌÐòפÁô£¬·µ»ØDOS

db 'INT 80H Program Installed ! ',0dh,0ah,0

¡²Ï°Ìâ7.22¡³

Íê³ÉÀýÌâ7-2ÏÔʾµ±Ç°ÈÕÆÚͬÑùµÄ¹¦ÄÜ£¬Çë»ñµÃÈÕÆÚÊý¾Ýºóת»»³ÉASCIIÂ룬±£´æÔÚ»º³åÇø¡¢ÀûÓÃDISPMSG×Ó³ÌÐòÏÔʾ¡£ ¡²½â´ð¡³

; ex0722.asm in DOS date start:

mov ebx,11 mov al,9 out 70h,al in al,71h mov dl,al shr al,4

; ת»»¸ßλBCDÂëΪASCIIÂë

; AL£½9£¨×¼±¸´Ó9ºÅµ¥Ôª»ñÈ¡Äê´úÊý¾Ý£©

; ´Ó70HµÄI/OµØÖ·Êä³ö£¬Ñ¡ÔñCMOS RAMµÄ9ºÅµ¥Ôª ; ´Ó71HµÄI/OµØÖ·ÊäÈ룬»ñÈ¡9ºÅµ¥ÔªµÄÄÚÈÝ£¬±£´æÔÚAL

include io16.inc .data

byte 'Today is 20xx-yy-zz',0 .code

£­ £­48