ϰ Ìâ ËÄ
13. ±àд³ÌÐò£¬Çó10ÔªËØ×ÖÊý×éLISTÖоø¶ÔÖµ×îСµÄÊý£¬´æÈëMINµ¥Ôª¡£
´ð£º DATA SEGEMNT LIST DW -56, +12, 88, -126, -5, 16, 32, -99, 72, -18 MIN DW ? MINABS DW ?
DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AX, LIST MOV MIN, AX £»½«Êý×éµÚÒ»¸öÔªËØ¼ÙÉèΪ¾ø¶ÔÖµ×îСµÄÊý
MOV MINABS, 32767 £»×îСµÄ¾ø¶ÔÖµ¼ÙÉèΪ32767 LEA SI, LIST MOV CX, 10
AGAIN: MOV AX, [SI]
CMP AX, 0 JGE SKIP1 NEG AX £»Çó¾ø¶ÔÖµ
SKIP1: CMP AX, MINABS £»¾ø¶ÔÖµÓë¼ÙÉèµÄ×îС¾ø¶ÔÖµ±È½Ï JGE SKIP2 £»¼ÙÉèµÄ¾ø¶ÔÖµ½ÏС£¬Ìø¹ý MOV MINABS, AX £»±£´æÐµÄ×îС¾ø¶ÔÖµ
MOV AX, [SI] £»È¡³öеľø¶ÔÖµ×îСµÄÊý MOV MIN, AX £»±£Áôеľø¶ÔÖµ×îСµÄÊý
SKIP2: ADD SI, 2 LOOP AGAIN
MOV AX, 4C00H
INT 21H CODE ENDS END START
˵Ã÷£ºÒ»¶¨ÒªÔ¤Éè×îСµÄ¾ø¶ÔÖµºÍ¾ø¶ÔÖµ×îСµÄÊý£¬¶øÇÒÕâ¸ö¾ø¶ÔÖµ×îСµÄÊý±ØÐëÀ´×ÔLISTÊý×é¡£ 14.
15. Ò»¸öÓзûºÅ×ÖÊý×éÒÔ0Ϊ½áÊø±êÖ¾£¬ÇóÕâ¸öÊý×éµÄ£º×î´óÖµ¡¢×îСֵ¡¢Æ½¾ùÖµ¡£
´ð£º DATA SEGEMNT LIST DW -56, +12, 88, -126, -5, 16, 32, -99, 72, -18, 0 MIN DW ? MAX DW ? AVG DW ?
DATA ENDS
CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV MIN, 32767 £»½«32767¼ÙÉèΪ×îСµÄÊý
MOV MAX, -32768 £»½«-32768¼ÙÉèΪ×î´óµÄÊý MOV AVG, 0 £»AVGÓÃ×÷ÀÛ¼ÓÆ÷£¬ÇåÁã LEA SI, LIST MOV CX, 0
AGAIN: MOV AX, [SI]
CMP AX, 0 JZ DONE £»ÕÒµ½ÁãÔªËØ£¬×ªDONE½áÊø´¦Àí INC CX £»¼Ç¼·ÇÁãÔªËØ¸öÊý ADD AVG, AX £»ÀÛ¼Ó CMP AX, MIN JGE SKIP1 MOV MIN. AX £»±ÈÔ¤Éè×îСֵ»¹Ð¡£¬±£Áô
SKIP1: CMP AX, MAX
JLE SKIP2
MOV MAX, AX £»±ÈÔ¤Éè×î´óÖµ»¹´ó£¬±£Áô SKIP2: ADD SI, 2 JMP AGAIN DONE: JCXZ NULL £»ÔªËظöÊýΪÁ㣬תNULL´¦Àí MOV AX, AVG CWD IDIV CX MOV AVG, AX £»¼ÆËãÆ½¾ùÖµ JMP EXIT NULL: MOV MIN, 0 £»ÔªËظöÊýΪ0£¬½«¡°×î´óÖµ¡±¡¢¡°×îСֵ¡± MOV MAX, 0 £»¡°Æ½¾ùÖµ¡±ÇåÁã MOV AVG, 0 EXIT: MOV AX, 4C00H INT 21H CODE ENDS END START
ϰ Ìâ Îå
1£® ½Ó¿Úµç·ÓëÍⲿÉ豸֮¼ä´«Ë͵ÄÐźÅÓÐÄļ¸ÖÖ£¿´«Êä·½ÏòÔõÑù£¿
Êý¾ÝÐźţº¶ÔÓÚÊäÈëÉ豸£¬Êý¾ÝÐźŴÓÍâÉèͨ¹ý½Ó¿ÚËÍÍù×ÜÏߣ¬¶ÔÓÚÊä³öÉ豸£¬Êý¾ÝÐźŴÓ×ÜÏßͨ¹ý½Ó¿Ú·¢ÍùÍⲿÉ豸¡£
״̬Ðźţº×´Ì¬ÐźűíÃ÷ÍⲿÉ豸µ±Ç°µÄ¹¤×÷״̬£¬ÓÃÀ´Ðµ÷CPUÓëÍⲿÉ豸֮¼äµÄ
²Ù×÷¡£×´Ì¬ÐźÅ×ÜÊÇ´ÓÍⲿÉ豸ͨ¹ý½Ó¿Ú·¢Íù×ÜÏß¡£
¿ØÖÆÐźŠ£º¿ØÖÆÐźÅÊÇCPUÏòÍâÉè·¢³öµÄÃüÁËüÖ¸¶¨É豸µÄ¹¤×÷·½Ê½£¬Æô¶¯»òÍ£Ö¹É豸¡£¿ØÖÆÐźŴÓCPUͨ¹ý½Ó¿Ú·¢ÍùÍⲿÉ豸¡£ 2£® ½Ó¿Úµç·ÓÐÄÄЩ¹¦ÄÜ£¿ÄÄЩ¹¦ÄÜÊDZØÐèµÄ£¿
½Ó¿Úµç·¿ÉÒԾ߱¸£ºÉ豸ѡÔñ¹¦ÄÜ¡¢ÐÅÏ¢´«Ê书ÄÜ¡¢Êý¾Ý¸ñʽת»»¹¦ÄÜ¡¢ÁªÂ繦ÄÜ¡¢ÖжϹÜÀí¹¦ÄÜ¡¢¸´Î»¹¦ÄÜ¡¢¿É±à³Ì¹¦ÄܺʹíÎó¼ì²âµÈ¹¦ÄÜ¡£ÆäÖÐÉ豸ѡÔñ¹¦ÄܺÍÐÅÏ¢´«Ê书ÄÜÊÇÿһ¸ö½Ó¿Úµç·Ëù±Ø±¸µÄ¡£ÆäËûµÄ¹¦ÄÜÊÇ·ñÐèÒªÔòÓÉÉ豸µÄÌØµãºÍ¹¤×÷·½Ê½¾ö¶¨¡£ 3£® I/O¶Ë¿ÚµÄ±àÖ·ÓÐÄļ¸ÖÖ·½·¨£¿¸÷ÓÐʲôÀû±×£¿80X86ϵÁÐCPU²ÉÓÃÄÄÖÖ·½·¨£¿
I/O¶Ë¿ÚµÄ±àÖ·ÓÐÁ½ÖÖ²»Í¬µÄ·½Ê½¡£
I/O¶Ë¿ÚÓëÄÚ´æÍ³Ò»±àÖ·£º°ÑÄÚ´æµÄÒ»²¿·ÖµØÖ··ÖÅ䏸I/O¶Ë¿Ú£¬Ò»¸ö8λ¶Ë¿ÚÕ¼ÓÃÒ»¸öÄÚ´æµ¥ÔªµØÖ·¡£ÒѾÓÃÓÚI/O¶Ë¿ÚµÄµØÖ·£¬´æ´¢Æ÷²»ÄÜÔÙʹÓá£
I/O¶Ë¿ÚÓëÄÚ´æÍ³Ò»±àÖ·ºó£¬·ÃÎÊÄÚ´æ´¢Æ÷µ¥ÔªºÍI/O¶Ë¿ÚʹÓÃÏàͬµÄÖ¸ÁÕâÓÐÖúÓÚ½µµÍCPUµç·µÄ¸´ÔÓÐÔ£¬²¢¸øÊ¹ÓÃÕßÌṩ·½±ã¡£µ«ÊÇ£¬I/O¶Ë¿ÚÕ¼ÓÃÄÚ´æµØÖ·£¬Ïà¶Ô¼õÉÙÁËÄÚ´æ¿ÉÓ÷¶Î§¡£¶øÇÒ£¬ÓÉÓÚÄÑÒÔÇø·Ö·ÃÎÊÄÚ´æºÍI/OµÄÖ¸Á½µµÍÁ˳ÌÐòµÄ¿É¶ÁÐԺͿÉά»¤ÐÔ¡£
I/O¶Ë¿ÚÓëÄÚ´æ¶ÀÁ¢±àÖ·£ºÕâÖÖ±àÖ··½·¨ÖУ¬ÄÚ´æ´¢Æ÷ºÍI/O¶Ë¿Ú¸÷×ÔÓÐ×Ô¼º¶ÀÁ¢µÄµØÖ·¿Õ¼ä¡£·ÃÎÊI/O¶Ë¿ÚÐèҪרÃŵÄI/OÖ¸Áî¡£
80x86 CPU²ÉÓÃI/O¶Ë¿Ú¶ÀÁ¢±àÖ··½Ê½¡£
4£® °´ÕÕ´«ÊäÐźŵÄÖÖÀ࣬I/O¶Ë¿ÚÓм¸ÖÖ£¿ËüÃÇÐźŵĴ«Êä·½ÏòÔõÑù£¿
°´ÕÕ´«ÊäÐźŵÄÖÖÀ࣬I/O¶Ë¿ÚÓÐÈýÖÖ£º
Êý¾Ý¶Ë¿Ú£ºÊý¾ÝÐÅÏ¢´Ó¶Ë¿ÚÊäÈëCPU£¨ÊäÈëÉ豸½Ó¿Ú£©£¬»òÕß´ÓCPUдÈë¶Ë¿Ú£¨Êä³öÉ豸½Ó¿Ú£©;
״̬¶Ë¿Ú£ºÍâÉè״̬ÐÅÏ¢´Ó¶Ë¿ÚÊäÈëCPU£» ¿ØÖƶ˿ڣºÃüÁîÐÅÏ¢´ÓCPUдÈë¶Ë¿Ú¡£ 5£®
6£® ÍⲿÉ豸Êý¾Ý´«ËÍÓÐÄļ¸ÖÖ¿ØÖÆ·½Ê½£¿´ÓÍⲿÉ豸µÄ½Ç¶È£¬±È½Ï²»Í¬·½Ê½¶ÔÍⲿÉ豸µÄÏìÓ¦ËÙ¶È¡£
ÍⲿÉ豸Êý¾Ý´«ËÍÓÐÒÔÏÂËÄÖÖ¿ØÖÆ·½Ê½¡£
Ö±½Ó´«ËÍ·½Ê½£¨Ò²³ÆÎªÎÞÌõ¼þ´«ËÍ·½Ê½¡¢Í¬²½´«ËÍ·½Ê½£©£ºÕâÖÖÇé¿öÏ£¬Íⲿ¶Ë¿ÚÍêÈ«±»¶¯µØµÈ´ýCPUµÄ·ÃÎÊ£¬Ã»ÓÐÈ·¶¨µÄÏìÓ¦ËÙ¶È£¬ÏìӦʱ¼äÈ¡¾öÓÚCPU浵ij̶ÈÒÔ¼°³ÌÐò¶ÔÍⲿÉ豸¿ØÖƲÉÈ¡µÄ²ßÂÔ¡£
²éѯ·½Ê½£ºÈç¹ûCPUÔÚijһʱ¿ÌÖ»¶ÔÒ»¸öÍâÉè²ÉÓòéѯ·½Ê½½øÐÐÊý¾Ý´«Ê䣬CPUµÄÏìÓ¦ÑÓ³ÙԼΪ3~10¸öÖ¸ÁîÖÜÆÚ¡£ÏìÓ¦ËÙ¶È¿ìÓÚÖжϷ½Ê½£¬ÂýÓÚDMA·½Ê½¡£
ÖжϷ½Ê½£ºCPUµÄÏìÓ¦ÑÓ³ÙÆ½¾ùΪ¼¸Ê®¸öÖ¸ÁîÖÜÆÚ£¬ÂýÓÚ²éѯ·½Ê½£¬µ«ÊÇÕâÖÖ·½Ê½¿ÉÒÔͬʱ¹ÜÀí¶à¸öÍⲿÉ豸¡£
DMA·½Ê½£ºÍⲿ¶Ë¿ÚµÄ´«ÊäÇëÇóÓÉDMA¿ØÖÆÆ÷ÏìÓ¦£¬ÓÉÓÚDMACÊÇÒ»¸öרÓÃÓÚ´«Êä¿ØÖÆµÄµç·£¬ÈÎÎñµ¥Ò»£¬²»·¢ÉúDMA´«Ê侺Õùʱ£¬ÏìÓ¦ÑÓ³Ù½öΪ1~2¸öDMACʹÓõÄʱÖÓÖÜÆÚ£¬Ô¶¿ìÓÚÖжϷ½Ê½ºÍ²éѯ·½Ê½¡£ 7£®
8£® ±È½Ï³ÌÐòÖжϷ½Ê½ºÍ²éѯ·½Ê½µÄÇø±ð£¬¸ù¾Ý±È½Ï£¬Ö¸³öÖжϹ¤×÷·½Ê½µÄÓÅȱµã¡£
ÖжϷ½Ê½£ºÍⲿÉ豸¹¤×÷Íê³Éºó£¬Í¨¹ý¡°ÖжÏÇëÇó¡±Ðźš°Ö÷¶¯¡±ÏòCPU¡°±¨¸æ¡±¡£ ²éѯ·½Ê½£ºÍⲿÉ豸¹¤×÷Íê³Éºó£¬×´Ì¬ÐźŴ¢´æÔÚ½Ó¿Úµç·ÄÚ£¬±»¶¯µØµÈ´ýCPUÀ´¶ÁÈ¡¡£
¸ù¾ÝÉÏÊö±È½Ï£¬¿ÉÒԵõ½ÖжϹ¤×÷·½Ê½µÄÈçÏÂÌØµã£º
Óŵ㣺
1£© CPUÄܹ»¼°Ê±Á˽âÍⲿÉ豸µÄ״̬£¬´Ó¶ø¶ÔÍⲿÉ豸IOÇëÇó½øÐм°Ê±´¦Àí¡£ 2£© ÓÉÓÚCPU¡°±»¶¯¡±µØµÈ´ýÍⲿÉ豸µÄ¡°ÖжÏÇëÇó¡±£¬ÍⲿÉ豸½øÐÐÊäÈë/Êä³ö²Ù×÷
ʱ£¬CPU¿ÉÒÔͬʱִÐÐÆäËûµÄ³ÌÐò£¬CPUºÍÍⲿÉ豸¡°²¢ÐС±¹¤×÷¡£
3£© ÓÉÓÚͬÑùµÄÔÒò£¬ÔÚÖжϷ½Ê½Ï£¬CPU¿ÉÒÔͬʱ¹ÜÀí¶ą̀ÍⲿÉ豸£¬CPUµÄЧÂÊ
µÃµ½Ìá¸ß¡£ ȱµã£º
1£© ÓÃÖжϷ½Ê½ÐèÒªCPUÔö¼ÓÏàÓ¦µÄ¹ÜÀíÂß¼£¬Ôö¼ÓÁËCPUµç·µÄ¸´ÔÓÐÔ¡£
2£© ÓÉÓÚCPU¡°±»¶¯¡±µØ½ÓÊÕ¡°ÖжÏÇëÇó¡±Ðźţ¬CPU±ØÐëͨ¹ýÓëÍⲿµÄÒ»¸öÁªÂç¹ý
³Ì²ÅÄÜÖªµÀÊÇÄÇÒ»¸öÉ豸ÔÚÉêÇëÖжϣ¬ÕâÔö¼ÓÁËÏìӦʱ¼ä¡£ÎªÁË´Óµ±Ç°ÈÎÎñ×ªÒÆµ½ÖжϷþÎñ£¬CPU±ØÐë±£»¤ÔÓеÄÔËÐл·¾³£¬½øÐС°ÈÎÎñ¡±µÄ¡°Çл»¡±£¬ÕâÒ²»áÔö¼ÓÏìӦʱ¼ä¡£
3£© Óн϶àµÄÉ豸ʹÓÃÖжϷ½Ê½Ê±£¬»á²úÉú¡°ÖжÏÉêÇ롱µÄ¡°¾ºÕù¡±¡£ÕâÒ»·½Ãæ½µµÍÁË
ÏìÓ¦ËÙ¶È£¬ÁíÒ»·½ÃæÔö¼ÓÁ˹ÜÀíµÄ¸´ÔÓÐÔ¡£
9£® 10£® ijÊäÈëÉ豸½Ó¿ÚÊý¾Ý¶Ë¿Ú¡¢×´Ì¬¶Ë¿Ú¡¢¿ØÖƶ˿ڵØÖ··Ö±ðΪ70H, 71H, 72H¡£×´Ì¬¶Ë¿ÚD5=1±íʾÊäÈëÍê³É£¬¿ØÖƶ˿ÚD7=1±íʾÆô¶¯É豸ÊäÈ루ÊäÈëÍê³ÉºóÓÉÉ豸Çå³ý¸Ã룩¡£´Ó¸ÃÉ豸ÊäÈë100¸ö×Ö½ÚÊý¾Ý£¬´æÈëÒÔBUFFERΪÊ×µØÖ·µÄ»º³åÇø¡£Èç¹ûÆô¶¯¸ÃÉ豸1ÃëºóÈÔδÍê³ÉÒ»´ÎÊäÈ룬ÔòÊÓΪ³¬Ê±´í£¬ÏÔʾ³ö´íÐÅÏ¢ºó·µ»Ø¡£·Ö±ðÓÃ8086»ã±àÓïÑÔºÍCÓïÑÔ±àдÍê³ÉÉÏÊö¹¦ÄܵÄI/O³ÌÐò¡£
»ã±àÓïÑÔ³ÌÐò£º DATA SEGMENT BUFFER DB 100 DUP(?) ERROR DB ¡°OVER TIME !¡±, ¡°$¡± DATA ENDS ;
CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX, 100 LEA BX, BUFFER ONE: XOR DX, DX £»DXÓÃ×÷ÏìÓ¦¼ÆÊ±Æ÷£¬³õÖµ0
MOV AL, 80H
OUT 72H, AL £»Æô¶¯ÊäÈë W: IN AL, 71H INC DX £»¼Ç¼ÑÓ³Ùʱ¼ä TEST AL, 00100000B £»²âÊÔÍê³Éλ JNZ READ £»ÊäÈëÍê³É£¬×ªREAD¶ÁÈ¡Êý¾Ý CMP DX, 50000 £»¼ÙÉèÑ»·50000´Îʱ¼äΪ1Ãë JB W £»Î´³¬Ê±£¬¼ÌÐø²âÊÔ JMP OVERTIME £»³¬¹ý1Ã룬±¨¸æ³ö´í READ: IN AL, 70H £»¶ÁÈëÊý¾Ý