΢»ú֪ʶµã - ͼÎÄ ÏÂÔØ±¾ÎÄ

΢»úÔ­ÀíÓë½Ó¿Ú¼¼Êõ

£¨Æ«ÒƵØÖ·£©Ë͵½BXÖУ¬±íÏîÐòºÅ´æÓÚALÖС£

2¡¢ÊäÈëÊä³öÖ¸Áî

Ö»ÏÞÓÚÓÃÀÛ¼ÓÆ÷AL»òAXÀ´´«ËÍÐÅÏ¢¡£ ¹¦ÄÜ: (ÀÛ¼ÓÆ÷)¡û¡úI/O¶Ë¿Ú £¨1£© ÊäÈëÖ¸ÁîIN ¸ñʽ:

IN acc,PORT ;PORT¶Ë¿ÚºÅ0¡«255H

IN acc,DX ;DX±íʾµÄ¶Ë¿Ú·¶Î§´ï64K Àý:IN AL£¬80H ;(AL)¡û(80H¶Ë¿Ú) IN AL£¬DX ;(AL)¡û((DX))

(2) Êä³öÖ¸ÁîOUT ¸ñʽ£ºOUT port,acc

OUT DX,acc

Àý£ºOUT 68H£¬AX ;(69H£¬68H)¡û£¨AX£©

OUT DX£¬AL ;((DX))¡û(AL)

ÔÚʹÓüä½ÓѰַµÄIN/OUTÖ¸Áîʱ£¬ÒªÊÂÏÈÓô«ËÍÖ¸Áî°ÑI/O¶Ë¿ÚºÅÉèÖõ½DX¼Ä´æÆ÷ È磺

MOV DX£¬220H

IN AL£¬DX;½«220H¶Ë¿ÚÄÚÈݶÁÈëAL

3¡¢Ä¿±êµØÖ·´«ËÍÖ¸Áî

£¨1£© LEA

´«ËÍÆ«ÒƵØÖ·

¸ñʽ£ºLEA reg£¬mem ; ½«Ö¸¶¨ÄÚ´æµ¥ÔªµÄÆ«ÒÆµØÖ·Ë͵½Ö¸¶¨¼Ä´æÆ÷ ÒªÇó£º

1) Ô´²Ù×÷Êý±ØÐëÊÇÒ»¸ö´æ´¢Æ÷²Ù×÷Êý£»

2) Ä¿µÄ²Ù×÷Êý±ØÐëÊÇÒ»¸ö16λµÄͨÓüĴæÆ÷¡£

Àý£ºLEA BX£¬[SI+10H] É裺£¨SI£©=1000H

ÔòÖ´ÐиÃÖ¸Áîºó£¬£¨BX£©=1010H

?

?×¢ÒâÒÔ϶þÌõÖ¸Áî²î±ð£º LEA BX£¬BUFFER MOV BX£¬BUFFER

ǰÕß±íʾ½«·ûºÅµØÖ·ÎªBUFFERµÄ´æ´¢µ¥ÔªµÄÆ«ÒÆµØÖ·È¡µ½ BXÖÐ;ºóÕß±íʾ½«BUFFER´æ´¢µ¥ÔªÖеÄÄÚÈÝÈ¡µ½ BXÖС£

ÏÂÃæÁ½ÌõÖ¸ÁîµÈЧ£º LEA BX£¬BUFFER

MOV BX, OFFSET BUFFER

9 / 54

΢»úÔ­ÀíÓë½Ó¿Ú¼¼Êõ

ÆäÖÐOFFSET BUFFER±íʾ´æ´¢Æ÷µ¥ÔªBUFFERµÄÆ«ÒÆµØÖ·¡£

¶þÕß¶¼¿ÉÓÃÓÚÈ¡´æ´¢Æ÷µ¥ÔªµÄÆ«ÒÆµØÖ·£¬µ«LEAÖ¸Áî¿ÉÒÔÈ¡¶¯Ì¬µÄµØÖ·£¬OFFSETÖ»ÄÜÈ¡¾²Ì¬µÄµØÖ·¡£

¶þ¡¢ËãÊõÔËËãÖ¸Áî 1¡¢ ¼Ó·¨Ö¸Áî

(1) ²»´ø½øÎ»µÄ¼Ó·¨Ö¸ÁîADD ¸ñʽ£º ADD acc,data

ADD mem/reg,data ADD mem/reg1,mem/reg2 ʵÀý£º

