ÖжÏÔ´£ºÄÜÒýÆðÖжϵÄʼþ»òÔÒò¡£
ÖжÏÇëÇó£ºÊÇÍâÉèͨ¹ýÓ²¼þÐźŵÄÐÎʽ¡¢Ïò´¦ÀíÆ÷Òý½Å·¢ËÍÓÐЧÇëÇóÐźš£ ÖжÏÏìÓ¦£ºÖжÏÏìÓ¦ÊÇÔÚÂú×ãÒ»¶¨Ìõ¼þʱ£¬´¦ÀíÆ÷½øÈëÖжÏÏìÓ¦×ÜÏßÖÜÆÚ¡£ ¹ØÖжϣº½ûÖ¹´¦ÀíÆ÷ÏìÓ¦¿ÉÆÁ±ÎÖжϡ£ ¿ªÖжϣºÔÊÐí´¦ÀíÆ÷ÏìÓ¦¿ÉÆÁ±ÎÖжϡ£ ÖжϷµ»Ø£º´¦ÀíÆ÷Ö´ÐÐÖжϷµ»ØÖ¸Á½«¶ÏµãµØÖ·´Ó¶ÑÕ»Öе¯³ö£¬³ÌÐò·µ»Ø¶Ïµã¼ÌÐøÖ´ÐÐÔÀ´µÄ³ÌÐò¡£ ÖжÏʶ±ð£º´¦ÀíÆ÷ʶ±ð³öµ±Ç°¾¿¾¹ÊÇÄĸöÖжÏÔ´Ìá³öÁËÇëÇ󣬲¢Ã÷È·ÓëÖ®ÏàÓ¦µÄÖжϷþÎñ³ÌÐòËùÔÚÖ÷´æλÖá£
ÖжÏÓÅÏÈȨ£ºÎªÃ¿¸öÖжÏÔ´·ÖÅäÒ»¼¶ÖжÏÓÅÏÈȨ£¬¼´ÏµÍ³Éè¼ÆÕßÊÂÏÈΪÿ¸öÖжÏÔ´È·¶¨´¦ÀíÆ÷ÏìÓ¦ËûÃǵÄÏȺó˳Ðò¡£
ÖжÏǶÌ×£ºÔÚÒ»¸öÖжϴ¦Àí¹ý³ÌÖÐÓÖÓÐÒ»¸öÖжÏÇëÇó±»ÏìÓ¦´¦Àí£¬³ÆΪÖжÏǶÌס£ Öжϴ¦Àí£º½Óµ½ÖжÏÇëÇóÐźźó£¬ËæÖ®²úÉúµÄÕû¸ö¹¤×÷¹ý³Ì£¬³ÆÖжϴ¦Àí¡£ ÖжϷþÎñ£ºÖ¸´¦ÀíÆ÷Ö´ÐÐÏàÓ¦µÄÖжϷþÎñ³ÌÐò£¬½øÐÐÊý¾Ý´«Ë͵ȴ¦Àí¹¤×÷¡£ ¡²Ï°Ìâ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