ADD AL£¬30H ADD SI£¬[BX+20H] ADD CX£¬SI ADD [DI]£¬200H

?ADDÖ¸Áî¶Ô6¸ö״̬±êÖ¾¾ù²úÉúÓ°Ïì¡£ Àý£ºÒÑÖª(BX)=D75FH

Ö¸Áî ADD BX,8046H Ö´Ðкó£¬×´Ì¬±êÖ¾¸÷ÊǶàÉÙ£¿

D75FH = 1110 0111 0101 1111 8046H = 1000 0000 0100 0110

1 1 11 11 0110 0111 1010 0101

½á¹û£ºC=1, Z=0, P=0, A=1, O=1, S=0

ÅжÏÒç³öÓë½øÎ»£¨Öصã?£©

´ÓÓ²¼þµÄ½Ç¶È£ºÄ¬ÈϲÎÓëÔËËãµÄ²Ù×÷Êý¶¼ÊÇÓзûºÅÊý£¬µ±Á½ÊýµÄ·ûºÅλÏàͬ£¬¶øºÍµÄ½á¹ûÏàÒìʱÓÐÒç³ö£¬ÔòOF=1£¬·ñÔòOF=0

£¨2£© ´ø½øÎ»µÄ¼Ó·¨ADC

ADCÖ¸ÁîÔÚÐÎʽÉϺ͹¦ÄÜÉÏÓëADDÀàËÆ£¬Ö»ÊÇÏà¼Óʱ»¹Òª°üÀ¨½øÎ»±êÖ¾CFµÄÄÚÈÝ£¬ÀýÈ磺 ADC AL£¬68H ; AL¡û(AL)+68H+(CF) ADC AX£¬CX ;AX¡û(AX)+(CX)+(CF)

ADC BX£¬[DI] ;BX¡û(BX)+[DI+1][DI]+(CF)

£¨3£©¼Ó1Ö¸ÁîINC ¸ñʽ£ºINC reg/mem

¹¦ÄÜ£ºÀàËÆÓÚCÓïÑÔÖеÄ++²Ù×÷£º¶ÔÖ¸¶¨µÄ²Ù×÷Êý¼Ó1 Àý£º INC AL

INC SI

INC BYTE PTR[BX+4]

×¢£º±¾Ö¸Áî²»Ó°ÏìCF±êÖ¾¡£

10 / 54

΢»úÔ­ÀíÓë½Ó¿Ú¼¼Êõ

£¨4£©·ÇѹËõBCDÂë¼Ó·¨µ÷ÕûÖ¸ÁîAAA AAAÖ¸ÁîµÄ²Ù×÷£º

Èç¹ûALµÄµÍ4λ£¾9»òAF=1£¬Ôò£º ¢Ù AL¡û(AL)+6,(AH)¡û(AH)+1,AF¡û1 ¢Ú AL¸ß4λÇåÁã ¢Û CF¡ûAF

·ñÔòAL¸ß4λÇåÁã

£¨5£©Ñ¹ËõBCDÂë¼Ó·¨µ÷ÕûÖ¸ÁîDAA

?Á½¸öѹËõBCDÂëÏà¼Ó½á¹ûÔÚALÖУ¬Í¨¹ýDAAµ÷ÕûµÃµ½Ò»¸öÕýÈ·µÄѹËõBCDÂë. ?Ö¸Áî²Ù×÷(µ÷Õû·½·¨)£º

ÈôALµÄµÍ4λ£¾9»òAF=1 Ôò(AL)¡û(AL)+6£¬AF¡û1 ÈôALµÄ¸ß4λ£¾9»òCF=1 Ôò(AL)¡û(AL)+60H£¬CF¡û1

?³ýOFÍ⣬DAAÖ¸ÁîÓ°ÏìËùÓÐÆäËü±êÖ¾¡£ ?DAAÖ¸ÁîÓ¦½ô¸úÔÚADD»òADCÖ¸ÁîÖ®ºó¡£

2¡¢ ¼õ·¨Ö¸Áî

£¨1£©²»¿¼ÂǽèλµÄ¼õ·¨Ö¸ÁîSUB ¸ñʽ£º SUB dest, src ²Ù×÷£º dest¡û(dest)-(src)

×¢£º1.Ô´ºÍÄ¿µÄ²Ù×÷Êý²»ÄÜͬʱΪ´æ´¢Æ÷²Ù×÷Êý 2.Á¢¼´Êý²»ÄÜ×÷ΪĿµÄ²Ù×÷Êý Ö¸ÁîÀý×Ó£º SUB AL£¬60H

SUB [BX+20H]£¬DX SUB AX£¬CX

£¨2£©¿¼ÂǽèλµÄ¼õ·¨Ö¸ÁîSBB

SBBÖ¸ÁîÖ÷ÒªÓÃÓÚ¶à×ֽڵļõ·¨¡£ ¸ñʽ£º SBB dest, src

²Ù×÷£º dest¡û(dest)-(src)-(CF) Ö¸ÁîÀý×Ó£º

SBB AX£¬CX

SBB WORD PTR[SI]£¬2080H SBB [SI],DX

£¨3£©¼õ1Ö¸ÁîDEC

×÷ÓÃÀàËÆÓÚCÓïÑÔÖеġ±£­£­¡±²Ù×÷·û¡£ ¸ñʽ£ºDEC opr ²Ù×÷£ºopr¡û(opr)-1 Ö¸ÁîÀý×Ó£º

DEC CL

11 / 54

΢»úÔ­ÀíÓë½Ó¿Ú¼¼Êõ

DEC BYTE PTR[DI+2] DEC SI

£¨4£©Çó²¹Ö¸ÁîNEG

¸ñʽ£º NEG opr ²Ù×÷£º opr¡û 0-(opr)

¶ÔÒ»¸ö²Ù×÷ÊýÈ¡²¹ÂëÏ൱ÓÚÓÃ0¼õÈ¥´Ë²Ù×÷Êý£¬¹ÊÀûÓÃNEGÖ¸Áî¿ÉµÃµ½¸ºÊýµÄ¾ø¶ÔÖµ¡£ Àý£ºÈô(AL)=0FCH£¬ÔòÖ´ÐÐ NEG ALºó£¬

(AL)=04H£¬CF=1

£¨5£©±È½ÏÖ¸ÁîCMP

¸ñʽ£º CMP dest, src ²Ù×÷£º (dest)-(src)

CMPÒ²ÊÇÖ´ÐÐÁ½¸ö²Ù×÷ÊýÏà¼õ,µ«½á¹û²»ËÍÄ¿±ê²Ù×÷Êý,Æä½á¹ûÖ»·´Ó³ÔÚ±ê־λÉÏ¡£ Ö¸ÁîÀý×Ó£º

CMP AL£¬0AH CMP CX£¬SI

CMP DI£¬[BX+03]

£¨6£©·ÇѹËõBCDÂë¼õ·¨µ÷ÕûÖ¸ÁîAAS

¶ÔALÖÐÓÉÁ½¸ö·ÇѹËõµÄBCDÂëÏà¼õµÄ½á¹û½øÐе÷Õû¡£µ÷Õû²Ù×÷Ϊ£º ÈôALµÄµÍ4λ£¾9»òAF=1,Ôò£º ¢Ù AL¡û(AL)-6,AH¡û(AH)-1,AF¡û1 ¢Ú ALµÄ¸ß4λÇåÁã ¢Û CF¡ûAF

·ñÔò£ºALµÄ¸ß4λÇåÁã

£¨7£©Ñ¹ËõBCDÂë¼õ·¨µ÷ÕûÖ¸ÁîDAS

¶ÔALÖÐÓÉÁ½¸öѹËõBCDÂëÏà¼õµÄ½á¹û½øÐе÷Õû¡£µ÷Õû²Ù×÷Ϊ£º ÈôALµÄµÍ4λ£¾9»òAF=1,Ôò£º AL¡û(AL)-6, ÇÒAF¡û1

ÈôALµÄ¸ß4λ£¾9»òCF=1,Ôò£º AL¡û(AL)-60H£¬ÇÒCF¡û1

DAS¶ÔOFÎÞ¶¨Òå,µ«Ó°ÏìÆäÓà±ê־λ¡£ DASÖ¸ÁîÒªÇó¸úÔÚ¼õ·¨Ö¸ÁîÖ®ºó¡£

3¡¢ ³Ë·¨Ö¸Áî

½øÐг˷¨Ê±£º8λ*8λ¡ú16λ³Ë»ý

16λ*16λ¡ú32λ³Ë»ý

(1) ÎÞ·ûºÅÊýµÄ³Ë·¨Ö¸ÁîMUL(MEM/REG) ¸ñʽ£º MUL src

²Ù×÷£º×Ö½Ú²Ù×÷Êý (AX)¡û(AL) ¡Á (src)

×Ö²Ù×÷Êý (DX, AX)¡û(AX) ¡Á (src)

12 / 54