184
/LQX[$VVHPEO\/DQJXDJH3URJUDPPLQJ )URQW0DWWHU 7DEOHRI&RQWHQWV $ERXWWKH$XWKRU /LQX[$VVHPEO\/DQJXDJH3URJUDPPLQJ %2%1(9(/1 3XEOLVKHU3UHQWLFH+DOO375 )LUVW(GLWLRQ-XO\ ,6%1SDJHV 0DVWHU[DVVHPEO\ODQJXDJHIURPD/LQX[SHUVSHFWLYH (VVHQWLDOLQIRUPDWLRQIRUFUHDWLQJ/LQX[GHYLFHGULYHUV +RZ/LQX[ZRUNVXQGHUWKHKRRG &'520LQFOXGHVHGOLQDVWKH/LQX[[KDQGVRQDVVHPEOHUGHYHORSPHQWVLPXODWRU /LQX[$VVHPEO\/DQJXDJH3URJUDPPLQJLVWKHILUVW/LQX[FHQWHUHGJXLGHWR[DVVHPEO\ ODQJXDJH ,Q/LQX[$VVHPEO\/DQJXDJH3URJUDPPLQJ%RE1HYHOQH[SODLQVDOOWKHNH\IHDWXUHVRI[ DVVHPEO\ODQJXDJHLQWKHFRQWH[WRIWKH/LQX[RSHUDWLQJV\VWHPDQGWKH&ODQJXDJH7KH ERRN¶VVWHSE\VWHSRQHFRQFHSWDWDWLPHFRYHUDJHZLOOKHOSDQ\KDUGZDUHSURJUDPPHU PRYHWR/LQX[DQGPDVWHUHVVHQWLDOVNLOOVIRU/LQX[GHYLFHGULYHUGHYHORSPHQW<RXZRQ¶W MXVWOHDUQQHZ[DVVHPEO\ODQJXDJHVNLOOV\RX¶OODOVRJDLQSRZHUIXOXQGHUWKHKRRG LQVLJKWLQWRKRZ/LQX[ZRUNV%RQXV&'520LQFOXGHVHGOLQDVWKH/LQX[EDVHG[ LQWHUDFWLYHDVVHPEOHUGHYHORSPHQWVLPXODWRU7KLVLV/LQX[[DVVHPEO\ODQJXDJH SURJUDPPLQJIURPVWDUWWRILQLVK 3ODFHKROGLQJQXPHUDWLRQ /RJLFFLUFXLWV &RPSXWDWLRQ 7KHIRXUILHOGIRUPDW 0DFKLQHODQJXDJH 0HPRU\ 7KHVWDFN /LQX[XVHUSURJUDPV 1$60 '26SURJUDPV ,QWHUUXSWV %LWPDQLSXODWLRQV 'HYLFHGULYHUV $QGPRUH

Linux assembly language programming

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Linux assembly language programming

/LQX[�$VVHPEO\�/DQJXDJH�3URJUDPPLQJ

)URQW�0DWWHU7DEOH�RI�&RQWHQWV$ERXW�WKH�$XWKRU

/LQX[�$VVHPEO\�/DQJXDJH�3URJUDPPLQJ%2%�1(9(/1�3XEOLVKHU��3UHQWLFH�+DOO�375)LUVW�(GLWLRQ�-XO\���������,6%1���������������������SDJHV

0DVWHU�[���DVVHPEO\�ODQJXDJH�IURP�D�/LQX[�SHUVSHFWLYH�(VVHQWLDO�LQIRUPDWLRQ�IRU�FUHDWLQJ�/LQX[�GHYLFH�GULYHUV�+RZ�/LQX[�ZRUNV��XQGHU�WKH�KRRG��&'�520�LQFOXGHV�HGOLQDV��WKH����/LQX[�[���KDQGV�RQ�DVVHPEOHU�GHYHORSPHQW�VLPXODWRU�/LQX[�$VVHPEO\�/DQJXDJH�3URJUDPPLQJ�LV�WKH�ILUVW�/LQX[�FHQWHUHG�JXLGH�WR�[���DVVHPEO\�ODQJXDJH�,Q�/LQX[�$VVHPEO\�/DQJXDJH�3URJUDPPLQJ��%RE�1HYHOQ�H[SODLQV�DOO�WKH�NH\�IHDWXUHV�RI�[���DVVHPEO\�ODQJXDJH�LQ�WKH�FRQWH[W�RI�WKH�/LQX[�RSHUDWLQJ�V\VWHP�DQG�WKH�&�ODQJXDJH��7KH�ERRN¶V�VWHS�E\�VWHS��RQH�FRQFHSW�DW�D�WLPH�FRYHUDJH�ZLOO�KHOS�DQ\�KDUGZDUH�SURJUDPPHU�PRYH�WR�/LQX[��DQG�PDVWHU�HVVHQWLDO�VNLOOV�IRU�/LQX[�GHYLFH�GULYHU�GHYHORSPHQW��<RX�ZRQ¶W�MXVW�OHDUQ�QHZ�[���DVVHPEO\�ODQJXDJH�VNLOOV��\RX¶OO�DOVR�JDLQ�SRZHUIXO��XQGHU�WKH�KRRG��LQVLJKW�LQWR�KRZ�/LQX[�ZRUNV��%RQXV�&'�520�LQFOXGHV�HGOLQDV��WKH����/LQX[�EDVHG�[���LQWHUDFWLYH�DVVHPEOHU�GHYHORSPHQW�VLPXODWRU��7KLV�LV�/LQX[�[���DVVHPEO\�ODQJXDJH�SURJUDPPLQJ��IURP�VWDUW�WR�ILQLVK�3ODFH�KROGLQJ�QXPHUDWLRQ/RJLF�FLUFXLWV&RPSXWDWLRQ7KH�IRXU�ILHOG�IRUPDW0DFKLQH�ODQJXDJH0HPRU\7KH�VWDFN/LQX[�XVHU�SURJUDPV1$60'26�SURJUDPV,QWHUUXSWV%LW�PDQLSXODWLRQV'HYLFH�GULYHUV$QG�PRUH���

Page 2: Linux assembly language programming

�������E\�3UHQWLFH�+DOO3XEOLVKHG�E\�3UHQWLFH�+DOO�3753UHQWLFH�+DOO��,QF�8SSHU�6DGGOH�5LYHU��1-������3UHQWLFH�+DOO�ERRNV�DUH�ZLGHO\�XVHG�E\�FRUSRUDWLRQV�DQG�JRYHUQPHQW�DJHQFLHV�IRU�WUDLQLQJ��PDUNHWLQJ��DQG�UHVDOH�7KH�SXEOLVKHU�RIIHUV�GLVFRXQWV�RQ�WKLV�ERRN�ZKHQ�RUGHUHG�LQ�EXON�TXDQWLWLHV��)RU�PRUH�LQIRUPDWLRQ��FRQWDFW��&RUSRUDWH�6DOHV�'HSDUWPHQW��3KRQH����������������)D[����������������(�PDLO��FRUSVDOHV#SUHQKDOO�FRP��RU�ZULWH��3UHQWLFH�+DOO�375��&RUS��6DOHV�'HSW���2QH�/DNH�6WUHHW��8SSHU�6DGGOH�5LYHU��1-�������$OO�SURGXFWV�RU�VHUYLFHV�PHQWLRQHG�LQ�WKLV�ERRN�DUH�WKH�WUDGHPDUNV�RU�VHUYLFH�PDUNV�RI�WKHLU�UHVSHFWLYH�FRPSDQLHV�RU�RUJDQL]DWLRQV��6FUHHQ�VKRWV�UHSULQWHG�E\�SHUPLVVLRQ�IURP�0LFURVRIW�&RUSRUDWLRQ�$OO�ULJKWV�UHVHUYHG��1R�SDUW�RI�WKLV�ERRN�PD\�EH�UHSURGXFHG��LQ�DQ\�IRUP�RU�E\�DQ\�PHDQV��ZLWKRXW�SHUPLVVLRQ�LQ�ZULWLQJ�IURP�WKH�SXEOLVKHU�3ULQWHG�LQ�WKH�8QLWHG�6WDWHV�RI�$PHULFD��������������������3UHQWLFH�+DOO�,QWHUQDWLRQDO��8.��/LPLWHG��/RQGRQ3UHQWLFH�+DOO�RI�$XVWUDOLD�3W\��/LPLWHG��6\GQH\3UHQWLFH�+DOO�&DQDGD�,QF���7RURQWR3UHQWLFH�+DOO�+LVSDQRDPHULFDQD��6�$���0H[LFR3UHQWLFH�+DOO�RI�,QGLD�3ULYDWH�/LPLWHG��1HZ�'HOKL3UHQWLFH�+DOO�RI�-DSDQ��,QF���7RN\R3UHQWLFH�+DOO�$VLD�3WH��/WG�(GLWRUD�3UHQWLFH�+DOO�GR�%UDVLO��/WGD��5LR�GH�-DQHLUR&UHGLWV

(GLWRULDO�SURGXFWLRQ�VXSHUYLVLRQ�9LQFHQW�-DQRVNL$FTXLVLWLRQV�HGLWRU�0LOHV�:LOOLDPV0DUNHWLQJ�PDQDJHU�.DWH�+DUJHWW0DQXIDFWXULQJ�PDQDJHU�

Page 3: Linux assembly language programming

$OH[LV�+H\GW&RYHU�GHVLJQ�GLUHFWRU�-HUU\�9RWWD&RYHU�GHVLJQHU�1LQD�6FXGHUL

7KLV�ERRN�LV�GHGLFDWHG�WR�DOO�LPSULVRQHG�3ORZVKDUHV�DFWLYLVWV�IRU�DWWHPSWLQJ�WR�GR�ZLWK�LURQ�ZKDW�DOVR�QHHGV�WR�EH�GRQH�ZLWK�VLOLFRQ�/LQX[�$VVHPEO\�/DQJXDJH�3URJUDPPLQJ35()$&(���,1752'8&7,21����7KH�)HWFK�([HFXWH�&\FOH����7KH�/LQX[�2SHUDWLQJ�6\VWHP����7KH�*QX�&�&RPSLOHU����7KH�(GOLQDV�$VVHPEOHU����1$60����2WKHU�$VVHPEOHUV���3/$&(+2/',1*�180(5$7,21����7KH�'HFLPDO�DQG�3HQWLPDO�6\VWHPV����3HQWLPDO�$ULWKPHWLF����&RQYHUVLRQ�WR�3HQWLPDO����7KH�%LQDU\�6\VWHP����0HPRU\�DV�D�5HFWDQJOH�RI�%LWV����7KH�+H[DGHFLPDO�6\VWHP����%DVH�'LVWLQJXLVKLQJ�1RWDWLRQV���� �)UDFWLRQV�LQ�2WKHU�%DVHV���� �&RQYHUWLQJ�)UDFWLRQV���/2*,&�&,5&8,76�$1'�&20387$7,21����7KH�127�*DWH����%RROHDQ�2SHUDWRUV����/RJLF�*DWHV����$GGLWLRQ�&LUFXLWV����6HTXHQWLDO�&LUFXLWV����1HJDWLYH�1XPEHU�5HSUHVHQWDWLRQ����6XEWUDFWLRQ�8VLQJ�1HJDWLRQ���� �3ODFHKROGLQJ�7ZRV�&RPSOHPHQW����0HPRU\�&LUFXLWV�����[���*HQHUDO�5HJLVWHUV�DQG�WKHLU�$QFHVWU\�����7KH�029�&RPPDQG�����$GGLWLRQ�DQG�6XEWUDFWLRQ�&RPPDQGV����� �0XOWLSOLFDWLRQ�DQG�'LYLVLRQ�&RPPDQGV���$66(0%/<�/$1*8$*(����7KH�)RXU�)LHOG�)RUPDW����&RPSXWHUV�IURP�WKH�&38�6WDQGSRLQW����6LPSOH�$VVHPEO\�/DQJXDJH�3URJUDPV����$VVHPEOHU�3URJUDPV�ZLWK�-XPSV����$VVHPEOHU�3URJUDPV�ZLWK�/RRSV����6LJQHG�&RPSDULVRQV����8QVLJQHG�&RPSDULVRQV����/LQX[��V�ILOHV���0$&+,1(�/$1*8$*(����$VVHPEOLQJ�6LPSOH�3URJUDPV����2SFRGH�6SDFH����7KH�0RG50�%\WH��������6SDFH��2)���«�

Page 4: Linux assembly language programming

�������%LW�YV�����%LW�&RGH����7KH���%LW�5HJLVWHUV����/LQX[����)LOHV���0(025<������%\WH�'DWD�:LGWK����$GGUHVVHV�LQ�%UDFNHWV����2SHUDQG�6L]H�$PELJXLW\����/DEHOV����,PPHGLDWH�6WRUDJH���7+(�67$&.����3XVK�DQG�3RS�2SHUDWLRQV����6XESURJUDPV����3DUDPHWHU�3DVVLQJ����5HFXUVLRQ���/,18;�86(5�352*5$06����0XOWLWDVNLQJ����3DJLQJ����$GGUHVV�7UDQVODWLRQ����3URJUDP�6HJPHQWV����2WKHU�'DWD�6HJPHQWV����,�2�3URWHFWLRQ����([HFXWDEOH�)LOHV�LQ�(/)�)RUPDW����2EMHFW�)LOHV�LQ�(/)�)RUPDW���,17(558376����3ROOLQJ����([WHUQDO�,QWHUUXSWV����,6$�$UFKLWHFWXUH����,QWHUQDO�DQG�6RIWZDUH�,QWHUUXSWV����6\VWHP�&DOOV����3ULYLOHJH�/HYHOV����&RQWURO�7UDQVIHU����6FKHGXOLQJ����%,7�0$1,38/$7,216�����%LWZLVH�/RJLF�2SHUDWLRQV�����7KH�$1'��25��127��DQG�;25�&RPPDQGV�����%LW�6HWWLQJ�DQG�7HVWLQJ�����6KLIW�,QVWUXFWLRQV����'(9,&(�'5,9(56�����'HYLFH�,QGHSHQGHQW�)LOHV�����'HYLFHV�DV�)LOHV�����0RUVH�&RGH�6SHDNHU�'ULYHU�����6HULDO�3RUW�'LJLWL]HU�'ULYHU����'26�352*5$06�����5HDO�0RGH�6HJPHQWDWLRQ�����(GOLQDV�(QYLURQPHQW�9DULDEOHV�����)L[HG�0HPRU\�$UHDV�����5HDO�0RGH�,QWHUUXSWV�����&KHFNLQJ�'26�0HPRU\����/,18;�%227�7,0(�352*5$06�����&KDQJLQJ�WR�3URWHFWHG�0RGH�����3URWHFWHG�0RGH�6HJPHQWDWLRQ�����6HWWLQJ�8S�WKH�*OREDO�'HVFULSWRU�7DEOH�����&ORVLQJ35()$&(

$VVHPEO\�ODQJXDJH�LV�ODQJXDJH�ZKLFK�JLYHV�WKH�SURJUDPPHU�GLUHFW�FRQWURO�RYHU�WKH�FRPSXWHU��7KDW�LV�ZKDW�DSSHDOV�WR�SHRSOH�DERXW�DVVHPEO\�ODQJXDJH��,W�LV�OLNH�XVLQJ�D�VWLFN�VKLIW��3URJUDPPLQJ�ZLWK�RWKHU�ODQJXDJHV��KLJK�OHYHO�ODQJXDJHV��LV�OLNH�XVLQJ�DQ�DXWRPDWLF�

Page 5: Linux assembly language programming

0DQ\�SHRSOH�ZKR�XVH�FRPSXWHUV�VLPSO\�UXQ�SURJUDPV��7R�WKHP�D�SURJUDP�LV�D�FDQQHG�VRIWZDUH�SDFNDJH��3HRSOH�ZKR�OLNH�WR�ZULWH�SURJUDPV�OLNH�WR�EH�DEOH�WR�VKDSH�WKH�EHKDYLRU�RI�WKH�PDFKLQH�WKH�ZD\�PHWDOVPLWKV�VKDSH�PHWDO�LQWR�XVHIXO�PHFKDQLFDO�WRROV��$PRQJVW�DOO�WKH�SURJUDPV�RQ�D�FRPSXWHU��WKHUH�LV�RQH�SURJUDP�ZKLFK�UXQV�WKH�PDFKLQH��WKH�RSHUDWLQJ�V\VWHP��,W�FRQWUROV�HYHU\WKLQJ��,W�RIIHUV��VHUYLFHV��WR�WKH�RWKHU�SURJUDPV��0RVW�RSHUDWLQJ�V\VWHPV�IRUFH�SURJUDPPHUV�WR�OHDYH�WKHLU�SURJUDPPLQJ�VNLOOV�EHKLQG�DV�WKH\�DSSURDFK�WKH�RSHUDWLQJ�V\VWHP�DQG�WR�XVH�LW�DV�WKH\�ZRXOG�D�FDQQHG�VRIWZDUH�SDFNDJH��7KDW�LV�EHFDXVH�LWV�VRXUFH�FRGH�LV�D�VHFUHW��/LQX[�SRUWHQGV�WKH�HQG�RI�VHFUHW�FRGH�LQ�FRPSXWLQJ��%HFDXVH�WKH�/LQX[�VRXUFH�FRGH�DQG�D�FRPSLOHU�IRU�LW�DUH�ULJKW�WKHUH�RQ�WKH�FRPSXWHU�DORQJ�ZLWK�WKH�RWKHU�VRXUFH�FRGH��LW�DOORZV�SURJUDPPHUV�WR�ZRUN�ZLWK�WKH�RSHUDWLQJ�V\VWHP�DV�WKH\�GR�ZLWK�SURJUDPV�WKH\�KDYH�ZULWWHQ�2SHUDWLQJ�V\VWHPV�ZHUH�RQFH�ZULWWHQ�E\�SURJUDPPHUV�HPSOR\HG�E\�FRPSXWHU�PDQXIDFWXUHUV��5HYROXWLRQV�LQ�KDUGZDUH�SURGXFHG�FRUUHVSRQGLQJ�UHYROXWLRQV�LQ�WKH�VRIWZDUH��:KHQ�/LQXV�7RUYDOGV�UHZURWH�/LQX[�VR�WKDW�LW�ZRXOG�UXQ�RQ�WKH�$OSKD�DUFKLWHFWXUH��KLV�JRDO�ZDV�QRW�WR�LQFUHDVH�LWV�KDUGZDUH�EDVH�IURP�RQH�SODWIRUP�WR�WZR��EXW�WR�PDNH�/LQX[�SODWIRUP�LQGHSHQGHQW��7KH�VXEVHTXHQW�SRUWV�RI�/LQX[��WR�HYHU\WKLQJ�IURP�D�6SDUF�WR�D�3RZHU3&��GHPRQVWUDWH�WKH�VXFFHVV�RI�KLV�UHZULWH��7KH�FKLHI�YDOXH�RI�LW�LV�WKDW�LW�SURYLGHV�XV�ZLWK�FRQILGHQFH�WKDW�/LQX[�LV�KHUH�WR�VWD\��:H�GRQW�KDYH�WR�IHDU�D�3RZHU3&�UHYROXWLRQ�FRPLQJ�DORQJ�DQG�IRUFLQJ�XV�WR�GXPS�DOO�RI�RXU�ROG�VRIWZDUH�$VVHPEO\�FRGH��RQ�WKH�RWKHU�KDQG��LV�LQWULQVLFDOO\�SODWIRUP�GHSHQGHQW�DQG�LV�MXVWLILDEO\�UHJDUGHG�ZLWK�FDXWLRQ�IRU�MXVW�WKLV�UHDVRQ��,W�ZLOO�KDYH�WR�EH�UHGRQH�ZKHQ�WKH�QH[W�KDUGZDUH�UHYROXWLRQ�WDNHV�SODFH��)XUWKHUPRUH��SHRSOH�ZKR�FRPSDUH�WKH�PDFKLQH�ODQJXDJH�RI�WKH�����ZLWK�RWKHU�PDFKLQH�ODQJXDJHV��ERWK�UHDO�DQG�LGHDO��LQHYLWDEO\�HQG�XS�UHJDUGLQJ�WKH�����ODQJXDJH�DV�D�KLVWRULFDO�DFFLGHQW��2Q�WKH�RWKHU�KDQG��WKH�JHQHWLF�FRGH�LV�VRPHWLPHV�UHIHUUHG�WR�DV�D�IUR]HQ�DFFLGHQW��7KH�WHUP�LV�EDVHG�RQ�WKH�LGHD�WKDW�WKH�JHQHWLF�FRGH�FHDVHG�LWV�HYROXWLRQ�ZKHQ�WKH�QXPEHU�RI�SURWHLQV�ZKRVH�FRGH�ZRXOG�EH��EURNHQ��E\�D�PXWDWLRQ�LQ�WKH�JHQHWLF�FRGH�EHFDPH�VR�ODUJH�WKDW�VXFK�PXWDWLRQV�EHFDPH�OHWKDO��DQG�VR�WKH�FRGH�EHFDPH�IL[HG��,W�UHPDLQV�WR�EH�VHHQ�ZKHWKHU�����PDFKLQH�FRGH�KDV�EHHQ��IUR]HQ��LQWR�SODFH�E\�WKH�VL]H�RI�LWV�VRIWZDUH�EDVH��7KH�WKUHDW�RI�D�3RZHU3&�UHYROXWLRQ�KDV�SDVVHG��2Q�WKH�RWKHU�KDQG��PDQ\�/LQX[�HQWKXVLDVWV�DQWLFLSDWH�DQ�$OSKD�UHYROXWLRQ�%XW�WKH�$OSKD�UHYROXWLRQ�KDV�QRW�KDSSHQHG�DQG�LW�PD\�QRW�KDSSHQ��7KH�����ODQJXDJH�KDV�EHHQ�DURXQG�IRU�D�ORQJ�WLPH��:LWK�PDQ\�5,6&�PDFKLQHV�QRZ�HPXODWLQJ�WKH�����DUFKLWHFWXUH��LVQW�LW�WLPH�WR�FRQVLGHU�SURJUDPPLQJ�LQ�����DVVHPEO\�ODQJXDJH"�$VVHPEO\�ODQJXDJH�LV�PRUH�ZRUN�EXW�LW�KDV�LWV�DGYDQWDJHV��$�YHU\�QLFH�IHDWXUH�RI�DVVHPEO\�ODQJXDJH�FRGH��ZKLFK�LW�VKDUHV�ZLWK�/LQX[�LWVHOI�LQFLGHQWDOO\��LV�WKDW�IURP�D�FUDVV�SHUIRUPDQFH�VWDQGSRLQW��LW�IXQFWLRQV�EHDXWLIXOO\��5HO\LQJ�RQ�FRPSLOHUV�WR�SURGXFH�JRRG�FRGH�LV�XVXDOO\�MXVWLILDEOH�DV�D�WLPH�VDYLQJ�PHDVXUH��%XW�WR�JHW�WKH�EHVW�SRVVLEOH�FRGH��WKHUH�LV�VWLOO�QR�EHWWHU�RSWLRQ�WKDQ�WR�XVH�DVVHPEO\�ODQJXDJH��:KHQ�KLJK�OHYHO�ODQJXDJHV�ZHUH�VWLOO�D�QRYHOW\�DQG�UHIHUUHG�WR�DV�DXWRPDWLF�SURJUDPPLQJ��PDQ\�SURJUDPPHUV�ZHUH�JUHDWO\�RIIHQGHG�E\�WKHP��7KH\�ZHUH�FRQYLQFHG�WKDW�QR�FRPSLOHU�SURJUDP�FRXOG�ZULWH�FRGH�DV�ZHOO�DV�WKH\�FRXOG��7KH\�ZHUH�ULJKW�RI�FRXUVH��&RPSLOHUV�SURGXFH�FKHDSHU�FRGH�EXW�QRW�EHWWHU�FRGH��7R�JHW�WKH�IXOO�PHDVXUH�RI�VSHHG�DQG�JUDFH�WKDW�D�PDFKLQH�LV�FDSDEOH�RI��WKHUH�LV�QR�VXEVWLWXWH�IRU�DVVHPEO\�ODQJXDJH�)XUWKHUPRUH��HYHQ�LI�WKH�$OSKD�UHYROXWLRQ�DUULYHV�RQ�VFKHGXOH�WRPRUURZ��WKHUH�ZLOO�UHPDLQ�LQ�WKH�ZRUOG�PLOOLRQV�RI�SURFHVVRUV�UXQQLQJ�D�����ODQJXDJH��ZKLFK�ZRUN�EHDXWLIXOO\�DQG�QHHG�WR�EH�SXW�WR�D�VRFLDOO\�UHVSRQVLEOH�XVH�&RPSXWHUV�FDQ�EH�SURJUDPPHG�WR�UHSRUW�RQ�RXU�EX\LQJ�KDELWV�RU�WR�VHQG�RII�QXFOHDU�PLVVLOHV��%XW�WKH\�FDQ�DOVR�EH�SURJUDPPHG�WR�FRPPXQLFDWH�ZLWK�SULYDF\�RU�WR�VXSSRUW�PHGLFDO�UHVHDUFK��$V�VLOLFRQVPLWKV��RXU�MRE�LV�WR�VKDSH�WKH�EHKDYLRU�RI�WKH�PDFKLQH�WRZDUGV�D�KXPDQ�DJHQGD�7KLV�ERRN�DVVXPHV�WKDW�WKH�UHDGHU�KDV�VRPH�NQRZOHGJH�RI�&��EXW�LW�PDNHV�QR�RWKHU�DVVXPSWLRQV�6WDUUHG�VHFWLRQV�RI�WKH�ERRN�DUH�QRW�QHHGHG�VXEVHTXHQWO\�DQG�PD\�EH�VNLSSHG�ZKHQ�WKH\�DUH�QRW�RI�LQWULQVLF�LQWHUHVW�,�RZH�WKDQNV�WR�'DYH�)HOWHU�IRU�ZULWLQJ�D�SDUWLDO�VLPXODWRU�RI�WKH�������7KLV�VLPXODWRU�JRW�PH�VWDUWHG�ZULWLQJ�(GOLQDV�

Page 6: Linux assembly language programming

,�RZH�WKDQNV�WR�%UXFH�*UDQW��,W]LFN�9DWQLFN��DQG�.DWH�/$UPDQG�IRU�ZRUNLQJ�ZLWK�PH�RQ�WKH�VFDOH[�GHYLFH�GULYHU�,�RZH�WKDQNV�WR�WKH�PDQ\�VWXGHQWV�ZKR�KDYH�IRXQG�HUURUV�LQ�HDUOLHU�GUDIWV�RI�WKLV�ERRN��,�RZH�VSHFLDO�WKDQNV�WR�-RH�%LVVHOO��6FRWW�+DZNLQV��-DVRQ�.UROO��1DQF\�<RVKLPXUD��DQG�-RDQQH�<XUFKDN�IRU�WKHLU�FDUHIXO��GHWDLOHG��DQG�WKRXJKWIXO�FULWLWLVP��0DQ\�HUURUV�XQGRXEWHGO\�UHPDLQ��7R�WKRVH�UHDGHUV�ZKR�QRWLI\�PH�RI�WKHP�DW�QHYHOQ#FV�ZLGHQHU�HGX�,�VKDOO�EH�JUDWHIXO�/LQX[�'ULYHQ�6HULDO�3RUW�,QSXW�'HYLFH

&KDSWHU����,1752'8&7,21,Q�WKLV�FKDSWHU�VRPH�QHFHVVDU\�WRROV�DQG�EDFNJURXQG�LGHDV�DUH�UHYLHZHG�����7KH�)HWFK�([HFXWH�&\FOH2QH�RI�WKH�HDUOLHVW�HOHFWURQLF�FRPSXWHUV�ZDV�WKH�(1,$&��:KHQ�LW�ZDV�ILUVW�EXLOW�LW�FRXOG�QRW�VWRUH�SURJUDPV��(DFK�QHZ�FRPSXWDWLRQ�UHTXLUHG�PRYLQJ�SOXJV�DQG�MXPSHU�FDEOHV��1RZ��KRZHYHU��QHDUO\�DOO�FRPSXWHUV�VWRUH�SURJUDPV��)RU�WKHVH�FRPSXWHUV��GRLQJ�D�FRPSXWDWLRQ�PHDQV�UXQQLQJ�D�SURJUDP��7KH�SODFH�ZKHUH�WKH�SURJUDP�LV�VWRUHG�LV�FDOOHG�PHPRU\��7KH�SDUW�RI�WKH�PDFKLQH�ZKLFK�GRHV�WKH�FRPSXWDWLRQ�LV�FDOOHG�WKH�SURFHVVRU��&RPSXWHU�SURJUDPV�JHQHUDOO\�WDNH�WKH�IRUP�RI�D�OLVW�RI�LQVWUXFWLRQV��&RPSXWDWLRQ�LV�SHUIRUPHG�E\�WKH�SURFHVVRU�XVLQJ�WKH�IHWFK�H[HFXWH�F\FOH��7KH�IHWFK�H[HFXWH�F\FOH�FRQVLVWV�RI�D�UHSHDWHG�SURFHVV�WKDW�LQFOXGHV�WKHVH�VWHSV�

6WHS����7KH�SURFHVVRU�IHWFKHV�DQ�LQVWUXFWLRQ�IURP�PHPRU\�6WHS����7KH�SURFHVVRU�H[HFXWHV�WKH�LQVWUXFWLRQ�6WHS����

Page 7: Linux assembly language programming

7KH�SURFHVVRU�F\FOHV�EDFN�WR�VWHS���&RPSXWHUV�EDVHG�RQ�WKH�IHWFK�H[HFXWH�F\FOH�DUH�VRPHWLPHV�FDOOHG�9RQ�1HXPDQQ�FRPSXWHUV��9RQ�1HXPDQQ�ZDV�D�ZHOO�NQRZQ�PDWKHPDWLFLDQ�ZKR�ZDV�DOVR�DQ�HDUO\�FRPSXWHU�WKHRULVW�3UREDEO\�WKH�PRVW�LPSRUWDQW�H[DPSOHV�RI�FRPSXWHUV�ZKLFK�DUH�QRW�EDVHG�RQ�WKH�IHWFK�H[HFXWH�F\FOH�DUH�'1$�FRPSXWHUV�DQG�TXDQWXP�FRPSXWHUV��2I�FRXUVH�LW�PD\�EH�WKDW�WKHVH�FRPSXWHUV�ZLOO�UHDFK�D�SRLQW�LQ�WKHLU�GHYHORSPHQW�ZKHQ�WKH\�DUH�UHDG\�WR�OHDYH�XQLYHUVLW\�ODERUDWRULHV�DQG�WKDW�E\�WKDW�WLPH��WKH\�WRR�ZLOO�UXQ�VWRUHG�SURJUDPV�

)LJXUH������$�6WRUHG�3URJUDP�&RPSXWHU

����7KH�/LQX[�2SHUDWLQJ�6\VWHP0RVW�FRPSXWHUV�GR�QRW�VLPSO\�UXQ�RQH�SURJUDP�DW�D�WLPH��7KH\�UXQ�D�SURJUDP�UXQQLQJ�SURJUDP�FDOOHG�DQ�RSHUDWLQJ�V\VWHP��,W�LQWHUDFWV�ZLWK�WKH�XVHU�DQG�PDQDJHV�KDUGZDUH�GHYLFHV�VXFK�DV�WKH�GLVN�GULYHV�DQG�SULQWHUV��DQG�UXQV�RWKHU�SURJUDPV��7KH�HDUOLHVW�RSHUDWLQJ�V\VWHPV�ZHUH�ZULWWHQ�E\�FRPSXWHU�YHQGRUV��(DFK�FRPSXWHU�KDG�LWV�RZQ�RSHUDWLQJ�V\VWHP��7KH�ILUVW�YHQGRU�LQGHSHQGHQW�RSHUDWLQJ�V\VWHP�ZDV�WKH�8QL[�RSHUDWLQJ�V\VWHP��,W�ZDV�GHYHORSHG�E\�D�KDQGIXO�RI�UHVHDUFKHUV�DW�%HOO�/DEV�$77��WKH�SULQFLSDO�RZQHU�RI�%HOO�/DEV��VRRQ�PDGH�8QL[�DYDLODEOH�IRU�D�QRPLQDO�IHH�WR�DFDGHPLF�LQVWLWXWLRQV��ZKLFK�LQ�WXUQ�GHYHORSHG�8QL[�IXUWKHU��7KLV�JHQHURXV�EHKDYLRU�RQ�WKH�SDUW�RI�$77�PD\�KDYH�EHHQ�LQIOXHQFHG�E\�D�FRQVHQW�GHFUHH�HQWHUHG�LQ�������ZKLFK�UHVWULFWHG�FRPPHUFLDO�DFWLYLW\�RQ�WKH�SDUW�RI�$77�EH\RQG��IXUQLVKLQJ�FRPPRQ�FDUULHU�FRPPXQLFDWLRQV�VHUYLFHV���7KLV�GHFUHH�ZDV�WKH�UHVXOW�RI�D�FRPSODLQW�LQ������E\�WKH�-XVWLFH�'HSDUWPHQW�DJDLQVW�:HVWHUQ�(OHFWULF�DQG�$77��FODLPLQJ�WKDW�WKH\�ZHUH�WU\LQJ�WR�OHYHUDJH�WKHLU�WHOHSKRQH�PRQRSRO\�LQWR�RWKHU�VHFWRUV�7KH�YHUVLRQ�RI�8QL[�GHYHORSHG�DW�WKH�8QLYHUVLW\�RI�&DOLIRUQLD�DW�%HUNHOH\�EHFDPH�YHU\�ZLGHO\�XVHG��,W�ZDV�GHVLJQHG�WR�EH�SRUWDEOH��L�H���HDV\�WR�WUDQVIHU�IURP�RQH�W\SH�RI�FRPSXWHU�WR�DQRWKHU��,W�LV�NQRZQ�DV�%HUNHOH\�8QL[�RU�%6'�8QL[���%HUNHOH\�6RIWZDUH�'LYLVLRQ��/LQX[�LV�D�QRQ�SURSULHWDU\�YDULDQW�RI�8QL[��ZKLFK�ZDV�FUHDWHG�E\�/LQXV�7RUYDOGV�RQ�D�����EDVHG�FRPSXWHU�DQG�VXEVHTXHQWO\�GHYHORSHG�E\�DQ�RQOLQH�FRPPXQLW\�RI�XVHUV��$OWKRXJK�VHYHUDO�QRQ�3&�YHUVLRQV�RI�/LQX[�H[LVW��PRVW�H[LVWLQJ�LQVWDOODWLRQV�RI�/LQX[�DUH�RQ�,QWHO�FRPSDWLEOH�KDUGZDUH�0DQ\�XVHUV�RI�/LQX[�KDYH�/LQX[�LQVWDOOHG�DORQJ�ZLWK�DQRWKHU�RSHUDWLQJ�V\VWHP��+DYLQJ�VHSDUDWH�GLVN�SDUWLWLRQV�IRU�/LQX[�DQG�:LQGRZV�'26�LV�FRPPRQ�����7KH�*QX�&�&RPSLOHU7KH�SRUWDELOLW\�RI�WKH�8QL[�RSHUDWLQJ�V\VWHP�ZDV�SDUWO\�D�FRQVHTXHQFH�RI�WKH�IDFW�WKDW�E\������LW�KDG�EHHQ�UHZULWWHQ�LQ�D�KLJK�OHYHO�ODQJXDJH��&��7KH�&�ODQJXDJH�ZDV�LQ�WXUQ�GHVLJQHG�WR�EH�D�SRUWDEOH�ODQJXDJH�7KH�ILUVW�QRQSURSULHWDU\�YHUVLRQ�RI�&�ZDV�GHYHORSHG�E\�5LFKDUG�6WDOOPDQ�RI�WKH�)UHH�6RIWZDUH�)RXQGDWLRQ��,WV�QDPH��JQX��ZKLFK�VWDQGV�IRU��*QXV�1RW�8QL[���SURFODLPV�LWV�HVFDSH�IURP�SURSULHWDU\�FRS\ULJKW�UHVWULFWLRQV��7KH�JQX�&�FRPSLOHU�LV�ZLGHO\�XVHG��QRW�RQO\�EHFDXVH�LWV�IUHH��EXW�EHFDXVH�LW�KDV�VHW�D�VWDQGDUG�IRU�UHOLDELOLW\��7KH�/LQX[�RSHUDWLQJ�V\VWHP�GHSHQGV�KHDYLO\�RQ�WKH�JQX�&�FRPSLOHU�

Page 8: Linux assembly language programming

$�FRPSLOHU�LV�D�SURJUDP�ZKLFK�WUDQVODWHV�D�SURJUDP�VXFK�DV�D�&�ODQJXDJH�SURJUDP�LQWR�D�PDFKLQH�FRGH�SURJUDP�WKDW�FDQ�EH�VWRUHG�LQ�D�FRPSXWHUV�PHPRU\�DQG�UXQ��$�SURJUDP�WKDW�FDQ�EH�VWRUHG�LQ�PHPRU\�DQG�UXQ�LV�FDOOHG�DQ�H[HFXWDEOH�ILOH�RU�VRPHWLPHV�MXVW�DQ�H[HFXWDEOH�7KH�JQX�&�FRPSLOHU�ZRUNV�LQ�VWDJHV��6HH�)LJXUH������7R�FRPSLOH�D�SURJUDP�VXFK�DV�SURJ�F�ZLWK�WKH�JQX�FRPSLOHU��RQH�FDQ�HQWHU�WKH�FRPPDQG

)LJXUH������6WDJHV�RI�*QX�&�&RPSLODWLRQ

����OLQX[ER[��JFF�SURJ�F7KLV�FRPPDQG�WDNHV�WKH�WUDQVODWLRQ�WKURXJK�DOO�WKH�VWDJHV�DQG�SURGXFHV�DQ�H[HFXWDEOH�ILOH�FDOOHG�D�RXW��7R�VWRS�DW�DQ�HDUOLHU�VWDJH��RQH�FDQ�DGG�D�VZLWFK�WR�WKH�JFF�FRPPDQG�OLQH��)RU�H[DPSOH��WR�SURGXFH�DQ�DVVHPEO\�FRGH�ILOH��WKH���6��VZLWFK��XSSHU�FDVH��LV�XVHG��(QWHULQJ�WKH�FRPPDQG����OLQX[ER[��JFF��6�SURJ�F\LHOGV�DQ�DVVHPEO\�ODQJXDJH�ILOH��SURJ�V��7R�ILQLVK�WKH�FRPSLODWLRQ��WKH�JFF�FRPPDQG�PD\�EH�XVHG�RQ�WKH��V�ILOH����OLQX[ER[��JFF�SURJ�V����7KH�(GOLQDV�$VVHPEOHU7KH�DVVHPEO\�ODQJXDJH�LQ�WKH��V�ILOHV�SURGXFHG�E\�WKH�JQX�FRPSLOHU�LV�GLIIHUHQW�IURP�WKH�ZLGHO\�XVHG�,QWHO�DVVHPEO\�ODQJXDJH�IRU�WKH�[���SURFHVVRUV��(GOLQDV�DVVHPEO\�ODQJXDJH�LV�HVVHQWLDOO\�WKH�,QWHO�DVVHPEO\�ODQJXDJH��,WV�REMHFW�FRGH�ILOHV�UXQ�XQGHU�[���/LQX[��(GOLQDV�LV�DQ�LQWHUDFWLYH�HQYLURQPHQW�FRQVLVWLQJ�RI�DQ�HGLWRU��DQ�DVVHPEOHU��DQG�D�VLPXODWRU�������(GLWLQJ6RXUFH�FRGH�HGLWLQJ�XVHV�FRPPDQGV�ERUURZHG�IURP�('/,1��D�'26�HGLWRU��$PRQJ�WKH�FRPPDQGV�DUH�L�IRU�LQVHUW��G�IRU�GHOHWH��F�IRU�FKDQJH��H�IRU�H[LW��T�IRU�TXLW��DQG�K�IRU�KHOS��&RPPDQGV�DIIHFW�WKH�FXUUHQW�OLQH�ZKLFK�LV�WKH�OLQH�WKDW�KDV�WKH�DVWHULVN�� ��7KH�DVWHULVN�LV�PRYHG�XVLQJ�WKH�DUURZ�NH\V��(QWHUHG�OLQHV�DUH�FKHFNHG�E\�WKH�DVVHPEOHU�IRU�V\QWD[�HUURUV�������$VVHPEOLQJ&RGH�LV�DVVHPEOHG�DV�LW�LV�HQWHUHG�RU�ORDGHG��$VVHPEO\�FRGH�DSSHDUV�LQ�WKH�GHIDXOW�ZLQGRZ�RQ�WKH�ULJKW�VLGH�RI�WKH�VFUHHQ��$VVHPEOHG�FRGH�FDQ�EH�VDYHG�DW�DQ\�WLPH�XVLQJ�WKH�R�FRPPDQG�������,QWHUSUHWLQJ&RGH�FDQ�EH�H[HFXWHG�HLWKHU�IURP�D�ORDGHG�SURJUDP�RU�IURP�D�FRPPDQG�SURPSW�EHORZ�

Page 9: Linux assembly language programming

7R�VWHS�WKURXJK�OLQHV�RI�FRGH��WKH�VSDFH�EDU�LV�XVHG��7KH�OLQH�DERXW�WR�EH�H[HFXWHG�LV�GLVSOD\HG�LQ�\HOORZ��,W�LV�WKH�OLQH�SRLQWHG�DW�E\�WKH�LQVWUXFWLRQ�SRLQWHU��7KH�HQWHU�NH\�UHVHWV�WKH�LQVWUXFWLRQ�SRLQWHU�WR�WKH�FXUUHQW�OLQH��,QVWUXFWLRQV�FDQ�WKHUHIRUH�EH�H[HFXWHG�LQ�DQ\�RUGHU�E\�PRYLQJ�WKH�DVWHULVN�DURXQG�7KH�HVFDSH�NH\�EULQJV�XS�D�FXUVRU�DW�WKH�FRPPDQG�SURPSW�EHORZ��&RPPDQGV�KHUH�DUH�H[HFXWHG�LPPHGLDWHO\��$Q�HPSW\�FRPPDQG�H[LWV�WKH�FRPPDQG�OLQH�7R�REVHUYH�WKH�HIIHFWV�RI�FRGH�H[HFXWLRQ��YDULRXV�DUHDV�RI�WKH�PDFKLQH�PD\�EH�EURXJKW�LQWR�YLHZ�LQ�WKH�ULJKW�SDQHO�RI�WKH�VFUHHQ��7KH�GLIIHUHQW�FKRLFHV�IRU�WKH�FRQWHQWV�RI�WKH�ULJKW�SDQHO�FDQ�EH�F\FOHG�WKURXJK�XVLQJ�WKH�WDE�NH\�7KH�OD\RXW�RI�WKH�(GOLQDV�VFUHHQ��ZKLFK�LV�DGDSWHG�IURP�WKDW�RI�DQ������VLPXODWRU�ZULWWHQ�E\�'DYH�)HOWHU��LV�VKRZQ�LQ�)LJXUH�����

)LJXUH������7KH�(GOLQDV�6FUHHQ

(GOLQDV�LV�D�'26�SURJUDP��('/�(;(�������'RVHPX7KH�(GOLQDV�DVVHPEOHU�LV�D�'26�SURJUDP��,I�\RX�KDYH�D�PDFKLQH�ZKLFK�KDV�D�'26�SDUWLWLRQ��WKH�VLPSOHVW�ZD\�RI�JHWWLQJ�WR�'26�LV�E\�UHERRWLQJ��%XW�LW�LV�QRW�QHFHVVDULO\�WKH�PRVW�FRQYHQLHQW��)XUWKHU��\RXU�PDFKLQH�PD\�QRW�KDYH�D�'26�SDUWLWLRQ��7KH�GRVHPX�SURJUDP�PDNHV�LW�SRVVLEOH�WR�UXQ�'26�SURJUDPV�IURP�/LQX[��,W�LV�DYDLODEOH�IURP�ZZZ�GRVHPX�RUJ�7R�UXQ�(GOLQDV��WKH��BJUDSKLFV�YDULDEOH�LQ�GRVHPX�FRQI�VKRXOG�EH�VHW�WR���������1$607KH�1HWZLGH�$VVHPEOHU��RU�1$60��LV�DQ�RSHQ�VRXUFH�DVVHPEOHU�WKDW�UXQV�XQGHU�/LQX[�DV�ZHOO�DV�'26��,WV�XVH�LV�LQFUHDVLQJ�DQG�KDV�PXFK�WR�UHFRPPHQG�LW��,Q�SDUWLFXODU�GXH�WR�LWV�ZLGHVSUHDG�XVH��LW�KDV�EHHQ�H[SRVHG�WR�D�YHU\�WKRURXJK�GHEXJJLQJ��,W�DOVR�DFFHSWV�D�EURDGHU�YRFDEXODU\�RI�DVVHPEO\�ODQJXDJH�LQVWUXFWLRQV�WKDQ�GRHV�(GOLQDV��0RVW�RI�WKH�SURJUDPV�LQ�WKLV�ERRN�PD\�EH�DVVHPEOHG�XVLQJ�HLWKHU�DVVHPEOHU��(GOLQDV�FDQ�EH�XVHG�WR�VWHS�WKURXJK�WKH�H[DPSOH�SURJUDPV�LQ�WKH�WH[W��EXW�IRU�WKH�ELJJHU�SURJUDPV�VXFK�DV�WKH�LQWHUUXSW�KDQGOHU�LQ�FKDSWHU�����1$60�LV�GHILQLWHO\�WKH�EHWWHU�FKRLFH��1$60�LV�DQ�LQGXVWULDO�VWUHQJWK�DVVHPEOHU�7R�XQSDFN�WKH�GLVWULEXWLRQ��ZKLFK�FRPHV�ZLWK�WKLV�ERRN��XVH�WKH�FRPPDQG

Page 10: Linux assembly language programming

����OLQX[ER[��XQ]LS��D/�QDVP���V�]LSDIWHU�FRS\LQJ�LW�WR�D�VXLWDEOH�GLUHFWRU\��7R�EXLOG�LW��\RX�FDQ�WKHQ�FRS\�WKH�DSSURSULDWH�PDNHILOH����OLQX[ER[����FS�PDNHILOH�XQ[�0DNHILOHDQG�UXQ����OLQX[ER[����PDNH����2WKHU�$VVHPEOHUV0$60�DQG�7XUER�$VVHPEOHU�DUH�DVVHPEOHUV�WKDW�KDYH�EHHQ�YHU\�ZLGHO\�XVHG�LQ�FRQQHFWLRQ�ZLWK�'26��7KH�IDFW�WKDW�:LQGRZV�LV�QRW�VR�HDV\�WR�ZRUN�ZLWK�XVLQJ�DVVHPEO\�ODQJXDJH�KDV�OHG�WR�D�GHFUHDVH�LQ�WKH�SRSXODULW\�RI�WKHVH�DVVHPEOHUV��0DQ\�SHRSOH�KDYH�WKH�LPSUHVVLRQ�WKDW�/LQX[�LV�QRW�SDUWLFXODUO\�DVVHPEOHU�IULHQGO\�HLWKHU��7KLV�LPSUHVVLRQ�LV�SDUWO\�EDVHG�RQ�WKH�YLHZ�RI�DVVHPEO\�ODQJXDJH�WKDW�\RX�JHW�ZRUNLQJ�ZLWK�JFF��7KRVH�DFFXVWRPHG�WR�,QWHO�V\QWD[�PD\�XQGHUVWDQGDEO\�ILQG�WKH�$77�V\QWD[�DZNZDUG��:RUVH��ZKHQ�DVVHPEO\�ODQJXDJH�LQVWUXFWLRQV�DUH�LQVHUWHG�LQWR�&�FRGH��WKH�TXRWDWLRQ�PDUNV�UHTXLUHG�E\�JFF�DQG�WKH�OLQH�MXPEOLQJ�WKDW�RFFXUV�DUH�SUHWW\�UHSHOOHQW��,�KRSH�WKDW�E\�FKDSWHU����UHDGHUV�ZLOO�EH�SHUVXDGHG�WKDW�LQWHUDFWLQJ�ZLWK�/LQX[�XVLQJ�DVVHPEO\�ODQJXDJH�FDQ�EH�FOHDQ�DQG�QHDW�7KHUH�DUH�D�IHZ�RWKHU�DVVHPEOHUV�DURXQG��$�EULHI�GLVFXVVLRQ�RI�WKHP�FDQ�EH�IRXQG�LQ�DQ�$VVHPEO\�+2:72�DW�WKH�/LQX[�'RFXPHQWDWLRQ�3URMHFWV�:HEVLWH��ZZZ�OLQX[GRF�RUJ�+2:72�)XUWKHU�5HDGLQJ2SHQ�6RXUFHV�9RLFHV�IURP�WKH�2SHQ�6RXUFH�5HYROXWLRQ�&KULV'L%RQD�HW��DO���25HLOO\�������$�4XDUWHU�&HQWXU\�RI�8QL[��3HWHU6DOXV��$GGLVRQ�:HVOH\�������&KDSWHU����3/$&(+2/',1*�180(5$7,217KH�(1,$&�GLG�QRW�XVH�WKH�ELQDU\�V\VWHP��,WV�DULWKPHWLF�SURFHVVRU�XVHG�YDFXXP�WXEHV�ZLUHG�WRJHWKHU�LQWR�ULQJV��ZKLFK�ZRUNHG�OLNH�ROG�GHVNWRS�DGGLQJ�PDFKLQH�ZKHHOV��7KHVH�ZHUH�EDVH�WHQ�FRQWUDSWLRQV��6LQFH�WKHQ��KRZHYHU��DOO�HOHFWURQLF�FRPSXWHUV�KDYH�GRQH�WKHLU�DULWKPHWLF�XVLQJ�WKH�ELQDU\�V\VWHP��EDVH�WZR���&RQVHTXHQWO\��GHVFULSWLRQV�RI�FRPSXWHU�DULWKPHWLF�DUH�FXVWRPDULO\�H[SUHVVHG�XVLQJ�WKH�ELQDU\�V\VWHP�RU�UHODWHG�V\VWHPV�VXFK�DV�KH[DGHFLPDO��EDVH�VL[WHHQ��RU�RFWDO��EDVH�HLJKW���$Q�XQGHUVWDQGLQJ�RI�WKHVH�QXPEHU�V\VWHPV�LV�HVVHQWLDO��5HDGHUV�DOUHDG\�IDPLOLDU�ZLWK�WKHP�PD\�SUHIHU�WR�VNLS�WKLV�FKDSWHU�����7KH�'HFLPDO�DQG�3HQWLPDO�6\VWHPV%HIRUH�WKH�LQYHQWLRQ�RI�SODFHKROGLQJ�GHFLPDO�QRWDWLRQ�LQ�WKH�(DVW��SUREDEO\�LQ�,QGLD�RU�&KLQD��V\VWHPV�RI�QRWDWLRQ�EXLOW�DURXQG�SRZHUV�RI�WHQ��ZKLFK�ZHUH�QRW�SODFHKROGLQJ�V\VWHPV��ZHUH�FRPPRQ��7KH�V\VWHP�XVHG�E\�$UFKLPHGHV��IRU�H[DPSOH��LV�VKRZQ�LQ�7DEOH������,Q�WKLV�V\VWHP��63$�UHSUHVHQWV�WKH�QXPEHU������*UHHN�OHWWHUV�RI�FRXUVH��QRW�/DWLQ�OHWWHUV��ZHUH�XVHG��7KH�PRVW�DSSDUHQW�GLVDGYDQWDJH�RI�WKLV�NLQG�RI�V\VWHP�LV�FRPSXWDWLRQDO��7KH�QRWDWLRQ�LV�QR�KHOS�DW�DOO�LQ�VHHLQJ�WKDW

7DEOH������1RQ�3ODFHKROGLQJ�'HFLPDO�6\VWHP$ � - �� 6 ���% � . �� 7 ���& � / �� 8 ���' � 0 �� 9 ���( � 1 �� : ���) � 2 ��* � 3 ��

Page 11: Linux assembly language programming

DQG�DOO�UHSUHVHQW�HVVHQWLDOO\�WKH�VDPH�EDVLF�IDFW��%XW�WKLV�LV�RQO\�D�SUREOHP�ZKHQ�QRWDWLRQV�WKHPVHOYHV�DUH�XVHG�WR�GR�FDOFXODWLRQV��DV�ZH�GR�ZLWK�SHQFLO�DQG�SDSHU���:KHQ�FDOFXODWLRQV�DUH�GRQH�ZLWK�SK\VLFDO�WRNHQV��VXFK�DV�EHDGV�RQ�DQ�DEDFXV�RU�ZLWK�SHEEOHV��WKLV�LV�QR�ORQJHU�D�SUREOHP��,Q�IDFW��WKLV�NLQG�RI�QRWDWLRQ�PD\�KDYH�VHUYHG�WR�SUHYHQW�UHDGLQJ�HUURUV��$Q\RQH�ZKR�KDV�UHFHLYHG��������ZKHQ�FDVKLQJ�D���������FKHFN�ZLOO�XQGHUVWDQG�WKLV�SRLQW�%XW�ZKHQ�WKH�QRWDWLRQV�WKHPVHOYHV�DUH�XVHG�WR�GR�WKH�FDOFXODWLRQV��LW�LV�EHWWHU�WR�KDYH�D�QRWDWLRQDO�V\VWHP�ZKLFK�EULQJV�RXW�VXFK�EDVLF�VLPLODULWLHV�DV�WKH�IROORZLQJ�

3ODFHKROGLQJ�V\VWHPV�GR�WKLV��3ODFHKROGLQJ�QXPHUDOV��VRPHWLPHV�OHVV�V\PSDWKHWLFDOO\�UHIHUUHG�WR�DV��KHDWKHQ�F\SKHUV���ZHUH�SRSXODUL]HG�LQ�(XURSH�DURXQG�WKH�\HDU������E\�/HRQDUGR�RI�3LVD��DOVR�NQRZQ�DV�)LERQDFFL��)LERQDFFL�ZDV�SUHVXPDEO\�UHO\LQJ�RQ�D�ZRUN�ZULWWHQ�LQ�$UDELF�E\�DO�.KZkUL]PL��ZKRVH�QDPH�ZH�VHH�LQ�WKH�ZRUG�DOJRULWKP��DURXQG�WKH�\HDU�����LQ�%DJKGDG��/LNH�DOO�(XURSHDQ�VFKRODUV�RI�WKH�GD\��)LERQDFFL�ZDV�QHFHVVDULO\�YHUVHG�LQ�$UDELF�$OO�WKH�QXPHUDWLRQ�V\VWHPV�GLVFXVVHG�LQ�WKLV�ERRN��LQFOXGLQJ�WKH�GHFLPDO�V\VWHP�ZH�XVH�HYHU\�GD\��DUH�SODFHKROGLQJ�V\VWHPV��%HIRUH�SURFHHGLQJ�WR�QRQGHFLPDO�V\VWHPV��OHW�XV�FRQVLGHU�WKH�UROH�WKDW�EDVH�WHQ�SOD\V�LQ�WKH�8�6��PRQHWDU\�V\VWHP�������3XUHO\�'HFLPDO�0RQH\7KH�FXUUHQW�8�6��PRQHWDU\�V\VWHP�ZDV�DGRSWHG�IROORZLQJ�WKH�LQWURGXFWLRQ�RI�WKH�PHWULF�V\VWHP�LQ�)UDQFH�LQ�WKH�5HYROXWLRQ�RI�������7KH�SXUSRVH�RI�ERWK�RI�WKHVH�H[WHQVLRQV�RI�WKH�GHFLPDO�V\VWHP�ZDV�WR�VLPSOLI\�FDOFXODWLRQV�E\�EULQJLQJ�PRQHWDU\�DQG�PHDVXUHPHQW�XQLWV�LQWR�KDUPRQ\�ZLWK�WKH�GHFLPDO�V\VWHP�XVHG�WR�UHSUHVHQW�QXPEHUV�7R�EULQJ�WKH�DOLJQPHQW�RI�WKH�PRQHWDU\�DQG�QXPHUDO�V\VWHPV�LQWR�VKDUS�UHOLHI��OHW�XV�LPDJLQH�D�SDUHG�GRZQ�YHUVLRQ�RI�WKH�8�6��PRQHWDU\�V\VWHP�WKDW�LQFOXGHV�RQO\�SHQQLHV��GLPHV�����ELOOV������GROODU�ELOOV�������GROODU�ELOOV��������GROODU�ELOOV��DQG�VR�RQ��������������GLPH�� �����SHQQLHV������GROODU�ELOO�� �����GLPHV������������������� ������SHQQLHV��WHQ�GROODU�ELOO�� �����GROODU�ELOOV������������������� ������GLPHV������������������� �������SHQQLHV����������������������DQG�VR�RQ,Q�WKLV�SXUHO\�GHFLPDO�PRQHWDU\�V\VWHP��HDFK�GHQRPLQDWLRQ�H[FHSW�SHQQLHV�LV�ZRUWK�H[DFWO\�WHQ�WLPHV�WKH�QH[W�VPDOOHU�XQLW��'HQRPLQDWLRQV�FRUUHVSRQG�WR�SODFH�YDOXHV�LQ�WKH�EDVH�WHQ�QXPHUDWLRQ�V\VWHP��DQG�YLFH�YHUVD��3HQQLHV�DUH�RQHV��GLPHV�DUH�WHQV��GROODUV�DUH�KXQGUHGV��HWF�7R�FDUU\�H[DFW�FKDQJH�IRU�DQ\�SRVVLEOH�WUDQVDFWLRQ�LQ�WKLV�EDUH�ERQHV�PRQHWDU\�V\VWHP��RQH�ZRXOG�QHHG�QLQH�LWHPV�RI�HDFK�GHQRPLQDWLRQ��)RU�H[DPSOH��WR�PDNH�D�SXUFKDVH�ZKRVH�FRVW�ZDV���������RU�������FHQWV��ZRXOG�UHTXLUH���WHQ�GROODU�ELOOV����GROODU�ELOOV����GLPHV��DQG���SHQQLHV�,I�ZH�DFWXDOO\�XVHG�WKLV�V\VWHP��RXU�FKDQJH�SXUVHV�ZRXOG�QHHG�WR�EH�EXONLHU�WKDQ�WKH\�DUH��7KH�H[LVWHQFH�RI�

+ � 4 ��, � 5 ��

Page 12: Linux assembly language programming

QLFNHOV��TXDUWHUV��HWF��UHGXFHV�WKH�DPRXQW�RI�FKDQJH�ZH�PXVW�FDUU\��7R�JHW�D�OHVV�EXON\�V\VWHP�ZKLFK�ZDV�QRQHWKHOHVV�EDVHG�RQ�VLPSOH�PXOWLSOHV�ZH�FRXOG�LPDJLQH�D�V\VWHP�EDVHG�RQ�ILYHV�LQVWHDG�RI�WHQV�������3HQWLPDO�0RQH\6XSSRVH�ZH�LPDJLQH�D�PRQHWDU\�V\VWHP�ZKRVH�GHQRPLQDWLRQV�DUH�SHQQLHV��QLFNHOV��TXDUWHUV��������ELOOV��������ELOOV��DQG�VR�RQ��,Q�WKLV�V\VWHP��WKH�YDOXH�RI�HDFK�GHQRPLQDWLRQ�H[FHSW�SHQQLHV�LV�H[DFWO\�ILYH�WLPHV�WKH�YDOXH�RI�WKH�QH[W�VPDOOHU�GHQRPLQDWLRQ��/HWV�FDOO�����FHQWV�D��%LJ�'ROODU��DQG�LPDJLQH�WKDW�WKH�FXUUHQF\�IRU�LW�LV�D�ELOO�ZLWK�D�ELJ�����RQ�LW�������QLFNHO�� ����SHQQLHV�����TXDUWHU�� ����QLFNHOV�������������� �����SHQQLHV��%LJ�'ROODU�� ����TXDUWHUV�������������� �����QLFNHOV�������������� ������SHQQLHV�����������������DQG�VR�RQ7R�EH�SUHSDUHG�WR�FDUU\�RXW�DQ\�WUDQVDFWLRQ�LQ�WKLV�V\VWHP��ZH�ZRXOG�QHHG�WR�FDUU\�RQO\�IRXU�LWHPV�RI�HDFK�XQLW��7KLV�ZRXOG�FUHDWH�OHVV�EXON�LQ�RXU�FKDQJH�SXUVHV��%XW�ORRN�ZKDW�ZRXOG�KDSSHQ�WR�WKH�DULWKPHWLF��7R�PDNH�D�SXUFKDVH�RI��������ZRXOG�UHTXLUHRQH���������ELOO� ��������IRXU�������ELOOV� ��������]HUR�������ELOOV� ��������WZR�����TXDUWHUV� ��������]HUR�����QLFNHOV� ��������WKUHH����SHQQLHV� ��������������������������������������������������� ��������7KLV�DULWKPHWLF�LV�QR�ORQJHU�WUDQVSDUHQWO\�REYLRXV�DV�LW�LV�ZKHQ�ZH�KDYH�GHFLPDO�PRQH\��7KLV�LV�WUXH�GHVSLWH�WKH�IDFW�WKDW�WKLV�SHQWLPDO�PRQHWDU\�V\VWHP�LV�MXVW�DV�VLPSOH�DV�WKH�GHFLPDO�PRQHWDU\�V\VWHP��7KH�GHFLPDO�PRQHWDU\�V\VWHP�DSSHDUV�WR�EH�VLPSOHU�EHFDXVH�LW�PDWFKHV�RXU�GHFLPDO�QXPHUDWLRQ�V\VWHP��+RZHYHU��LI�ZH�XVHG�D�SHQWLPDO�QXPHUDWLRQ�V\VWHP�DV�ZHOO�DV�SHQWLPDO�PRQH\�V\VWHP��VLPSOLFLW\�ZRXOG�UHWXUQ��(YHU\�PRQHWDU\�XQLW�ZRXOG�FRUUHVSRQG�WR�D�SODFH�YDOXH�LQ�WKH�SHQWLPDO�QXPHUDWLRQ�V\VWHP��DQG�YLFH�YHUVD�������3HQWLPDO�1XPHUDOV7KH�SODFH�YDOXHV�LQ�WKH�SHQWLPDO�QXPHUDO�V\VWHP�DUH�RQH��ILYH��WZHQW\�ILYH��RQH�KXQGUHG�WZHQW\�ILYH��HWF��(DFK�YDOXH�LV�ZRUWK�ILYH�RI�WKH�QH[W�VPDOOHU�$Q\�QXPEHU�FDQ�EH�UHSUHVHQWHG�XVLQJ�DW�PRVW�IRXU�RI�DQ\�RQH�SODFH�YDOXH��6R�WKH�GLJLWV�������������DQG���DUH�QRW�XVHG��$OO�QXPEHUV�DUH�UHSUHVHQWHG�XVLQJ�RQO\�WKH�QXPHUDOV�������������DQG���7KH�SHQWLPDO����LV�WKH�VDPH�DV�WKH�RUGLQDU\�GHFLPDO�����,W�PHDQV���ILYHV�DQG���RQHV��OLNH���QLFNHOV�DQG���SHQQLHV��6LPLODUO\������LV�WKH�VDPH�DV����LQ�EDVH�WHQ��,Q�FHQWV�LW�PHDQV���TXDUWHU����QLFNHOV�DQG���SHQQLHV�&RXQWLQJ�JRHV�OLNH�WKLV���������������������������������������������������������������������������������������������������������������������������������DQG�VR�RQ��8VLQJ�SHQWLPDO�QXPHUDWLRQ�WR�GHVFULEH�SHQWLPDO�PRQH\��ZH�JHW�WKLV�WDEOH�������QLFNHO�� �����SHQQLHV������� ILYH������TXDUWHU�� �����QLFNHOV�������������� ������SHQQLHV�������� �WZHQW\�ILYH���%LJ�'ROODU�� �����TXDUWHUV�������������� ������QLFNHOV�������������� �������SHQQLHV�������� �RQH�KXQGUHG�WZHQW\�ILYH�����3HQWLPDO�$ULWKPHWLF

Page 13: Linux assembly language programming

*LYHQ�D�EDVH�ILYH�DULWKPHWLF�SUREOHP�

ZH�KDYH�D�FKRLFH�RI�PHWKRGV��:H�FDQ�FRQYHUW�WKHVH�QXPEHUV�LQWR�EDVH�WHQ��GR�WKH�DULWKPHWLF��DQG�WKHQ�FRQYHUW�EDFN�WR�EDVH�ILYH��2U�ZH�FDQ�GR�WKH�SUREOHP�ZLWKRXW�DQ\�FRQYHUVLRQV�XVLQJ�WKH��QDWLYH�DULWKPHWLF��7KH�ILUVW�PHWKRG�LV�HDVLHU�DW�ILUVW�VLQFH�ZH�DUH�XVHG�WR�EDVH�WHQ��7KLQNLQJ�LQ�WHUPV�RI�PRQHWDU\�XQLWV������LV�IRXU�TXDUWHUV��WZR�QLFNHOV�DQG�WKUHH�SHQQLHV��L�H�������FHQWV�LQ�RUGLQDU\�EDVH�WHQ��6LPLODUO\������LV����FHQWV�LQ�RUGLQDU\�EDVH�WHQ��6R�ZH�FDQ�GR�WKH�DGGLWLRQ�XVLQJ�RUGLQDU\�EDVH�WHQ�DULWKPHWLF�

2QH�KXQGUHG�WKLUWHHQ�SOXV����LV������RU��������7R�FRQYHUW�EDFN��VWDUW�E\�WDNLQJ�RXW�RQH�ELJ�GROODU��D�GROODU�DQG�D�TXDUWHU��DQG�ZH�KDYH����FHQWV�OHIW��7KLV�LV�WKUHH�TXDUWHUV��RQH�QLFNHO�DQG�WZR�SHQQLHV��6R�WKH�DQVZHU�LV������7DEOH������3HQWLPDO�6\VWHP�3ODFH�9DOXHV

��V �V �V 3HQWLPDO 'HFLPDO� � � � �� � � � �� � � � �� � � � �� � � �� �� � � �� �� � � �� �� � � �� �� � � �� �� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � �� ��� � � ��� ��� � � ��� ��� � � ��� ��� � � ��� ��� � � ��� ��

Page 14: Linux assembly language programming

������1DWLYH�$GGLWLRQ8VLQJ�WKH�QDWLYH�DULWKPHWLF��KRZHYHU��LV�HDVLHU�WKDQ�WKLV��HVSHFLDOO\�ZKHQ�WKH�QXPEHUV�JHW�ODUJHU��$ERXW�DOO�WKDWV�QHFHVVDU\�WR�UHPHPEHU�LV�WKDW�ILYH�RI�DQ\�RQH�XQLW�PXVW�EH�FDUULHG�E\�FRQYHUWLQJ�LW�WR�RQH�RI�WKH�QH[W�ODUJHU�XQLW�

7KH�RQHV��RU�SHQQLHV��FROXPQ�WRWDOV�VHYHQ��ZKLFK�LV�����ZKLFK�LV���FDUU\���

����������LV�VL[��ZKLFK�LV�����ZKLFK�LV���FDUU\���

$QG�����������LV�HLJKW��ZKLFK�LV�����ZKLFK�LV���FDUU\���

&OHDUO\��WKH�QDWLYH�DULWKPHWLF�LV�HDVLHU�RQFH�ZH�XQGHUVWDQG�LW�������1DWLYH�6XEWUDFWLRQ6XEWUDFWLRQ�UHTXLUHV�ERUURZLQJ��IRU�H[DPSOH��FRQYHUWLQJ�D�TXDUWHU�WR�ILYH�QLFNHOV�RU�D�QLFNHO�WR�ILYH�SHQQLHV��7KH�IROORZLQJ�VXEWUDFWLRQ�RI�WKUHH�IURP�WHQ�LOOXVWUDWHV�ERUURZLQJ�

%RUURZ�D�QLFNHO�IURP�WKH�QLFNHOV�FROXPQ�DQG�FRQYHUW�LW�LQWR�ILYH�SHQQLHV�

� � � ��� ��� � � ��� ��� � � ��� ��� � � ��� ��

Page 15: Linux assembly language programming

2QH�QLFNHO�LV�OHIW�

6R�ZH�JHW�RQH�QLFNHO�DQG�WZR�SHQQLHV�OHIW�����&RQYHUVLRQ�WR�3HQWLPDO6RPHWLPHV�FRQYHUVLRQV�DUH�XQDYRLGDEOH��)RU�D�FRPSXWHU�WR�EH�DEOH�WR�VWRUH�D�QXPEHU�LQ�ELQDU\�ZKLFK�LV�LQSXW�LQ�GHFLPDO��D�FRQYHUVLRQ�LV�QHHGHG��$OWKRXJK�FRQYHUVLRQV�FDQ�EH�GRQH�E\�VHDUFKLQJ�IRU�D�UHSUHVHQWDWLRQ�ZKLFK�ZRUNV��WKHUH�DUH�PRUH�HIILFLHQW�PHWKRGV��&RQVLGHU�WKH�FRQYHUVLRQ�RI�����LQWR�EDVH�ILYH��7R�XQGHUVWDQG�WKLV�FRQYHUVLRQ��LW�PD\�KHOS�WR�ORRN�DW�WKH�DQVZHU�EHIRUH�ZH�VWDUW�:H�FDQ�VHH�WKDW���FDQ�EH�IDFWRUHG�RXW�RI�WKLV�VXP��H[FHSW�IRU�WKH���DW�WKH�HQG�%XW�WKLV�MXVW�VD\V�ZKDW�WKH�TXRWLHQW�DQG�UHPDLQGHU�RI�����GLYLGHG�E\���DUH��1RWLFH�WKDW�WKH�UHPDLQGHU�LV�RXU�XQLWV�GLJLW��)XUWKHUPRUH��ZH�FDQ�FDOFXODWH�WKLV�TXRWLHQW�DQG�UHPDLQGHU�XVLQJ�EDVH�WHQ��ZKLFK�LV�ZKDW�ZH�KDYH�DYDLODEOH�ZKHQ�ZH�VWDUW�WKLV�FRQYHUVLRQ�

:H�KDYH�LQ�EDVH�WHQ�WKDW�ZKHUH�DJDLQ�SHHNLQJ�DW�WKH�DQVZHU�VKRZV�XV�WKDW�7KH�TXRWLHQW������FRQWDLQV�WKH�LQIRUPDWLRQ�QHHGHG�WR�JHW�DOO�WKH�RWKHU�GLJLWV��7KH\�FDQ�EH�REWDLQHG�XVLQJ�PRUH�GLYLVLRQV�

Page 16: Linux assembly language programming

7KH�ODVW�GLYLVLRQ�KDV�D�]HUR�TXRWLHQW�

7KH�DOJRULWKP�IRU�FRQYHUVLRQ�FRQVLVWV�RI�UHSHDWHG�GLYLVLRQ�E\����HDFK�UHPDLQGHU�\LHOGLQJ�D�GLJLW�RI�WKH�DQVZHU��,W�SURFHHGV�XQWLO�D�]HUR�TXRWLHQW�LV�REWDLQHG�����7KH�%LQDU\�6\VWHP.QRZLQJ�WKH�ELQDU\�V\VWHP�LV�LPSRUWDQW�EHFDXVH�WKH�QDWLYH�DULWKPHWLF�RI�DOO�H[LVWLQJ�FRPSXWHU�SURFHVVRUV�LV�ELQDU\�DULWKPHWLF�%LQDU\�QXPEHUV�XVH�RQO\�WZR�GLJLWV����DQG����$OO�ELQDU\�QXPEHUV�DUH�FRQVWUXFWHG�IURP�MXVW�WKHVH�WZR�GLJLWV��&RXQWLQJ�JRHV�OLNH�WKLV������������������������������������������������������������������������������������������������������HWF�7KH�ELQDU\�V\VWHP�LV�D�SODFHKROGLQJ�V\VWHP��(DFK�SRVLWLRQ�H[FHSW�IRU�WKH�RQHV�SRVLWLRQ�VWDQGV�IRU�D�XQLW�ZKLFK�LV�WZLFH�WKH�YDOXH�RI�WKH�QH[W�VPDOOHU�XQLW��6HH�7DEOH�����������%LQDU\�$GGLWLRQ6XSSRVH�ZH�ZDQW�WR�DGG

ZKLFK�LV�WKLUWHHQ�SOXV�VL[��7KH�ILUVW�FROXPQ�GRHV�QRW�UHTXLUH�D�FDUU\�

1HLWKHU�GRHV�WKH�VHFRQG�

7KH�WKLUG�FROXPQ�WRWDOV�WZR��ZKLFK�LV�����ZKLFK�LV���FDUU\���

Page 17: Linux assembly language programming

7KH�IRXUWK�FROXPQ�DOVR�WRWDOV�WZR��ZKLFK�LV�DJDLQ���FDUU\���

7KLV�LV�H[DFWO\�KRZ�D�FRPSXWHU�DGGV�WKLUWHHQ�DQG�VL[��:H�FDQ�FKHFN�WKDW�WKH�UHVXOW�LV�QLQHWHHQ�������� ����������� ����������� ����������� ����������� ���� ����

7DEOH������%LQDU\�6\VWHP�3ODFH�9DOXHV��V ��V �V �V �V �V %LQDU\ 'HFLPDO� � � � � � � �� � � � � � �� �� � � � � � �� �� � � � � � ��� �� � � � � � ��� �� � � � � � ��� �� � � � � � ��� �� � � � � � ���� �� � � � � � ���� �� � � � � � ���� ��� � � � � � ���� ��� � � � � � ���� ��� � � � � � ���� ��� � � � � � ���� ��� � � � � � ���� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��� � � � � � ����� ��

Page 18: Linux assembly language programming

������%LQDU\�6XEWUDFWLRQ6XSSRVH�ZH�ZDQW�WR�VXEWUDFW�ILYH�IURP�WZHOYH�

,W�UHTXLUHV�ERUURZLQJ�

'RLQJ�WKH�VXEWUDFWLRQ�LQ�WKH�ILUVW�FROXPQ�\LHOGV

,Q�WKH�WZRV�FROXPQ�ZH�VXEWUDFW�]HUR�IURP�RQH�

7KH�IRXUV�FROXPQ�UHTXLUHV�DQRWKHU�ERUURZLQJ�

7KLV�LV�KRZ�WR�VXEWUDFW�ILYH�IURP�WZHOYH�LQ�ELQDU\��%XW�LW�LV�QRW�DW�DOO�KRZ�FRPSXWHUV�GR�WKLV�DULWKPHWLF��&RPSXWHUV�GR�VXEWUDFWLRQV�XVLQJ�QHJDWLYHV�OLNH�WKLV�6LQFH�WKH�PHWKRG�WKDW�ZH�OHDUQHG�LQ�VFKRRO�IRU�DGGLQJ�D�QHJDWLYH�ZDV�WR�FRQYHUW�LW�WR�D�VXEWUDFWLRQ��WKLV�PLJKW�VHHP�WR�EH�D�GLVWLQFWLRQ�ZLWKRXW�D�GLIIHUHQFH��+RZHYHU��FRPSXWHUV�XVH�D�GLIIHUHQW�UHSUHVHQWDWLRQ�IRU�QHJDWLYHV�WKDQ�MXVW�VWLFNLQJ�D�PLQXV�VLJQ�LQ�IURQW�RI�WKH�QXPEHU��VR�WKHUH�UHDOO\�LV�D�GLIIHUHQFH��5HSUHVHQWDWLRQ�RI�QHJDWLYH�QXPEHUV�LV�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ�����

� � � � � � ����� ��� � � � � � ����� ��� � � � � � ������ ��� � � � � � ������ ��

Page 19: Linux assembly language programming

������&RQYHUVLRQ�WR�%LQDU\)LUVW��ZH�REVHUYH�WKDW�ZH�FDQ�GHWHUPLQH�ZKHWKHU�DQ\�ELQDU\�QXPEHU�LV�HYHQ�RU�RGG�E\�H[DPLQLQJ�LWV�RQHV�GLJLW��)RU�H[DPSOH�����LV�RGG�DQG�LWV�ELQDU\�UHSUHVHQWDWLRQ�HQGV�LQ�D���)XUWKHU6R�LI�ZH�DUH�ZRUNLQJ�ZLWK�QLQHWHHQ�XVLQJ�EDVH�WHQ��ZH�KDYH6XSSRVH�ZH�FRQYHUW����WR�ELQDU\��7KH���LQ�WKH�DERYH�HTXDWLRQ�LV�WKH�XQLWV�GLJLW�RI���V�ELQDU\�IRUP��:H�JRW�WKH���E\�GLYLGLQJ�E\���

5HSHDWLQJ�WKH�SURFHVV�DQG�ZULWLQJ�GRZQ�WKH�UHPDLQGHU�HDFK�WLPH�JLYHV�XV�WKH�UHVW�RI�WKH�GLJLWV�

7KH�FRQYHUVLRQ�LV�GRQH�E\�GLYLGLQJ�E\���UHSHDWHGO\��(DFK�UHPDLQGHU�IXUQLVKHV�RQH�ELQDU\�GLJLW�����0HPRU\�DV�D�5HFWDQJOH�RI�%LWV2Q�DOO�HOHFWURQLF�FRPSXWHUV��PDLQ�PHPRU\�LV�RUJDQL]HG�DV�D�UHFWDQJOH�RI�ELWV��)LJXUH�����VKRZV�D�WLQ\�VL[�ELW�E\�IRXU�ELW�PHPRU\��$V�VKRZQ�LQ�WKH�ILJXUH��PHPRU\�LV�GLYLGHG�ZLGWKZLVH�LQWR�URZV��(DFK�URZ�LV�FDOOHG�D�ZRUG��7UDQVIHUV�RI�GDWD�WR�DQG�IURP�FRPSXWHU�PHPRU\�DUH�GRQH�D�ZRUG�DW�D�WLPH��RU�LQ�PXOWLSOHV�RI�ZRUGV�

)LJXUH������0HPRU\�ZLWK�6L[�)RXU�%LW�:RUGV

Page 20: Linux assembly language programming

7KH�QXPEHU�RI�ELWV�LQ�D�ZRUG�LV�FDOOHG�WKH�ZRUG�VL]H��7KH�ZRUG�VL]H�RI�WKH�PHPRU\�LQ�)LJXUH�����LV�IRXU�ELWV��$�FRPSXWHU�ZLWK�VXFK�D�PHPRU\�ZRXOG�EH�VDLG�WR�KDYH�IRXU�ELW�ZRUGV��(DFK�ZRUG�LQ�WKLV�PHPRU\�KROGV�D�QXPEHU�UHSUHVHQWDEOH�LQ�IRXU�ELQDU\�GLJLWV��L�H��D�QXPEHU�IURP���WKURXJK�����6R�IRU�H[DPSOH��D�SURFHVVRU�UHTXHVWLQJ�WKH�ZRUG�ORFDWHG�DW�WKH�DGGUHVV���ZRXOG�EH�JLYHQ�WKH�QXPEHU����:KHQ�GHVLJQLQJ�D�FKHVV�SOD\LQJ�FRPSXWHU��IRU�H[DPSOH��LW�PLJKW�EH�D�JRRG�LGHD�WR�XVH����ELW�ZRUGV��RQH�ELW�IRU�HDFK�ORFDWLRQ�RQ�WKH�FKHVV�ERDUG�:RUGV�LQ�FRPSXWHU�PHPRU\�DUH�QXPEHUHG�FRQVHFXWLYHO\��VWDUWLQJ�IURP�]HUR��7KHVH�QXPEHUV�DUH�FDOOHG�DGGUHVVHV��,Q�)LJXUH������WKH�DGGUHVVHV�DUH�WKH�LQWHJHUV�IURP���WKURXJK����$�FRPSXWHU�ZLWK�Q�ZRUGV�ZLOO�KDYH�DGGUHVVHV�IURP���WKURXJK�Q����:KHQ�UHTXHVWLQJ�GDWD�WUDQVIHUV�LQWR�RU�RXW�IURP�PHPRU\��FRPSXWHU�SURFHVVRUV�XVH�DGGUHVVHV�WR�VSHFLI\�ZKLFK�GDWD�ZRUGV�DUH�WR�EH�WUDQVIHUUHG�7KH�WRWDO�FDSDFLW\�RI�D�FRPSXWHU�PHPRU\�LV�WKH�QXPEHU�RI�ZRUGV�LQ�WKH�PHPRU\�WLPHV�WKH�ZRUG�VL]H��OHQJWK�WLPHV�ZLGWK��7KH�OLWWOH�PHPRU\�LQ�)LJXUH�����KDV�D�FDSDFLW\�RI����ELWV��0HPRU\�FDSDFLW\�LV�RIWHQ�PHDVXUHG�LQ�E\WHV�LQVWHDG�RI�ELWV��2QH�E\WH�RI�PHPRU\�LV�WKH�VDPH�DV�HLJKW�ELWV�&RPSXWHUV�EDVHG�RQ�,QWHO�SURFHVVRUV�XVH�HLJKW�ELW�ZRUGV��$�ZDUQLQJ�QRWH�LV�LQ�RUGHU�KHUH��%HFDXVH�GRFXPHQWDWLRQ�IURP�,QWHO�DQG�0LFURVRIW�XVH�WKH�WHUP�ZRUG�WR�UHIHU�WR�D����ELW�REMHFW��WKLV�XVDJH�KDV�EHFRPH�IDLUO\�VWDQGDUG��7KLV�LV�XQIRUWXQDWH��,W�LV�EHWWHU�WR�OHDYH�WKH�WHUP�ZLWK�LWV�PDFKLQH�GHSHQGHQW�PHDQLQJ��,Q�DQ\�FDVH��WKH�QXPEHU�RI�E\WHV�LQ�WKH�PHPRU\�RI�DQ�,QWHO�EDVHG�PDFKLQH�LV�WKH�VDPH�DV�WKH�QXPEHU�RI�DGGUHVVHV�%HFDXVH�WKH�QXPEHU�RI�ZRUGV�LQ�D�FRPSXWHU�PHPRU\�LV�W\SLFDOO\�D�ODUJH�SRZHU�RI�WZR�RU�D�VPDOO�PXOWLSOH�WKHUHRI��VHYHUDO�QDPHV�IRU�WKHVH�ODUJH�SRZHUV�RI�WZR�KDYH�EHHQ�DGDSWHG�IURP�WKH�PHWULF�V\VWHP��)RU�H[DPSOH������LV������DQG������LV�DSSUR[LPDWHO\�������,Q�WKH�PHWULF�V\VWHP�WKH�OHWWHU�.��IURP�NLOR��LV�XVHG�WR�VWDQG�IRU�������,Q�UHIHUHQFH�WR�FRPSXWHU�PHPRU\��NLOR�PHDQV�������2WKHU�PHWULF�SUHIL[HV�ZKLFK�KDYH�EHHQ�DGDSWHG�DUH�VKRZQ�LQ�WKH�IROORZLQJ�WDEOH�

7KH�XVH�RI�WKH�DSSUR[LPDWH�HTXDOLWLHV�LQ�WKLV�WDEOH�PDNHV�SRVVLEOH�VLPSOLILHG�FRPSXWDWLRQV�LQYROYLQJ�ODUJH�

([DFW�9DOXH 6\PERO 3UHIL[ $SSUR[LPDWH�9DOXH��� ����� . NLOR WKRXVDQG��� ��������� 0 PHJD PLOOLRQ��� ������������� * JLJD ELOOLRQ��� ����������������� 7 WHUD WULOOLRQ/DUJH�3RZHUV�RI�7ZR

Page 21: Linux assembly language programming

SRZHUV�RI�WZR��)RU�H[DPSOH��WKH�PD[LPXP�PHPRU\�FDSDFLW\�RI�DQ�,%0�$7�FRPSXWHU�LV�����E\WHV�RI�PHPRU\��7R�H[SUHVV�WKLV�DPRXQW�LQ�PRUH�IDPLOLDU�WHUPV��ZH�PD\�EUHDN�GRZQ�����DV�IROORZV�

7KLV�LV�DSSUR[LPDWHO\����PLOOLRQ�E\WHV��6LQFH����� ��.��.� ���0HJ��WKH�H[DFW�DPRXQW�RI�PHPRU\�LV�O��0HJDE\WHV�RU������������E\WHV�����7KH�+H[DGHFLPDO�6\VWHP%DVH�VL[WHHQ�LV�LPSRUWDQW�EHFDXVH�LW�LV�HDVLHU�WR�UHDG�DQG�ZULWH�WKDQ�ELQDU\��EXW�LV�QRQHWKHOHVV�UHDGLO\�FRQYHUWLEOH�WR�DQG�IURP�ELQDU\�%DVH�VL[WHHQ�LV�DOVR�WKH�ILUVW�EDVH�ZH�KDYH�FRQVLGHUHG�ZKLFK�LV�JUHDWHU�WKDQ�WHQ��,QVWHDG�RI�SXWWLQJ�VRPH�QXPHUDOV�RXW�RI�ZRUN��EDVH�VL[WHHQ�UHTXLUHV�WKH�HPSOR\PHQW�RI�DGGLWLRQDO�QXPHUDOV��6LQFH�QXPHUDOV�DUH�QHHGHG�IRU�DOO�QXPEHUV�OHVV�WKDQ�VL[WHHQ�WKLV�PHDQV�SRVLWLRQV�DUH�RSHQ�IRU�WKH�QXPEHUV�WHQ��HOHYHQ��WZHOYH��WKLUWHHQ��IRXUWHHQ��DQG�ILIWHHQ��,W�LV�WKH�FXVWRP�WR�ILOO�WKHVH�SRVLWLRQV�ZLWK�WKH�OHWWHUV�$��%��&��'��(��DQG�)�6R�LQ�EDVH�VL[WHHQ��FRXQWLQJ�JRHV�OLNH�WKLV�����������������������������$��%��&��'��(��)�������������������������������������������$���%���&���'���(���)������DQG�VR�RQ��6HH�7DEOH�����

7DEOH������+H[DGHFLPDO�6\VWHP�3ODFH�9DOXHV��V �V +H[DGHFLPDO 'HFLPDO� � � �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� � � �� $ $ ��� % % ��� & & ��� ' ' ��� ( ( ��� ) ) ��� � �� ��� � �� ��� � �� ��� � �� ��� � �� ��� � �� ��� � �� ��� � �� ��� � �� ��� � �� ��� $ �$ ��� % �% ��� & �& ��� ' �' ��

Page 22: Linux assembly language programming

7KHUH�LV�YDOXH�LQ�EHLQJ�DEOH�WR�DGG�DQG�VXEWUDFW�LQ�KH[��'HEXJJHUV�JHQHUDOO\�GLVSOD\�UHJLVWHUV�LQ�KH[��DQG�LW�LV�KDQG\�WR�EH�DEOH�WR�FKHFN�WKH�DULWKPHWLF�EHLQJ�GLVSOD\HG�ZLWKRXW�KDYLQJ�WR�FRQYHUW�EDFN�WR�EDVH�WHQ�$GGLWLRQ�DQG�VXEWUDFWLRQ�DUH�HDV\�WR�GR�LQ�KH[�LI�ZH�UHPHPEHU�WKDW�FDUU\LQJ�DQG�ERUURZLQJ�DUH�GRQH�ZLWK����������$GGLWLRQ�LQ�+H[7R�DGG

ZH�VWDUW�ZLWK�WZHOYH�SOXV�HLJKW��ZKLFK�LV�WZHQW\��ZKLFK�LV���+��ZKLFK�LV���FDUU\���

��SOXV�HOHYHQ�SOXV�VHYHQ�LV�QLQHWHHQ��ZKLFK�LV���+��ZKLFK�LV���FDUU\���

��������$� �HLJKWHHQ��ZKLFK�LV���+��ZKLFK�LV���FDUU\���

)LQDOO\�������� ���

������6XEWUDFWLRQ�LQ�+H[7R�VXEWUDFW

� ( �( ��� ) �) ��� � �� ��� � �� ��

Page 23: Linux assembly language programming

ZH�VWDUW�E\�ERUURZLQJ�

�&�²�(�LV�WZHQW\�HLJKW�PLQXV�IRXUWHHQ��ZKLFK�LV�IRXUWHHQ�

$�²���LV�WHQ�PLQXV�IRXU�LV���

$JDLQ�ERUURZLQJ

�����$�LV�WZHQW\�WKUHH�PLQXV�WHQ��ZKLFK�LV�WKLUWHHQ�RU�'�

)LQDOO\������� ���

������&RQYHUVLRQ�WR�+H[

Page 24: Linux assembly language programming

7R�FRQYHUW�D�QXPEHU�LQWR�EDVH�VL[WHHQ��ZH�FDQ�GLYLGH�E\����DV�PDQ\�WLPHV�DV�QHFHVVDU\��6XSSRVH�ZH�FRQYHUW������LQWR�KH[DGHFLPDO�

7R�GHPRQVWUDWH�WKH�HDV\�FRQYHUWLELOLW\�RI�EDVH�WZR�LQWR�EDVH�VL[WHHQ��ZH�DJDLQ�FRQVLGHU�WKH�QXPEHU�������RQO\�WKLV�WLPH�ZH�FRQYHUW�LW�LQWR�EDVH�WZR�

7KH�IDFW�WKDW�GLYLGLQJ�E\���IRXU�WLPHV�LV�HVVHQWLDOO\�WKH�VDPH�WKLQJ�DV�GLYLGLQJ�E\����VXJJHVWV�WKDW�IRXU�VWDJHV�RI�WKLV�FRQYHUVLRQ�PXVW�FRUUHVSRQG�WR�RQH�VWDJH�RI�KH[DGHFLPDO�FRQYHUVLRQ��,I�ZH�JURXS�WKH�ELQDU\�GLJLWV�LQWR�IRXUV��ZH�GR�LQ�IDFW�REVHUYH�WKLV�UHODWLRQVKLS�

7KHVH�OXPSV�RI�IRXU�GLJLWV��ZKHQ�WUHDWHG�DV�LQGLYLGXDO�QXPEHUV������������DQG�������JLYH�XV�WKH�KH[DGHFLPDO�GLJLWV����(��DQG����7KLV�LV�WKH�EDVH�VL[WHHQ�UHSUHVHQWDWLRQ�RI�RQH�WKRXVDQG��,W�LV�FOHDU�KRZ�WR�FRQYHUW�LQ�WKH�RWKHU�GLUHFWLRQ�DV�ZHOO��7KH�FRQYHUVLRQ�EHWZHHQ�WKH�WZR�LV�HDV\�HQRXJK�WKDW�LW�FDQ�EH�GRQH�ZLWKRXW�WKLQNLQJ��6HH�7DEOH������7KLV�PDNHV�LW�SRVVLEOH�WR�XVH�KH[DGHFLPDO�DV�D�KXPDQ�UHDGDEOH�IRUP�RI�ELQDU\��D�NLQG�RI�KLJKOHYHO�PDFKLQH�ODQJXDJH�����&RQVLGHU�WKH�IROORZLQJ�WZR�UHSUHVHQWDWLRQV�RI�WKH�VDPH�QXPEHU�

�� ���� ����� ( �

���� ���� ���� ���� ���� ���� ���� ���� ����% � � � � � $ � �

Page 25: Linux assembly language programming

6XSSRVH�\RX�KDG�WR�UHDG�RQH�RI�WKHVH�WR�D�KDUGZDUH�VXSSRUW�SHUVRQ�RYHU�WKH�SKRQH��RU�FRS\�LW�RQWR�D�SRVWFDUG��,V�WKHUH�DQ\�GRXEW�WKDW�XVLQJ�KH[�ZRXOG�EH�HDVLHU�DQG�OHVV�OLDEOH�WR�HUURU"&RPSXWHU�SURJUDPV�RULJLQDOO\�FRQVLVWHG�RI�OLQH�DIWHU�OLQH�RI�ELQDU\�FRGH��7KHUH�LV�D�ELWWHUVZHHW�LURQ\�KHUH��)LOOLQJ�RXW�FRGLQJ�VKHHWV�ZLWK�]HURV�DQG�RQHV�ZDV�D�MRE�W\SLFDOO\�GRQH�E\�ZRPHQ��$V�D�UHVXOW��PDQ\�ZRPHQ�JRW�LQ�RQ�WKH�YHU\�EHJLQQLQJ�RI�WKH�FRPSXWHU�SURJUDPPLQJ�ILHOG�������:K\�QRW�2FWDO"2FWDO�QXPEHUV�FDQ�EH�FRQYHUWHG�EDFN�DQG�IRUWK�IURP�ELQDU\�LQ�WKH�VDPH�ZD\�DV�KH[�QXPEHUV��PHUHO\�JURXSLQJ�E\�WKUHHV�LQVWHDG�RI�IRXUV��2FWDO�DOVR�KDV�WKH�DGYDQWDJH�RYHU�KH[�LQ�WKDW�QR�DOSKDEHWLF�QXPHUDOV�DUH�QHHGHG��+RZHYHU��WKH�LQFUHDVLQJO\�ZLGHVSUHDG�XVH�RI�WKH�E\WH�DV�WKH�IXQGDPHQWDO�XQLW�RI�PHPRU\�KDV�OHG�WR�D�GHFUHDVH�LQ�WKH�LPSRUWDQFH�RI�RFWDO�����%DVH�'LVWLQJXLVKLQJ�1RWDWLRQV6LQFH�DOO�WKH�GLJLWV�LQ�GHFLPDO�DUH�YDOLG�LQ�KH[DGHFLPDO��LW�LV�QRW�SRVVLEOH�WR�GHWHUPLQH�ZLWKRXW�DGGLWLRQDO�LQIRUPDWLRQ�ZKHWKHU�QXPHUDWLRQ��VXFK�DV�������LV�LQWHQGHG�DV�GHFLPDO�RU�KH[��$�FRPPRQ�FRQYHQWLRQ�IRU�LQGLFDWLQJ�KH[DGHFLPDO�LV�WKH�XVH�RI�DQ�DSSHQGHG�+��:KHQ�WKLV�FRQYHQWLRQ�LV�XVHG�����MXVW�PHDQV�ILIW\��EXW���+�PHDQV�ILIW\�LQ�KH[��L�H���HLJKW\��2FFDVLRQDOO\��SDUWLFXODUO\�ZLWK�DVVHPEOHUV��%�DQG�'�DUH�DSSHQGHG�WR�LQGLFDWH�ELQDU\�DQG�GHFLPDO��$SSHQGLQJ�2�IRU�RFWDO�ZRXOG�REYLRXVO\�QRW�EH�D�JRRG�LGHD��,Q�WKH�&�ODQJXDJH��RFWDO�LV�LQGLFDWHG�E\�SUHSHQGLQJ�D���DQG�KH[DGHFLPDO�LV�LQGLFDWHG�E\�SUHSHQGLQJ�D��[��7KLV�ERRN�SODFHV�SULPDU\�UHOLDQFH�RQ�GHFLPDO��KH[DGHFLPDO��DQG�ELQDU\�QXPHUDWLRQ��7R�GLVWLQJXLVK�WKHVH�EDVHV��WKH�IROORZLQJ�FRQYHQWLRQV�ZLOO�EH�XVHG�

z +H[DGHFLPDO��H[FHSW�LQ�&�SURJUDPV��ZLOO�DOZD\V�EH�LQGLFDWHG�E\�DQ�DSSHQGHG�+���,Q�DGGLWLRQ��EHFDXVH�RI�D�SUREOHP�GLVFXVVHG�LQ�VHFWLRQ�������KH[�QXPHUDWLRQ�XVHG�LQ�WKH�DVVHPEO\�ODQJXDJH�ZLOO�DOVR�KDYH�D�SUHSHQGHG����z %LQDU\�ZLOO�EH�LQGLFDWHG�E\�JURXSLQJ�GLJLWV�LQWR�FOXPSV�RI�IRXU��VHSDUDWHG�E\�VSDFHV�z %DVH�WHQ�QXPHUDWLRQ�LV�WKH�GHIDXOW��,W�LV�DVVXPHG�IRU�DOO�QXPHUDWLRQ�ZKRVH�EDVH�LV�QRW�RWKHUZLVH�LQGLFDWHG����� �)UDFWLRQV�LQ�2WKHU�%DVHV

7DEOH������+H[�%LQDU\�&RQYHUVLRQ%LQDU\ +H[DGHFLPDO 'HFLPDO���� � ����� � ����� � ����� � ����� � ����� � ����� � ����� � ����� � ����� � ����� $ ������ % ������ & ������ ' ������ ( ������ ) ��

Page 26: Linux assembly language programming

0XFK�FRPSXWDWLRQ�LQYROYLQJ�IUDFWLRQV�LV�GRQH�XVLQJ�VFLHQWLILF�QRWDWLRQ��%HFDXVH�VFLHQWLILF�QRWDWLRQ�LQYROYHV�ERWK�GHFLPDO�IUDFWLRQV�DQG�H[SOLFLW�SRZHUV�RI�WHQ��LW�DOORZV�IRU�IUHHGRP�LQ�WKH�ORFDWLRQ�RI�WKH�GHFLPDO�SRLQW��)RU�H[DPSOH�&RQVHTXHQWO\�VFLHQWLILF�QRWDWLRQ�LV�VRPHWLPHV�UHIHUUHG�WR�DV�IORDWLQJ�SRLQW�QRWDWLRQ��7KH�IORDWLQJ�SRLQW�SURSHUW\�RI�WKH�UHSUHVHQWDWLRQ�LV�D�UHVXOW�RI�WKH�IDFW�WKDW�DOO�SDUWV�RI�WKH�UHSUHVHQWDWLRQ��LQFOXGLQJ�WKH�IUDFWLRQDO�SDUW��XVH�SRZHUV�RI�WHQ��,Q�RUGHU�WR�WDNH�DGYDQWDJH�RI�WKH�IORDWLQJ�SRLQW�SURSHUW\�LQ�FRPSXWHU�FRPSXWDWLRQV�ZKLFK�XVH�WKH�ELQDU\�V\VWHP��DOO�IUDFWLRQV�DQG�H[SOLFLW�SRZHUV�PXVW�EH�ELQDU\�LQVWHDG�RI�GHFLPDO�1RQGHFLPDO�SODFHKROGLQJ�IUDFWLRQV�ZHUH�XVHG�E\�WKH�%DE\ORQLDQV�DQG�SHUVLVW�WRGD\�LQ�RXU�WLPH�DQG�DQJOH�XQLW�V\VWHPV��ZKHUH�ZH�VHH�PLQXWHV�DQG�VHFRQGV�DV�EDVH����IUDFWLRQV�'HFLPDO�IUDFWLRQV�RI�FRXUVH�DUH�RXU�HYHU\GD\�VWDQGDUG��)RU�H[DPSOH�:H�ILQG�WKLV�EDVH�WHQ�IUDFWLRQ�XVLQJ�ORQJ�GLYLVLRQ�

6XSSRVH�ZH�ZDQW�WR�ILQG�RQH�HLJKWK�DV�D�SHQWLPDO�IUDFWLRQ��:H�FDQ�XVH�ORQJ�GLYLVLRQ�LQ�EDVH�ILYH�XVLQJ�WKH�SHQWLPDO�PXOWLSOLFDWLRQ�WDEOH�ZKHUH�QHFHVVDU\���7KH�SHQWLPDO�UHSUHVHQWDWLRQ�RI�HLJKW�LV�����

7KLV�LV�D�UHSHDWLQJ�IUDFWLRQ�VLPLODU�WR� �LQ�WKH�GHFLPDO�V\VWHP��6R�RQH�HLJKWK�LQ�WKH�SHQWLPDO�V\VWHP�LV

Page 27: Linux assembly language programming

DQ�LQILQLWHO\�UHSHDWLQJ�IUDFWLRQ��,WV�PHDQLQJ�UHSUHVHQWHG�XVLQJ�RUGLQDU\�GHFLPDO�QRWDWLRQ�LV�WKDW,I�ZH�XVH�ORQJ�GLYLVLRQ�WR�JHW�WKH�KH[DGHFLPDO�IUDFWLRQ�ZH�JHW�D�ILQLWH�UHSUHVHQWDWLRQ�

7KLV�LV�FHUWDLQO\�FRUUHFW�VLQFH� ��,Q�EDVH�WZR�WKH�VDPH�GLYLVLRQ�ORRNV�OLNH�WKLV�

7KLV�LV�FRUUHFW�VLQFH,Q�HDUO\�,QWHO�V\VWHPV��FRPSXWDWLRQV�EDVHG�RQ�IORDWLQJ�SRLQW�QXPEHUV�ZHUH�GRQH�RQ�VHSDUDWH�SURFHVVRUV�VXFK�DV�WKH��������6LQFH�WKH������WKHVH�IORDWLQJ�SRLQW�XQLWV�ZHUH�LQFRUSRUDWHG�LQWR�WKH�PDLQ�SURFHVVRU��,Q�&��D�SURJUDPPHU�PD\�VHQG�FRPSXWDWLRQV�WR�WKH�IORDWLQJ�SRLQW�XQLW�E\�XVLQJ�D�IORDWLQJ�SRLQW�GDWD�W\SH�VXFK�DV�GRXEOH����� �&RQYHUWLQJ�)UDFWLRQV,Q�WKH�SUHYLRXV�VHFWLRQ�ZH�XVHG�ORQJ�GLYLVLRQ�WR�ILQG�D�SODFHKROGLQJ�IUDFWLRQ��JLYHQ�WKH�QXPHUDWRU�DQG�GHQRPLQDWRU�DV�LQWHJHUV��)RU�H[DPSOH��WR�ILQG�D�EDVH�WZR�SODFH�KROGLQJ�IUDFWLRQ��ZH�FRXOG�GR�ORQJ�GLYLVLRQ�LQ�EDVH�WZR��,I�ZH�DUH�JLYHQ�LQVWHDG�D�SODFHKROGLQJ�IUDFWLRQ�LQ�VRPH�RWKHU�EDVH��ZH�FDQ�XVH�D�PXOWLSOLFDWLYH�SURFHVV�WR�GR�WKH�FRQYHUVLRQ��)RU�H[DPSOH��VXSSRVH�ZH�DUH�JLYHQ�WKH�GHFLPDO�IUDFWLRQ����������«��DQG�ZH�ZLVK�WR�FRQYHUW�WKDW�LQWR�D�ELQDU\�IUDFWLRQ��/HW�E��E��E��«�EH�WKH�XQNQRZQ�GLJLWV�LQ�RXU�ELQDU\�IUDFWLRQ�,I�ZH�XVH�WKH�HTXDOLW\ZH�FDQ�GHWHUPLQH�WKHLU�YDOXHV�DV�IROORZV��6XSSRVH�ZH�GRXEOH�ERWK�VLGHV�RI�WKLV�HTXDWLRQ�7KH�LQWHJHU�SDUWV�RI�ERWK�VLGHV�PXVW�DJUHH��7KH�LQWHJHU�SDUW�RI�WKH�OHIW�VLGH�LV�]HUR��VR�E�� ����+HQFH�ZH�KDYH�RXU�ILUVW�GLJLW�DQG�ZH�DOVR�KDYH�WKH�HTXDWLRQ,I�ZH�GRXEOH�WKLV�HTXDWLRQ��ZH�JHW

Page 28: Linux assembly language programming

$JDLQ�WKH�LQWHJHU�SDUWV�RI�ERWK�VLGHV�PXVW�DJUHH��VR�E�� ����6XEWUDFWLQJ��� �E��IURP�WKLV�HTXDWLRQ�\LHOGV�WKH�HTXDWLRQ&RQWLQXLQJ�LQ�WKLV�ZD\�ZH�JHW�E�� ����E�� ����E�� ����E�� ����HWF��+HQFH�WKH�ELQDU\�IRUP�RI���������LV:H�KDYH�MXVW�IRXQG�D�ELQDU\�IUDFWLRQ�IURP�D�GHFLPDO�IUDFWLRQ�E\�PXOWLSO\LQJ�E\���UHSHDWHGO\��7R�ILQG�D�SHQWLPDO�IUDFWLRQ�IURP�D�GHFLPDO�IUDFWLRQ��ZH�EHJLQ�ZLWK�D�VLPLODU�HTXDWLRQ�DQG�PXOWLSO\�E\���UHSHDWHGO\�%\�GHILQLWLRQ��WKH�EDVH�ILYH�FRHIILFLHQWV�PDNH�WKLV�HTXDWLRQ�WUXH�0XOWLSO\LQJ�WKLV�HTXDWLRQ�E\���\LHOGV7KH�LQWHJHU�SDUW�RI�ERWK�VLGHV�PXVW�DJUHH��+HQFH�E�� ����6XEWUDFWLQJ��� �E��\LHOGV�0XOWLSO\LQJ�WKLV�HTXDWLRQ�E\���\LHOGV)URP�WKLV�ZH�JHW�E�� ���DQG&RQWLQXLQJ�LQ�WKLV�ZD\��ZH�JHW�E�� ����E�� ����E�� ����E�� ���HWF��6R�WKH�SHQWLPDO�HTXLYDOHQW�LV����������«��)XUWKHU�5HDGLQJ1XPEHU�:RUGV�DQG�1XPEHU�6\PEROV��$�&XOWXUDO�+LVWRU\�RI�1XPEHUV��.DUO0HQQLQJHU��'RYHU�%RRNV�������&KDSWHU����/2*,&�&,5&8,76�$1'�&20387$7,21(OHFWURQLF�FRPSXWHUV�DUH�PDGH�RI�ORJLF�FLUFXLWV��7KH�DLP�RI�WKLV�FKDSWHU�LV�WR�H[SODLQ�KRZ�WKH�EDVLF�FRPSXWHU�IXQFWLRQV�RI�DULWKPHWLF�DQG�VWRUDJH�FDQ�EH�GRQH�XVLQJ�WKHVH�FLUFXLWV��,W�FXOPLQDWHV�LQ�D�EULHI�GLVFXVVLRQ�RI�WKH�$''�DQG�029�FRPPDQGV�7KH�PRVW�EDVLF�ORJLF�FLUFXLWV�DUH�FDOOHG�JDWHV��*DWHV�DUH�FRQWUROOHU�FLUFXLWV��7KH�VLPSOHVW�ORJLF�JDWH�LV�WKH�127�JDWH��,Q�WKH�QH[W�VHFWLRQ��LW�LV�VKRZQ�KRZ�D�127�JDWH�FDQ�FRQWURO�D�IODVKOLJKW�����7KH�127�*DWH

Page 29: Linux assembly language programming

7KH�VLPSOH�IODVKOLJKW�FLUFXLW�VKRZQ��LQ�)LJXUH������LV�FRQWUROOHG�E\�WKH�VZLWFK�DW�WKH�WRS��ZKLFK�LV�VKRZQ�LQ�WKH�RSHQ�SRVLWLRQ��7KH�QHJDWLYH�HQG�RI�WKH�EDWWHU\�LV�FRQQHFWHG�GLUHFWO\�WR�WKH�EXOE��EXW�WKH�SRVLWLYH�HQG�LV�RQO\�FRQQHFWHG�WR�WKH�EXOE�E\�ZD\�RI�WKH�VZLWFK��6R�ZKHQ�WKH�VZLWFK�LV�RSHQ��FXUUHQW�ZLOO�QRW�IORZ�DQG�WKH�EXOE�LV�RII��:KHQ�WKH�VZLWFK�LV�FORVHG��FXUUHQW�FDQ�IORZ�DQG�WKH�EXOE�FRPHV�RQ��7KH�FRQWURO�LV�PHFKDQLFDO�)LJXUH������$�6LPSOH�)ODVKOLJKW

������/RJLF�*DWH�7HUPLQDOV$�ORJLF�JDWH�LV�D�FLUFXLW�ZKLFK�ZRUNV�OLNH�D�VZLWFK��)LJXUH�����VKRZV�D�JHQHULF�ORJLF�JDWH�KRRNHG�XS�WR�D�EDWWHU\��$V�VKRZQ�LQ�WKH�ILJXUH��D�ORJLF�JDWH�KDV�IRXU�RU�PRUH�WHUPLQDOV�

)LJXUH������$�*HQHULF�/RJLF�*DWH

�� 2XWSXW�7HUPLQDO����7KLV�WHUPLQDO�LV�VZLWFKHG�VR�WKDW�LW�LV�FRQQHFWHG�HLWKHU�WR�WKH�SRVLWLYH�RU�WKH�QHJDWLYH�SRZHU�WHUPLQDO��7KH�VZLWFKLQJ�LV�GRQH�E\�VROLG�VWDWH�HOHFWURQLFV�LPEHGGHG�LQ�VLOLFRQ�DQG�LQYROYHV�QR�PRYLQJ�SDUWV��� 3RVLWLYH�3RZHU�7HUPLQDO����7KLV�WHUPLQDO�LV�DOZD\V�FRQQHFWHG�WR�WKH�SRVLWLYH�EDWWHU\�RU�SRZHU�VXSSO\�WHUPLQDO��� 1HJDWLYH�3RZHU�7HUPLQDO����7KLV�WHUPLQDO�LV�DOZD\V�FRQQHFWHG�WR�WKH�QHJDWLYH�EDWWHU\�RU�SRZHU�VXSSO\�WHUPLQDO��� ,QSXW�7HUPLQDO����$�ORJLF�JDWH�KDV�RQH�RU�PRUH�LQSXW�WHUPLQDOV��7KHVH�WHUPLQDOV�FDUU\�WKH�LQSXW�

Page 30: Linux assembly language programming

VLJQDOV�ZKLFK�GHWHUPLQH�ZKHWKHU�WKH�RXWSXW�WHUPLQDO�LV�VZLWFKHG�WR�WKH�SRVLWLYH�RU�WKH�QHJDWLYH�SRZHU�WHUPLQDO��'LIIHUHQW�W\SHV�RI�ORJLF�JDWHV�PDNH�WKLV�GHWHUPLQDWLRQ�LQ�GLIIHUHQW�ZD\V�/RJLF�9DOXH�&RQYHQWLRQV%HFDXVH�WKH�WZR�SRZHU�WHUPLQDOV�RQ�WKH�ORJLF�JDWH�DUH�DOZD\V�FRQQHFWHG�WR�WKH�FRUUHVSRQGLQJ�WHUPLQDOV�RQ�WKH�EDWWHU\�RU�SRZHU�VXSSO\��WKH�RXWSXW�WHUPLQDO�DOZD\V�VXSSOLHV�D�FRQQHFWLRQ�WR�HLWKHU�WKH�SRVLWLYH�RU�WKH�QHJDWLYH�EDWWHU\�RU�SRZHU�VXSSO\�WHUPLQDO��)RU�FLUFXLWV�LQ�WKLV�ERRN

z $�JDWH�WHUPLQDO�FRQQHFWHG�GLUHFWO\�RU�LQGLUHFWO\�WR�WKH�SRVLWLYH�EDWWHU\�RU�SRZHU�VXSSO\�WHUPLQDO�LV�GHVFULEHG�DV�EHLQJ��DW�ORJLF����z $�JDWH�WHUPLQDO�FRQQHFWHG�GLUHFWO\�RU�LQGLUHFWO\�WR�WKH�QHJDWLYH�EDWWHU\�RU�SRZHU�VXSSO\�WHUPLQDO�LV�GHVFULEHG�DV�EHLQJ��DW�ORJLF����

%HFDXVH�WKH�LQSXW�WHUPLQDOV�DUH�JHQHUDOO\�FRQQHFWHG�GLUHFWO\�RU�LQGLUHFWO\�WR�WKH�EDWWHU\�RU�SRZHU�VXSSO\�WHUPLQDOV�MXVW�OLNH�RXWSXW�WHUPLQDOV��WKH\�FDQ�DOVR�EH�GHVFULEHG�DV�EHLQJ�DW�ORJLF���RU�DW�ORJLF����7KH�IDFW�WKDW�WKH�LQSXW�WHUPLQDOV�DUH�GHVLJQHG�WR�EH�DW�ORJLF���RU�ORJLF���KDV�DV�D�IXUWKHU�FRQVHTXHQFH�WKDW�WKH�RXWSXW�RI�RQH�ORJLF�JDWH�FDQ�EH�FRQQHFWHG�WR�WKH�LQSXW�RI�DQRWKHU�ZLWK�SUHGLFWDEOH�UHVXOWV�������%HKDYLRU�RI�WKH�127�*DWH7KH�127�JDWH�LV�D�ORJLF�JDWH�ZKLFK�KDV�RQH�LQSXW�WHUPLQDO��7R�GHVFULEH�WKH�EHKDYLRU�RI�WKH�127�JDWH��DOO�WKDW�LV�QHHGHG�LV�WR�GHVFULEH�KRZ�LWV�LQSXW�GHWHUPLQHV�LWV�RXWSXW��7KH�UXOHV�DUH�

z ,I�WKH�LQSXW�LV�DW�ORJLF����WKH�RXWSXW�LV�DW�ORJLF���z ,I�WKH�LQSXW�LV�DW�ORJLF����WKH�RXWSXW�LV�DW�ORJLF���

:H�FDQ�QRZ�SXW�D�IODVKOLJKW�WRJHWKHU�E\�KRRNLQJ�WKH�RXWSXW�RI�WKH�127�JDWH�WR�D�EXOE�DQG�WKH�LQSXW�WR�D�PHFKDQLFDO�VZLWFK��)LJXUH�����LOOXVWUDWHV�WKLV�KRRNXS��:KHQ�ZLUHV�LQ�D�GLDJUDP�DUH�VKRZQ�FURVVLQJ�DW�D�EODFN�GRW��LW�PHDQV�WKDW�WKH�ZLUHV�DUH�FRQQHFWHG��:KHQ�ZLUHV�FURVV�DQG�WKHUH�LV�QR�EODFN�GRW��LW�PHDQV�WKDW�WKH\�DUH�QRW�LQ�FRQWDFW�ZLWK�HDFK�RWKHU��7KH�IODVKOLJKW�LQ�WKLV�ILJXUH�LV�XOWLPDWHO\�FRQWUROOHG�E\�D�PHFKDQLFDO�VZLWFK��MXVW�OLNH�WKH�IODVKOLJKW�LQ�)LJXUH������:KHQ�WKH�VZLWFK�LV�LQ�WKH�GRZQ�SRVLWLRQ�DV�VKRZQ�LQ�WKH�ILJXUH��WKH�IODVKOLJKW�LV�RQ��7KH�GRZQ�SRVLWLRQ�FRQQHFWV�WKH�LQSXW�WHUPLQDO�RI�WKH�127�JDWH�WR�WKH�QHJDWLYH�EDWWHU\�WHUPLQDO��ZKLFK�SXWV�LW�DW�ORJLF����7KHUHIRUH��EHFDXVH�RI�WKH�ZD\�D�127�JDWH�ZRUNV��WKH�RXWSXW�LV�DW�ORJLF����7KLV�PHDQV�WKDW�WKH�RXWSXW�WHUPLQDO�LV�FRQQHFWHG�LQWHUQDOO\�E\�WKH�127�JDWH�WR�WKH�SRVLWLYH�SRZHU�WHUPLQDO�DQG�WKHUHIRUH�WR�WKH�SRVLWLYH�HQG�RI�WKH�EDWWHU\��+HQFH�WKH�EXOE�JHWV�FXUUHQW�DQG�WKH�IODVKOLJKW�LV�RQ�)LJXUH������$�127�*DWH�&RQWUROOHG�)ODVKOLJKW

������7UXWK�7DEOH�IRU�WKH�127�*DWH/RJLF�YDOXHV�PDNH�LW�HDV\�WR�VXPPDUL]H�WKH�EHKDYLRU�RI�D�127�JDWH�ZLWK�D�VPDOO�WDEOH��6XFK�D�WDEOH�LV�FDOOHG�D�WUXWK�WDEOH� 7DEOH�����VKRZV�WKH�WUXWK�WDEOH�IRU�WKH�127�JDWH�

Page 31: Linux assembly language programming

������*DWH�/HYHO�'LDJUDPV$�ORJLF�FLUFXLW�GLDJUDP�ZKLFK�VKRZV�WKH�LQGLYLGXDO�ORJLF�JDWHV�EXW�QRW�WKHLU�LQWHUQDO�PDNH�XS�LV�FDOOHG�D�JDWH�OHYHO�GLDJUDP��,Q�D�JDWH�OHYHO�GLDJUDP��WKH�SRZHU�WHUPLQDOV�RQ�WKH�ORJLF�JDWHV�DUH�XVXDOO\�QRW�VKRZQ��7KH�V\PERO�IRU�WKH�127�JDWH�XVHG�LQ�JDWH�OHYHO�GLDJUDPV�VKRZV�RQO\�WZR�WHUPLQDOV��WKH�LQSXW�DQG�WKH�RXWSXW�

7KH�ZLUH�VKRZQ�RQ�WKH�OHIW�UHSUHVHQWV�WKH�LQSXW��WKH�ZLUH�RQ�WKH�ULJKW�LV�WKH�RXWSXW�)LJXUH�����VKRZV�WKH�GLDJUDP�RI�WKH�127�JDWH�FRQWUROOHG�IODVKOLJKW�XVLQJ�WKH�VFKHPDWLF�V\PERO��7KLV�GLDJUDP�FDQ�EH�FRQIXVLQJ�EHFDXVH�WKH�PDLQ�SRZHU�FRQQHFWLRQV�WR�WKH�127�JDWH�DUH�QRW�VKRZQ��,Q�WKLV�ILJXUH��WKH�RQO\�EDWWHU\�FRQQHFWLRQ�LV�DW�WKH�VLJQDOLQJ�LQSXW�WR�WKH�127�JDWH��$OWKRXJK�WKH�SRZHU�FRQQHFWLRQV�DUH�QRW�VKRZQ��WKH\�PXVW�EH�WKHUH�RU�WKH�FLUFXLW�ZLOO�QRW�ZRUN��)LJXUH�����UHSUHVHQWV�H[DFWO\�WKH�VDPH�KRRNXS�DV�)LJXUH�����

)LJXUH������7KLV�)ODVKOLJKW�LV�2Q�

����%RROHDQ�2SHUDWRUV7KH�127�JDWH�GLVFXVVHG�LQ�WKH�ODVW�VHFWLRQ�LV�DQ�H[DPSOH�RI�D�ORJLF�JDWH��/RJLF�JDWHV�DUH�FLUFXLWV�ZKRVH�EHKDYLRU�LV�PRGHOHG�RQ�%RROHDQ�RSHUDWRUV�7KH�PRVW�EDVLF�%RROHDQ�RSHUDWRUV�DUH�$1'��25��;25��DQG�127��,Q�WKH�&�ODQJXDJH��ZH�KDYH�WKH�V\PEROV��IRU�$1'��__�IRU�25��DQG���IRU�127��7KH�ZRUNLQJV�RI�WKHVH�RSHUDWRUV�FDQ�EH�LOOXVWUDWHG�ZLWK�WZR�H[DPSOHV�IURP�&��,Q�WKHVH�H[DPSOHV�

7DEOH������7UXWK�7DEOH�IRU�127�*DWH,QSXW 2XWSXW� �� �

Page 32: Linux assembly language programming

WKH�&�ODQJXDJH�VWDWHPHQWV�DUH�HYDOXDWHG�XVLQJ�D�VWHS�E\�VWHS�VLPSOLILFDWLRQ�SURFHVV�������7KH�25�2SHUDWRU7KH�ILUVW�H[DPSOH�LV�DQ�LI�VWDWHPHQW�LQYROYLQJ�WKH�%RROHDQ�25�RSHUDWRU��,Q�ZKDW�IROORZV��ZH�VXSSRVH�WKDW�[KDV�DOUHDG\�EHHQ�JLYHQ�WKH�YDOXH�������LI���[�!����__��[�������\� ����

z )LUVW�WKH�WUXWK�YDOXHV�RI�WKH�RSHUDQGV�PD\�EH�GHWHUPLQHG��,Q�WKLV�FDVH��EHFDXVH��[�!����LV�WUXH��LW�KDV�WKH�YDOXH����EHFDXVH��[������LV�IDOVH��LW�KDV�WKH�YDOXH����7KHVH�HYDOXDWLRQV�UHVXOW�LQ�WKH�IROORZLQJ�VLPSOLILFDWLRQ�RI�WKH�&�ODQJXDJH�VWDWHPHQW�����LI����__����\� ����

z 7KH�%RROHDQ�25�RSHUDWRU�PD\�EH�DSSOLHG�QH[W��7KH�RQO\�WKLQJ�25�VHHV�LV�WKH�WUXWK�YDOXHV�UHVXOWLQJ�IURP�WKH�RSHUDQG�HYDOXDWLRQV��25�LV�JLYHQ�D���DQG�D����IURP�ZKLFK�LW�SURGXFHV�D�������LI������\� ����

z 7KH�LI�FDQ�JR�WR�ZRUN�QH[W��$OO�LW�VHHV�LQ�WKH�SDUHQWKHVHV�LV�D����+HQFH�LW�SURGXFHV�WKH�VLPSOH�DVVLJQPHQW�VWDWHPHQW����\� ����

7KH�HQG�UHVXOW�RI�WKH�SURFHVV�LV�WKDW�\�LV�VHW�WR�WKH�YDOXH�����1RWLFH�WKDW�WKH�25�RSHUDWRU�QHYHU�VDZ�WKH�YDOXH�RI�[��,W�QHHGV�RQO\��V�DQG��V�WR�GR�LWV�MRE��&RQVHTXHQWO\��WKH�ZRUNLQJV�RI�WKH�25�RSHUDWRU�FDQ�EH�GHVFULEHG�LQ�D�WUXWK�WDEOH�MXVW�OLNH�WKH�WUXWK�WDEOH�IRU�WKH�127�JDWH��7DEOH�����VKRZV�WKH�WUXWK�WDEOH�IRU�WKH�25�RSHUDWRU��,Q�WUXWK�WDEOHV�IRU�%RROHDQ�RSHUDWRUV��WKH�OHWWHUV�S�DQG�T�DUH�RIWHQ�XVHG�DV�YDULDEOHV�IRU�WKH�WUXWK�YDOXHV���DQG����9DULDEOHV�ZKLFK�KDYH�RQO\�WKHVH�WZR�SRVVLEOH�YDOXHV�DUH�VRPHWLPHV�FDOOHG�%RROHDQ�YDULDEOHV��1RWLFH�WKDW�WKH�GHFLVLRQ�PDGH�LQ�WKH�&�H[DPSOH�FRXOG�KDYH�EHHQ�LQIHUUHG�IURP�WKH�VHFRQG�OLQH�RI�7DEOH�����

������7KH�$1'�2SHUDWRU7KH�$1'�RSHUDWRU�FDQ�DOVR�EH�GHVFULEHG�ZLWK�D�WUXWK�WDEOH��6HH�7DEOH������7KH�QH[W�H[DPSOH�VKRZV�WKH�XVH�RI�WKLV�WDEOH�LQ�HYDOXDWLQJ�D�&�ODQJXDJH�VWDWHPHQW�FRQWDLQLQJ�DQ�$1'�RSHUDWRU�

z $JDLQ�VXSSRVH�WKDW�[� �������LI��[�!������[�������]� ����

7DEOH������7UXWK�7DEOH�IRU�25S T �S�25�T�� � �� � �� � �� � �

7DEOH������7UXWK�7DEOH�IRU�$1'S T �S�$1'�T�� � �� � �� � �� � �

Page 33: Linux assembly language programming

z $JDLQ�WKH�RSHUDQGV�KDYH�WKH�YDOXHV���DQG�������LI�O�����]� ����

z 7KH�RSHUDWLRQ�RI�WKH�$1'�RSHUDWRU�FDQ�EH�UHIHUUHG�WR�WKH�VHFRQG�OLQH�RI�7DEOH������IURP�ZKLFK�ZH�VHH�WKDW�D���UHVXOWV�����LI������]� ����

z 7KH���LQ�WKH�SDUHQWKHVHV�UHVXOWV�LQ�D�QXOO�VWDWHPHQW��1RWKLQJ�KDSSHQV������

)URP�WKHVH�H[DPSOHV��LW�LV�FOHDU�WKDW�WKH�MRE�RI�WKH�%RROHDQ�RSHUDWRUV�LV�WR�RSHUDWH�RQ�WUXWK�YDOXHV�DQG�SURGXFH�D�WUXWK�YDOXH�������%RROHDQ�([SUHVVLRQV-XVW�DV�RSHUDWRUV�LQ�&�PD\�EH�QHVWHG�DV�LQ�WKH�VWDWHPHQW����LI���[�!������[�������__��[� �����Z� ����VR�%RROHDQ�RSHUDWRUV�E\�WKHPVHOYHV�PD\�EH�QHVWHG7KH�UHVXOWLQJ�H[SUHVVLRQV�DUH�FDOOHG�%RROHDQ�H[SUHVVLRQV��-XVW�DV�%RROHDQ�RSHUDWRUV�KDYH�WUXWK�WDEOHV��VR�GR�%RROHDQ�H[SUHVVLRQV��7KH�WUXWK�WDEOH�IRU�WKH�H[SUHVVLRQ�MXVW�VKRZQ�LV�JLYHQ�LQ�7DEOH�����

����/RJLF�*DWHV7DEOH�����VKRZV�WKH�WUXWK�WDEOH�IRU�WKH�%RROHDQ�127�RSHUDWRU��,W�LV�YHU\�VLPLODU�WR�WKH�WUXWK�WDEOH�IRU�WKH�127�JDWH�VKRZQ�LQ�7DEOH������,I�ZH�WKLQN�RI�S�DV�WKH�LQSXW�DQG��127�S��DV�WKH�RXWSXW��WKHUH�LV�LQ�IDFW�QR�GLIIHUHQFH��2QH�VKRXOG�HYHQ�WKLQN�RI�WKH�127�JDWH�DV�D�VLOLFRQ�LPSOHPHQWDWLRQ�RI�WKH�127�RSHUDWRU��7KH�%RROHDQ�RSHUDWRUV�$1'��25��DQG�;25�DUH�DOVR�LPSOHPHQWHG�LQ�VLOLFRQ�

7DEOH������7UXWK�7DEOH�IRU�D�%RROHDQ�([SUHVVLRQS T U ��S�$1'�T��25�U�� � � �� � � �� � � �� � � �� � � �� � � �� � � �� � � �

7DEOH������7UXWK�7DEOH�IRU�127S �127�S�� �� �

Page 34: Linux assembly language programming

������7KH�25�*DWH7KH�25�JDWH�LV�D�FLUFXLW�ZLWK�WZR�LQSXW�WHUPLQDOV��,W�LV�UHSUHVHQWHG�LQ�JDWH�OHYHO�GLDJUDPV�ZLWK�WKH�V\PERO

7KH�LQSXWV�DUH�VKRZQ�RQ�WKH�OHIW��7KH�RXWSXW�LV�RQ�WKH�ULJKW��)URP�7DEOH������ZH�PD\�LQIHU�WKDWz ,I�ERWK�LQSXW�WHUPLQDOV�DUH�DW�ORJLF����WKHQ�WKH�RXWSXW�WHUPLQDO�ZLOO�EH�DW�ORJLF���z ,I�HLWKHU�LQSXW�WHUPLQDO�LV�DW�ORJLF����WKHQ�WKH�RXWSXW�WHUPLQDO�ZLOO�EH�DW�ORJLF���

,Q�WKH�IROORZLQJ�FLUFXLW��IRU�H[DPSOH��XQOHVV�WKH�ORJLF�YDOXHV�DSSOLHG�WR�DOO�RI�WKH�)LOWHU�LQSXWV�DUH�HTXDO�WR����WKH�RXWSXW�ZLOO�EH�DW�ORJLF����,I�D�ORJLF���LV�DSSOLHG�WR�HDFK�RI�WKH�)LOWHU�LQSXWV��WKHQ�WKH�RXWSXW�ORJLF�YDOXH�ZLOO�EH�WKH�VDPH�DV�WKH�LQSXW�ORJLF�YDOXH��,Q�WKLV�FDVH��RQH�FDQ�WKLQN�RI�WKH�LQSXW�VLJQDO�DV�KDYLQJ�SDVVHG�WKURXJK�WKH�JDWHV��1RWH�WKDW�WKH�JDWH�DQDORJ\�PDNHV�VHQVH�LQ�WHUPV�RI�WKH�SURSRJDWLRQ�RI�D�VLJQDO��QRW�WKH�SURSDJDWLRQ�RI�D�YROWDJH��$�ORJLF���DSSOLHG�WR�DQ\�RI�WKH�)LOWHU�LQSXWV�JXDUDQWHHV�WKDW�WKH�RXWSXW�ZLOO�EH�DW�ORJLF����EXW�WKLV�VKRXOG�EH�WKRXJKW�RI�DV�WKH�FORVLQJ�RI�WKH�JDWH��$�FKDQJH�LQ�WKH�LQSXW�ZLOO�QRW�PDNH�LW�WKURXJK�WR�WKH�RXWSXW��7KH�FLUFXLW�GRHV�QRW�DOORZ�VLJQDOV�WR�SDVV��+HQFH�LW�PDNHV�VHQVH�WR�WKLQN�RI�WKHVH�25�JDWHV�DV�FORVHG�ZKHQ�D�UHJXODWRU\�LQSXW�LV�DW�ORJLF���

������7KH�$1'�*DWH7KH�$1'�JDWH�LV�DOVR�D�WZR�LQSXW�JDWH��,WV�V\PERO�LV

)URP�7DEOH�����ZH�PD\�LQIHU�WKDWz ,I�ERWK�LQSXW�WHUPLQDOV�DUH�DW�ORJLF����WKHQ�WKH�RXWSXW�WHUPLQDO�ZLOO�EH�DW�ORJLF���

7DEOH������7UXWK�7DEOH�IRU�;25S T �S�;25�T�� � �� � �� � �� � �

Page 35: Linux assembly language programming

z ,I�HLWKHU�LQSXW�WHUPLQDO�LV�DW�ORJLF����WKHQ�WKH�RXWSXW�WHUPLQDO�ZLOO�EH�DW�ORJLF���,Q�WKH�IROORZLQJ�FLUFXLW��WKH�ORJLF�YDOXHV�DSSOLHG�WR�DOO�WKH�)LOWHU�LQSXWV�PXVW�HTXDO����RWKHUZLVH�WKH�RXWSXW�ZLOO�EH�DW�ORJLF����,I�D�ORJLF���LV�DSSOLHG�WR�HDFK�RI�WKH�)LOWHU�LQSXWV��WKHQ�WKH�LQSXW�ORJLF�YDOXH�SDVVHV�WKURXJK�WKH�JDWHV�DQG�EHFRPHV�WKH�RXWSXW�YDOXH�

������%RROHDQ�&LUFXLWV$1'��25��DQG�127�ORJLF�JDWHV�FDQ�EH�XVHG�WR�EXLOG�XS�D�JUHDW�YDULHW\�RI�ORJLF�FLUFXLWV��)RU�DQ\�%RROHDQ�H[SUHVVLRQ��WKHUH�LV�D�FRUUHVSRQGLQJ�FLUFXLW��)RU�H[DPSOH��FRUUHVSRQGLQJ�WR�WKH�%RROHDQ�H[SUHVVLRQRQH�FDQ�FRQVWUXFW�WKH�FLUFXLW

7KH�WUXWK�WDEOH�IRU�WKLV�FLUFXLW�LV�WKH�VDPH�DV�WKH�WUXWK�WDEOH�RI�WKH�%RROHDQ�H[SUHVVLRQ�LW�FRPHV�IURP��,W�LV�JLYHQ�LQ�7DEOH�����7KH�WUXWK�WDEOH�IRU�WKH�%RROHDQ�RSHUDWRU�;25�LV�VKRZQ�LQ�7DEOH������2QH�FDQ�ILQG�D�%RROHDQ�H[SUHVVLRQ�IRU�;25�E\�XVLQJ�WKH�OLQHV�RI�LWV�WUXWK�WDEOH�WKDW�KDYH�D�ORJLF���RXWSXW��8VLQJ�WKH�WDEOH��ZH�ILQG�WZR�VXFK�OLQHV��RQH�ZKHUH�S� ���DQG�T� ���DQG�RQH�ZKHUH�S� ���DQG�T� ����7KHVH�DUH�WKH�OLQHV�IRU�ZKLFK�WKH�H[SUHVVLRQV��S�$1'��127�T���DQG���127�S��$1'�T��DUH�WUXH��+HQFH�WKH�H[SUHVVLRQKDV�WKH�VDPH�WUXWK�WDEOH�DV�;25�DQG�PD\�EH�XVHG�WR�FRQVWUXFW�D�FLUFXLW�IRU�;25

7KH�%RROHDQ�H[SUHVVLRQ���S�25�T��$1'��127��S�$1'�T����DOVR�KDV�WKH�VDPH�WUXWK�WDEOH��7KHUHIRUH�WKH�ORJLF�FLUFXLW�ZKLFK�FRUUHVSRQGV�WR�WKLV�H[SUHVVLRQ�DOVR�ZRUNV�DV�DQ�;25�FLUFXLW��7KDW�FLUFXLW�ORRNV�OLNH�WKLV�

Page 36: Linux assembly language programming

7KH�VWDQGDUG�V\PERO�IRU�;25�LV

;25�PD\�EH�LPSOHPHQWHG�XVLQJ�DQ\�FLUFXLW�ZKLFK�KDV�WKH�FRUUHFW�WUXWK�WDEOH��LQFOXGLQJ�WKH�WZR�MXVW�VKRZQ�������3URSDJDWLRQ�'HOD\6RPH�HVVHQWLDO�IHDWXUHV�RI�ORJLF�FLUFXLW�EHKDYLRU�DUH�OHIW�RXW�RI�DQ\�GHVFULSWLRQ�EDVHG�RQO\�RQ�%RROHDQ�H[SUHVVLRQV�DQG�WUXWK�WDEOHV��2QH�VXFK�IHDWXUH�LV�WKH�SURSDJDWLRQ�GHOD\��WKH�WLPH�UHTXLUHG�IRU�D�FKDQJH�LQ�DQ�LQSXW�VLJQDO�WR�FDXVH�D�FKDQJH�LQ�WKH�RXWSXW��7KH�SURSDJDWLRQ�GHOD\�RI�D�JDWH�XVHG�LQ�D�����0+]�SURFHVVRU��IRU�H[DPSOH��PXVW�EH�OHVV�WKDQ����QDQRVHFRQGV��7KLV�LV�EHFDXVH�����0+]�PHDQV�����PLOOLRQ�F\FOHV�SHU�VHFRQG��FSV���6R�WKH�OHQJWK�RI�HDFK�SURFHVVLQJ�F\FOH�LV� �VHFRQG��ZKLFK�LV�WKH�VDPH�DV��VHFRQG�RU����QDQRVHFRQGV�

&RQVLGHULQJ�WKDW�WKH�H[HFXWLRQ�RI�RQH�SURFHVVLQJ�F\FOH�PLJKW�UHTXLUH�D�VLJQDO�WR�SDVV�WKURXJK��VD\��ILYH�VXFK�JDWHV�LQ�VXFFHVVLRQ��WKH�OLPLW�FRXOG�GURS�WR���QDQRVHFRQGV�RU�OHVV��5HGXFLQJ�WKLV�WLPH�GHOD\�LV�RQH�RI�WKH�PDLQ�JRDOV�LQ�FXUUHQW�IDEULFDWLRQ�WHFKQRORJ\��7KH�OHVV�WKH�SURSDJDWLRQ�GHOD\��WKH�IDVWHU�WKH�FORFN�VSHHG�DW�ZKLFK�D�FLUFXLW�FDQ�EH�UXQ�$OVR�LPSRUWDQW�LV�WKH�DPRXQW�RI�SRZHU�GLVVLSDWHG��:KHQ�PDQ\�FLUFXLWV�DUH�SDFNHG�WRJHWKHU�RQ�D�FKLS��WKH�WHPSHUDWXUH�PD\�LQFUHDVH�WR�XQDFFHSWDEOH�OHYHOV�XQOHVV�WKH�SRZHU�GLVVLSDWHG�E\�HDFK�FLUFXLW�LV�UHGXFHG�WR�D�YHU\�ORZ�OHYHO��5HGXFLQJ�SRZHU�GLVVLSDWLRQ�LV�DQRWKHU�SULPDU\�JRDO�RI�SURFHVVRU�GHVLJQ�7KH�DUFKLWHFWXUH�SRLQW�RI�YLHZ�OHDYHV�WKHVH�SUREOHPV�RXW�RI�WKH�SLFWXUH��)URP�WKDW�VWDQGSRLQW��DOO�ZH�QHHG�WR�NQRZ�DERXW�D�%RROHDQ�FLUFXLW�LV�FRQWDLQHG�LQ�LWV�WUXWK�WDEOH��7KH�DUFKLWHFWXUH�SRLQW�RI�YLHZ�LV�PRUH�RIWHQ�VXLWDEOH�LQ�FRPSXWHU�VFLHQFH�WKDQ�LQ�HOHFWULFDO�HQJLQHHULQJ�����$GGLWLRQ�&LUFXLWV

)UHTXHQF\ &\FOH�/HQJWK��+] ��FSV ��V ��VHF��N+] ������FSV ��PV��0+] ����������FSV ���V��*+] ��������������FSV ��QV

Page 37: Linux assembly language programming

7KLV�VHFWLRQ�VKRZV�KRZ�DGGLWLRQ�LV�GRQH�XVLQJ�ORJLF�FLUFXLWV�&RQVLGHU�WKH�DGGLWLRQ�RI����DQG���DJDLQ�DQG�REVHUYH�WKDW�LQ�HDFK�FROXPQ��ZH�KDYH�WZR�GLJLWV�WR�DGG�DORQJ�ZLWK�D�FDUU\�GLJLW�IURP�WKH�SUHFHGLQJ�FROXPQ�

$Q�DGGLWLRQ�FLUFXLW�ZKLFK�FDQ�GR�WKH�ZRUN�LQYROYHG�LQ�RQH�FROXPQ�RI�VXFK�DQ�DGGLWLRQ�LV�FDOOHG�D�IXOO�DGGHU�,W�SURGXFHV�WKH�VXP�RI�WKH�WZR�GLJLWV�LQ�WKDW�FROXPQ�DQG�D�FDUU\�GLJLW�IURP�WKH�SUHYLRXV�FROXPQ��,W�DOVR�SURGXFHV�DQ�RXWSXW�FDUU\�GLJLW��7KH�DGGLWLRQ�RI����DQG���DV�VKRZQ�UHTXLUHV�WKH�XVH�RI�IRXU�IXOO�DGGHU�FLUFXLWV��%HFDXVH�WKH�ELQDU\�V\VWHP�LV�EHLQJ�XVHG��WKH�%RROHDQ�WUXWK�YDOXHV���DQG���PD\�EH�XVHG�DV�ELQDU\�GLJLWV��7DEOH�����VKRZV�WKH�WUXWK�WDEOH�IRU�D�IXOO�DGGHU�FLUFXLW��,W�LV�QRW�KDUG�WR�FRQVWUXFW�D�IXOO�DGGHU��7KH�2XWSXW�6XP�FLUFXLW�FDQ�EH�EXLOW�IURP�WZR�;25�FLUFXLWV��7KH�2XWSXW�&DUU\�FLUFXLW�FDQ�EH�EXLOW�IURP�WKUHH�$1'V�DQG�WZR�25V��6HH�)LJXUH������$�IXOO�DGGHU�KDV�WKUHH�LQSXWV�DQG�WZR�RXWSXWV��ZKLFK�WRJHWKHU�IXQFWLRQ�DV�RQH�FROXPQ�RI�DQ�DGGLQJ�PDFKLQH�)LJXUH������)XOO�$GGHU�&LUFXLW

7DEOH������7UXWK�7DEOH�IRU�D�)XOO�$GGHU,QSXW�'LJLW��� ,QSXW�'LJLW��� ,QSXW�&DUU\ 2XWSXW�6XP 2XWSXW�&DUU\� � � � �� � � � �� � � � �� � � � �� � � � �� � � � �� � � � �� � � � �

Page 38: Linux assembly language programming

$�FLUFXLW�ZKLFK�DGGV�IRXU�GLJLW�ELQDU\�QXPEHUV�UHTXLUHV�IRXU�IXOO�DGGHUV�JDQJHG�WRJHWKHU�

7KLV�LV�ZKDW�WKH�DGGLQJ�FLUFXLWV�LQ�D�IRXU�ELW�SURFHVVRU�ORRN�OLNH��6KRZQ�KHUH�LV�WKH�VDPH�FDOFXODWLRQ�RI�WKLUWHHQ�SOXV�VL[�LOOXVWUDWHG�DW�WKH�EHJLQQLQJ�RI�WKLV�VHFWLRQ��,Q�ELQDU\��WKDW�LV������SOXV�������7KH�UHVXOWLQJ�WRWDO�LV�������7KHUH�LV�DOVR�DQ�RXWSXW�FDUU\�YDOXH�RI����7KH�LQSXW�FDUU\�LV�QRW�XVHG�KHUH��6XUSULVLQJO\�HQRXJK��WKHUH�LV�D�QHHG�IRU�LW�KRZHYHU��:H�ZLOO�VHH�ZKDW�WKDW�LV�LQ�VHFWLRQ�����,W�LV�RQH�RI�WKH�FKDUDFWHULVWLFV�RI�D�IRXU�ELW�SURFHVVRU�WKDW�LW�DGGV�ELQDU\�QXPEHUV�IRXU�ELWV�DW�D�WLPH�$�FRPSXWHU�ZLWK�D�IRXU�ELW�SURFHVVRU�ZRXOG�QRW�EH�OLPLWHG�WR�VPDOO�QXPEHU�DULWKPHWLF��EXW�LWV�VRIWZDUH�ZRXOG�QHHG�WR�EUHDN�ODUJH�QXPEHUV�GRZQ�LQWR�QXPEHUV�QR�ELJJHU�WKDQ��������6HTXHQWLDO�&LUFXLWV,Q�DOO�WKH�FLUFXLWV�VKRZQ�VR�IDU��WKH�RXWSXW�LV�GHWHUPLQHG�E\�WKH�LQSXWV��%\�XVLQJ�WKH�WUXWK�WDEOHV�RI�WKH�FRPSRQHQW�JDWHV��RQH�FDQ�FRQVWUXFW�D�WUXWK�WDEOH�IRU�WKH�ZKROH�FLUFXLW��,W�PLJKW�VHHP�WKDW�WKLV�VKRXOG�EH�WKH�FDVH�ZLWK�DOO�ORJLF�FLUFXLWV��+RZHYHU��LI�DQ�RXWSXW�LV�IHG�EDFN�DURXQG�WR�DQ�LQSXW��WKHQ�D�YLFLRXV�FLUFOH�LV�LQWURGXFHG�LQWR�WKH�SURFHVV�RI�GHWHUPLQLQJ�WKH�WUXWK�WDEOH��&LUFXLWV�ZLWK�IHHGEDFN�ORRSV�DUH�FDOOHG�VHTXHQWLDO�FLUFXLWV�&LUFXLWV�ZLWKRXW�IHHGEDFN�ORRSV�DUH�QRW�FDSDEOH�RI�VWRULQJ�ORJLF�YDOXHV��7KH�RXWSXW�RI�D�%RROHDQ�FLUFXLW�LV�D�IXQFWLRQ�RI�LWV�LQSXWV��LWV�SUHVHQW�LQSXWV��7KDW�PHDQV��IRU�H[DPSOH��LI�\RX�WULHG�WR�XVH�D�%RROHDQ�FLUFXLW�DV�D�PHPRU\��WKHQ�QR�PDWWHU�ZKDW�\RX�GHFLGHG�XSRQ�DV�WKH�PHPRU\�IHWFK�FRPPDQG��WKLV�LQSXW�ZRXOG�DOZD\V�SURGXFH�WKH�VDPH�RXWSXW��QDPHO\�WKH�RXWSXW�VSHFLILHG�E\�WKH�WUXWK�WDEOH��VR�LW�ZRXOG�QRW�EH�D�WUXH�PHPRU\�IHWFK��7KH�RXWSXW�IURP�D�WUXH�PHPRU\�IHWFK�ZRXOG�GHSHQG�XSRQ�ZKDW�ZDV�VWRUHG�DW�VRPH�WLPH�LQ�WKH�SDVW�6HTXHQWLDO�FLUFXLWV�DUH�LPSRUWDQW�EHFDXVH�WKH\�FDQ�VWRUH�ORJLF�YDOXHV�������$�)OLS�IORS)LJXUH�����VKRZV�DQ�H[DPSOH�RI�D�FLUFXLW�FDOOHG�D�IOLS�IORS��7KH�6�LQ�WKH�ILJXUH�VWDQGV�IRU�VHW�DQG�WKH�5�VWDQGV�IRU�UHVHW��7KH�RXWSXW�RI�WKLV�FLUFXLW�PD\�EH�VHW�LI�6� ���DQG�5� ����,Q�WKLV�FDVH��WKH�$1'�JDWH�IHG�E\�WKH�5�LQSXW�LV�IRUFHG�WR�RXWSXW�D����+HQFH�ERWK�LQSXWV�RQ�WKH�RWKHU�$1'�JDWH�DUH����+HQFH�LWV�RXWSXW�LV���DQG�WKH�ILQDO�RXWSXW�LV���

Page 39: Linux assembly language programming

)LJXUH������)OLS�IORS

,I�6� ���DQG�5� ����WKH�VLWXDWLRQ�LV�MXVW�UHYHUVHG�DQG�WKH�ILQDO�RXWSXW�LV���+RZHYHU��LI�6� ���DQG�5� ����WKH�RXWSXW�LV�QRW�GHWHUPLQHG�E\�WKH�WUXWK�WDEOHV��7KH�IHHGEDFN�ORRSV�PDNH�WKDW�LPSRVVLEOH��,W�WXUQV�RXW��KRZHYHU��WKDW�LI�WKH�6� �5� ���VWDWH�ZDV�HQWHUHG�IURP�HLWKHU�WKH�VHW�RU�WKH�UHVHW�VWDWH��WKHQ�WKH�ILQDO�RXWSXW�LV�OHIW�DORQH��,W�GRHV�QRW�FKDQJH�������$�/DWFK)LJXUH�����VKRZV�DQ�H[DPSOH�RI�D�FLUFXLW�FDOOHG�D�ODWFK��7KLV�FLUFXLW�VWRUHV�RQH�ELW��,W�LV�FDOOHG�D�ODWFK�EHFDXVH�LW��ODWFKHV�RQWR��D�YDOXH�

)LJXUH������/DWFK

7KH�)UHH]H�&RS\��ODEHO�LQ�WKLV�ILJXUH�XVHV�WKH�,QWHO���FRQYHQWLRQ�WKDW�ZKHQ�D�VLJQDO�LV�ODEHOHG�ZLWK�D�PHDQLQJIXO�ZRUG��WKHQ�WKH�PHDQLQJ�WUXWKIXOO\�DSSOLHV�ZKHQ�WKH�OLQH�LV�DW�ORJLF����XQOHVV�WKH�ODEHO�KDV�D���DSSHQGHG��DQG�WKHQ�WKH�RSSRVLWH�LV�WKH�FDVH��6R�WKH�)UHH]H�&RS\��ODEHO�WHOOV�XV�WKDW�ORJLF���PHDQV�)UHH]H�DQG�ORJLF���PHDQV�&RS\�z :KHQ�WKH�)UHH]H�&RS\��OLQH�LV�]HUR��WKH�25�JDWHV�DUH�RSHQHG�DQG�WKH�FLUFXLW�LV�WXUQHG�LQWR�D�IOLS�IORS��ZKHUH�WKH�LQSXW�LV�HLWKHU�VHW�RU�UHVHW��7KH�127�JDWH�PDNHV�WKH�6�DQG�5�LQSXWV�RSSRVLWH�WR�HDFK�RWKHU�7KH�LQSXW�YDOXH�LV�FRSLHG�WR�WKH�RXWSXW�

z :KHQ�WKH�)UHH]H�&RS\��OLQH�EHFRPHV����ERWK�25�JDWHV�DUH�IRUFHG�WR���DQG�WKLV�IUHH]HV�WKH�RXWSXW��:KHQ�WKH�RXWSXW�LV�IUR]HQ��VXEVHTXHQW�FKDQJHV�LQ�WKH�LQSXW�KDYH�QR�HIIHFW�RQ�WKH�FLUFXLW��7KH�RXWSXW�YDOXH�UHPDLQV�MXVW�ZKDW�LW�ZDV�WKH�ODVW�WLPH�WKH�)UHH]H�&RS\��OLQH�WXUQHG�IURP���WR����L�H��WKH�ODVW�WLPH�LW�IUR]H�7KDW�RXWSXW�YDOXH�LV�LQ�VWRUDJH�

������5HJLVWHUV)RXU�ODWFKHV�XVHG�WRJHWKHU�LQ�SDUDOOHO�FDQ�VWRUH�IRXU�ELWV��7KLV�LV�DQ�H[DPSOH�RI�D�UHJLVWHU��$�IRXU�ELW�UHJLVWHU�LV�D�FROOHFWLRQ�RI�FLUFXLWV�WKDW�FDQ�VWRUH�IRXU�ELWV��'LIIHUHQW�UHJLVWHUV�LQ�D�SURFHVVRU�GR�QRW�KDYH�WR�VWRUH�WKH�VDPH�QXPEHU�RI�ELWV��EXW�LW�LV�HDVLHU�WR�PDNH�WKLQJV�ZRUN�ZKHQ�WKH\�GR��7KH�QXPEHU�RI�ELWV�LQ�D��W\SLFDO��UHJLVWHU�LV�RQH�RI�WKH�DWWULEXWHV�RI�D�SURFHVVRU�ZKLFK�GHWHUPLQHV�ZKHWKHU�LW�LV�FDOOHG�D�IRXU�ELW�SURFHVVRU��DQ�

Page 40: Linux assembly language programming

HLJKW�ELW�SURFHVVRU��RU�ZKDWHYHU�7KH�FRQWHQWV�RI�D�IRXU�ELW�UHJLVWHU�DUH�YHU\�QDWXUDOO\�VSHFLILHG�XVLQJ�D�IRXU�GLJLW�ELQDU\�QXPEHU��7KH�IRXU�GLJLW�ELQDU\�QXPEHUV�DUH�WKH�LQWHJHUV�IURP���WKURXJK�����$Q�HLJKW�ELW�UHJLVWHU�KROGV�DQ�LQWHJHU�IURP���WKURXJK�����:H�VHH�WKDW�WKH�PRVW�QDWXUDO�ZD\�RI�VSHFLI\LQJ�WKH�FRQWHQWV�RI�D�UHJLVWHU�OHDYHV�QR�URRP�IRU�QHJDWLYH�QXPEHUV��7KH�UHSUHVHQWDWLRQ�RI�QHJDWLYH�QXPEHUV�ZLOO�EH�GLVFXVVHG�LQ�WKH�QH[W�VHFWLRQ�������%LW�6LJQLILFDQFH%HFDXVH�ELQDU\�QXPEHUV�DUH�XVHG�WR�GHVFULEH�WKH�FRQWHQWV�RI�UHJLVWHUV�DQG�PHPRU\�ORFDWLRQV��WKH�QXPHULFDO�FRQFHSW�RI�D�VLJQLILFDQW�GLJLW�LV�XVHIXO�LQ�VLQJOLQJ�RXW�LQGLYLGXDO�ELWV�RI�D�VSHFLILF�VWRUDJH�ORFDWLRQ��)RU�H[DPSOH��LI�D�IRXU�ELW�UHJLVWHU�KROGV�WKH�ELQDU\�QXPEHU�������WKHQ�WKH�IRXU�GLJLWV�LQ�RUGHU�RI�VLJQLILFDQFH�DUH����������DQG����6R�WKH�PRVW�VLJQLILFDQW�GLJLW�LV����DQG�WKH�OHDVW�VLJQLILFDQW�GLJLW�LV����7KH�WKUHH�PRVW�VLJQLILFDQW�GLJLWV�DUH������7KH�WKUHH�OHDVW�VLJQLILFDQW�GLJLWV�DUH������6RPHWLPHV�LQ�WKLV�WH[W��WKH�PRVW�VLJQLILFDQW�ELWV�ZLOO�EH�UHIHUUHG�WR�DV�WKH�WRS�RU�XSSHU�ELWV�DQG�WKH�OHDVW�VLJQLILFDQW�DV�WKH�ERWWRP�RU�ORZHU�ELWV�����1HJDWLYH�1XPEHU�5HSUHVHQWDWLRQ7KH�FXVWRPDU\�ZD\�WR�UHSUHVHQW�D�QHJDWLYH�QXPEHU�LV�WR�SUHSHQG�D�PLQXV�VLJQ��3XWWLQJ�D���LQ�IURQW�RI�D���PDNHV�D�����7KLV�PHWKRG�RI�UHSUHVHQWLQJ�QHJDWLYHV�LV�FDOOHG�VLJQHG�PDJQLWXGH�UHSUHVHQWDWLRQ��,W�FDQ�EH�LPSOHPHQWHG�RQ�WKH�FRPSXWHU�E\�DOORFDWLQJ�RQH�ELW�RI�VWRUDJH�IRU�D�VLJQ�ELW��7R�FKDQJH�WKH�VLJQ�RI�D�QXPEHU�WKDW�LV�VWRUHG�XVLQJ�VLJQHG�PDJQLWXGH�UHSUHVHQWDWLRQ��RQH�FDQ�VLPSO\�IOLS�WKH�VLJQ�ELW��6LJQHG�PDJQLWXGH�UHSUHVHQWDWLRQ�LV�QRW�JHQHUDOO\�XVHG�IRU�LQWHJHUV�RQ�WKH�FRPSXWHU��7KH�UHDVRQ�LV�WKDW�LQ�RUGHU�WR�GR�DGGLWLRQ�ZLWK�VLJQHG�PDJQLWXGH�UHSUHVHQWDWLRQ��\RX�QHHG�WR�GR�LW�WKH�ZD\�LW�LV�WDXJKW�WR�\RXQJVWHUV�������6LJQHG�0DJQLWXGH�$GGLWLRQ

7R�DGG�[�DQG�\�&DVH�,��,I�[�DQG�\�DUH�ERWK�SRVLWLYH��MXVW�DGG�DQG�PDNH�\RXU�DQVZHU�SRVLWLYH�&DVH�,,��,I�[�DQG�\�DUH�ERWK�QHJDWLYH��UHPRYH�WKH�QHJDWLYH�VLJQV��DGG�WKH�QXPEHUV��DQG�WDFN�D�PLQXV�VLJQ�RQWR�WKH�UHVXOW�&DVH�,,,��,I�[�DQG�\�KDYH�GLIIHUHQW�VLJQV��VXEWUDFW�WKH�VPDOOHU�PDJQLWXGH�IURP�WKH�ODUJHU�PDJQLWXGH��DQG�LI�WKH�ODUJHU�PDJQLWXGH�KDG�D�PLQXV�VLJQ��WKHQ�WDFN�WKLV�RQWR�WKH�UHVXOW�

,PSOHPHQWLQJ�VLJQHG�PDJQLWXGH�DGGLWLRQ�ZLWK�ORJLF�FLUFXLWV�RQ�D�FKLS�ZRXOG�EH�D�WHUULEOH�ZDVWH�RI�WUDQVLVWRUV�������(DV\�$GGLWLRQ7KH�PHWKRG�ZKLFK�LV�DFWXDOO\�XVHG�ZLWK�ORJLF�FLUFXLWV�WR�DGG�[�DQG�\�ZRUNV�OLNH�WKLV�

3D\�QR�DWWHQWLRQ�WR�ZKHWKHU�[�DQG�\�DUH�SRVLWLYH�RU�QHJDWLYH��MXVW�DGG�WKHP�6XFK�D�PHWKRG�ZRXOG�VHHP�WR�EH�QR�PHWKRG�DW�DOO��%XW�LW�ZRUNV��,W�ZRUNV�EHFDXVH�D�VSHFLDO�V\VWHP�IRU�UHSUHVHQWLQJ�QHJDWLYHV�LV�XVHG��DQG�EHFDXVH�D�UHJLVWHU�KDV�D�ILQLWH�VL]H��OLNH�DQ�RGRPHWHU�������2GRPHWHU�$ULWKPHWLF$Q�RGRPHWHU�LV�DQ�DGGLQJ�PDFKLQH��,W�DGGV�XS�WKH�PLOHV�WKDW�\RX�GULYH��0LOHDJH�LV�DOZD\V�FRQVLGHUHG�WR�KDYH�D�SRVLWLYH�YDOXH���:RXOG�D�QHJDWLYH�YDOXH�LPSO\�GULYLQJ�EDFNZDUGV��RU�ZKDW"��+RZHYHU��FRQVLGHU�WKH�IROORZLQJ�HTXDWLRQ��ZKLFK�ZH�ZRXOG�RUGLQDULO\�WKLQN�RI�DV�PDNLQJ�VHQVH�RQO\�IRU�QHJDWLYH�QXPEHUV�

Page 41: Linux assembly language programming

7KH�REYLRXV�VROXWLRQ�LV�[� �����+RZHYHU��WKHUH�LV�DQ�RGRPHWHU�LQWHUSUHWDWLRQ�RI�WKLV�HTXDWLRQ�DV�ZHOO��6XSSRVH�\RX�GULYH����PLOHV�LQ�\RXU�FDU�DQG�WKH�RGRPHWHU�UHDGV���ZKHQ�\RX�ILQLVK��WKHQ�ZKDW�GLG�LW�UHDG�ZKHQ�\RX�EHJDQ"�,W�PXVW�KDYH�UHDG���������6LPLODUO\�LI�\RX�KDYH�D�FDU�ZKRVH�RGRPHWHU�UHDGV����PLOHV�DQG�\RX�GULYH�LW��������PLOHV�����WKHQ�WKH�RGRPHWHU�VKRXOG�UHDG���PLOHV�ZKHQ�\RX�ILQLVK��7KH�SRLQW�KHUH�LV�WKDW��������DFWV�MXVW�OLNH����ZKHQ�DGGHG�RQ�WKH�RGRPHWHU��7DEOH�����VKRZV�ZKDW�RGRPHWHU�QHJDWLYHV�ORRN�OLNH��1RWLFH�WKDW�WR�JHW�WKH�QXPEHU�WKDW�ZRUNV�DV�WKH�QHJDWLYH�RI�D�QXPEHU�[��\RX�VXEWUDFW�[�IURP���������$ULWKPHWLF�RQ�WKH�RGRPHWHU�ZRUNV�WKLV�ZD\�EHFDXVH�WKH�RGRPHWHU�WXUQV�RYHU�DW���������PLOHV��&RPSXWHU�UHJLVWHUV�WXUQ�RYHU�DOVR²�EXW�QRW�DW���������������5HJLVWHU�$ULWKPHWLF$�IRXU�ELW�UHJLVWHU�WXUQV�RYHU�DW�ELQDU\�������� ���� �����7KH�WDEOH�RI�QHJDWLYHV�IRU�D�IRXU�ELW�UHJLVWHU�FDQ�HDVLO\�EH�OLVWHG�FRPSOHWHO\��6HH�7DEOH������7KH�RQO\�GLIIHUHQFH�EHWZHHQ�WKLV�WDEOH�DQG�WKH�RGRPHWHU�WDEOH�LV�WKDW����LV�D�ORW�VPDOOHU�WKDQ����������$V�ZLWK�WKH�RGRPHWHU��\RX�FDQ�XVH�VXEWUDFWLRQ�LQVWHDG�RI�WKH�WDEOH�WR�ILQG�WKH�QXPEHU�ZKLFK�ZRUNV�DV�WKH�QHJDWLYH�RI�VRPH�QXPEHU�[��,Q�WKH�FDVH�RI�D�IRXU�ELW�UHJLVWHU��\RX�VXEWUDFW�[�IURP����LQVWHDG�RI�IURP����������2WKHUZLVH�LW�LV�WKH�VDPH�%XW�LQ�RQH�UHVSHFW��7DEOH�����LV�D�OLWWOH�DODUPLQJ��)RU�H[DPSOH��LW�JLYHV�XV�WKH�IDFW�WKDW����ZRUNV�WKH�VDPH�DV�����7KLV�PHDQV�ZH�QRZ�KDYH�D�VHULRXV�DPELJXLW\��,I�D�IRXU�ELW�UHJLVWHU�FRQWDLQV�������ZH�FDQQRW�WHOO�ZKHWKHU�WKLV�DFWXDOO\�PHDQV����RU�����6RPH�FRQYHQWLRQ�LV�QHHGHG��7KH�FRQYHQWLRQ�WKDW�LV�XVHG�LV�WR�WDNH�WKH�ILUVW�ELW�DV�D�NLQG�RI�VLJQ�ELW��:KHQ�WKH�ILUVW�ELW�LV����WKH�QXPEHU�LV�SRVLWLYH��RU�]HUR���:KHQ�WKH�ILUVW�ELW�LV����WKH�QXPEHU�LV�QHJDWLYH��7KH�UHVXOWLQJ�V\VWHP�LV�FDOOHG�WKH�WZRV�FRPSOHPHQW�V\VWHP��:KHQ�WKH�WZRV�FRPSOHPHQW�V\VWHP�LV�XVHG��WKH�DPELJXLW\�LV

7DEOH������2GRPHWHU�1HJDWLYHV�� �������� �������� �������� �������� �������� �������� �������� �������� ��������� ��������� ��������� ������� �HWF� �

7DEOH������)RXU�%LW�5HJLVWHU�1HJDWLYHV��$PELJXRXV��'HFLPDO %LQDU\�� �� ������ �� ������ �� ������ �� ������ �� ������ �� ������ � ������ � ����

Page 42: Linux assembly language programming

1RWLFH�WKDW�DOWKRXJK�WKH�ILUVW�ELW�LQ�D�WZRV�FRPSOHPHQW�V\VWHP�LV�D�VLJQ�ELW��LW�LV�QRW�MXVW�D�VLJQ�ELW��)RU�H[DPSOH��LI�ZH�FKDQJH�WKH�VLJQ�ELW�RQ�������ZH�JHW�������7KLV�FKDQJHV����WR����QRW���������6LJQHG�YV��8QVLJQHG�1XPEHUV,I�DOO�DULWKPHWLF�GRQH�RQ�FRPSXWHUV�ZHUH�GRQH�XVLQJ�WZRV�FRPSOHPHQW�UHSUHVHQWDWLRQ��WKHUH�ZRXOG�QHYHU�EH�DQ\�SUREOHP�LQWHUSUHWLQJ�WKH�FRQWHQWV�RI�D�QXPHULFDO�UHJLVWHU��%XW�XQIRUWXQDWHO\�WKLV�LV�QRW�WKH�FDVH��6RPHWLPHV�DULWKPHWLF�LV�GRQH�DQG�LW�LV�DVVXPHG�WKDW�WKH�QXPEHUV�DUH�UHSUHVHQWHG�XVLQJ�WKH�SODLQ�ELQDU\�V\VWHP��6R�ZKHQ�D�IRXU�ELW�UHJLVWHU�KDV�D������LQ�LW��GRHV�WKLV�PHDQ����RU���"�,I�ZH�DUH�XVLQJ�WZRV�FRPSOHPHQW��WKHQ�ZH�NQRZ�LW�LV�����%XW�ZH�FRXOG�EH�XVLQJ�MXVW�SODLQ�ELQDU\��7KHQ�ZH�KDYH�����&RPSXWLQJ�SUDFWLFH�LV�QRW�FRQVLVWHQW�DERXW�WKLV��%RWK�V\VWHPV�DUH�XVHG��,W�FRXOG�EH�HLWKHU�RQH��,W�LV�XS�WR�WKH�VRIWZDUH�WR�PDNH�WKH�GLVWLQFWLRQ��7KH�WHUPLQRORJ\�VLJQHG�YV��XQVLJQHG�LV�RIWHQ�XVHG��6LJQHG�LQWHJHUV�DUH�WZRV�FRPSOHPHQW�LQWHJHUV��8QVLJQHG�LQWHJHUV�DUH�SODLQ�ELQDU\�LQWHJHUV�$OWKRXJK�ZKHQ�ZH�DUH�DGGLQJ�QXPEHUV��LW�GRHVQW�PDWWHU�LI�WKH�QXPEHUV�DUH�VLJQHG�RU�XQVLJQHG�²�WKH�DGGLQJ�KDUGZDUH�ZRUNV�HLWKHU�ZD\�²�PDQ\�RWKHU�RSHUDWLRQV�UHTXLUH�GLIIHUHQW�LPSOHPHQWDWLRQV�GHSHQGLQJ�RQ�ZKHWKHU�WKH�RSHUDQG�LV�LQWHQGHG�DV�D�VLJQHG�RU�DQ�XQVLJQHG�QXPEHU��&RQVLGHU�LQHTXDOLW\�WHVWLQJ��6XSSRVH�IRXU�ELW�KDUGZDUH�LV�DVNHG�WR�GHWHUPLQH�ZKHWKHU�������������LV�WUXH�RU�QRW��:KLOH������UHSUHVHQWV���LQ�ERWK�WKH�VLJQHG�DQG�WKH�XQVLJQHG�V\VWHPV�������LV����DV�D�VLJQHG�QXPEHU�DQG����DV�DQ�XQVLJQHG�QXPEHU��7KH�VLJQHG�LQWHUSUHWDWLRQ����������\LHOGV�D�WUXH��ZKHUHDV�WKH�XQVLJQHG�LQWHUSUHWDWLRQ����������\LHOGV�D�IDOVH��7KH�KDUGZDUH�PXVW�PDNH�D�GLIIHUHQW�UHVSRQVH�LQ�WKH�WZR�FDVHV��7KLV�PHDQV�WKDW�D�VLQJOH��OHVV�WKDQ��FRPPDQG�FDQQRW�ZRUN��7ZR�DUH�QHHGHG��RQH�IRU�VLJQHG�QXPEHUV�DQG�RQH�IRU�XQVLJQHG�QXPEHUV��7KLV�LVVXH�FRPHV�XS�RYHU�DQG�RYHU�DJDLQ�LQ�DVVHPEO\�ODQJXDJH�,Q�WKH�&�ODQJXDJH��LQWHJHUV�PD\�EH�GHFODUHG�DV�XQVLJQHG�LQW�RU�DV�VLJQHG�LQW��7KH�XQVSHFLILHG�LQWGHFODUDWLRQ�PHDQV�WKH�VDPH�DV�VLJQHG�LQW�����6XEWUDFWLRQ�8VLQJ�1HJDWLRQ

�� � ������� � ������� � ������� � ������� � ������� � ������� � ����7DEOH�������)RXU�%LW�7ZRV�&RPSOHPHQW�5HSUHVHQWDWLRQ

'HFLPDO %LQDU\�� ������ ������ ������ ������ ������ ������ ������ ����� ����� ����� ����� ����� ����� ����� ����

Page 43: Linux assembly language programming

7KLV�VHFWLRQ�H[SODLQV�KRZ�VXEWUDFWLRQ�PD\�EH�GRQH�XVLQJ�WKH�FLUFXLWV�GHVFULEHG�VR�IDU�������7ZRV�&RPSOHPHQWDWLRQ6LQFH�ZH�KDYH�DQ�DGGHU�WKDW�ZRUNV�ZLWK�QHJDWLYHV��ZH�VKRXOG�EH�DEOH�WR�XVH�LW�WR�GR�VXEWUDFWLRQV��VXFK�DV��������VLQFH%XW�WKHUH�LV�D�SUREOHP��&RQYHUWLQJ���WR����LV�QRW�DV�HDV\�DV�MXVW�VWLFNLQJ�RQ�D�PLQXV�VLJQ�RU�IOLSSLQJ�D�ELW��,I�LW�ZHUH��WDEOHV�VXFK�DV�7DEOH�����DQG�7DEOH�����ZRXOG�QRW�EH�QHFHVVDU\��$OWKRXJK�ZH�GR�KDYH�D�IRUPXOD�ZKLFK�H[SODLQV�WKHVH�WDEOHV��LW�LV�XQIRUWXQDWHO\�EDVHG�RQ�VXEWUDFWLRQ��)RU�H[DPSOH��DFFRUGLQJ�WR�WKH�IRUPXOD�IRU�WKH�IRXU�ELW�WDEOH��WR�JHW�WKH�QHJDWLYH�RI����\RX�VXEWUDFW���IURP�����%XW�VLQFH�RXU�JRDO�LV�WR�ILQG�D�ZD\�WR�GR�VXEWUDFWLRQ��ZH�DSSHDU�WR�EH�WUDSSHG�LQ�D�YLFLRXV�FLUFOH��7KH�VLWXDWLRQ�LV�QRW�DV�EDG�DV�LW�VHHPV��KRZHYHU��6XEWUDFWLQJ���IURP����LQ�ELQDU\�FDQ�EH�GRQH�HYHQ�LI�ZH�GRQW�NQRZ�KRZ�WR�VXEWUDFW�DQG�HYHQ�WKRXJK�WKH�ELQDU\�UHSUHVHQWDWLRQ�RI����UHTXLUHV�RQH�PRUH�ELW�WKDQ�RXU�IRXU�ELW�UHJLVWHUV�FDQ�KROG��:H�DUH�VDYHG�E\�WZR�IDFWV�

L� ���[� �����[����O�LL� 6XEWUDFWLQJ�IURP����FDQ�EH�GRQH�E\�MXVW�IOLSSLQJ�WKH�ELWV��1RWLFH�ZKDW�KDSSHQV�ZKHQ�ZH�VXEWUDFW���IURP����LQ�ELQDU\�

7KH�ELWV�LQ������DUH�IOLSSHG�DQG�ZH�JHW�������:H�KDYH�KDUGZDUH�WKDW�FDQ�IOLS�ELWV��:H�FDQ�IHHG�HDFK�ELW�LQWR�D�127�JDWH��$GGLQJ���WKHQ�JLYHV�WKH�UHVXOW�

7KH�XQXVHG�LQSXW�FDUU\�RQ�WKH�DGGLWLRQ�FLUFXLW�FRPHV�LQWR�LWV�RZQ�KHUH���6HH�VHFWLRQ�������,WV�MXVW�ZKDWV�QHHGHG�WR�DGG���WR�D�WRWDO��7KH�SURFHVV�RI�IOLSSLQJ�WKH�ELWV�DQG�DGGLQJ�RQH�LV�FDOOHG�WZRV�FRPSOHPHQWDWLRQ��,W�VXEWUDFWV�D�QXPEHU�IURP�WKH�WXUQRYHU�YDOXH��7KH�WXUQRYHU�YDOXH�IRU�DQ�Q�ELW�WZRV�FRPSOHPHQW�QXPEHU�LV��Q�,I�Q� ����WKLV�YDOXH�LV����6R�ZH�PD\�GR�������DV�DQ�DGGLWLRQ

RU�WR�UHDOO\�VHH�KRZ�WKH�FRPSXWHU�GRHV�LW�

Page 44: Linux assembly language programming

7KH�ILQDO�FDUU\�ELW�LV�LJQRUHG��7KDW�LV�KRZ�D�FRPSXWHU�VXEWUDFWV���IURP���7KH�XVH�RI�WKH�ZRUG�FRPSOHPHQW�LV�MXVWLILHG�E\�WKH�IDFW�WKDW1RWH�WKDW�WKLV�IDLWKIXOO\�UHIOHFWV�WKH�IDFW�WKDW������7ZRV�&RPSOHPHQWDWLRQ�LQ�+H[7KH�WZRV�FRPSOHPHQW�SURFHVV�LV�GRQH�E\�IOLSSLQJ�WKH�ELWV�DQG�DGGLQJ�RQH��,I�ZH�WKLQN�RI�IOLSSLQJ�WKH�ELWV�RI�D�KH[�GLJLW��ZH�VHH�WKDW�WKLV�FDQ�EH�GRQH�E\�VXEWUDFWLQJ�IURP�����7R�GR�WKH�WZRV�FRPSOHPHQW�RI�D�QXPEHU�LQ�KH[�WKHQ��ZH�FDQ�VXEWUDFW�HDFK�RI�LWV�GLJLWV�IURP�ILIWHHQ�DQG�WKHQ�DGG�RQH��)RU�H[DPSOH��JLYHQ�DQ�HLJKW�ELW�QXPEHU���+�

+HQFH�WKH�WZRV�FRPSOHPHQW�RI���+�LV�''+��2Q�WKH�RWKHU�KDQG�LI�ZH�XVH�WKH�IDFW�WKDW�ILQGLQJ�WKH�WZRV�FRPSOHPHQW�LV�UHDOO\�VXEWUDFWLRQ�IURP�WKH�WXUQRYHU�YDOXH��ZH�FDQ�MXVW�GR�WKH�VXEWUDFWLRQ�

������&RQYHUVLRQV:KHQ�GHEXJJHUV�GLVSOD\�UHJLVWHU�FRQWHQWV�IRU�XV��QHJDWLYHV�ZLOO�EH�VKRZQ�WR�XV�LQ�KH[��&RQVHTXHQWO\��LW�LV�ZRUWKZKLOH�WR�EHFRPH�KDQG\�ZLWK�WZRV�FRPSOHPHQW�YDOXHV�LQ�KH[��6XSSRVH�ZH�DUH�VKRZQ�WKH����ELW�YDOXH�))��+��DQG�ZH�ZRXOG�OLNH�WR�NQRZ�ZKDW�YDOXH�LW�UHSUHVHQWV��)LUVW�ZH�REVHUYH�WKDW�LI�ZH�WDNH�WKLV�WR�EH�D�VLJQHG�QXPEHU��WKHQ�LW�LV�QHJDWLYH�VLQFH�LWV�ILUVW�ELW�LV���²�LI�WKH�ILUVW�KH[�GLJLW�LV�DQ\�RI�WKH�KH[�GLJLWV�������$��%��&��'��(��RU�)��WKHQ�WKH�ILUVW�ELQDU\�GLJLW�LV����7R�ILQG�WKH�FRUUHVSRQGLQJ�SRVLWLYH�QXPEHU��ZH�FDQ�SHUIRUP�WKH�WZRV�FRPSOHPHQW�LQ�KH[�

$QG�%(+�LV������������ ������&RQVHTXHQWO\��WKH�UHSUHVHQWHG�YDOXH�LV������<RX�FRXOG�DOVR�FRQYHUW�HYHU\WKLQJ�WR�ELQDU\��WDNH�WKH�WZRV�FRPSOHPHQW��DQG�WKHQ�FRQYHUW�WR�GHFLPDO��2I�FRXUVH�\RX�FRXOG�DOVR�FRQYHUW�))��+�WR�GHFLPDO�DQG�VXEWUDFW�WKH�UHVXOW�IURP���������3UREDEO\�ZRUNLQJ�LQ�KH[�DV�PXFK�DV�\RX�FDQ�LV�WKH�HDVLHVW�

Page 45: Linux assembly language programming

���� �3ODFHKROGLQJ�7ZRV�&RPSOHPHQW7ZRV�FRPSOHPHQW�FDQ�EH�WKRXJKW�RI�DV�D�SODFHKROGLQJ�V\VWHP��,I�WKH�SODFH�YDOXH�RI�WKH�PRVW�VLJQLILFDQW�ELW�LV�WKRXJKW�RI�DV�VWDQGLQJ�IRU�WKH�QHJDWLYH�RI�LWV�RUGLQDU\�ELQDU\�YDOXH��WKHQ�WKLV�\LHOGV�D�SODFH�YDOXH�LQWHUSUHWDWLRQ�IRU�WZRV�FRPSOHPHQW�QXPEHULQJ��7DEOH������VKRZV�WKH�SODFH�YDOXHV�LQ�WKH�IRXU�ELW�WZRV�FRPSOHPHQW�V\VWHP��8VLQJ�WKH�WDEOH��ZH�VHH�WKDW����FDQ�EH�H[SUHVVHG�DV��������������

����0HPRU\�&LUFXLWV7KH�ODWFK�FLUFXLW�VKRZQ�LQ�)LJXUH�����KDV�WKH�SURSHUW\�WKDW�LI�D�ORJLF���LV�DSSOLHG�WR�WKH�)UHH]H�&RS\��OLQH��WKHQ�WKH�YDOXH�RQ�WKH�,QSXW�SURSDJDWHV�WKURXJK�WR�WKH�2XWSXW��2Q�WKH�RWKHU�KDQG��LI�D�ORJLF���LV�DSSOLHG�WR�WKH�)UHH]H�&RS\��OLQH��WKHQ�WKH�2XWSXW�VLJQDO�LV�KHOG�WR�ZKDWHYHU�YDOXH�LW�KDG�DW�WKH�WLPH�RI�WKH��IUHH]H���7KLV�YDOXH�LV�LQ�VWRUDJH�DQG�WKH�LQSXW�LV�LJQRUHG�

7R�VHH�KRZ�WKLV�FLUFXLW�PLJKW�VHUYH�DV�RQH�ELW�RI�D�PHPRU\�FLUFXLW��LPDJLQH�PDQ\�RI�WKHVH�FLUFXLWV�DUUDQJHG�LQ�D�UHFWDQJOH��HDFK�URZ�IRUPLQJ�D�ZRUG�RI�PHPRU\��(DFK�URZ�ZRXOG�UHVSRQG�WR�D�VHOHFWLRQ�VLJQDO�SLFNLQJ�WKDW�URZ�RXW�IURP�DOO�WKH�RWKHU�URZV�LQ�PHPRU\��7KH�PHPRU\�ZRXOG�EH�UHTXLUHG�WR�UHPDLQ�GRUPDQW�ZKHQHYHU�WKH�VHOHFWLRQ�VLJQDO�ZDV�QRW�SUHVHQW��7R�XVH�WKLV�FLUFXLW�DV�RQH�ELW�RI�D�PHPRU\��OHW�XV�VXSSRVH�ZH�KDYH�D�:�5��FRQWURO�VLJQDO�DQG�D�VHOHFWLRQ�VLJQDO��6HO��:�VWDQGV�IRU�ZULWH��ZKLFK�PHDQV�WKDW�WKH�SURFHVVRU�ZDQWV�WR�ZULWH�WR�WKH�PHPRU\�FLUFXLW��5�VWDQGV�IRU�UHDG�DQG�PHDQV�WKDW�WKH�SURFHVVRU�ZDQWV�WR�UHDG�IURP�WKH�PHPRU\�FLUFXLW��$OO�WKH�FLUFXLWV�LQ�WKH�HQWLUH�PHPRU\�ZLOO�EH�FRQQHFWHG�WR�WKH�VDPH�:�5��VLJQDO��EXW�RQO\�WKH�FLUFXLWV�LQ�WKH�VDPH�ZRUG�DUH�FRQQHFWHG�WR�D�VLQJOH�6HO�VLJQDO�

7DEOH�������)RXU�%LW�7ZRV�&RPSOHPHQW�3ODFH�9DOXHV��V �V �V �V %LQDU\ 'HFLPDO� � � � ���� ��� � � � ���� ��� � � � ���� ��� � � � ���� ��� � � � ���� ��� � � � ���� ��� � � � ���� ��� � � � ���� ��� � � � ���� �� � � � ���� �� � � � ���� �� � � � ���� �� � � � ���� �� � � � ���� �� � � � ���� �

Page 46: Linux assembly language programming

:KHQ�6HO�LV����WKH�127�JDWH�RXWSXWV�D����ZKLFK�IUHH]HV�WKH�FLUFXLW��:KHQ�6HO�LV���DQG�WKH�:�5��LQSXW�LV����PHDQLQJ�WKH�SURFHVVRU�ZDQWV�WR�UHDG��WKHQ�DJDLQ�WKH�FLUFXLW�UHPDLQV�IUR]HQ��:KHQ�6HO�LV���DQG�WKH�:�5��LV����WKHQ�WKH�127�JDWH�RXWSXWV�D����ZKLFK�FDXVHV�WKH�'DWD�,Q�WR�EH�VWRUHG�7KLV�FLUFXLW�ZRXOG�ZRUN�DOULJKW�H[FHSW�IRU�WKH�IDFW�WKDW�WKH�QXPEHU�RI�'DWD�ZLUHV�IRU�WKH�HQWLUH�PHPRU\�LV�WKH�VDPH�DV�WKH�QXPEHU�RI�ELWV�LQ�RQH�ZRUG��)RU�H[DPSOH��WKLV�PHDQV�WKDW�WKH�OHDVW�VLJQLILFDQW�ELW�RI�WKH�ZRUG�PXVW�VKDUH�LWV�'DWD�2XW�ZLUH�ZLWK�WKH�FRUUHVSRQGLQJ�'DWD�2XW�ZLUH�IURP�HYHU\�RWKHU�ZRUG�LQ�PHPRU\�DV�ZHOO�DV�ZLWK�WKH�FRUUHVSRQGLQJ�'DWD�,Q�ZLUH��7KH�VDPH�JRHV�IRU�HDFK�RI�WKH�RWKHU�ELWV��$�PHPRU\�ZLWK�IRXU�ELW�ZRUGV�KDV�RQO\�IRXU�GDWD�ZLUHV��UHJDUGOHVV�RI�KRZ�PDQ\�ZRUGV�LW�KDV��7R�DYRLG�FDXVLQJ�PDVVLYH�FRQIOLFWV��FLUFXLWV�ZKLFK�KDYH�ZKDW�LV�FDOOHG�D�WUL�VWDWH�RXWSXW�DUH�XVHG�������7UL�6WDWH�2XWSXWV)LJXUH�����VKRZV�D�JHQHULF�ORJLF�JDWH��7KH�RXWSXW�RI�WKLV�JDWH�FDQ�EH�VZLWFKHG�HLWKHU�WR�WKH�SRVLWLYH�RU�WKH�QHJDWLYH�SRZHU�WHUPLQDO��%HFDXVH�LWV�RXWSXW�KDV�WZR�SRVVLEOH�YDOXHV��LW�LV�FDOOHG�D�WZR�VWDWH�JDWH� )LJXUH����VKRZV�D�JHQHULF�WUL�VWDWH�ORJLF�JDWH��,WV�RXWSXW�KDV�WKUHH�SRVVLEOH�YDOXHV��7KH�RXWSXW�RI�WKLV�JDWH�FDQ�EH�D�ORJLF���RU�D�ORJLF����EXW�WKH�RXWSXW�FDQ�DOVR�EH�VZLWFKHG�WR�D�GLVFRQQHFWHG�VWDWH�VR�WKDW�WKH�RXWSXW�LV�QRW�KRRNHG�XS�WR�DQ\WKLQJ��7KLV�LV�VRPHWLPHV�UHIHUUHG�WR�DV�D�GRQW�FDUH�VWDWH�DQG�LV�VRPHWLPHV�GHQRWHG�E\�WKH�OHWWHU�;��:KHQ�D�ORJLF�JDWH�VZLWFKHV�WR�WKLV�VWDWH��LW�UHOHDVHV�FRQWURO�RYHU�LWV�RXWSXW��,I�WKHUH�LV�FRQIOLFW�RQ�WKH�KRUL]RQ��VZLWFKLQJ�WR�WKLV�VWDWH�LV�D�JRRG�ZD\�WR�DYRLG�LW��$�VLPSOH�WUL�VWDWH�FLUFXLW�LV�WKH�WUL�VWDWH�EXIIHU�ZKRVH�WUXWK�WDEOH�LV�JLYHQ�LQ�7DEOH�������7KH�V\PERO�IRU�WKLV�FLUFXLW�LV

)LJXUH������$�7UL�6WDWH�/RJLF�*DWH

7DEOH�������7UXWK�7DEOH�IRU�7UL�6WDWH�%XIIHU&RQWURO ,QSXW 2XWSXW� � ;� � ;� � �� � �

Page 47: Linux assembly language programming

:KHQ�D�WUL�VWDWH�EXIIHU�LV�DGGHG�WR�WKH�ODWFK��DV�VKRZQ�LQ�)LJXUH������WKH�GDWD�ZLUH�FDQ�EH�VKDUHG�E\�WKH�LQSXW�DQG�WKH�RXWSXW��7KH�SURFHVVRU��RI�FRXUVH��QHHGV�D�WUL�VWDWH�EXIIHU�RQ�LWV�HQG�WRR��7KLV�FLUFXLW�KDV�RQO\�WKUHH�H[WHUQDO�FRQQHFWLRQV��6XSSRVH�ZH�UHSUHVHQW�LW�DV�IROORZV�DV�VKRZQ�LQ�)LJXUH�������)RXU�RI�WKHVH�FLUFXLWV�XVHG�LQ�SDUDOOHO�FRXOG�VWRUH�IRXU�ELWV��DOO�XQGHU�WKH�FRQWURO�RI�WKH�VDPH�WZR�VLJQDOV��:�5��DQG�6HO�)LJXUH������$�2QH�%LW�0HPRU\�&LUFXLW

)LJXUH�������2QH�%LW�0HPRU\

Page 48: Linux assembly language programming

6XSSRVH�ZH�UHSUHVHQW�D�IRXU�ELW�PHPRU\�OLNH�WKLV�

)LJXUH������VKRZV�D�PHPRU\�FRQVLVWLQJ�RI�IRXU�RI�WKHVH�FLUFXLWV��7ZR�DGGUHVV�ZLUHV�VXIILFH�WR�DGGUHVV�WKLV�PHPRU\��7KLV�PHPRU\�FLUFXLW�KDV�IRXU�ZRUGV��(DFK�ZRUG�KROGV�IRXU�ELWV��7KH�GDWD�ZLUHV�'2��'���'���DQG�'��DUH�DOO�VKDUHG��7KH�DGGUHVV�ZLUHV�$��DQG�$O�FRQWURO�WKH�IRXU�GLIIHUHQW�6HO�LQSXWV��7KH�DGGUHVV�ZLUHV�VHOHFW�ZKLFK�RI�WKH�IRXU�6HO�ZLUHV�LV�VHOHFWHG��7KH�RWKHU�WKUHH�ZLOO�KDYH�WKH�YDOXH����,W�LV�QRW�SRVVLEOH�WR�WXUQ�RQ�WZR�DW�D�WLPH�)LJXUH�������)RXU�:RUG�0HPRU\��(DFK�:RUG�+ROGV�)RXU�%LWV

Page 49: Linux assembly language programming

,I�ZH�LPDJLQH�WKLV�DV�WKH�PHPRU\�RI�D�WLQ\�OLWWOH�FRPSXWHU��WKHQ�WKLV�FRPSXWHU�ZRXOG�KDYH�D�IRXU�ELW�GDWD�EXV��D�WZR�ELW�DGGUHVV�EXV��DQG�D�RQH�ELW�FRQWURO�EXV��7R�IHWFK�DQ�LWHP�IURP�PHPRU\�WKH�SURFHVVRU�IRU�WKLV�OLWWOH�FRPSXWHU�ZRXOG�SXW�LWV�:�5��SLQ�DW�ORJLF���DQG�D�WZR�ELW�DGGUHVV�RQ�WKH�DGGUHVV�EXV��7KLV�ZRXOG�DFWLYDWH�WKH�6HO�VLJQDO�IRU�H[DFWO\�RQH�ZRUG�RI�PHPRU\��,I�ZH�LPDJLQH�D�IHWFK�H[HFXWH�F\FOH�LQ�SURJUHVV��WKH�SURFHVVRU�ZRXOG�QHHG�D�WZR�ELW�UHJLVWHU�WR�NHHS�WUDFN�RI�WKH�DGGUHVV�RI�WKH�LQVWUXFWLRQ�LW�ZDV�H[HFXWLQJ��$OO�SURFHVVRUV�SHUIRUPLQJ�WKH�IHWFK�H[HFXWH�F\FOH�QHHG�VXFK�D�UHJLVWHU��,W�LV�RIWHQ�FDOOHG�WKH�3URJUDP�&RXQWHU�,Q�,QWHO�PDFKLQHV��LW�LV�FDOOHG�WKH�,QVWUXFWLRQ�3RLQWHU�'HILQLWLRQ�RI�0HPRU\�&DSDFLW\$Q\�SK\VLFDO�PHPRU\�LV�DQ�REMHFW�RU�GHYLFH�ZKLFK�LV�VWDEOH�LQ�PRUH�WKDQ�RQH�VWDWH��,WV�FDSDFLW\�LV�WKH�QXPEHU�RI�LWV�VWDEOH�VWDWHV��6LQFH�D�FRPSXWHU�PHPRU\�LV�ODLG�RXW�DV�D�UHFWDQJOH�RI�REMHFWV�ZLWK�WZR�VWDEOH�VWDWHV�HDFK��WKH�QXPEHU�RI�VWDEOH�VWDWHV�LQ�WKH�PHPRU\�LV��OîZ��ZKHUH�O�DQG�Z�DUH�WKH�OHQJWK�DQG�ZLGWK�RI�WKH�UHFWDQJOH��OLV�DOVR�FDOOHG�WKH�QXPEHU�RI�ZRUGV��DQG�Z�LV�WKH�ZLGWK�RI�HDFK�ZRUG�LQ�ELWV��)RU�FRQYHQLHQFH��WKH�FDSDFLW\�LV�RIWHQ�JLYHQ��LQ�ELWV��DV�MXVW�O�î�Z��L�H��WKH�EDVH�WZR�ORJDULWKP�RI�WKH�QXPEHU�RI�VWDEOH�VWDWHV��7KH�FDSDFLW\�LQ�E\WHV��RI�FRXUVH��LV�RQH�HLJKWK�RI�WKH�FDSDFLW\�LQ�ELWV�65$0�YV��'5$0:KHQ�PHPRU\�FLUFXLWV�DUH�EXLOW�RXW�RI�ORJLF�FLUFXLWV��LW�LV�FDOOHG�VWDWLF�PHPRU\�RU�65$0��0HPRU\�FLUFXLWV�FDQ�DOVR�EH�PDGH�RXW�RI�FDSDFLWRUV��$�FKDUJHG�FDSDFLWRU�UHSUHVHQWV�D�VWRUHG����D�GLVFKDUJHG�FDSDFLWRU�UHSUHVHQWV�D�VWRUHG����6LQFH�IHZHU�WUDQVLVWRUV�DUH�UHTXLUHG��WKHVH�FLUFXLWV�FDQ�EH�SDFNHG�ZLWK�JUHDWHU�GHQVLW\�RQ�D�FKLS��6PDOO��FORVHO\�SDFNHG�FDSDFLWRUV�KDYH�WKH�GLVDGYDQWDJH�WKDW�WKH\�GLVFKDUJH�UDSLGO\��7KH\�UHTXLUH�FRQVWDQW�UHFKHFNLQJ��(YHU\�FDSDFLWRU�ZKLFK�LV�QRW�FRPSOHWHO\�GLVFKDUJHG�PXVW�EH�SXPSHG�EDFN�XS�DJDLQ��%HFDXVH�WKH�PHPRU\�LV�EHLQJ�FRQVWDQWO\��UHIUHVKHG���LW�LV�FDOOHG�G\QDPLF�PHPRU\��RU�'5$0��'\QDPLF�PHPRU\�LV�OLNH�D�ERRNVKHOI�ZLWKRXW�WKH�VKHOI��H[FHSW�WKDW�LQ�WKH�FDVH�RI�D�ERRN�IDOOLQJ�IRXU�IHHW��VD\��WR�WKH�IORRU��\RX�ZRXOG�KDYH����VHFRQGV�WR�FDWFK�LW�EHIRUH�LW�KLW�WKH�IORRU��7KHVH�OLWWOH�FDSDFLWRUV�GLVFKDUJH�LQ�������VHFRQGV��7KH�PHPRU\�UHIUHVK�PXVW�EH�GRQH�DSSUR[LPDWHO\�HYHU\������V��8QOLNH�PDQ\�GHYHORSPHQWV�ZKLFK�KDYH�QXPHURXV�FRQWULEXWRUV��G\QDPLF�PHPRU\�ZDV�LQYHQWHG�E\�D�VLQJOH�SHUVRQ��7HG�+RII��DURXQG�������'\QDPLF�PHPRU\�LV�FKHDSHU�DQG�VORZHU�WKDQ�VWDWLF�PHPRU\��6WDWLF�PHPRU\�LV�XVXDOO\�XVHG�IRU�FDFKH�PHPRU\��ZKLOH�G\QDPLF�PHPRU\�LV�XVHG�IRU�5$0�2QH�GUDZEDFN�RI�'5$0�LV�WKDW�LW�PDNHV�KDUGZDUH�GHEXJJLQJ�PXFK�PRUH�GLIILFXOW��7KH�VLPSOHVW�ZD\�WR�GR�KDUGZDUH�GHEXJJLQJ�ZRXOG�EH�WR�VORZ�WKH�FRPSXWHUV�FORFN�ZD\�GRZQ��$EHUUDQW�EHKDYLRU�FRXOG�WKHQ�EH�REVHUYHG�DV�LW�KDSSHQHG��%XW�EHFDXVH�RI�'5$0V�UDSLG�UHIUHVK�UHTXLUHPHQWV��WKHUH�LV�QR�HDV\�ZD\�WR�GR�WKLV������[���*HQHUDO�5HJLVWHUV�DQG�WKHLU�$QFHVWU\2QH�RI�WKH�UHDVRQV�EHKLQG�WKH�PDUNHW�VXFFHVV�RI�WKH�,QWHO�[���OLQH�RI�SURFHVVRUV�KDV�EHHQ�WKDW�HDFK�QHZ�SURFHVVRU�LQ�WKH�OLQH�ZDV�GHVLJQHG�VXEMHFW�WR�WKH�UHTXLUHPHQW�WKDW�LW�EH�FRPSDWLEOH�ZLWK�SUHYLRXV�SURFHVVRUV��,QWHO�QHYHU�ZLSHG�WKH�VODWH�FOHDQ�DQG�VWDUWHG�IURP�VFUDWFK�DV�0RWRUROD�DQG�,%0�GLG�ZLWK�WKH�3RZHU3&�FKLS�DQG�'(&�GLG�ZLWK�WKH�$OSKD�SURFHVVRU��7KLV�PLQLPL]HG�WKH�DPRXQW�RI�KDUGZDUH�DQG�VRIWZDUH�UHWRROLQJ�QHFHVVLWDWHG�E\�DQ�XSJUDGH��&RQVHTXHQWO\��D�GHVFULSWLRQ�RI�WKH�[����DQG�LQ�SDUWLFXODU�LWV�UHJLVWHUV�OHQGV�LWVHOI�WR�D�KLVWRULFDO�DSSURDFK��:H�EHJLQ�ZLWK�WKH������SURFHVVRU�������������5HJLVWHUV

Page 50: Linux assembly language programming

7KH������ZDV�WKH�ILUVW�UHDOO\�PDVV�SURGXFHG�PLFURSURFHVVRU��,W�ZDV�XVHG�DV�WKH�&38�LQ�VHYHUDO�HDUO\�PLFURFRPSXWHUV��LQFOXGLQJ�WKH�$WDUL��7KLV�SURFHVVRU�KDV�UHJLVWHUV�$��%��&��'��+��DQG�/��ZKLFK�DUH�DOO�HLJKW�ELW�UHJLVWHUV��7KH�YHU\�ILUVW�SHUVRQDO�FRPSXWHU�DOVR�XWLOL]HG�WKH������SURFHVVRU��,W�ZDV�WKH�$OWDLU��ZKLFK�DSSHDUHG�RQ�WKH�FRYHU�RI�3RSXODU�6FLHQFH�PDJD]LQH�RI�-DQXDU\�������7KH�IDFW�WKDW�LWV�UHJLVWHUV��PHPRU\�DGGUHVVHV��DQG�GDWD�WUDQVIHUV�ZHUH�DOO�HLJKW�ELWV�LQ�VL]H�PDNHV�WKLV�FRPSXWHU�D�YHU\�JRRG�H[DPSOH�RI�DQ�HLJKW�ELW�FRPSXWHU��$OO�WKH�UHJLVWHUV�VKRZQ�DUH�HLJKW�ELW�UHJLVWHUV��7KH�DGGUHVV�EXV�DQG�WKH�GDWD�EXV�HDFK�KDYH�HLJKW�ZLUHV�)LJXUH�������$OWDLU�&RPSXWHU

7KH�/�UHJLVWHU�LV�XVHG�WR�VWRUH�DGGUHVVHV��7KH�$OWDLU�PHPRU\�KDV�E\WHV�QXPEHUHG���WR������7KLV�PHPRU\�LV�VKRFNLQJO\�VPDOO��EXW�RQ�WKH�RWKHU�KDQG�LW�ZDV�ILOOHG�RQH�E\WH�DW�D�WLPH�E\�IOLSSLQJ�HLJKW�ELW�VZLWFKHV�7KHUH�DUH�H[WDQW�YHUVLRQV�RI�WKH������RQ�WKH�PDUNHW��WKH������DQG�WKH�=����5DGLR�6KDFNV�756����ZDV�EDVHG�RQ�WKH�=���:KHQ�,%0�LQWURGXFHG�WKH�3&��WKH\�FKRVH�WKH�,QWHO������DV�LWV�SURFHVVRU�EHFDXVH�LQ�LWV�GHDOLQJV�ZLWK�PHPRU\�DQG�WKH�V\VWHP�ERDUG��LW�DFWV�OLNH�DQ�HLJKW�ELW�SURFHVVRU��,Q�SDUWLFXODU��LW�DFWV�D�ORW�OLNH�WKH������SURFHVVRU�

Page 51: Linux assembly language programming

������������5HJLVWHUV$OWKRXJK�WKH�$OWDLU�ZDV�D�QHDUO\�SXUH�H[DPSOH�RI�DQ�HLJKW�ELW�FRPSXWHU��WKH������SURFHVVRU�GLG�KDYH�VRPH����ELW�IHDWXUHV��,Q�SDUWLFXODU��LW�ZDV�GHVLJQHG�VR�WKDW�LW�FRXOG�EH�XVHG�ZLWK�D����ELW�PHPRU\�DGGUHVVLQJ�V\VWHP��,W�GLG�WKLV�E\�DOORZLQJ�WZR�RI�WKH�HLJKW�ELW�UHJLVWHUV��WKH�+�DQG�WKH�/��WR�SDLU�XS�DQG�IRUP�D����ELW�UHJLVWHU��ZKLFK�FRXOG�WKHQ�EH�XVHG�IRU�DGGUHVVHV��:KHQ�WKLV�KLJK�E\WH�ORZ�E\WH�SDLU�ZDV�UHIHUHQFHG�E\�D�FRPPDQG��DQ�;�ZDV�XVHG�LQ�WKH�FRPPDQG��)RU�H[DPSOH�WKH����ELW�LQFUHPHQW�FRPPDQG�ZDV�,1;��7KH�HLJKW�ELW�FRPPDQG�ZDV�,15��7KH�;�VWRRG�IRU�H[WHQGHG��DQG�ZDV�XVHG�ZKHQHYHU����ELW�UHJLVWHU�SDLUV�ZHUH�EHLQJ�UHIHUHQFHG��:KHQ�WKH����ELW������SURFHVVRU��VKRZQ�LQ�)LJXUH�������ZDV�GHVLJQHG�WKLV�;�ZDV�UHFUXLWHG�IRU�XVH�LQ�WKH����ELW�UHJLVWHU�GHVLJQDWLRQV�$;��%;��&;��DQG�';��7KH����ELW�UHJLVWHUV�$;��%;��&;��DQG�';�DUH�SDLUV�RI�KLJK�DQG�ORZ�E\WH�UHJLVWHUV�$+�DQG�$/��%+�DQG�%/��&+�DQG�&/��'+�DQG�'/��7KH�RWKHU����ELW�UHJLVWHUV��63��%3��6,��DQG�',��KDYH�QR�;�LQ�WKHLU�QDPHV�DQG�DUH�QRW�E\WH�SDLUV��7KH�GDWD�EXV�KDV����ZLUHV��$OVR�VKRZQ�DUH�WKH��������� ������PHPRU\�ORFDWLRQV�LQ�RQH������PHPRU\�VHJPHQW��,Q�VSLWH�RI�WKH�DERYH�SLFWXUH��WKH������LV�QRW�UHDOO\�D�JRRG�H[DPSOH�RI�D����ELW�FRPSXWHU��7KH�DGGUHVV�EXV�KDV����ZLUHV��DQG�WKHUH�LV�D�FOXPV\�PHFKDQLVP�IRU�XVLQJ�D�KDQGIXO�RI�VHJPHQWV�DW�D�WLPH��6R�WKH�PHPRU\�LV�QRW�DFWXDOO\�OLPLWHG�WR���.��EXW�WKHUH�LV�QR�FRQYHQLHQW�ZD\�WR�XVH�DOO�����E\WHV�DW�RQFH�

)LJXUH������������&RPSXWHU��3DUWLDO�0RGHO�

Page 52: Linux assembly language programming

�������������5HJLVWHUV0DQ\�RI�WKH�ZULQNOHV�YLVLEOH�LQ�WKH�GHVLJQ�RI�WKH������DUH�VPRRWKHG�RXW�LQ�WKH��������VKRZQ�LQ�)LJXUH�������7KH�HLJKW�UHJLVWHUV�ZKRVH�QDPHV�EHJLQ�ZLWK�(�DUH�DOO�H[WHQVLRQV�RI�WKH�FRUUHVSRQGLQJ�UHJLVWHUV�RQ�WKH�������7KH�ERWWRP�KDOI�RI�HDFK����ELW�UHJLVWHU�LV�D����ELW�UHJLVWHU�LQKHULWHG�IURP�WKH�������7KH�DGGUHVV�EXV�DQG�WKH�GDWD�EXV�HDFK�KDYH����ZLUHV��$OVR�VKRZQ�DUH�WKH���������������� ������PHPRU\�ORFDWLRQV�ZKLFK�DQ�������LV�FDSDEOH�RI�DGGUHVVLQJ��$Q�������FRPSXWHU�LV�D�YHU\�JRRG�H[DPSOH�RI�D����ELW�FRPSXWHU��7KH�������DQG�WKH�3HQWLXP�DUH�DOVR����ELW�SURFHVVRUV��,Q�IDFW��LQ�WHUPV�RI�UHJLVWHUV�VL]HV��PHPRU\�DGGUHVVLQJ��DQG�VR�RQ��WKHUH�DUH�QR�FKDQJHV�DW�DOO��8S�XQWLO�WKH�3HQWLXP�,,�DQG�3HQWLXP�3UR�ZHUH�UHOHDVHG��WKH�PDLQ�GHYHORSPHQWV�FRQVLVWHG�LQ�LQFUHDVLQJ�WKH�VSHHG�ZLWKRXW�FKDQJLQJ�WKH�EDVLF�DUFKLWHFWXUH��)LJXUH������FRXOG�MXVW�DV�ZHOO�EH�ODEHOHG��3HQWLXP�&RPSXWHU��DV��������&RPSXWHU���H[FHSW�WKDW�WKH�3HQWLXP�KDV�D����ELW�GDWD�EXV�

)LJXUH�������������&RPSXWHU��3DUWLDO�0RGHO�

�����7KH�029�&RPPDQG7KLV�VHFWLRQ�LQWURGXFHV�WKH�029�FRPPDQG��,W�LV�D�YHU\�LPSRUWDQW�LQVWUXFWLRQ��029�LV�D�VWRUDJH�FRPPDQG��,W�FRSLHV�D�YDOXH�LQWR�D�ORFDWLRQ��,W�KDV�PDQ\�GLIIHUHQW�YDOLG�IRUPV��7KH�UHJ�LPP�DQG�UHJ�UHJ�IRUPV�DUH�HVSHFLDOO\�LPSRUWDQW��������029�UHJ�LPP

z UHJ�VWDQGV�IRU�UHJLVWHU��,W�PD\�EH�DQ\�RI�WKH�UHJLVWHUV�OLVWHG�LQ�7DEOH������

Page 53: Linux assembly language programming

z LPP�VWDQGV�IRU�LPPHGLDWH��7KH�WHUP�LPPHGLDWH�LV�XVHG�WR�UHIHU�WR�D�QXPHULFDO�YDOXH�JLYHQ�GLUHFWO\�E\�D�GHFLPDO�RU�KH[DGHFLPDO�UHSUHVHQWDWLRQ�DV�RSSRVHG�WR�D�UHJLVWHU�RU�PHPRU\�ORFDWLRQ�FRQWDLQLQJ�WKDW�YDOXH�)RU�H[DPSOH��LQ�����029�$;����WKH�QXPEHU����RFFXUV�DV�DQ�LPPHGLDWH�YDOXH��7KLV�FRPPDQG�VWRUHV�WKH�QXPEHU������LQWR�WKH����ELW�UHJLVWHU�$;��7KLV�UHJLVWHU�LV�WKH�VDPH�DV�WKH�ERWWRP����ELWV�RI�WKH�UHJLVWHU�($;��7KH�WRS����ELWV�DUH�XQPRGLILHG��6LQFH���� ���+��WKH�FRPPDQG�LV�WKH�VDPH�DV�WKH�FRPPDQG�����029�$;����+7KH�YDOXH�DVVLJQHG�WR�WKH�ORFDWLRQ�PXVW�ILW��7KH�FRPPDQG�����029�$/�����LV�QRW�YDOLG�EHFDXVH�����ZLOO�QRW�ILW�LQWR�DQ�HLJKW�ELW�UHJLVWHU��1$60�DQG�(GOLQDV�DOORZ�VLJQHG�LQWHJHUV��+HQFH�����029�$/��±���LV�YDOLG�DQG�GRHV�WKH�VDPH�WKLQJ�DV�����029�$/�����%XW�LV�QRW�YDOLG�LQ�(GOLQDV�EHFDXVH������LV�QRW�LQ�WKH�HLJKW�ELW�VLJQHG�UDQJH��1$60�GRHVQW�EDON�XQWLO�LW�JHWV�WR�������1$60�DOORZV�FKDUDFWHUV�WR�UHSUHVHQW�$6&,,�FRGHV��)RU�H[DPSOH�

�����029�$/��±��������029�$/��$VWRUHV�WKH�$6&,,�FRGH�IRU�WKH�OHWWHU�$��ZKLFK�LV�����LQ�$/�&RGH�XVLQJ����ELW�UHJLVWHUV�ZLOO�QRW�UXQ�RQ�[���SURFHVVRUV�SULRU�WR�WKH��������$OWKRXJK�LW�LV�D�FKDUDFWHULVWLF�RI�VR�FDOOHG�����ELW�FRGH��WR�XVH����ELW�UHJLVWHUV��VRPH�����ELW�FRGH��GRHV�DOVR��7KH�DFWXDO�GLIIHUHQFH�EHWZHHQ�����DQG����ELW�FRGH�LV�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ������������029�UHJ�UHJ029�UHJ�UHJ�FRSLHV�IURP�WKH�VHFRQG�UHJLVWHU�LQWR�WKH�ILUVW��7KH�WZR�RSHUDQG�FRPPDQGV�GHVFULEHG�LQ�WKLV�ERRN�XVH�WKH�V\QWD[�&200$1'�GHVWLQDWLRQ��VRXUFH��+HQFH�WKH�FRPPDQG

7DEOH�������[���*HQHUDO�5HJLVWHUV��ELW ���ELW ���ELW$+ $; ($;$/ %; (%;%+ &; (&;%/ '; (';&+ %3 (%3&/ 63 (63'+ 6, (6,'/ ', (',

Page 54: Linux assembly language programming

�����029�($;��(%;GRHV�QRW�FKDQJH�WKH�(%;�UHJLVWHU��,W�PHDQV

OHW�($;� �(%;QRW�PRYH�($;�WR�(%;�

7KHUH�DUH�DVVHPEOHUV�ZKLFK�XVH�WKH�RSSRVLWH�V\QWD[��VXFK�DV�WKH�$77�VW\OH�DVVHPEOHU�XVHG�E\�JFF��,Q�LWV�V\QWD[��WKH�H[DFW�VDPH�FRPPDQG�LV�ZULWWHQ�����PRYO��HE[���HD[7KH�WZR�UHJLVWHUV�XVHG�LQ�D�029�FRPPDQG�PXVW�EH�WKH�VDPH�VL]H��7KH�IROORZLQJ�FRPPDQG��IRU�H[DPSOH��LV�QRW�YDOLG������029�(%;��';�������$PELJXLW\�3UREOHP$FFRUGLQJ�WR�WKH�DSSHQG�+�KH[�FRQYHQWLRQ�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ������WKH�UHJLVWHU�QDPHV�$+��%+��&+��DQG�'+�DUH�DOVR�YDOLG�KH[DGHFLPDO�QDPHV�IRU�WKH�QXPEHUV�WHQ��HOHYHQ��WZHOYH��DQG�WKLUWHHQ��7KLV�ZRXOG�PDNH�FRPPDQGV�VXFK�DV�����029�%/��$+DPELJXRXV��7KLV�FRPPDQG�ZRXOG�EH�D�YDOLG�H[DPSOH�RI�ERWK�WKH�UHJ�UHJ�IRUP�DQG�WKH�UHJ�LPP�IRUP�RI�WKH�029�FRPPDQG��7KH�FXVWRPDU\�UHVROXWLRQ�RI�WKLV�DPELJXLW\�LV�WR�UHTXLUH�DOO�KH[DGHFLPDO�QXPEHUV�XVHG�LQ�DVVHPEO\�ODQJXDJH�FRPPDQGV�WR�EHJLQ�ZLWK�RQH�RI�WKH�GLJLWV�������«����7KLV�PRGLILFDWLRQ�RI�WKH�DSSHQG�+�FRQYHQWLRQ�ZLOO�EH�REVHUYHG�LQ�WKLV�WH[W�DQG�LV�UHTXLUHG�E\�ERWK�1$60�DQG�(GOLQDV��+HQFH�029�%/��$+�LV�DFWXDOO\�QRW�D�YDOLG�H[DPSOH�WKH�UHJ�LPP�IRUP��,W�LV�DQ�H[DPSOH�RI�WKH�UHJ�UHJ�IRUP��7R�VWRUH�WKH�LPPHGLDWH�YDOXH�WHQ�LQWR�%/�ZH�PXVW�XVH�HLWKHU�����029�%/���$+RU�����029�%/���������$GGLWLRQ�DQG�6XEWUDFWLRQ�&RPPDQGV7KLV�VHFWLRQ�GHVFULEHV�WKH�UHJ�LPP�DQGUHJ�UHJ�IRUPV�RI�WKH�$''�DQG�68%�FRPPDQGV��7KHVH�DUH�YHU\�IXQGDPHQWDO�DULWKPHWLF�LQVWUXFWLRQV��������$''�UHJ�LPP�����$''�UHJ�LPPPHDQV�WR�DGG�WKH�LPPHGLDWH�YDOXH�WR�WKH�UHJLVWHU��)RU�H[DPSOH�����$''�%/����FDQ�EH�WKRXJKW�RI�DV

OHW�%/� �%/������������$''�UHJ�UHJ

Page 55: Linux assembly language programming

7KH�FRPPDQG�����$''�UHJ�UHJPHDQV�WR�DGG�WKH�FRQWHQWV�RI�WKH�VHFRQG�UHJLVWHU�WR�WKH�ILUVW��6R�WKH�FRPPDQG�����$''�%/��$/PHDQV

OHW�%/� �%/���$/7KH�UHJLVWHU�$/�LV�QRW�FKDQJHG�E\�WKLV�FRPPDQG��������68%�UHJ�LPP7KH�FRPPDQG�����68%�%/����IRU�H[DPSOH��PHDQV

OHW�%/� �%/�����������68%�UHJ�UHJ�����68%�%/��$/IRU�H[DPSOH��PHDQV

OHW�%/� �%/���$/����� �0XOWLSOLFDWLRQ�DQG�'LYLVLRQ�&RPPDQGV,I�WKH�PXOWLSOLFDWLRQ�FRPPDQG�ZHUH�WR�IXQFWLRQ�VLPLODUO\�WR�WKH�$''�DQG�68%�FRPPDQG��ZH�ZRXOG�H[SHFW�WR�VHH�FRPPDQGV�VXFK�DV�����08/�($;��(%;ZKLFK�ZRXOG�PHDQ�WR�PXOWLSO\�WKH�FRQWHQWV�RI�WKH�UHJLVWHU�($;�E\�WKH�YDOXH�LQ�(%;��+RZHYHU��WKH�PXOWLSO\�FRPPDQG�GRHV�QRW�ZRUN�OLNH�WKLV��2QH�UHDVRQ�LV�WKDW�EHFDXVH�PXOWLSO\LQJ�QXPEHUV�WRJHWKHU�W\SLFDOO\�GRXEOHV�WKHP�LQ�VL]H��LW�GRHV�QRW�PDNH�VHQVH�WR�XVH�WKH�VDPH�VL]H�UHJLVWHUV�IRU�WKH�DQVZHU�DV�IRU�WKH�PXOWLSOLHG�QXPEHUV��������7KH�08/�&RPPDQG7KH�V\QWD[�IRU�WKH�PXOWLSO\�FRPPDQG�LV�����08/�UHJUHJ�PD\�EH�DQ\�RI�WKH����JHQHUDO�UHJLVWHUV�OLVWHG�LQ�7DEOH�������,I�WKH�UHJLVWHU�XVHG�LV�DQ�HLJKW�ELW�UHJLVWHU��IRU�H[DPSOH�����08/�%+WKHQ�WKH�FRPPDQG�PHDQV�

Page 56: Linux assembly language programming

OHW�$;� �$/���%+:KHQ�DQ�HLJKW�ELW�UHJLVWHU�LV�XVHG��LW�DOZD\V�PXOWLSOLHV�E\�$/�DQG�VWRUHV�WKH�UHVXOW�LQ�$;��:KHQ�D����ELW�UHJLVWHU�LV�XVHG��IRU�H[DPSOH������08/�%;WKHQ�WKH�FRPPDQG�PHDQV

OHW�';�$;� �$;���%;ZKHUH�WKH����ELW�DQVZHU�LV�VWRUHG�LQ�WZR����ELW�UHJLVWHUV��7KH�WRS����ELWV�DUH�VWRUHG�LQ�';��WKH�ERWWRP����ELWV�LQ�$;��:KHQ�D����ELW�UHJLVWHU�LV�XVHG��IRU�H[DPSOH������08/�(%;WKHQ�WKH�FRPPDQG�PHDQV

OHW�(';�($;� �($;���(%;$�VLQJOH�UHJLVWHU�LV�DOO�WKDW�\RX�VSHFLI\�ZKHQ�\RX�XVH�WKH�08/�FRPPDQG��7KH�RWKHU�UHJLVWHUV�DUH�DOZD\V�LPSOLHG��7KH�VLWXDWLRQ�LV�VLPLODU�WR�WKDW�ZLWK�WKH�$''�FRPPDQG�RQ�WKH������SURFHVVRU��ZKHUH�DGGLWLRQ�UHVXOWV�DUH�DOZD\V�VWRUHG�LQ�WKH�$�UHJLVWHU��7KH�FRPPDQG�$''�%�LQ������DVVHPEO\�ODQJXDJH�PHDQV

OHW�$� �$���%8QOLNH�WKH�$''�DQG�68%�FRPPDQGV��WKH�08/�FRPPDQG�KDV�QR�LPPHGLDWH�IRUP��7KH�FRPPDQG�����08/��LV�QRW�YDOLG��������7KH�',9�&RPPDQG7KH�',9�FRPPDQG�FORVHO\�UHVHPEOHV�WKH�08/�FRPPDQG�LQ�V\QWD[�DQG�LV�HVVHQWLDOO\�LWV�LQYHUVH��,W�IRUPV�ERWK�D�TXRWLHQW�DQG�D�UHPDLQGHU

)RU�H[DPSOH��LI�$;�KHOG�WKH�YDOXH����DQG�%+�KHOG�WKH�YDOXH����WKHQ�����',9�%+ZRXOG�VWRUH���LQ�$+�DQG���LQ�$/��7KH�FRPPDQG�ZRXOG�EH�UHFRJQL]HG�DV�DQ�HLJKW�ELW�FRPPDQG�EHFDXVH�%+�LV�DQ�HLJKW�ELW�UHJLVWHU�'LYLVLRQ�E\�]HUR�SURGXFHV�DQ�HUURU�FDOOHG�DQ�H[FHSWLRQ��([FHSWLRQV�DUH�GHDOW�ZLWK�LQ�FKDSWHU���,W�LV�LPSRUWDQW�WR�QRWH�WKDW�EHFDXVH�RI�WKH�VL]HV�RI�WKH�UHJLVWHUV�LQYROYHG�LQ�GLYLVLRQ��]HUR�LV�QRW�WKH�RQO\�GLYLVRU�ZKLFK�FDQ�FDXVH�DQ�H[FHSWLRQ��)RU�H[DPSOH��ZKHQ�$;�LV�GLYLGHG�E\�D�QXPEHU�VWRUHG�LQ�DQ�HLJKW�ELW�UHJLVWHU��WKH�TXRWLHQW�LV�VXSSRVHG�WR�EH�VWRUHG�LQ�$/��DQ�HLJKW�ELW�UHJLVWHU��%XW�GLYLGLQJ�D����ELW�QXPEHU�E\�DQ�HLJKW�ELW�QXPEHU�GRHV�QRW�DOZD\V�SURGXFH�D�QXPEHU�ZKLFK�FDQ�EH�VWRUHG�LQ�HLJKW�ELWV��)RU�H[DPSOH�������·��� ������RU�LQ�KH[�����+·�� ����+��%XW����+�UHTXLUHV�DW�OHDVW�WHQ�ELWV�RI�VWRUDJH��7KLV�PHDQV�WKDW�WKH�

GLYLGHQG UHPDLQGHU TXRWLHQW���ELW�IRUP (';�($; ('; ($;���ELW�IRUP ';�$; '; $;��ELW�IRUP $; $+ $/

Page 57: Linux assembly language programming

IROORZLQJ�FRGH�ZLOO�FDXVH�DQ�H[FHSWLRQ������029�$;�����+�����029�%+��������',9�%+7KLV�HUURU�LV�FDOOHG�D�GLYLVLRQ�RYHUIORZ��������1HJDWLYH�1XPEHUV�DQG�&RQJUXHQFHV7ZRV�FRPSOHPHQW�UHSUHVHQWDWLRQ�LV�XVHG�IRU�QHJDWLYH�QXPEHUV��LQ�SDUW�EHFDXVH�LW�DOORZV�DGGLWLRQ�DQG�VXEWUDFWLRQ�KDUGZDUH�WR�EH�XVHG�LUUHVSHFWLYH�RI�ZKHWKHU�WKH�ELWV�EHLQJ�RSHUDWHG�RQ�DUH�LQWHQGHG�DV�VLJQHG�LQWHJHUV�RU�DV�XQVLJQHG�LQWHJHUV��7KH�PDWKHPDWLFDO�H[SODQDWLRQ�IRU�ZK\�WZRV�FRPSOHPHQW�UHSUHVHQWDWLRQ�ZRUNV�OLNH�WKLV�LV�EDVHG�RQ�D�FRQFHSW�GXH�WR�&��)��*DXVV��D�UHPDUNDEOH�QLQHWHHQWK�FHQWXU\�PDWKHPDWLFLDQ�*DXVV�GHILQHG�D� �E�PRG�P��WR�PHDQ�WKDW�D�DQG�E�GLIIHU�RQO\�E\�VRPH�H[DFW�PXOWLSOH�RI�P��,Q�WZRV�FRPSOHPHQW�UHSUHVHQWDWLRQ��D�QHJDWLYH�QXPEHU�DQG�WKH�SRVLWLYH�QXPEHU�XVHG�WR�UHSUHVHQW�LW�GLIIHU�E\�WKH�WXUQRYHU�YDOXH�RI�WKH�UHJLVWHUV�EHLQJ�XVHG��,I�IRXU�ELW�UHJLVWHUV�DUH�EHLQJ�XVHG��WKHQ�HDFK�QHJDWLYH�DQG�LWV�SRVLWLYH�UHSUHVHQWDWLRQ�GLIIHU�E\�����RU�����DV�VKRZQ�LQ�7DEOH������,Q�*DXVV�QRWDWLRQ��IRU�H[DPSOH����� �����PRG������6R�ZKHQ�WKH�FRPSXWHU�GRHV�������������DV����������LW�GHSHQGV�RQ�WKH�IDFW�WKDW��������� ���� �����PRG������7KH�IRXU�ELW�DGGLWLRQ�KDUGZDUH�SURGXFHV����EHFDXVH�D�FDUU\�RI����LV�ORVW��%XW�WKDW�LV�RND\��(OHYHQ�LV�WKH�FRUUHFW�UHSUHVHQWDWLYH�IRU����&RQJUXHQFH�$GGLWLRQ�7KHRUHP7KLV�UHDVRQLQJ�LV�VXPPDUL]HG�LQ�WKH�IROORZLQJ�WKHRUHP�GXH�WR�*DXVV�

7KLV�WKHRUHP�VD\V�WKDW�FRQJUXHQFHV�FDQ�EH�DGGHG�MXVW�OLNH�HTXDWLRQV��*DXVV�GHYLVHG�WKH�FRQJUXHQFH�QRWDWLRQ�LQ�RUGHU�WR�PDNH�WKH�SRLQW�WKDW�D�FRQJUXHQFH�LV�VLPLODU�WR�DQ�HTXDWLRQ�&RQJUXHQFH�0XOWLSOLFDWLRQ�7KHRUHP7KH�IROORZLQJ�WKHRUHP�VWDWHV�WKDW�FRQJUXHQFHV�FDQ�DOVR�EH�PXOWLSOLHG�MXVW�OLNH�HTXDWLRQV�

%HFDXVH�RI�WKLV�QLFH�WKHRUHP��ZH�VKRXOG�EH�DEOH�WR�XVH�ERWK�VLJQHG�DQG�XQVLJQHG�QXPEHUV�ZLWK�08/�MXVW�OLNH�$''�DQG�KDYH�QR�SUREOHPV��([FHSW�IRU�RQH�WKLQJ�:H�ZDQW�WR�GRXEOH�WKH�UHJLVWHU�VL]H�DV�ZH�JR��6R�WKH�WKHRUHP�ZH�UHDOO\�QHHG�LV�WKLV�RQH�

8QIRUWXQDWHO\��WKLV�LVQW�D�WKHRUHP��,WV�D�IDOVHKRRG��)RU�H[DPSOH��LQ�WKH�HLJKW�ELW�FDVH�ZKHUH�P� �����DQG�P� ���������LI�D� ������E� ������DQG�F� �G� ����ZH�JHW�D ��F� �����DQG�E ��G� ������6R�WKH�WKHRUHP�VD\V5HPRYLQJ�WKH�HLJKW�ELW�WXUQRYHU�YDOXH�RI�����IURP�����OHDYHV������+HQFH�LI�ZH�FRQVLGHUHG�WKH�DQVZHU�WR�EH�

Page 58: Linux assembly language programming

����XQVLJQHG�RU�����VLJQHG��WKHQ�HYHU\WKLQJ�ZRXOG�EH�RND\��7ZR�KXQGUHG�WZHQW\�IRXU�LV�WKH�WZRV�FRPSOHPHQW�SRVLWLYH�WKDW�LV�HTXLYDOHQW�WR�����LQ�WKH�HLJKW�ELW�V\VWHP��%XW�ZHUH�QRW�FRQWHQW�ZLWK�HLJKW�ELWV��:H�ZDQW�����$QG,Q�WKH����ELW�V\VWHP������LV�UHSUHVHQWHG�E\��������QRW������&RQVHTXHQWO\��ZH�FDQW�XVH�08/��RU�',9��IRU�ERWK�VLJQHG�DQG�XQVLJQHG�QXPEHUV��08/�DQG�',9�ZRUN�IRU�XQVLJQHG�QXPEHUV��7KHUH�DUH�GLIIHUHQW�FRPPDQGV�ZKLFK�ZRUN�IRU�VLJQHG�QXPEHUV��,08/�DQG�,',9��7KLV�LV�DQ�H[DPSOH�RI�WKH�LVVXH�UDLVHG�LQ�VHFWLRQ�������)XUWKHU�5HDGLQJ7KH�0LFURSURFHVVRU��$�%LRJUDSK\��0LFKDHO6�0DORQH��6SULQJHU�������7KH�$QDWRP\�RI�D�+LJK�3HUIRUPDQFH�0LFURSURFHVVRU��6KULYHU�DQG�6PLWK��,(((�������&KDSWHU����$66(0%/<�/$1*8$*($�FRPSXWHU�SURJUDP�LV�VRPHWKLQJ�ZKLFK�FDQ�EH�VWRUHG�LQ�D�FRPSXWHUV�PHPRU\��,I�WKH�PHPRU\�KDV�RQH�E\WH�ZRUGV��ZH�FDQ�WKHQ�VD\�WKDW�WKH�FRPSXWHU�SURJUDP�FRQVLVWV�RI�E\WHV��7KHVH�E\WHV�DUH�DOVR�FDOOHG�PDFKLQH�ODQJXDJH��:ULWLQJ�D�SURJUDP�E\�OLVWLQJ�WKHVH�E\WHV�H[SOLFLWO\�LV�FDOOHG�PDFKLQH�ODQJXDJH�SURJUDPPLQJ��,W�LV�WKH�RULJLQDO�IRUP�RI�SURJUDPPLQJ��,W�LV�GHILQLWHO\�WKH�PRVW�WHGLRXV��$VVHPEO\�ODQJXDJH�ZDV�GHYLVHG�DV�D�ZD\�RI�VSHFLI\LQJ�PDFKLQH�FRGH�ZLWKRXW�DFWXDOO\�KDYLQJ�WR�ZULWH�LW�GRZQ��$VVHPEO\�ODQJXDJH�PD\�EH�PHUH�VKRUWKDQG�RU�LW�PD\�LQYROYH�FRPSOH[�PDFURV��VRPH�RI�ZKLFK�PD\�HYHQ�UHVHPEOH�LI�RU�ZKLOH�VWDWHPHQWV�LQ�&��%XW�ZKHWKHU�LW�LV�SULPLWLYH�RU�IDQF\��LWV�GHILQLQJ�FKDUDFWHULVWLF�LV�WKDW�LW�JLYHV�WKH�SURJUDPPHU�FRQWURO�RYHU�WKH�PDFKLQH�ODQJXDJH�7KUHH�JRRG�UHDVRQV�IRU�OHDUQLQJ�DVVHPEO\�ODQJXDJH�DUH�� ,Q�WUXO\�WLPH�FULWLFDO�VHFWLRQV�RI�FRGH��LW�LV�VRPHWLPHV�SRVVLEOH�WR�LPSURYH�SHUIRUPDQFH�E\�FRGLQJ�LQ�DVVHPEO\�ODQJXDJH��� ,W�LV�D�JRRG�ZD\�WR�OHDUQ�KRZ�D�SDUWLFXODU�&38�ZRUNV��� ,Q�ZULWLQJ�D�QHZ�RSHUDWLQJ�V\VWHP�RU�LQ�SRUWLQJ�DQ�H[LVWLQJ�V\VWHP�WR�D�QHZ�PDFKLQH��WKHUH�DUH�VHFWLRQV�RI�FRGH�ZKLFK�PXVW�EH�ZULWWHQ�LQ�DVVHPEO\�ODQJXDJH�

$VVHPEO\�ODQJXDJHV�DUH�ZULWWHQ�WR�ILW�KDQG�LQ�JORYH�ZLWK�D�VSHFLILF�SURFHVVRU��*LYHQ�WKH�FRQVLGHUDEOH�YDULHW\�RI�SURFHVVRUV�DQG�LQVWUXFWLRQ�VHWV��RQH�PLJKW�H[SHFW�WKHUH�WR�EH�D�FRQVLGHUDEOH�YDULHW\�LQ�WKH�LQVWUXFWLRQ�IRUPDWV�IRU�WKH�YDULRXV�DVVHPEO\�ODQJXDJHV�DV�ZHOO��%XW�WKLV�LV�QRW�WKH�FDVH��$VVHPEO\�ODQJXDJHV�JHQHUDOO\�IROORZ�RQH�XQLYHUVDO�IRUPDW�ZKLFK�PLJKW�EH�FDOOHG�WKH�IRXU�ILHOG�IRUPDW�����7KH�)RXU�)LHOG�)RUPDW$FFRUGLQJ�WR�WKLV�IRUPDW�HYHU\�DVVHPEO\�ODQJXDJH�SURJUDP�FRQVLVWV�RI�OLQHV��(YHU\�OLQH�FRQVLVWV�RI�IRXU�ILHOGV��7KH�IRXU�ILHOGV�DUH�WKH�ODEHO�ILHOG��WKH�PQHPRQLF�ILHOG��WKH�RSHUDQG�ILHOG��DQG�WKH�FRPPHQW�ILHOG��� 7KH�ODEHO�ILHOG�LV�XVHG�IRU�D�ODEHO�ZKLFK�VSHFLILHV�WKH�WDUJHW�RI�D�MXPS�LQVWUXFWLRQ��$�MXPS�LV�WKH�VDPH�DV�D�JR�WR�LQVWUXFWLRQ��([DPSOHV�RI�MXPS�LQVWUXFWLRQV�DUH�JLYHQ�LQ�VHFWLRQ������� 7KH�PQHPRQLF�ILHOG�FRQWDLQV�DQ�LQVWUXFWLRQ�VSHFLILHU��([DPSOHV�RI�PQHPRQLFV�DUH�029��$''��68%�HWF��7KH�ZRUG�PQHPRQLF�VXJJHVWV�WKDW�LW�PDNHV�WKH�PDFKLQH�FRGH�HDV\�WR�UHPHPEHU��DOWKRXJK�LW�GRHVQW��LW�PDNHV�WKH�PDFKLQH�FRGH�XQQHFHVVDU\�WR�UHPHPEHU��� 7KH�RSHUDQG�ILHOG�FRQWDLQV�WKH�REMHFW�RU�REMHFWV�RQ�ZKLFK�WKH�LQVWUXFWLRQ�LV�RSHUDWLQJ��,I�WKHUH�LV�PRUH�WKDQ�RQH�RSHUDQG��WKH\�DUH�VHSDUDWHG�E\�FRPPDV��$V�ZH�QRWLFHG�DERYH��$''�WDNHV�WZR�RSHUDQGV��-03

Page 59: Linux assembly language programming

RQ�WKH�RWKHU�KDQG�WDNHV�RQH��6RPH�PQHPRQLFV�WDNH�QRQH�DW�DOO��� 7KH�FRPPHQW�ILHOG�FRQWDLQV�GRFXPHQWDWLRQ��,W�EHJLQV�ZLWK�D�VHPLFRORQ��,Q�DQ\�FRPSXWHU�ODQJXDJH��GRFXPHQWDWLRQ�LV�LPSRUWDQW��,Q�DVVHPEO\�ODQJXDJH��GRFXPHQWDWLRQ�LV�HVSHFLDOO\�LPSRUWDQW�EHFDXVH�DQ�DVVHPEO\�ODQJXDJH�SURJUDP�LV�HVSHFLDOO\�KDUG�WR�UHDG�ZLWKRXW�LW��$�OLQH�PD\�FRQVLVW�RI�QRWKLQJ�EXW�D�FRPPHQW�

3URJUDP�����LV�DQ�H[DPSOH�RI�DQ�[���DVVHPEO\�ODQJXDJH�SURJUDP��7KH�UHDGHU�VKRXOG�QRWH�WKH�FRQVLVWHQW�IRXU�ILHOG�OD\RXW�HYHQ�WKRXJK�VRPH�RI�WKH�ILHOGV�RQ�VRPH�RI�WKH�OLQHV�DUH�HPSW\��0DQ\�RI�WKH�LQVWUXFWLRQV�LQ�3URJUDP�����DUH�PDNLQJ�WKHLU�ILUVW�DSSHDUDQFH�KHUH�LQ�WKLV�ERRN��7KHVH�QHZ�LQVWUXFWLRQV�DUH�DOO�GLVFXVVHG�LQ�WKLV�FKDSWHU�3URJUDP����������������������*UHDWHVW�FRPPRQ�GLYLVRU�SURJUDP���������������029�(';�����������LV�WKH�RQO\�(GOLQDV�LQSXW�SRUW�������,1�($;�>';@�����*HW�WKH�XVHUV�ILUVW�LQSXW�������029�(&;��($;����*HW�WKH�LQSXW�RXW�RI�KDUPV�ZD\�������,1�($;�>';@�����*HW�WKH�XVHUV�VHFRQG�LQSXW�������029�(';��($;����8VH�(';�IRU�WKH�ODUJHU�RI�WKH�WZR�LQSXWV25'����68%�($;��(&;����8VH�($;�DV�D�ZRUNLQJ�FRS\�RI�(';�������-=�*&'����������:KHQ�HTXDOLW\�LV�REWDLQHG�ZH�DUH�GRQH��������-16�1;7���������:H�ZDQW�(';�WR�EH�ODUJHU��1R�VZDS�QHHGHG�������029�($;��(&;����6ZDS�(';�DQG�(&;��7DNHV�WKUHH�029V��������029�(&;��(';1;7����029�(';��($;����,I�WKHUH�ZDV�QR�VZDS�WKHQ�(';� �(';�(&;�������-03�25'���������(QG�RI�WKH�ORRS*&'����029�($;��(';����7KH�*&'�LV�LQ�(';�������029�(';���������:H�QHHG�(';�IRU�WKH�RXWSXW�SRUW�QXPEHU�������287�>';@�($;����'LVSOD\�WKH�DQVZHU�WR�WKH�XVHU�������5(7����&RPSXWHUV�IURP�WKH�&38�6WDQGSRLQW&RPSXWHUV�DUH�RIWHQ�GHVFULEHG�DV�FRQVLVWLQJ�RI�WKUHH�SDUWV��WKH�&38��WKH�PHPRU\��DQG�WKH�LQSXW�RXWSXW��RU�,�2�V\VWHP��$�GLDJUDP�GUDZQ�DFFRUGLQJ�WR�WKLV�SLFWXUH�ORRNV�OLNH�)LJXUH������,QFOXGHG�LQ�WKH�,�2�V\VWHP�DUH�WKH�PRQLWRU��WKH�NH\ERDUG��WKH�KDUG�GULYH��WKH�SULQWHU��WKH�PRGHP��WKH�VRXQG�FDUG��DQG�WKH�&'520��7KHVH�DUH�DOO�MXVW�,�2�GHYLFHV��7KLV�LV�D�SURFHVVRU�FHQWULF�YLHZ��-XVW�DV�PHPEHUV�RI�D�JURXS�VRPHWLPHV�FDWHJRUL]H�SHRSOH�LQ�WHUPV�RI�KRZ�WKH\�UHODWH�WR�WKH�JURXS��WKLV�SLFWXUH�RI�D�FRPSXWHU�GHILQHV�SDUWV�RI�D�FRPSXWHU�DFFRUGLQJ�WR�KRZ�WKH\�UHODWH�WR�WKH�&38��6LQFH�DVVHPEO\�ODQJXDJH�LV�DOO�DERXW�ZRUNLQJ�ZLWK�WKH�&38��KRZHYHU��LW�LV�D�XVHIXO�SRLQW�RI�YLHZ�IRU�XV�WR�DGRSW�

)LJXUH������$OO�&RPSXWHUV�DUH�'LYLGHG�LQWR�7KUHH�3DUWV

,I�ZH�LPDJLQH�WKH�&38�LQ�WKH�SLFWXUH�WR�EH�D������WKHQ�ZH�FDQ�WKLQN�RI�WKH�GDWD�EXV�DV�D�VHW�RI����ZLUHV�FRQQHFWHG�WR����SLQV�RQ�WKH�&38��DQG�WKH�DGGUHVV�EXV�DV�DQRWKHU�VHW�RI����ZLUHV�DOVR�FRQQHFWHG�WR�WKH�&38��1RWLFH�WKDW�WKH�PHPRU\�DQG�,�2�V\VWHPV�DUH�FRQQHFWHG�WR�WKH�SURFHVVRU�LQ�HVVHQWLDOO\�WKH�VDPH�ZD\��,I�ZH�

Page 60: Linux assembly language programming

LPDJLQH�YLHZLQJ�WKH�ELWV�IORZLQJ�RQ�WKH�EXVHV��D�GDWD�WUDQVIHU�EHWZHHQ�WKH�&38�DQG�WKH�PHPRU\�ORRNV�DOPRVW�H[DFWO\�OLNH�D�GDWD�WUDQVIHU�EHWZHHQ�WKH�&38�DQG�WKH�,�2�V\VWHP��7KH�GLIIHUHQFH�DFWXDOO\�ERLOV�GRZQ�WR�D�VLQJOH�SLQ�RQ�WKH�&38��7KLV�SLQ�LV�FDOOHG�WKH�0�,2��SLQ��:KHQ�WKLV�SLQ�LV�DW�ORJLF����LW�VLJQDOV�D�PHPRU\�WUDQVIHU��:KHQ�LW�LV�DW�ORJLF����LW�VLJQDOV�DQ�,�2�WUDQVIHU��7KH�DERYH�GLDJUDP�GRHV�QRW�UHDOO\�PDNH�VHQVH�ZLWKRXW�DQ�0�,2��ZLUH��,W�DOVR�QHHGV�D�:�5��ZLUH�WR�VLJQDO�ZKHWKHU�GDWD�LV�WR�IORZ�LQWR�RU�RXW�RI�WKH�SURFHVVRU��7KHVH�ZLUHV�DUH�FDOOHG�FRQWURO�ZLUHV�DQG�DUH�SDUW�RI�WKH�FRQWURO�EXV�7KH�UHDGHU�LV�XUJHG�WR�FRPSDUH�)LJXUH�����ZLWK�)LJXUH�������ZKLFK�VKRZV�LQ�JUHDWHU�GHWDLO�KRZ�WKH�ZLUHV�IURP�WKH�WKUHH�GLIIHUHQW�EXVHV�KRRN�XS�WR�D�PHPRU\�FLUFXLW�������0HPRU\�YV��,�2,Q�7DEOH�����ZH�VHH�WZR�LPP�IRUPV�RI�WKH�029�FRPPDQG�FRPSDUHG�ZLWK�WKH�FRUUHVSRQGLQJ�,�2�FRPPDQGV��7KHVH�FRPPDQGV�FDUU\�RXW�WUDQVIHUV�EHWZHHQ�WKH�$/�UHJLVWHU�DQG�WKH�PHPRU\�RU�,�2�GHYLFH�ORFDWHG�DW�DGGUHVV�����7KH�SURFHVVRU

VLJQDOV�UHDG�YV��ZULWH�XVLQJ�WKH�:�5��SLQ�DQG�PHPRU\�YV��,�2�XVLQJ�WKH�0�,2��SLQ��2WKHUZLVH�WKH�WUDQVDFWLRQ�LV�YHU\�VLPLODU�2QH�VLJQLILFDQW�GLIIHUHQFH�EHWZHHQ�PHPRU\�DQG�,�2�DGGUHVVLQJ�RQ�WKH�[���LV�WKDW�PHPRU\�DGGUHVVHV�XQGHUJR�SURFHVVLQJ�EHIRUH�WKH\�OHDYH�WKH�SURFHVVRU��7KLV�SURFHVVLQJ�KDV�WZR�VWDJHV��VHJPHQWDWLRQ�DQG�SDJLQJ��6HJPHQWDWLRQ�LV�GHVFULEHG�LQ�FKDSWHU����DQG�SDJLQJ�LV�GHVFULEHG�LQ�FKDSWHU���$QRWKHU�GLIIHUHQFH�EHWZHHQ�WKH�,�2�V\VWHP�DQG�WKH�PHPRU\�LV�WKDW�WKH\�GR�QRW�KDYH�WKH�VDPH�UDQJH�RI�YDOLG�DGGUHVVHV��$V�GLVFXVVHG�LQ�FKDSWHU����WKH�UDQJH�RI�YDOLG�PHPRU\�DGGUHVVHV�YDULHV�IURP�RQH�[���SURFHVVRU�WR�DQRWKHU���,W�GHSHQGV�RQ�WKH�QXPEHU�RI�DGGUHVV�SLQV�WKH�SURFHVVRU�KDV���7KH�UDQJH�RI�YDOLG�,�2�DGGUHVVHV�RQ�WKH�RWKHU�KDQG�LV�WKH�VDPH�RQ�DOO�[���SURFHVVRUV��,W�LV�WKH����ELW�UDQJH�IURP���WR���������,QFLGHQWDOO\��WKLV�PHDQV�WKDW�WKH�,�2�V\VWHP�GRHV�QRW�QHHG�WR�EH�FRQQHFWHG�WR�DOO����DGGUHVV�ZLUHV��RQO\�WR�WKH�ERWWRP�����7KH�DGGUHVVHV�LQ�WKLV�UDQJH�DUH�FDOOHG�SRUWV�RU�SRUW�QXPEHUV�0DQ\�H[LVWLQJ�,�2�GHYLFHV��VXFK�DV�GLVN�GULYHV��SULQWHUV��DQG�VHULDO�SRUWV��XVH�D�KDQGIXO�RI�SRUWV�HDFK��7DEOH�����IRU�H[DPSOH��OLVWV�WKH�HLJKW�DGGUHVVHV�XVHG�E\�WKH�VWDQGDUG�VHULDO�SRUWV���&OHDUO\�WKH�SRUW�QXPEHUV���WKURXJK���LQ�WKH�WDEOH�DUH�QRW�SRUW�QXPEHUV�LQ�WKH�VSHFLILF�VHQVH�ZH�DUH�FRQVLGHULQJ�KHUH��%XW�WKH�IROORZLQJ�KH[�DGGUHVVHV�DUH�SHUIHFW�H[DPSOHV�RI�WKHVH�SRUW�QXPEHUV���$�UHODWLYHO\�FRPSOHWH

OLVW�RI�WKH�SRUW�QXPEHUV�XVHG�RQ�D�VWDQGDUG�3&�PD\�EH�IRXQG�LQ�$SSHQGL[�$�RI�6KDQOH\V�,6$�6\VWHP�$UFKLWHFWXUH��7KH�,�2�SRUWV�LQ�XVH�RQ�D�/LQX[�PDFKLQH�PD\�EH�DFFHVVHG�YLD�WKH��SURF�GLUHFWRU\�XVLQJ�WKH�FRPPDQG����OLQX[ER[��FDW��SURF�LRSRUWV

7DEOH������([DPSOHV�RI�0HPRU\�DQG�,�2�7UDQVIHU�&RPPDQGV0HPRU\ ,�25HDG 029�$/�>��@ ,1�$/�>��@:ULWH 029�>��@�$/ 287�>��@�$/

7DEOH������6WDQGDUG�6HULDO�3RUW�,�2�$GGUHVVHV&RP�3RUW ,�2�$GGUHVVHV� �)�+��))+� �)�+��))+� �(�+��()+� �)�+��))+

Page 61: Linux assembly language programming

7KH�FORVH�VLPLODULW\�RI�PHPRU\�DQG�,�2�WUDQVIHUV�LV�QRW�IXOO\�UHIOHFWHG�LQ�[���DVVHPEO\�ODQJXDJH��ZKLFK�KDV�PDQ\�FRPPDQGV�LQYROYLQJ�PHPRU\�DFFHVV�EXW�RQO\�D�IHZ��,1�DQG�287�IRU�H[DPSOH��FRQWUROOLQJ�,�2�DFFHVV��7KH�XVH�RI�029�DQG�PDQ\�RWKHU�FRPPDQGV�WR�DFFHVV�PHPRU\�LV�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ������7KH�,1DQG�287�FRPPDQGV�DUH�GLVFXVVHG�QH[W�������7KH�,1�&RPPDQG7KH�LQSXW�FRPPDQG�WUDQVIHUV�GDWD�IURP�DQ�,�2�SRUW�LQWR�WKH�SURFHVVRU��7KHUH�DUH�VL[�YDOLG�IRUPV�RI�WKLV�FRPPDQG����,1�($;��>';@����,1�$;��>';@����,1�$/��>';@����,1�($;�>LPP@����,1�$;�>LPP@����,1�$/�>LPP@ZKHUH�LPP�LV�DQ\�RQH�E\WH�QXPEHU��1RWLFH�WKDW�WKH�JHQHUDO

&200$1'�GHVWLQDWLRQ��VRXUFHIRUPDW�LV�DGKHUHG�WR�LQ�WKLV�LQVWUXFWLRQ��7KH�YDOLG�GHVWLQDWLRQ�UHJLVWHUV�DUH�($;��$;��DQG�$/��7KH�,�2�GHYLFH�ZKRVH�SRUW�QXPEHU�LV�VWRUHG�LQ�';�RU�JLYHQ�E\�LPP�LV�WKH�VRXUFH�1RWLFH�WKDW�';�LV�D����ELW�UHJLVWHU��7KLV�PDNHV�VHQVH�EHFDXVH�D�SRUW�QXPEHU�LV�D����ELW�QXPEHU��0RVW�,QWHO�DVVHPEOHUV��LQFOXGLQJ�1$60��GR�QRW�XVH�EUDFNHWV�DURXQG�WKH�SRUW�QXPEHU��,I�\RX�GR��KRZHYHU��\RX�FDQ�WKLQN�RI�WKH�FRPPDQG�,1�$/��>';@��IRU�H[DPSOH��DV

OHW�$/� �>';@ZKHUH�WKH�>';@�UHIHUV�WR�GDWD�ORFDWHG�DW�WKH�DGGUHVV�';��7KLV�LV�GRQH�LQ�(GOLQDV�IRU�WKH�VDNH�RI�FRQVLVWHQF\��0HPRU\�FRPPDQGV�XVH�EUDFNHWV�LQ�WKH�VDPH�ZD\��%UDFNHWV�EHFRPH�D�GHUHIHUHQFLQJ�RSHUDWRU�OLNH� �LQ�WKH�&�ODQJXDJH��,Q�ERWK�(GOLQDV�DQG�1$60��DOO�UHIHUHQFHV�WR�GDWD�LQ�PHPRU\�E\�PHDQV�RI�DQ�DGGUHVV�XVH�EUDFNHWV�DURXQG�WKH�DGGUHVV��1$60�GRHV�QRW�XVH�EUDFNHWV�IRU�,�2�UHIHUHQFHV��+HQFH��LQ�XVLQJ�1$60��WKH�EUDFNHWV�LQ�WKH�,1�DQG�287�LQVWUXFWLRQV�DUH�RPLWWHG�%HFDXVH�WKH�LPP�IRUPV�RI�WKH�,1�FRPPDQG�DFFHSW�RQO\�RQH�E\WH�SRUWV��RQO\�WKH�ERWWRP�����RI�WKH��������SRUWV�DUH�DFFHVVLEOH�XVLQJ�WKH�LPP�IRUPV��1RWLFH�WKDW�WKH�,1�FRPPDQG�ZDV�QRW�JLYHQ�DV�,1�UHJ��>UHJ@��7KLV�LV�EHFDXVH�IRUPV�VXFK�DV�,1�(%;��>';@�DQG�,1�($;��>&;@�DUH�QRW�YDOLG�������7KH�287�&RPPDQG7KH�RXWSXW�FRPPDQG�WUDQVIHUV�GDWD�IURP�WKH�SURFHVVRU�WR�DQ�,�2�GHYLFH��7KH�VL[�YDOLG�IRUPV�RI�WKLV�FRPPDQG�DUH����287�>';@��($;����287�>';@��$;����287�>';@��$/����287�>LPP@��($;����287�>LPP@��$;����287�>LPP@��$/ZKHUH�DJDLQ�LPP�LV�DQ\�RQH�E\WH�QXPEHU��7KH�RUGHU�RI�WKH�RSHUDQGV�LV�RSSRVLWH�WR�ZKDW�LW�LV�LQ�WKH�,1FRPPDQG�EHFDXVH�WKH�GDWD�LV�IORZLQJ�LQ�WKH�RSSRVLWH�GLUHFWLRQ��7KH�VRXUFH�LV�HLWKHU�WKH�($;��WKH�$;��RU�WKH�$/�UHJLVWHU��DQG�WKH�GHVWLQDWLRQ�LV�DQ�,�2�GHYLFH��$JDLQ��1$60�GRHVQW�XVH�EUDFNHWV�ZLWK�287�������0HPRU\�0DSSHG�,�2

Page 62: Linux assembly language programming

:KHQ�DGGUHVVHV�LQ�WKH�PHPRU\�DGGUHVV�VSDFH�DUH�FRQQHFWHG��LQ�IDFW��WR�,�2�GHYLFHV��WKLV�LV�UHIHUUHG�WR�DV�PHPRU\�PDSSHG�,�2��7KH�YLGHR�EXIIHU�RQ�WKH�VWDQGDUG�3&�LV�DQ�H[DPSOH��&KDUDFWHUV�VWRUHG�DW�WKH������E\WHV�VWDUWLQJ�DW�WKH�PHPRU\�DGGUHVV�%����+�DUH�RXWSXW�WR�WKH�PRQLWRU�8VLQJ�D�VHSDUDWH�DGGUHVV�VSDFH�IRU�,�2�GHYLFHV�LV�QRW�WKH�RQO\�FRQFHLYDEOH�DSSURDFK�WR�,�2�DGGUHVVLQJ��0DQ\�DUFKLWHFWXUHV�XVH�D�VLQJOH�VHW�RI�DGGUHVVHV�DQG�VLPSO\�UHVHUYH�VRPH�RI�WKHP�IRU�,�2�5HVHUYHG�DGGUHVVHV�DUH�DOVR�XVHG�RQ�3&V�IRU�520��RU�UHDG�RQO\�PHPRU\��,I�PHPRU\�ZULWHV�DUH�GRQH�WR�UHDG�RQO\�PHPRU\��WKH�SURFHVVRU�ZLOO�VHQG�WKH�DSSURSULDWH�ZULWH�VLJQDOV�RXW�RQWR�WKH�EXVHV��EXW�QR�FKDQJH�ZLOO�EH�PDGH�LQ�WKH��VWRUHG��GDWD�����6LPSOH�$VVHPEO\�/DQJXDJH�3URJUDPV6LPSOH�KLJK�OHYHO�ODQJXDJH�SURJUDPV�RIWHQ�KDYH�D�WKUHH�SDUW�IRUPDW��LQSXW�GDWD��GR�FDOFXODWLRQV��DQG�WKHQ�RXWSXW�WKH�UHVXOWV��8VLQJ�(GOLQDV��VLPSOH�SURJUDPV�RI�WKH�VDPH�VW\OH�FDQ�EH�ZULWWHQ�LQ�[���DVVHPEO\�ODQJXDJH�������(GOLQDV�3RUWV7KH�LPDJLQDU\�PDFKLQH�VLPXODWHG�E\�(GOLQDV�XVHV�RQO\�WZR�SRUW�QXPEHUV�

z ��LV�WKH�SRUW�IRU�WKH�NH\ERDUG�LQSXW�z ��LV�WKH�SRUW�IRU�WKH�VFUHHQ�RXWSXW�

.H\ERDUG�LQSXW�LV�HFKRHG�DW�WKH�ORZHU�OHIW�RI�WKH�VFUHHQ�DQG�RXWSXW�LV�GLVSOD\HG�DW�WKH�ORZHU�ULJKW��:KHQ�,1�($;��>';@�LV�XVHG�ZLWK�(GOLQDV��WKH�YDOXH�VWRUHG�LQ�';�VKRXOG�EH����:KHQ�SRUW���LV�DGGUHVVHG��WKH�XVHU�LV�SURPSWHG�IRU�DQ�LQSXW�YDOXH��:KHQ�287�>';@�($;�LV�XVHG��WKH�YDOXH�VWRUHG�LQ�';�VKRXOG�EH����:KHQ�SRUW���LV�XVHG��WKH�RXWSXW�YDOXH�LV�GLVSOD\HG�LQ�EDVH�WHQ�DW�WKH�ERWWRP�ULJKW�RI�WKH�VFUHHQ��7KH�XVH�RI�WKHVH�WZR�SRUWV�DOORZV�YHU\�VLPSOH�SURJUDPV�WR�EH�ZULWWHQ�LQ�JHQXLQH�[���DVVHPEO\�ODQJXDJH�DQG�UXQ�RQ�WKH�(GOLQDV�VLPXODWRU�3URJUDPV�XVLQJ�(GOLQDV�SRUWV�ZLOO�QRW�UXQ�XQGHU�'26�RU�8QL[��,Q�FKDSWHU����VHFWLRQ�������LW�LV�VKRZQ�KRZ�WKHVH�,�2�FRPPDQGV�WR�WKH�VLPXODWHG�PDFKLQH�PD\�EH�UHSODFHG�E\�FDOOV�WR�WKH�&�OLEUDU\�IXQFWLRQV�VFDQI��DQG�SULQWI����,Q�WKLV�ZD\��VLPSOH�(GOLQDV�SURJUDPV�XVLQJ�UHDO�,�2�FDQ�EH�UXQ�XQGHU�/LQX[�������7KH�5(7�&RPPDQG3URJUDPV�DUH�VHW�LQ�PRWLRQ�E\�WKH�RSHUDWLQJ�V\VWHP��:KHQ�WKH�SURJUDP�LV�ILQLVKHG��LW�PXVW�UHWXUQ�FRQWURO�WR�WKH�RSHUDWLQJ�V\VWHP��5(7�GRHV�WKLV��6XESURJUDPV�DOVR�XVH�5(7�WR�UHWXUQ�FRQWURO�WR�D�FDOOLQJ�SURJUDP��5(7ZRUNV�XVLQJ�WKH�VWDFN�DQG�LV�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ�����������3URJUDP�WR�$GG�7ZR�1XPEHUV:H�QRZ�KDYH�DOO�WKH�FRPPDQGV�ZH�QHHG�WR�ZULWH�VRPH�VLPSOH�EXW�FRPSOHWH�SURJUDPV��+HUH�LV�DQ�(GOLQDV�SURJUDP�WR�DGG�WZR�QXPEHUV�3URJUDP������������029�(';���������0DNLQJ�DOO����ELWV�]HUR�PDNHV�';�]HUR��������,1�($;��>';@����8VHU�HQWHUV�WKH�ILUVW�QXPEHU�YLD�SRUW�]HUR��������029�(%;��($;����*HW�WKH�ILUVW�QXPEHU�RXW�RI�WKH�ZD\��������,1�($;��>';@����8VHU�HQWHUV�WKH�VHFRQG�QXPEHU��������$''�($;��(%;����$GG�WKH�ILUVW�QXPEHU�WR�WKH�VHFRQG��������029�(';���������7KH�(GOLQDV�RXWSXW�SRUW�LV�RQH��������287�>';@��($;���7KH�UHVXOW�LV�RXWSXW�WR�WKH�XVHU��������5(7�������������(QG�WKH�VLPXODWLRQ�

Page 63: Linux assembly language programming

����$VVHPEOHU�3URJUDPV�ZLWK�-XPSV+LJK�OHYHO�ODQJXDJHV�QHHG�ORRSV�LQ�RUGHU�WR�EH�DEOH�WR�GR�WKHLU�ZRUN��7KHVH�ORRSV�PXVW�EH�WXUQHG�LQWR�DVVHPEO\�FRGH�E\�D�FRPSLOHU��)RU�H[DPSOH��DV�LOOXVWUDWHG�LQ�)LJXUH������WR�GR�D�&�ODQJXDJH�ZKLOH�ORRS�LQ�WKH�PRVW�VWUDLJKWIRUZDUG�ZD\�UHTXLUHV�ERWK�D�FRQGLWLRQDO�MXPS�IRUZDUG�DQG�DQ�XQFRQGLWLRQDO�MXPS�EDFNZDUG�

)LJXUH������ZKLOH��WHVW��%RG\�

Page 64: Linux assembly language programming

������7KH�-03�&RPPDQG7KH�IHWFK�H[HFXWH�F\FOH�ZRUNV�E\�FDOFXODWLQJ�WKH�DGGUHVV�LQ�PHPRU\�RI�WKH�QH[W�LQVWUXFWLRQ��7KLV�DGGUHVV�LV�QRUPDOO\�GHWHUPLQHG�E\�MXVW�JRLQJ�WR�WKH�ILUVW�DGGUHVVEH\RQG�WKH�FXUUHQW�LQVWUXFWLRQ��,Q�RUGHU�WR�VXSSRUW�LI�WKHQ�VWDWHPHQWV�RU�ORRSV�LQ�KLJK�OHYHO�ODQJXDJHV��KRZHYHU��MXPSV�DUH�QHHGHG��7KH�-03�FRPPDQG�WUDQVIHUV�H[HFXWLRQ�WR�WKH�DGGUHVV�VSHFLILHG�E\�D�ODEHO�7KH�-03�FRPPDQG�KDV�WKH�IRUP����-03�ODEHO7KH�ODEHO�LV�FUHDWHG�E\�WKH�SURJUDPPHU��,W�LV�ZLVH�WR�GHYLVH�ODEHOV�ZKLFK�KHOS�LQ�XQGHUVWDQGLQJ�WKH�SURJUDP��)RU�WKLV�SXUSRVH��ORQJ�ODEHOV�DUH�XVHIXO��2Q�WKH�RWKHU�KDQG��WKH�VFUHHQ�VSDFH�XVHG�E\�(GOLQDV�LV�YHU\�OLPLWHG�DQG�VR�ODEHOV�EH\RQG�WKUHH�FKDUDFWHUV�DUH�WUXQFDWHG�ZKHQ�WKH\�DUH�GLVSOD\HG�XQOHVV�WKH\�DUH�RQ�D�OLQH�E\�WKHPVHOYHV��7KH�ODEHO�LQ�WKH�ODEHO�ILHOG�VSHFLILHV�WKH�WDUJHW�RI�WKH�MXPS�DQG�RIWHQ�KDV�D�FRORQ�DSSHQGHG�WR�PDNH�LW�FOHDU�WKDW�LW�LV�D�ODEHO�DQG�QRW�DQ�DUFDQH�PQHPRQLF��0DQ\�MXPS�FRPPDQGV�PD\�SRLQW�WR�WKH�VDPH�WDUJHW��EXW�QR�WZR�OLQHV�PD\�FDUU\�WKH�VDPH�ODEHO�LQ�WKHLU�ODEHO�ILHOG��,Q�WKH�IROORZLQJ�SURJUDP��WKH�ODVW�OLQH�WUDQVIHUV�FRQWURO�WR�WKH�SUHFHGLQJ�OLQH��7KLV�SURJUDP�FRQWLQXHV�DGGLQJ���WR�WKH�($;�UHJLVWHU�IRUHYHU��,W�LV�DQ�LQILQLWH�ORRS��,QILQLWH�ORRSV�DUH�XVXDOO\�ZULWWHQ�RQO\�E\�PLVWDNH�������&RQGLWLRQDO�-XPSV�DQG�)ODJV$�FRQGLWLRQDO�MXPS�LV�D�MXPS�FDUULHG�RXW�RQ�WKH�EDVLV�RI�D�WUXWK�YDOXH��7KH�LQIRUPDWLRQ�RQ�ZKLFK�VXFK�GHFLVLRQV�DUH�EDVHG�LV�FRQWDLQHG�LQ�RQH�ELW�UHJLVWHUV�FDOOHG�IODJV��:KHQ�D�IODJ�FRQWDLQV����LW�LV�UHIHUUHG�WR�DV�EHLQJ�VHW��:KHQ�LW�FRQWDLQV����LW�LV�UHIHUUHG�WR�DV�EHLQJ�FOHDUHG��7ZR�YHU\�LPSRUWDQW�IODJV�DUH�WKH�]HUR�IODJ�DQG�WKH�VLJQ�IODJ�3URJUDP������������029�($;����������029�(%;���;<=����$''�($;��(%;�������-03�;<=7KH�=HUR�DQG�6LJQ�)ODJV7KH�$''�DQG�68%�FRPPDQGV�DIIHFW�QRW�RQO\�WKHLU�GHVWLQDWLRQ�UHJLVWHUV�EXW�DOVR�PDQ\�RI�WKH�IODJV��6XSSRVH�WKH�FRPPDQG����$''�($;��(%;LV�H[HFXWHG��7KH�UHVXOW�RI�WKLV�FRPPDQG�ZLOO�EH�LQ�WKH�($;�UHJLVWHU��,I�WKLV�UHVXOW�LV����WKHQ�WKH�]HUR�IODJ�LV�VHW��,I�LW�LV�QRW����WKHQ�WKH�]HUR�IODJ�LV�FOHDUHG�7KH�YDOXH�JLYHQ�WR�WKH�VLJQ�IODJ�DIWHU�DQ�$''�LQVWUXFWLRQ�LV�WKH�YDOXH�RI�WKH�PRVW�VLJQLILFDQW�ELW�RI�WKH�UHVXOW��7KLV�ELW�LV���LI�WKH�UHVXOW�LV�QHJDWLYH�ZKHQ�YLHZHG�DV�D�VLJQHG�QXPEHU��7KXV�LI�H[HFXWLQJ�WKH�$''�($;��(%;FRPPDQG�JLYHV�($;�D�YDOXH�ZKLFK�LV�QHJDWLYH��DV�D�IRXU�E\WH�VLJQHG�QXPEHU��WKHQ�WKH�VLJQ�IODJ�LV�VHW��RWKHUZLVH�WKH�VLJQ�IODJ�LV�FOHDUHG�������7KH�-=��-6��-1=��DQG�-16�&RPPDQGV

Page 65: Linux assembly language programming

7KH�IROORZLQJ�FRQGLWLRQDO�MXPS�FRPPDQGV�DOO�KDYH�WKH�VDPH�IRUPDW�DV�WKH�-03�FRPPDQG�����-=���ODEHO����-6���ODEHO����-1=��ODEHO����-16��ODEHO7KH\�HDFK�WDNH�D�ODEHO�LQ�WKH�RSHUDQG�ILHOG��7KH�PHDQLQJV�RI�WKHVH�FRPPDQGV�DUH�DV�IROORZV�����-=���-XPS�LI�WKH�]HUR�IODJ�LV�VHW�����-6���-XPS�LI�WKH�VLJQ�IODJ�LV�VHW�����-1=��-XPS�LI�WKH�]HUR�IODJ�LV�QRW�VHW�����-16��-XPS�LI�WKH�VLJQ�IODJ�LV�QRW�VHW�7KH�IROORZLQJ�DVVHPEO\�ODQJXDJH�SURJUDP�LOOXVWUDWHV�WKH�XVH�RI�WKH�-6�LQVWUXFWLRQ�LQ�D�SURJUDP�WR�GHWHUPLQH�ZKLFK�RI�WZR�XVHU�LQSXWV�LV�ODUJHU��3URJUDP�����VHHPV�DLU�WLJKW��,Q�IDFW�LW�KDV�D�EXJ�3URJUDP��������������,I�WKH�ILUVW�LQSXW�LV�ODUJHU�RXWSXW�����������,I�WKH�VHFRQG�LQSXW�LV�ODUJHU�RXWSXW�����������7KH�SURJUDP�XVHV�VXEWUDFWLRQ����������%���$�LV�WUXH�LI�DQG�RQO\�LI�%�²�$�LV�QHJDWLYH����������$�VXEWUDFWLRQ�IROORZHG�E\�D�-6�GRHV�WKH�MRE���������������029�(';����������,1�($;��>';@�������029�(%;��($;�����7KH�ILUVW�LQSXW�LV�QRZ�LQ�(%;�������,1�($;��>';@�����7KH�VHFRQG�LQSXW�LV�QRZ�LQ�($;��������68%�(%;��($;�����7KLV�LV��ILUVW�±�VHFRQG���������-6�6,%�����������6HFRQG�LV�%LJJHU�������029�($;����������2WKHUZLVH�)LUVW�LV�%LJJHU�������-03�(1'����������'RQW�GULIW�LQWR�WKH�RWKHU�FDVH�6,%����029�($;���������(1'����029�(';����������(LWKHU�ZD\�QRZ�($;�LV�UHDG\��������287�>';@��($;�������5(7����$VVHPEOHU�3URJUDPV�ZLWK�/RRSV&RQGLWLRQDO�MXPSV�DUH�XVHG�WR�LPSOHPHQW�ORRSV�DQG�LI�WKHQ�VWDWHPHQWV��6XSSRVH�ZH�FRQVLGHU�WKH�IROORZLQJ�SURJUDP��ZKLFK�GRHV�PXOWLSOLFDWLRQ�XVLQJ�UHSHDWHG�DGGLWLRQ��)RU�H[DPSOH�WR�GR���î���ZH�FDQ�GR���������������������������,Q�3URJUDP�����WKH�QXPEHU���LV�DGGHG�LQ�RQH�OLQH�DQG�VXEWUDFWHG�LQ�DQRWKHU��7KHUH�DUH�VSHFLDO�FRPPDQGV�IRU�WKLV�ZKLFK�WDNH�OHVV�PHPRU\�VSDFH�3URJUDP��������������������029�(';����������,1�($;�>';@������)LUVW�LQSXW�LV�WKH�PXOWLSOLHU�������029�(%;��($;�����3XW�0XOWLSOLHU�LQ�(%;�������,1�($;�>';@������6HFRQG�LQSXW�LV�WKH�PXOWLSOLHG�QXPEHU�������029�(&;����������,QLWLDOL]H�WKH�UXQQLQJ�WRWDO�537����$''�(&;��($;�����'R�RQH�DGGLWLRQ��������68%�(%;����������2QH�OHVV�\HW�WR�EH�GRQH��������-1=�537����������,I�WKDWV�QRW�]HUR��GR�DQRWKHU��������029�($;��(&;�����3XW�WKH�WRWDO�LQ�($;�������$''�(';����������������287�>';@��($;����2XWSXW�WKH�DQVZHU�

Page 66: Linux assembly language programming

�������5(77KH�,1&�DQG�'(&�&RPPDQGV7KH�IROORZLQJ�LQFUHPHQW�DQG�GHFUHPHQW�FRPPDQGV�DGG�DQG�VXEWUDFW�������,1&�UHJDQG����'(&�UHJUHJ�PD\�EH�DQ\�RI�WKH����JHQHUDO�UHJLVWHUV��7KHVH�FRPPDQGV�DUH�RIWHQ�XVHG�WR�LQFUHPHQW�RU�GHFUHPHQW�D�ORRS�FRXQWHU��,Q�3URJUDP������68%�(%;����FDQ�EH�UHSODFHG�E\�'(&�(%;�DQG�$''�(';����FDQ�EH�UHSODFHG�E\�,1&�(';�����6LJQHG�&RPSDULVRQV������&RPSDULVRQ�%DVHG�-XPSV+LJK�OHYHO�ODQJXDJHV�RIWHQ�XVH�FRPSDULVRQV�LQ�LI�WKHQ�VWDWHPHQWV��8VLQJ�WKH�VLJQ�IODJ�WR�WHVW�WKH�UHVXOW�RI�D�VXEWUDFWLRQ��DV�ZDV�GRQH�LQ�VHFWLRQ������VHHPV�WR�EH�D�UHDVRQDEOH�ZD\�WR�LPSOHPHQW�WKLV�WHVWLQJ�VLQFH�LW�LV�D�PDWKHPDWLFDO�IDFW�WKDW

%���$�LI�DQG�RQO\�LI�%���$�LV�QHJDWLYH�6LQFH�WKH�VLJQ�IODJ�LQGLFDWHV�WKH�VLJQ�RI�WKH�UHVXOW�RI�D�VXEWUDFWLRQ�ZH�ZRXOG�VHHP�WR�EH�RQ�VROLG�JURXQG��%XW�LQ�IDFW�WKLV�LV�QRW�WUXH�������7KH�2YHUIORZ�)ODJ6XSSRVH�ZH�DUH�XVLQJ�RQH�E\WH�VLJQHG�QXPEHUV�DQG�ZH�ZLVK�WR�WHVW�ZKHWKHU,Q�RQH�E\WH�UHJLVWHUV�$Q�RYHUIORZ�KDV�RFFXUUHG��7KH�UHVXOW�LV�QHJDWLYH��7KH�VLJQ�IODJ�LV�VHW�DQG�WKH�FRPSDULVRQ�ZLOO�EH�MXGJHG�DV�WUXH��8VLQJ�WKH�VLJQ�IODJ�WR�GHWHUPLQH�D�MXPS�JLYHV�WKH�ZURQJ�DQVZHU��%XW�VLQFH�DQ�RYHUIORZ�DOZD\V�FKDQJHV�WKH�VLJQ�RI�D�UHVXOW�WR�WKH�RSSRVLWH�RI�ZKDW�LW�VKRXOG�EH��WKH�MXPS�FRQGLWLRQ�FDQ�EH�IL[HG��� ,I�QR�RYHUIORZ�KDV�RFFXUUHG��MXPS�LI�WKH�VLJQ�IODJ�LV�VHW��� ,I�DQ�RYHUIORZ�KDV�RFFXUUHG��MXPS�LI�WKH�VLJQ�IODJ�LV�QRW�VHW�

7KH�[���SURFHVVRU�KDV�DQ�RYHUIORZ�IODJ��,W�LV�XVHG�LQ�RUGHU�WR�LPSOHPHQW�WKLV�IL[HG�XS�MXPS�FRQGLWLRQ��,I�ZH�XVH�6)�IRU�WKH�ELQDU\�YDOXH�RI�WKH�VLJQ�IODJ�DQG�2)�IRU�WKDW�RI�WKH�RYHUIORZ�IODJ��ZH�FDQ�UHVWDWH�WKH�IL[HG�MXPS�FRQGLWLRQ�DV�MXVW-XPS�LI��6)�;25�2)�

7KLV�MXPS�FRQGLWLRQ�ZLOO�SURGXFH�D�MXPS�IROORZLQJ�D�VXEWUDFWLRQ�VXFK�DV����68%�$/��%/

Page 67: Linux assembly language programming

LI�DQG�RQO\�LI�$/���%/��7KHUH�LV�DQ�[���FRPPDQG�IRU�WKLV�MXPS��7KH�PQHPRQLF�IRU�LW�LV�-/��ZKLFK�VWDQGV�IRU�MXPS�LI�OHVV�WKDQ�������7KH�&03�&RPPDQG:KHQ�D�VXEWUDFWLRQ�LV�SHUIRUPHG�RQO\�IRU�WKH�VDNH�RI�D�FRPSDULVRQ��LW�PD\�EH�GRQH�ZLWK�WKH�&03�LQVWUXFWLRQ��7KLV�FRPPDQG�VHWV�WKH�IODJV�LQ�WKH�H[DFW�VDPH�ZD\�DV�68%�EXW�KDV�WKH�DGYDQWDJH�RI�QRW�ZDVWLQJ�UHJLVWHU�VSDFH�E\�VWRULQJ�DQ�XQQHHGHG�UHVXOW��8VLQJ�WKH�-/�DQG�&03�LQVWUXFWLRQV�ZH�FDQ�UHZULWH�WKH�3URJUDP�����DV�IROORZV�3URJUDP��������������,I�WKH�ILUVW�LQSXW�LV�ODUJHU�RXWSXW�����������,I�WKH�VHFRQG�LQSXW�LV�ODUJHU�RXWSXW�����������7KH�SURJUDP�XVHV�VXEWUDFWLRQ����������%���$�LV�WUXH�LI�DQG�RQO\�LI�%���$�LV�QHJDWLYH��������029�(';����������,1�($;��>';@�������029�(%;��($;����7KH�ILUVW�LQSXW�LV�QRZ�LQ�(%;�������,1�($;��>';@����7KH�VHFRQG�LQSXW�LV�QRZ�LQ�($;��������&03�(%;��($;�����7KLV�LV�ILUVW�±�VHFRQG��������-/�6,%�����������6HFRQG�LV�%LJJHU�������029�($;����������2WKHUZLVH�)LUVW�LV�%LJJHU�������-03�(1'����������'RQW�GULIW�LQWR�WKH�RWKHU�FDVH�6,%����029�($;���������(1'����029�(';����������(LWKHU�ZD\�QRZ�($;�LV�UHDG\��������287�>';@��($;�������5(73URJUDP�����ZRUNV�FRUUHFWO\�IRU�DOO�QXPEHUV�LQ�WKH�XQVLJQHG�IRXU�E\WH�UDQJH�������0RUH�-XPS�&RPPDQGV)ROORZLQJ�D�&03�($;��(%;�FRPPDQG��WKH�-/�FRPPDQG�H[HFXWHV�D�MXPS�LI�WKH�FRQGLWLRQ�($;���(%;�LV�WUXH��7KH�FRPPDQGV����&03�($;��(%;����-/�$%&PHDQ

&RPSDUH�($;�WR�(%;�DQG-XPS�LI�($;�LV�OHVV�WKDQ�(%;��

:KDW�LV�JRLQJ�RQ�KHUH�LV�VXEWUDFWLRQ�DQG�IODJ�FKHFNLQJ��EXW�WKH�ZHOO�GHVLJQHG�V\QWD[�DOORZV�XV�WR�RYHUORRN�WKDW��7KH�OHVV�WKDQ�FRQGLWLRQ�LV�QRW�WKH�RQO\�FRQGLWLRQ�FRQYHQLHQWO\�DFFHVVHG�IROORZLQJ�D�&03�FRPPDQG��$�OLVW�RI�VHYHUDO�RWKHU�FRQGLWLRQDOMXPS�FRPPDQGV�LV�JLYHQ�KHUH�����-/����OHVV�WKDQ������������������($;���(%;����-/(���OHVV�WKDQ�RU�HTXDO���������($;� �(%;����-*����JUHDWHU�WKDQ���������������($;�!�(%;����-*(���JUHDWHU�WKDQ�RU�HTXDO������($;� �(%;����-(����HTXDO����������������������($;� �(%;����-1/���QRW�OHVV�WKDQ��������������($;�"�(%;����-1/(��QRW�OHVV�WKDQ�RU�HTXDO�����($;�"�(%;����-1*���QRW�JUHDWHU�WKDQ�����������($;�"�(%;����-1*(��QRW�JUHDWHU�WKDQ�RU�HTXDO��($;�"�(%;����-1(���QRW�HTXDO������������������($;�"�(%;

Page 68: Linux assembly language programming

%HFDXVH�WKHVH�YDULRXV�MXPS�FRPPDQGV�DUH�VR�HDVLO\�LQWHUSUHWHG��WKH\�WXUQ�WKH�FRPSDUH�FRPPDQG�LQWR�D�NLQG�RI�V\QWDFWLFDO�ZLQGIDOO�����8QVLJQHG�&RPSDULVRQV,Q�VHFWLRQ�����LW�ZDV�VKRZQ�KRZ�IODJV�FRXOG�EH�XVHG�WR�GHWHUPLQH�WKH�WUXWK�YDOXHV�RI�LQHTXDOLWLHV�VR�WKDW�WKHVH�LQHTXDOLWLHV�FRXOG�EH�XVHG�LQ�FRQGLWLRQDO�MXPSV��7KH�FRQGLWLRQV�REWDLQHG�ZRUN�IRU�XQVLJQHG�QXPEHUV�%XW�VXSSRVH�ZH�FRQVLGHU�WKH�VDPH�H[DPSOHWKDW�ZH�FRQVLGHUHG�LQ�WKH�ODVW�VHFWLRQ�DQG�QRWH�WKDW�ZKHQ�WKLV�VDPH�LQHTXDOLW\�LV�VWDWHG�LQ�WHUPV�RI�XQVLJQHG�QXPEHUV�LW�EHFRPHV7KLV�LQHTXDOLW\�KDV�WKH�RSSRVLWH�WUXWK�YDOXH��6R�D��MXPS�LI�OHVV�WKDQ��FRPPDQG�IRU�XQVLJQHG�QXPEHUV�PXVW�H[HFXWH�D�MXPS�LQ�WKLV�FDVH��7KH�-/�FRPPDQG�ZLOO�QRW�GR�VR��7KH�VLJQHG�MXPS�FRPPDQGV�RI�WKH�SUHYLRXV�VHFWLRQ�GR�QRW�ZRUN�IRU�XQVLJQHG�QXPEHUV��,I�$/� ���+� �����DQG�%/� �&(+� ������WKHQ�D�-/�ZLOO�QRW�H[HFXWH�D�MXPS�EHFDXVH�LW�LV�DFWLQJ�RQ������������$Q�XQVLJQHG��MXPS�LI�OHVV�WKDQ��LV�QHHGHG�������7KH�&DUU\�)ODJ,Q�WKH�FDVH�RI�XQVLJQHG�QXPEHUV��WKH�LQHTXDOLW\�$���%�WXUQV�RXW�WR�EH�HDVLHU�WR�WHVW�WKDQ�LWV�VLJQHG�FRXQWHUSDUW��6LQFH�D�VXEWUDFWLRQ�RI�XQVLJQHG�QXPEHUV�$���%�FDQQRW�JR�RXW�RI�UDQJH�RQ�WKH�KLJK�VLGH��LW�LV�RXW�RI�UDQJH�LI�DQG�RQO\�LI�LW�LV�QHJDWLYH��2XW�RI�UDQJH�HUURUV�IRU�XQVLJQHG�QXPEHUV�DUH�FDOOHG�FDUU\�HUURUV��+HQFH�$���%�LV�WUXH�LI�DQG�RQO\�LI�WKH�VXEWUDFWLRQ�$���%�SURGXFHV�D�FDUU\�HUURU��6R�D�IODJ�ZKLFK�VLJQDOV�FDUU\�HUURUV�ZLOO�VLJQDO�QHJDWLYH�UHVXOWV�RI�D�VXEWUDFWLRQ��7KH�[���SURFHVVRUV�KDYH�D�FDUU\�IODJ�WR�LQGLFDWH�WKHVH�HUURUV��8VLQJ�&)�WR�GHQRWH�WKH�YDOXH�RI�WKLV�FDUU\�IODJ��ZH�FDQ�HDVLO\�VWDWH�WKH�FRQGLWLRQ�XVHG�WR�LPSOHPHQW�WKH�XQVLJQHG��MXPS�LI�OHVV�WKDQ��FRPPDQG�DV��MXPS�LI�&)��/LNH�WKH�VLJQ�IODJ��WKH�]HUR�IODJ��DQG�WKH�RYHUIORZ�IODJ��WKH�FDUU\�IODJ�UHVSRQGV�WR�FRQGLWLRQV�RFFXUULQJ�ZKHQHYHU�$''�RU�68%�DUH�XVHG��8QOLNH�WKHVH�RWKHU�WKUHH�IODJV��LW�LV�XQDIIHFWHG�E\�WKH�,1&�DQG�'(&�FRPPDQGV�������2XW�RI�5DQJH�)ODJ�6XPPDU\$ULWKPHWLF�FRPPDQGV�VXFK�DV�$''�DQG�68%�DUH�SHUIRUPHG�RQ�ELQDU\�ELWV�ZLWKRXW�DQ\�LQIRUPDWLRQ�VSHFLI\LQJ�ZKHWKHU�WKH�ELWV�DUH�EHLQJ�XVHG�WR�UHSUHVHQW�VLJQHG�RU�XQVLJQHG�QXPEHUV��,W�LV�WKH�UHVSRQVLELOLW\�RI�WKH�VRIWZDUH�WR�NHHS�WUDFN�RI�WKLV�:KHQ�WKH�VRIWZDUH�XVHV�WKH�SURFHVVRU�WR�GR�DULWKPHWLF�RQ�VLJQHG�QXPEHUV��WKHQ�LW�VKRXOG�FRQVXOW�WKH�RYHUIORZ�IODJ�WR�GHWHUPLQH�ZKHWKHU�RU�QRW�DQ�RXW�RI�UDQJH�HUURU�KDV�RFFXUUHG��:KHQ�WKH�VRIWZDUH�XVHV�WKH�SURFHVVRU�WR�ZRUN�RQ�XQVLJQHG�QXPEHUV��WKHQ�WKH�VRIWZDUH�VKRXOG�FRQVXOW�WKH�FDUU\�IODJ�WR�FKHFN�IRU�DQ�RXW�RI�UDQJH�HUURU�7KH�KDUGZDUH�KDV�QR�ZD\�RI�NQRZLQJ�ZKHWKHU�WKH�QXPEHUV�DUH�VLJQHG�RU�XQVLJQHG��$QG�LW�GRHVQW�PDWWHU�)RU�H[DPSOH��RQ�RQH�E\WH�UHJLVWHUV�WKH�FRPPDQG�WR�DGG�))+�WR�))+�PD\�EH�FRPLQJ�IURP�VRIWZDUH�WKDW�LV�ZRUNLQJ�ZLWK�VLJQHG�QXPEHUV��,Q�WKLV�FDVH�WKH�VXP�)(+�LV�QRW�D�SUREOHP��7KH�VRIWZDUH�VHHV�WKH�DULWKPHWLF�WKDW�KDV�MXVW�KDSSHQHG�DV

Page 69: Linux assembly language programming

7KLV�LV�RND\�2Q�WKH�RWKHU�KDQG�WKH�FRPPDQG�PD\�EH�FRPLQJ�IURP�VRIWZDUH�WKDW�LV�XVLQJ�XQVLJQHG�QXPEHUV��,Q�WKLV�FDVH�WKH�VRIWZDUH�VHHV�WKH�DULWKPHWLF�WKDW�KDV�MXVW�KDSSHQHG�DV7KLV�LV�QRW�RND\��7KH�WUXH�DQVZHU�������KDV�JRQH�RXW�RI�WKH�RQH�E\WH�XQVLJQHG�UDQJH���������+HQFH�WKH�DGGLWLRQ�RI�))+�WR�))+�FOHDUV�WKH�RYHUIORZ�IODJ�EHFDXVH�WKH�VLJQHG�DULWKPHWLF�DQVZHU�LV�RND\�DQG�VHWV�WKH�FDUU\�IODJ�WR�QRWLI\�VRIWZDUH�WKDW�WKHUH�LV�DQ�XQVLJQHG��RXW�RI�UDQJH�HUURU�$V�DQRWKHU�H[DPSOH��VXSSRVH�WKDW�RQH�E\WH�UHJLVWHUV�UHFHLYH�D�FRPPDQG�WR�DGG���+�WR���+��7KH�VXP�LV���+��,I�WKH�FRPPDQG�KDV�FRPH�IURP�VRIWZDUH�ZRUNLQJ�ZLWK�XQVLJQHG�QXPEHUV�WKHQ�WKH�DULWKPHWLF�MXVW�GRQH�ZLOO�DSSHDU�DV7KLV�LV�RND\�6XSSRVH�WKDW�WKH�FRPPDQG�KDV�FRPH�IURP�VRIWZDUH�ZRUNLQJ�ZLWK�VLJQHG�QXPEHUV��7KHQ�WKH�DULWKPHWLF�ORRNV�OLNH�WKLV�7KLV�LV�QRW�RND\��7KH�WUXH�DQVZHU��������LV�RXWVLGH�WKH�RQH�E\WH�VLJQHG�UDQJH�������WR�������7KH�KDUGZDUH�VHWV�WKH�RYHUIORZ�IODJ�EHFDXVH�WKLV�LV�DQ�RXW�RI�UDQJH�HUURU�LQ�WKH�VLJQHG�QXPEHU�V\VWHP��DQG�FOHDUV�WKH�FDUU\�IODJ�EHFDXVH�WKHUH�LV�QR�RXW�RI�UDQJH�HUURU�LQ�WKH�XQVLJQHG�V\VWHP��7KH�KDUGZDUH�GRHV�QRW�NQRZ�ZKLFK�V\VWHP�WKH�VRIWZDUH�LV�XVLQJ��VR�LW�KDV�WR�WDNH�FDUH�RI�ERWK�IODJV�%RWK�WKH�FDUU\�DQG�WKH�RYHUIORZ�IODJV�DUH�RXW�RI�UDQJH�LQGLFDWRU�IODJV��7KH�FDUU\�IODJ�LV�VHW�LI�WKH�DULWKPHWLF�LQWHUSUHWHG�LQ�WKH�XQVLJQHG�V\VWHP�KDV�SURGXFHG�DQ�RXW�RI�UDQJH�HUURU��7KH�RYHUIORZ�IODJ�LV�VHW�LI�WKH�DULWKPHWLF�LQWHUSUHWHG�LQ�WKH�VLJQHG�V\VWHP�KDV�SURGXFHG�DQ�RXW�RI�UDQJH�HUURU�������6WLOO�0RUH�-XPS�&RPPDQGV*LYHQ�WKDW�ZH�QHHG�D�GLIIHUHQW�FRPPDQG�IRU��MXPS�LI�OHVV�WKDQ��IRU�XVH�ZLWK�XQVLJQHG�QXPEHUV��ZH�DOVR�QHHG�D�GLIIHUHQW�PQHPRQLF��0RUHRYHU��FRQVLGHULQJ�DOO�WKH�RWKHU�MXPS�FRQGLWLRQV���JUHDWHU�WKDQ����JUHDWHU�WKDQ�RU�HTXDO�WR���HWF���ZH�QHHG�D�ZKROH�QHZ�VHW�RI�FRPPDQGV�DQG�PQHPRQLFV��7R�V\VWHPDWL]H�WKLV�QHZ�VHW��WKH�ZRUGV�DERYH�DQG�EHORZ�DUH�XVHG�LQ�SODFH�RI�WKH�SKUDVHV�JUHDWHU�WKDQ�DQG�OHVV�WKDQ��+HQFH�WKH��MXPS�LI�OHVV�WKDQ��FRPPDQG�ZKLFK�ZRUNV�IRU�XQVLJQHG�QXPEHUV�XVHV�WKH�PQHPRQLF�-%��IRU��MXPS�LI�EHORZ���7KH�IXOO�VHW�RI�WKHVH�FRPPDQGV�LV�DV�IROORZV�����-%����EHORZ���������������($;���(%;����-%(���EHORZ�RU�HTXDO������($;� �(%;����-$����DERYH���������������($;�!�(%;����-$(���DERYH�RU�HTXDO������($;� �(%;����-1%���QRW�EHORZ�����������($;�"�(%;����-1%(��QRW�EHORZ�RU�HTXDO��($;�"�(%;����-1$���QRW�DERYH�����������($;�"�(%;����-1$(��QRW�DERYH�RU�HTXDO��($;�"�(%;����/LQX[��V�ILOHV2QH�RI�WKH�LQWHUPHGLDWH�VWHSV�WKDW�JFF�XVHV�LQ�WKH�WUDQVODWLRQ�RI�D�&�VRXUFH�SURJUDP�LQWR�DQ�D�RXW�ILOH�LV�DQ�

Page 70: Linux assembly language programming

DVVHPEO\�ODQJXDJH�ILOH��7KLV�ILOH�LV�WKH�RXWSXW�RI�WKH�FRPSLOHU�SURSHU�DQG�WKH�LQSXW�WR�WKH�DVVHPEOHU��JDV��7R�VHH�WKHVH�DVVHPEOHU�ILOHV��RQH�FDQ�GLUHFW�JFF�WR�RXWSXW�WKH�DVVHPEOHU�ILOH�RQFH�WKLV�VWDJH�LV�UHDFKHG�XVLQJ�WKH��6�VZLWFK��7KLV�RXWSXW�KDV�D��V�ILOH�H[WHQVLRQ��&RQVLGHU�IRU�H[DPSOH�WKH�IROORZLQJ�&�SURJUDP��PXOW�F�3URJUDP�����PDLQ���̂���LQW�[��\�����UHJLVWHU�LQW�D��E��F�����SULQWI��(QWHU�D�QXPEHU�����������VFDQI���G���[������SULQWI��0XOWLSO\�LW�E\�ZKDW�QXPEHU"���������VFDQI���G���\�������D� �[������E� �\������F� ��������ZKLOH��E�� �������^���������F� �F���D����������E� �E���������`�����SULQWI���7KH�UHVXOW�LV��G�?Q���F��`6XSSRVH�WKDW�WKH�QXPEHUV�[� ���DQG�\� ����DUH�HQWHUHG��7KLV�SURJUDP�DFWXDOO\�RXWSXWV�WKH�FRUUHFW�DQVZHU�������DQG�WR�FDOFXODWH�LW��WKH�ORRS�H[HFXWHV���� ��� ��������������WLPHV��1RWH�WKDW(DFK�WLPH�WKH�UXQQLQJ�WRWDO��E��H[FHHGV�WKH�WXUQRYHU�YDOXH�RI����������LV�GURSSHG�IURP�WKH�WRWDO��7KLV�KDSSHQV�IRXU�WLPHV��7KH�UHVXOWLQJ�YDOXH�RI�E�LV���� ������ZKLFK�LV�WKH�WZRV�FRPSOHPHQW�UHSUHVHQWDWLRQ�RI�����2QH�RI�WKH�PDLQ�SUDFWLFDO�XVHV�RI�DVVHPEO\�ODQJXDJH�SURJUDPPLQJ�LV�LQ�WKH�FRGLQJ�RI�ORRSV�WKDW�H[HFXWH�VR�PDQ\�WLPHV�WKDW�DQ�LPSURYHPHQW�LQ�WKH�WLPH�UHTXLUHG�IRU�HDFK�H[HFXWLRQ�DFWXDOO\�PDNHV�D�QRWLFHDEOH�GLIIHUHQFH�LQ�WKH�WRWDO�UXQ�WLPH��,Q�D�WHVW�RQ�D�����0+]�3HQWLXP��WKH���î����FDOFXODWLRQ�UHTXLUHG��������VHFRQGV��7R�REWDLQ�WKH�DVVHPEO\�FRGH�IRU�WKLV�SURJUDP��RQH�FDQ�XVH�WKH�FRPPDQG����OLQX[ER[��JFF��6�PXOW�F7KH�UHVXOWLQJ�ILOH��PXOW�V��LV�WKH�DVVHPEO\�FRGH�ZKLFK�ZDV�XVHG�E\�JFF�WR�SURGXFH�WKH�H[HFXWDEOH�ILOH��7KH�V\QWD[�RI�WKLV�DVVHPEO\�FRGH�GLIIHUV�IURP�WKDW�RI�WKH�ZLGHO\�XVHG�,QWHO�DVVHPEO\�ODQJXDJH�XVHG�LQ�WKLV�ERRN��EXW�LW�FDQ�VWLOO�EH�GHFLSKHUHG��&RPPHQWV�IRU�WKLV�SXUSRVH�DUH�DGGHG��7KH�ILUVW�OLQH�XVHV�7(67��,W�LV�DQ�LQVWUXFWLRQ3URJUDP������/�����������WHVWO��HVL��HVL���,V�(6,� �����������MQH���/�����������,I�QRW�JR�WR�/����������MPS���/�����������RWKHUZLVH�JR�WR�/��/�����������DGGO��HE[��HGL����/HW�(',� �(',���(%;���������GHFO��HVL���������/HW�(6,� �(6,�������������MPS��/������������*R�WR�/��/��

Page 71: Linux assembly language programming

VLPLODU�WR�&03��ZKLFK�ZLOO�EH�GLVFXVVHG�LQ�WKH�QH[W�FKDSWHU���HVL�UHIHUV�WR�WKH�(6,�UHJLVWHU��/LNH�&03��WKH�7(67�FRPPDQG�VHWV�WKH�]HUR�IODJ�LI�(6,� ����7KH�O�DW�WKH�HQG�RI�PDQ\�RI�WKHVH�FRPPDQGV�LV�XVHG�WR�VSHFLI\�WKH�OHQJWK�RI�WKH�RSHUDQG���ORQJ��LQ�WKLV�FDVH��DQG�WKDW�PHDQV�IRXU�E\WHV��1RWLFH�WKDW�WKH�DGG�XVHV�D��&200$1'�VRXUFH�GHVWLQDWLRQ��RSHUDQG�RUGHU��WKH�RSSRVLWH�RI�WKDW�XVHG�LQ�WKLV�ERRN�7KH�ORRS�FRQVLVWV�RI�WKH�VL[�LQVWUXFWLRQV�VKRZQ��,I�ZH�QRWH�WKDW�ZH�FDQ�WDNH�VRPH�MXPSV�RXW�RI�WKH�ORRS�E\�WHVWLQJ�ZKHWKHU�(6,�LV�]HUR�DW�WKH�HQG�RI�WKH�ORRS��ZH�FDQ�UHGXFH�WKH�ORRS�IURP�VL[�LQVWUXFWLRQV�WR�WKUHH��7KH�RQO\�FKDQJH�PDGH�ZDV3URJUDP������/�����������WHVWO��HVL��HVL���������MQH��/����������MPS��/��/�����������DGGO��HE[��HGL���������GHFO��HVL���������MQH��/������������,I�(6,�LVQW���JR�WR�/��/��WR�WKH�MXPS�DW�WKH�HQG�RI�WKH�ORRS��7KH�PRGLILHG�ILOH�ZDV�FRPSLOHG�XVLQJ�XVLQJ�JFF�����OLQX[ER[��JFF�PXOW�V7KH�UHVXOWLQJ�SURJUDP�ZDV�UXQ�DQG�WKH�FRPSXWDWLRQ�RI������WRRN�������VHFRQGV�RQ�WKH�VDPH�PDFKLQH�������7KH�3HQWLXPV�'XDO�3LSHOLQH,I�ZH�ORRN�DW�WKH�WLPH�IRU�HDFK�LQVWUXFWLRQ�WR�H[HFXWH��LQ�WKH�ILUVW�FDVH�ZH�JHW7KLV�DULWKPHWLF�DVVXPHV�WKDW�WKH�SURJUDP�VSHQW�DOO�RI�LWV�WLPH�LQ�WKH�ORRS��&RPSDULQJ�WKLV�ZLWK�WKH�OHQJWK�RI�RQH�FORFN�F\FOH�ZH�ILQG�WKH�DPD]LQJ�UHVXOW�WKDW�WKH�WLPH�IRU�WZR�LQVWUXFWLRQV�WR�H[HFXWH��������QDQRVHFRQGV��LV�MXVW�D�OLWWOH�RYHU�RQH�FORFN�F\FOH��6LQFH�RQH�LQVWUXFWLRQ�SHU�FORFN�F\FOH�LV�LGHDO�XQGHU�RUGLQDU\�FLUFXPVWDQFHV��ZKDW�ZH�KDYH�KHUH�LV�VRPHWKLQJ�VSHFLDO��,W�LV�DQ�LOOXVWUDWLRQ�RI�WKH�3HQWLXPV�GXDO�SLSHOLQH��:KHQ�SRVVLEOH��WKH�3HQWLXP�SDLUV�LQVWUXFWLRQV�RII�DQG�H[HFXWHV�WZR�DW�RQFH��7KLV�LV�KRZ�UDWHV�RI�PRUH�WKDQ�RQH�LQVWUXFWLRQ�SHU�FORFN�F\FOH�FDQ�EH�DFKLHYHG���7KHUH�LV�DFWXDOO\�DQRWKHU�SLSHOLQH�IRU�IORDWLQJ�SRLQW�QXPEHUV���7KH�LQVWUXFWLRQ�SDLULQJ�DOVR�H[SODLQV�ZK\�WKH�����LPSURYHPHQW�ZH�PLJKW�KDYH�H[SHFWHG�ZKHQ�ZH�UHGXFHG�WKH�QXPEHU�RI�LQVWUXFWLRQV�LQ�WKH�ORRS�IURP�VL[�WR�WKUHH�GLG�QRW�PDWHULDOL]H��:KDW�KDSSHQHG�DSSDUHQWO\�ZDV�WKDW�WKH�QXPEHU�RI�LQVWUXFWLRQ�SDLUV�ZHQW�IURP�WKUHH�WR�WZR��RQH�RI�WKH�WZR��SDLUV��EHLQJ�KDOI�HPSW\��7KH�WLPH�������QDQRVHFRQGV�LV������RI�������QDQRVHFRQGV��7KLV�LV�DSSUR[LPDWHO\�WZR�WKLUGV��VXJJHVWLQJ�WKH�XVH�RI�WZR�LQVWUXFWLRQ�SDLUV�LQVWHDG�RI�WKUHH�IRU�HDFK�SDVV�WKURXJK�WKH�ORRS�&KDSWHU����0$&+,1(�/$1*8$*(0DFKLQH�ODQJXDJH�LV�WKH�ODQJXDJH�VHHQ�E\�WKH�SURFHVVRU��7KH�E\WHV�IHWFKHG�LQ�WKH�IHWFK�H[HFXWH�F\FOH�DUH�E\WHV�RI�PDFKLQH�FRGH��$VVHPEO\�ODQJXDJH�FDQ�EH�GHILQHG�DV�ODQJXDJH�ZKLFK�JLYHV�WKH�SURJUDPPHU�FRQWURO�RYHU�WKH�PDFKLQH�FRGH��$VVHPEO\�ODQJXDJH�VSHFLILHV�PDFKLQH�FRGH��7KLV�FKDUDFWHULVWLF�IHDWXUH�RI�DVVHPEO\�ODQJXDJH�ZLOO�QRW�EH�DSSDUHQW�ZLWKRXW�VRPH�IDPLOLDULW\�ZLWK�PDFKLQH�ODQJXDJH��,Q�WKLV�FKDSWHU�WKH�PDLQ�IHDWXUHV�RI�[���PDFKLQH�FRGH�DUH�SUHVHQWHG�

Page 72: Linux assembly language programming

7KH�SURFHVV�RI�FRQYHUWLQJ�DVVHPEO\�FRGH�LQWR�PDFKLQH�FRGH�LV�FDOOHG�DVVHPEOLQJ��$�SURJUDP�ZKLFK�WDNHV�DVVHPEO\�ODQJXDJH�DV�LQSXW�DQG�SURGXFHV�PDFKLQH�ODQJXDJH�DV�RXWSXW�LV�FDOOHG�DQ�DVVHPEOHU��,W�LV�VLPLODU�WR�D�FRPSLOHU�EXW�LW�RSHUDWHV�DW�D�ORZHU�OHYHO�&RQYHUVHO\��WKH�SURFHVV�RI�WXUQLQJ�PDFKLQH�FRGH�LQWR�DVVHPEO\�ODQJXDJH�LV�FDOOHG�XQDVVHPEOLQJ��$�SURJUDP�ZKLFK�GRHV�WKLV�LV�FDOOHG�DQ�XQDVVHPEOHU�����$VVHPEOLQJ�6LPSOH�3URJUDPV7R�WHOO�WKH�ZKROH�VWRU\�RI�WKH�PDFKLQH�FRGH�IRU�WKH�[���SURFHVVRUV�LQYROYHV�D�ORW�RI�WULFN\�GHWDLO��+RZHYHU��LW�LV�TXLWH�HDV\�WR�VSHFLI\�PDFKLQH�FRGH�IRU�WKH�VXEVHW�RI�WKH�[���DVVHPEO\�ODQJXDJH�XVHG�LQ�DOO�WKH�QXPEHUHG�SURJUDPV�XVHG�LQ�VHFWLRQV�����WKURXJK������&RGLQJ�IRU�WKLV�SRUWLRQ�RI�[���DVVHPEO\�ODQJXDJH�LV�JLYHQ�LQ�7DEOH������0RVW�RI�WKH�PDFKLQH�FRGH�LV�JLYHQ�LQ�KH[��EXW�VRPH�RI�WKH�E\WHV�KDYH�WR�EH�JLYHQ�LQ�ELQDU\��7KH�QXPEHU�RI�E\WHV�YDULHV�IURP�RQH�WR�VL[��7KH�ILUVW�OLQH�RI�WKH�WDEOH��IRU�H[DPSOH��VKRZV�WKDW�WKH�FRGH�IRU�029UHJ�UHJ�LV�D�WZR�E\WH�FRGH��WKH�ILUVW�RI�ZKLFK�LV�JLYHQ�LQ�KH[�DQG�WKH�VHFRQG�LQ�ELQDU\��7KH�E\WHV�JLYHQ�LQ�ELQDU\�DUH�WKRVH�ZKLFK�LQFRUSRUDWH�UHJLVWHU�FRGHV��6�6�6�LQ�WKH�ELQDU\�FRGLQJ�UHSUHVHQWV�WKH�WKUHH�ELW�FRGH�IRU�WKH�VRXUFH�UHJLVWHU��'�'�'�UHSUHVHQWV�WKH�WKUHH�ELW�FRGH�IRU�WKH�GHVWLQDWLRQ�UHJLVWHU��7KH�UHJLVWHU�FRGHV�DUH�JLYHQ�DW�WKH�ERWWRP��(DFK��LPP��RFFXUULQJ�LQ�D�FRPPDQG�VSHFLILHV�IRXU�DGGLWLRQDO�E\WHV��ZKLFK�PXVW�EH�VXSSOLHG�E\�WKH�SURJUDPPHU��([DPSOHV�IROORZ��8VLQJ�7DEOH������3URJUDP�����FDQ�EH�PDFKLQH�DVVHPEOHG�DV�IROORZV�

>�@�,I�UHJ�LV�($;��WKHUH�LV�D�VKRUWHU�PDFKLQH�FRGH�������5HJLVWHU�&RGHV7KH�ILUVW�E\WH�RI�WKH�ILUVW�FRPPDQG��%$��LV�HQFRGHG�XVLQJ�WKH�������'''�FRGH�JLYHQ�IRU�029�UHJ�LPP��7KH�'''�ELWV�DUH�ILOOHG�LQ�ZLWK�WKH�UHJLVWHU�FRGH�����IRU�(';��ZKLFK�UHVXOWV�LQ�D�ELQDU\�FRGH�RI�����������RU�D�KH[�FRGH�RI�%$�7KH�VHFRQG�029�FRPPDQG��029�(&;�($;�LV�HQFRGHG�DV����&��XVLQJ�WKH�ILUVW�OLQH�RI�WKH�FKDUW�ZKLFK�VSHFLILHV�WKH�VHFRQG�E\WH�DV����666�'''��($;�LV�WKH�VRXUFH�UHJLVWHU�DQG�LWV�FRGH�LV������(&;�LV�WKH�GHVWLQDWLRQ�UHJLVWHU�DQG�LWV�FRGH�LV������7KH�UHVXOWLQJ�VHFRQG�E\WH�LV�������������ZKLFK�LV�&��3URJUDP�����/DEHO��6RXUFH�&RGH�����$GGUHVV��0DFKLQH�&RGH

7DEOH������6RPH����%LW�0DFKLQH�&RGLQJ)LUVW�%\WH 6HFRQG�%\WH ��0RUH029 UHJ��UHJ �� ����6�6�6�'�'�'029 UHJ��LPP ����������'�'�' BBB$'' UHJ��UHJ �� ����6�6�6�'�'�'$'' UHJ��LPP �� ����������'�'�'>�@ BBB68% UHJ��UHJ �� ����6�6�6�'�'�'68% UHJ��LPP �� ����������'�'�'>�@ BBB,1& UHJ ����������'�'�''(& UHJ ����������'�'�',1 ($;��>';@ ('287 >';@��($; ()5(7 &�-03 LPP (� BBB-= LPP �) �� BBB-1= LPP �) �� BBB-6 LPP �) �� BBB-16 LPP �) �� BBB

Page 73: Linux assembly language programming

�������029�(';������������������%$���������������������������������������������������������������������������������,1�($;��>';@�������������('�������029�(&;��($;����������������&��������,1�($;��>';@�������������('�������029�(';��($;����������������&�25'����68%�($;��(&;����������%�����&��������-=�*&'����������������'���)��������������������������������)���������������������������������������������������-16�1;7�������������������)������������������������������������������������������������������������������������029�($;��(&;����������������&��������029�(&;��(';����������%�����'�1;7����029�(';��($;����������'�����&��������-03�25'���������������)��(��(���������������������������������))�))��������������������������������))*&'����029�($;��(';����������������'��������029�(';������������������%$���������������������������������������������������������������������$�����������287�>';@��($;���������%��()�������5(7�������������������&��&�������/LWWOH�(QGLDQ�,PPHGLDWH�&RGHV7KH�ILUVW�DQG�ODVW�029�FRPPDQGV�LQ�WKLV�SURJUDP�ERWK�FRQWDLQ�LPPHGLDWH�YDOXHV��%RWK�RI�WKHVH�VWRUH�IRXU�E\WH�YDOXHV�LQ�IRXU�E\WH�UHJLVWHUV��1RWLFH�LQ�WKH�ODVW�029�FRPPDQG��WKH�IRXU�E\WH�LPPHGLDWH�YDOXH���������+�LV�VWRUHG�DV�������������������5HODWLYH�-XPSV7KH�MXPS�HQFRGLQJ�XVHG�E\�[���SURFHVVRUV�XVHV�UHODWLYH�UDWKHU�WKDQ�DEVROXWH�DGGUHVVHV�ZKHQ�WKLV�LV�IHDVLEOH��$OO�WKH�MXPS�LQVWUXFWLRQV�LQ�WKLV�SURJUDP�HQFRGH�MXPSV�DV�UHODWLYH�MXPSV��$Q�DEVROXWH�MXPS�ZRXOG�VSHFLI\�DQ�DFWXDO�DGGUHVV�DV�WKH�WDUJHW�RI�D�MXPS��ZKHUHDV�UHODWLYH�HQFRGLQJ�VSHFLILHV�WKH�QXPEHU�RI�E\WHV�WR�MXPS�VWDUWLQJ�IURP�WKH�EHJLQQLQJ�RI�WKH�QH[W�LQVWUXFWLRQ��7KLV�YDOXH�PD\�EH�LQWHUSUHWHG�DV�D�VLJQHG�QXPEHU��D�QHJDWLYH�YDOXH�IRU�D�EDFNZDUGV�MXPS��7KH�HQFRGHG�YDOXH�LV�DGGHG�E\�WKH�SURFHVVRU�WR�WKH�DGGUHVV�RI�WKH�QH[W�LQVWUXFWLRQ�WR�REWDLQ�WKH�DGGUHVV�RI�WKH�LQVWUXFWLRQ�EHLQJ�MXPSHG�WR��)RU�H[DPSOH��WKH�-03�1;7�LQVWUXFWLRQ�KDV�D�OLWWOH�HQGLDQ�HQFRGHG����FRXQWLQJ�IRXU�E\WHV�IURP�WKH����E\WH�WKDW�EHJLQV�WKH�029�($;��(&;��EULQJV�\RX�WR�WKH����E\WH�WKDW�EHJLQV�029�(';��($;��7KLV�FRPPDQG�LV�WKH�WDUJHW�RI�-03�1;7��7KH�-03�25'LQVWUXFWLRQ�FRQWDLQV�WKH�UHODWLYH�MXPS�YDOXH�))))))(�+� ������&RXQWLQJ�EDFNZDUGV����E\WHV�IURP�WKH����E\WH�WKDW�EHJLQV�WKH�029�($;��(';��EULQJV�\RX�WR�WKH����E\WH�WKDW�LV�WKH�ILUVW�E\WH�RI�WKH�FRGH�IRU�68%�($;��(&;�������6KRUW�-XPSV7KH�UHODWLYH�MXPS�YDOXHV�LQ�WKH�SURJUDP�DUH�HDFK�HQFRGHG�LQ�IRXU�E\WHV��LQ�VSLWH�RI�WKH�IDFW�WKDW�WKH�YDOXHV��������DQG�����ILW�HDVLO\�LQ�WKH�RQH�E\WH�VLJQHG�UDQJH��7KHUH�DUH�DOWHUQDWH�HQFRGLQJV�ZKLFK�FDQ�EH�XVHG�WR�VDYH�VSDFH�RQ�RQH�E\WH�MXPSV��7KHVH�MXPSV�DUH�FDOOHG�VKRUW�MXPSV��7KH�VKRUW�MXPS�HQFRGLQJ�IRU�WKH�-16�1;7�LQVWUXFWLRQ��IRU�H[DPSOH��LV��������7KH�PDFKLQH�FRGHV�IRU�WKH�FRQGLWLRQDO�VKRUW�MXPSV�FDQ�EH�REWDLQHG�IURP�WKHLU����ELW�FRXQWHUSDUWV�E\�GURSSLQJ�WKH�2)�E\WH�DQG�VXEWUDFWLQJ���+�IURP�WKH�VHFRQG�E\WH��7KH�VKRUW�FRGH�IRU�WKH�-03�FRPPDQG�LV�(%��,Q�(GOLQDV��D�ORQJ�MXPS�FDQ�EH�FRQYHUWHG�WR�D�VKRUW�MXPS�XVLQJ�WKH�V�NH\��,Q�1$60��WKH�XQDGRUQHG�-03�LQVWUXFWLRQ�DOZD\V�PHDQV�D�VKRUW�MXPS��$�-03�LQVWUXFWLRQ�ZKLFK�FDQW�EH�HQFRGHG�LQ�RQH�E\WH�JHWV�DQ�HUURU�PHVVDJH��7R�VSHFLI\�D�MXPS�ZKLFK�XVHV�WKH�ORQJHU�HQFRGLQJ��-03�1($5�LV�XVHG��,Q�WKH�SUHVHQW�FRQWH[W��MXPSLQJ��IDU��ZRXOG�VHHP�WR�PDNH�PRUH�VHQVH�WKDQ�MXPSLQJ��QHDU���EXW�D�IDU�MXPS�DFWXDOO\�UHIHUV�WR�D�MXPS�ZKLFK�XVHV�DEVROXWH�HQFRGLQJ�DV�ZLOO�EH�VHHQ�LQ�FKDSWHU����6LQFH�PRVW�MXPSV�DUH�QR�PRUH�WKDQ�����E\WHV��LW�PDNHV�VHQVH�WR�KDYH�D�VSHFLDO�HQFRGLQJ�IRU�WKHP��7KH�LQVWUXFWLRQ�VHW�IRU�WKH������DFWXDOO\�KDG�RQO\�WKH�VKRUW�YHUVLRQV�RI�WKH�FRQGLWLRQDO�MXPSV��7KH�2)�ORQJ�MXPS�

Page 74: Linux assembly language programming

FRGHV�GLG�QRW�DSSHDU�XQWLO�WKH�����������2SFRGH�6SDFH7KH�PDFKLQH�FRGHV�JLYHQ�LQ�WKH�ODVW�VHFWLRQ�FDQ�EH�XVHG�WR�DVVHPEOH�D�JUHDW�YDULHW\�RI�VLPSOH�SURJUDPV��2Q�WKH�RWKHU�KDQG��WDNHQ�WRJHWKHU�WKH\�UHSUHVHQW�RQO\�D�VPDOO�SRUWLRQ�RI�WKH�FRPSOHWH�[���LQVWUXFWLRQ�VHW��,Q�WKLV�VHFWLRQ�DQ�RYHUYLHZ�RI�WKH�HQWLUH�VHW�RI�[���PDFKLQH�FRGHV�LV�JLYHQ��7DEOH�����VKRZV�ZKDW�LQIRUPDWLRQ�LV�FRQYH\HG�E\�WKH�ILUVW�E\WH�RI�PDFKLQH�FRGH�0RVW�RI�WKH�HQWULHV�LQ�WKH�WDEOH�FRQWDLQ�ERWK�PQHPRQLF�DQG�RSHUDQG�LQIRUPDWLRQ��,Q�D�IHZ�FDVHV��WKLV�LQIRUPDWLRQ�VSHFLILHV�ERWK�FRPSOHWHO\��7KH�HQWU\�LQ�WKH�WDEOH�IRU�WKH�E\WH�((��IRU�H[DPSOH��LV������287����>';@�$/,Q�RWKHU�FDVHV��WKH�PQHPRQLF�LV�JLYHQ�EXW�D�FODVV�RI�DOORZDEOH�RSHUDQGV�DUH�GHVFULEHG�XVLQJ�OHWWHU�NH\V�

z U�VWDQGV�IRU�UHJLVWHU�z P�VWDQGV�IRU�PHPRU\�z L�VWDQGV�IRU�LPPHGLDWH�z E�VWDQGV�IRU�E\WHz ��VWDQGV�IRU���E\WHV�z Y�PHDQV����ELWV�RU����ELWV�z H�PHDQV�(�LQ����ELWV�DQG�GLVDSSHDUV�LQ����ELWV�

7KHVH�NH\V�ZHUH�XVHG�E\�6WHSKHQ�0RUVH�LQ�WKH�H[FHOOHQW�ERRN�����������$UFKLWHFWXUH�&RQVLGHU�WKH�HQWU\�LQ�WKH�WDEOH�IRU�WKH�E\WH���������$''����UY�UPY6LQFH�WKH�ILUVW�RSHUDQG�SRVLWLRQ�FRQWDLQV�UY��WKLV�LQGLFDWHV�WKDW�WKH�ILUVW�RSHUDQG�PXVW�EH�D�����RU�D����ELW�UHJLVWHU��6LQFH�WKH�VHFRQG�SRVLWLRQ�FRQWDLQV�UPY��WKH�VHFRQG�RSHUDQG�PXVW�EH�D�����RU����ELW�UHJLVWHU�RU�PHPRU\�RSHUDQG��6LQFH�(',�DQG�($;�DUH����ELW�UHJLVWHUV��ZH�VHH�WKDW�$''�(',�($;�LV�DQ�H[DPSOH�RI�DQ�LQVWUXFWLRQ�ZKLFK�FDQ�EH�HQFRGHG�ZLWK�FRGH�ZKRVH�ILUVW�E\WH�LV�����$QRWKHU�H[DPSOH�LV�$''�(',�>����+@�7KH�W\SH�RI�LQIRUPDWLRQ�FRQYH\HG�E\�WKH�ILUVW�E\WH�RI�FRGH�FDQ�EH�EURNHQ�GRZQ�LQWR�FDVHV��� ,Q�D�IHZ�FDVHV��WKLV�RQH�E\WH�VXIILFHV�WR�FRPSOHWHO\�VSHFLI\�DQ�LQVWUXFWLRQ��)���IRU�H[DPSOH��VSHFLILHV�WKH�KDOW�LQVWUXFWLRQ��+/7��� ,Q�PDQ\�RWKHU�FDVHV��DOWKRXJK�WKH�ILUVW�E\WH�GHWHUPLQHV�ZKLFK�RSHUDWLRQ�LV�WR�EH�SHUIRUPHG��LW�GRHV�QRW�VSHFLI\�WKH�RSHUDQGV��,Q�WKHVH�FDVHV��D�VHFRQG�E\WH�LV�RIWHQ�VXIILFLHQW�WR�FDUU\�WKH�RSHUDQG�LQIRUPDWLRQ��7KLV�VHFRQG�E\WH�LV�FDOOHG�WKH�0RG50�E\WH��)RU�H[DPSOH��LI�WKH�ILUVW�E\WH�LV�����WKHQ�WKH�WDEOH�HQWU\�LV�029�UPY�UY��,Q�DGGLWLRQ�WR�VSHFLI\LQJ�WKH�RSHUDWLRQ�029��WKH�UPY�UY�RSHUDQG�NH\V�FRQYH\�LQIRUPDWLRQ�RQ�KRZ�WKH�0RG50�E\WH�LV�WR�EH�LQWHUSUHWHG��� 7KHUH�DUH�DOVR�FDVHV�ZKHUH�WKH�ILUVW�E\WH�GRHV�QRW�IXOO\�VSHFLI\�DQ�RSHUDWLRQ��EXW�PHUHO\�D�JHQHUDO�W\SH�RI�RSHUDWLRQ��DQG�WKH�0RG50�E\WH�LV�XVHG�WR�FRPSOHWH�WKH�VSHFLILFDWLRQ�RI�WKH�RSHUDWLRQ�DV�ZHOO�DV�FDUU\�RSHUDQG�LQIRUPDWLRQ��)RU�H[DPSOH��LI�WKH�ILUVW�E\WH�LV�&���WKHQ�WKH�WDEOH�HQWU\�LV�6KLIW�UPY�LE��,Q�WKHVH�FDVHV�WKH�IXOO�LQWHUSUHWDWLRQ�RI�WKH�0RG50�E\WH�UHTXLUHV�PRYLQJ�WR�7DEOH������6KLIW�LV�QRW�D�PQHPRQLF��,W�LV�RQO\�D�SRLQWHU�LQWR�7DEOH������7KLV�LV�LQGLFDWHG�LQ�WKH�WDEOH�E\�WKH�IDFW�WKDW�QRW�DOO�RI�LWV�

Page 75: Linux assembly language programming

OHWWHUV�DUH�XSSHU�FDVH��� ,I�WKH�ILUVW�E\WH�LV�2)��WKHQ�D�ZKROH�UDIW�RI�SRVVLELOLWLHV�LV�RSHQHG�XS��7KH�LQIRUPDWLRQ�FRQYH\HG�E\�2)�LV�PHUHO\��JR�WR�7DEOH������

�� ,I�WKH�ILUVW�E\WH�LV�LQ�WKH�UDQJH�'��')��WKHQ�WKH�FRPPDQG�LV�D�IORDWLQJ�SRLQW�FRPPDQG��7KHVH�FRPPDQGV�DUH�QRW�GHDOW�ZLWK�LQ�WKLV�WH[W��� 7KHUH�DUH�DOVR�SUHIL[�E\WHV�ZKLFK�PRGLI\�WKH�VXEVHTXHQW�FRPPDQGV��,Q�7DEOH������WKH�SUHIL[�E\WHV�VXFK�DV�WKH�/2&.�SUHIL[�)��DUH�VKRZQ�DV�ERWWRP�VLWWHUV�

7KHVH�YDULRXV�FDVHV�DUH�GHDOW�ZLWK�RQH�E\�RQH�LQ�WKH�IROORZLQJ�VHFWLRQV�����7KH�0RG50�%\WH7KH�0RG50�E\WH�LV�XVHG�WR�FDUU\�RSHUDQG�LQIRUPDWLRQ�ZKHQ�WKH�ILUVW�E\WH�FDQQRW�GR�VR��7KH�0RG50�E\WH�FRQVLVWV�RI�WKUHH�SDUWV�

�� %LWV���DQG���DUH�WKH�0RG�ELWV��:KHQ�WKH�0RG�ELWV�DUH�����WKH�0�ELWV�GHVLJQDWH�D�UHJLVWHU��2WKHUZLVH�WKH�0�ELWV�DUH�XVHG�IRU�PHPRU\�FRGLQJ��� %LWV�������DQG���DUH�WKH�5��RU�UHJLVWHU��ELWV�DQG�DUH�RIWHQ�GHVLJQDWHG�XVLQJ�D�VODVK�QRWDWLRQ���U��� %LWV�������DQG���DUH�WKH�0��RU�PHPRU\��ELWV��DQG�DUH�XVHG�WR�VSHFLI\�RU�KHOS�VSHFLI\�D�PHPRU\�ORFDWLRQ�H[FHSW�ZKHQ�WKH�0RG�ELWV�DUH����

������UY�UPY�&RGLQJ7KH�HQWU\�LQ�7DEOH�����IRU�WKH�E\WH����LV

7DEOH������)LUVW�%\WH�RI�2SFRGH�6SDFH

0RG 5 0� � � � � � � �

Page 76: Linux assembly language programming

�����$''����UY�UPY:H�FDQ�XVH�WKLV�HQWU\�WR�DVVHPEOH�WKH�$''�(',�($;�FRPPDQG��7KH�$''�(',��($;�FRPPDQG�UHTXLUHV�D�0RG50�E\WH��7KH�P�LQ�WKH�VHFRQG�RSHUDQG�SRVLWLRQ�VSHFLILHV�QRW�RQO\�WKDW�WKH�VHFRQG�RSHUDQG�PD\�EH�D�PHPRU\�RSHUDQG��EXW�DOVR�WKDW�LW�PXVW�EH�HQFRGHG�LQ�WKH�0�ELWV�RI�WKH�0RG50�E\WH��6LQFH�WKH�VHFRQG�RSHUDQG�LV�WKH�UHJLVWHU�($;��WKH�ELW�FRGH�IRU�($;�������RFFXSLHV�WKH�0�ELWV�LQ�WKH�0RG50�E\WH��6LQFH�ZH�DUH�XVLQJ�D�UHJLVWHU�IRU�WKH�0�ELWV��WKH�WZR�0RG�ELWV�PXVW�EH�����7KH�ILUVW�RSHUDQG��ZKLFK�DV�WKH�U�LQGLFDWHV�PXVW�EH�D�UHJLVWHU��LV�WKHUHIRUH�HQFRGHG�LQ�WKH�5�ELWV�RI�WKH�0RG50�E\WH��(',�LV�WKH�ILUVW�RSHUDQG�DQG�LWV�FRGH�LV������&RQVHTXHQWO\�WKH�0RG50�E\WH�LV�

&RPELQLQJ�WKH����ZLWK�WKH�0RG50�E\WH�\LHOGV�WKH�FRGH����)��IRU�$''�(',�($;�,I�LQ�WKLV�FRGH�ZH�FKDQJH�WKH�WZR�0RG�ELWV�IURP����WR�����ZH�JHW�WKH�FRGH�IRU�$''�(',�>($;@��+HUH�WKH�0�ELWV�DUH�XVHG�IRU�DQ�DFWXDO�PHPRU\�RSHUDQG��7KH�FRGHV����DQG����DUH�XVHG�WR�FRGH�IRU�LPPHGLDWH�GLVSODFHPHQWV�VXFK�DV�$''�(',�>($;����@��ZKHUH�WKH�GLVSODFHPHQW�LV�HLWKHU�RI�W\SH�LE�RU�LY��+HQFH�WKH�FRGH�IRU�$''�(',�>($;����@�LV�����������7KH�FRGH�IRU�$''�(',�>($;�����������+@�LV����%���������������,I�WKLV�FRGLQJ�ZHUH�GRQH�XQLIRUPO\��KRZHYHU��LW�ZRXOG�OHDYH�QR�URRP�LQ�WKH�FRGLQJ�VSDFH�IRU�WKH�FRPSOLFDWHG�IRUPDWV�VHHQ�LQ�FKDSWHU����VHFWLRQ��������7R�PDNH�VSDFH�IRU�FRGLQJ�WKHVH�IRUPDWV��WKH�FRGH�IRU�WKH�(63�UHJLVWHU�LV�UHPRYHG�WR�SURYLGH�DQ�HVFDSH�LQWR�DQRWKHU�E\WH�RI�WKH�FRGLQJ�VSDFH�FDOOHG�WKH�6,%�E\WH�������UPY�UY�&RGLQJ:KHQ�WKH�UPY�DQG�UY�NH\V�DUH�UHYHUVHG��WKLV�WXUQV�WKH�WKUHH�ELW�FRGHV�DURXQG��$V�DQ�H[DPSOH��VXSSRVH�ZH�ZDQW�WR�FRGH�WKH�LQVWUXFWLRQ�029�(',��($;��7KH�HQWU\�IRU��%�PDWFKHV�DQG�FRXOG�EH�FRGHG�ZLWK�WKH�VDPH�0RG50�E\WH�DV�WKH�$''�(',��($;�FRGH��%XW�WKH�HQWU\����DOVR�PDWFKHV������029����UPY�UY8VLQJ�WKLV�HQWU\��ZH�QRWH�WKDW�WKH�ILUVW�RSHUDQG�PD\�EH�D�UHJLVWHU�DQG�LV�FRGHG�LQ�WKH�0�ELWV��+HQFH�WKH�FRGH�IRU�(',�JRHV�LQWR�WKH�OHDVW�VLJQLILFDQW�ELWV��7KH�VHFRQG�RSHUDQG��($;��LV�FRGHG�LQ�WKH�5�ELWV�

+HQFH��XVLQJ�WKH����HQWU\�LQ�7DEOH������ZH�REWDLQ�WKH�HQFRGLQJ����&��IRU�029�(',�($;�������1RQUHJLVWHU�5�%LWV,Q�VRPH�FDVHV��WKH�ILUVW�E\WH�LV�LQVXIILFLHQW�WR�VSHFLI\�DQ�RSHUDWLRQ��EXW�WKH�5�ELWV�RI�D�0RG50�E\WH�DUH�XVHG�WR�FRPSOHWH�WKH�VSHFLILFDWLRQ��7KHVH�FDVHV�DUH�OLVWHG�LQ�7DEOH������68%�(&;�����LV�DQ�H[DPSOH��7KH�HQWU\�LQ�7DEOH�����IRU����LV����,PPHG����UPY�LE6LQFH�WKH�URZ�RI�7DEOH�����ODEHOHG��,PPHG��KDV�D�68%�XQGHU��U� �����ZH�OHDUQ�WKDW�LQVWUXFWLRQV�PDWFKLQJ

0RG 5 0� � � � � � � �� � � � � � � ����������� �)�+

0RG 5 0� � � � � � � �� � � � � � � ����������� �&�+

Page 77: Linux assembly language programming

�����68%����UPY�LEFDQ�EH�FRGHG�XVLQJ����DV�WKH�ILUVW�E\WH�DQG�����IRU�WKH�5�ELWV�RI�WKH�0RG50�E\WH��6LQFH�WKH�ILUVW�RSHUDQG��(&;��LV�QRW�PHPRU\��WKH�0RG�ELWV�PXVW�EH�����DQG�WKH�0�ELWV�ZLOO�EH�ILOOHG�ZLWK������WKH�FRGH�IRU�(&;��6R�WKH�UHTXLUHG�0RG50�E\WH�LV

7KH�LE�VWDQGV�IRU�DQ�LPPHGLDWH�E\WH��6R�WKH�FRGH�IRU�68%�(&;����LV����(�������������6SDFH��2)���«�2Q�DQ�������WKH�E\WH�2)�FRGHV�IRU�WKH�LQVWUXFWLRQ�323�&6��2Q�VXEVHTXHQW�SURFHVVRUV�WKLV�LQVWUXFWLRQ�ZDV�UHPRYHG�WR�PDNH�WKH�2)�FRGH�DYDLODEOH�IRU�D�VLJQLILFDQW�H[SDQVLRQ�LQ�WKH�LQVWUXFWLRQ�VHW��7DEOH�����UHYHDOV�WKH�VSDFH�ZKLFK�ZDV�RSHQHG�XS��/LNH�7DEOH������LW�VKRZV�WKH�LQIRUPDWLRQ�FRQYH\HG�E\�D�VLQJOH�E\WH��LQ�WKLV�FDVH�WKH�E\WH�IROORZLQJ�DQ�LQLWLDO�2)�E\WH��$�IHZ�RI�WKH�LQVWUXFWLRQV�LQ�7DEOH�����DSSHDUHG�ILUVW�RQ�WKH��������WKH��������RU�WKH�3HQWLXP��EXW�PRVW�RI�WKHP�DSSHDUHG�ILUVW�RQ�WKH��������7KH�EXON�RI�WKH�LQVWUXFWLRQV�QHZ�WR�WKH�������DUH�LQ�7DEOH������� $V�ZLWK�7DEOH������VRPHWLPHV�RQH�HQWU\�VSHFLILHV�H[DFWO\�RQH�LQVWUXFWLRQ��)RU�H[DPSOH��2)�&$�LV�WKH�FRGH�IRU�WKH�LQVWUXFWLRQ�%6:$3�(';���%\WH�6:$3�WKH�(';�UHJLVWHU���� 6RPHWLPHV�D�0RG50�E\WH�LV�QHHGHG�WR�FRQYH\�RSHUDQG�LQIRUPDWLRQ��7KH�;$''�LQVWUXFWLRQ�ZKRVH�ILUVW�WZR�E\WHV�DUH�2)�&��LV�DQ�H[DPSOH�RI�WKLV��� 6RPHWLPHV�D�0RG50�E\WH�LV�XVHG�WR�VSHFLI\�DQ�RSHUDWLRQ��)RU�H[DPSOH��LI�WKH�ILUVW�WZR�E\WHV�RI�WKH�LQVWUXFWLRQ�DUH�2)�����WKHQ�ZH�PXVW�FKHFN�5�ELWV�RI�WKH�0RG50�E\WH�WR�GHWHUPLQH�WKH�RSHUDWLRQ��)URP�7DEOH�����ZH�VHH�WKDW�LI�WKH�UHJLVWHU�ELWV�LQ�WKH�0RG50�E\WH�ZHUH�����WKHQ�WKH�LQVWUXFWLRQ�ZRXOG�EH�DQ�/,'7�LQVWUXFWLRQ��/RDG�WKH�,QWHUUXSW�'HVFULSWRU�7DEOH��

7DEOH������,QVWUXFWLRQV�6SHFLILHG�E\�5�%LWV�U ������ ������ ������ ������ ������ ������ ������ ������,PPHG $'' 25 $'& 6%% $1' 68% ;25 &036KLIW 52/ 525 5&/ 5&5 6+/ 6+5 6$58QDU\ 7(67�L 127 1(* 08/ ,08/ ',9 ,',9,QF'HF ,1& '(&,QGLU ,1& '(& &$//�P &$//�)$5�P -03 -03�)$5 386+

0RG 5 0� � � � � � � �� � � � � � � ����������� �(�+

7DEOH����������6SDFH

Page 78: Linux assembly language programming

�� 6RPH�RI�WKH�FRGHV�UHIHU�WR�00;�LQVWUXFWLRQV��7KHVH�LQVWUXFWLRQV�DUH�GLVFXVVHG�LQ�WKH�,QWHO�ERRN��7KH�&RPSOHWH�*XLGH�WR�00;�7HFKQRORJ\�:H�OHDUQ�WKDW�LQVWUXFWLRQV�PDWFKLQJ�7DEOH�����FRQWDLQ��������3HQWLXP��DQG�00;�LQVWUXFWLRQV�DV�ZHOO�DV�������LQVWUXFWLRQV��)RU�H[DPSOH��WKH�;$''�DQG�%6:$3�LQVWUXFWLRQV�ILUVW�DSSHDUHG�RQ�WKH�������DQG�WKH�&38,'DQG�5'76&�ILUVW�DSSHDUHG�RQ�WKH�3HQWLXP��������%LW�YV�����%LW�&RGH7R�WKLV�SRLQW�ZH�KDYH�GLVFXVVHG�PDFKLQH�FRGHV�IRU�FRPPDQGV�LQYROYLQJ����ELW�JHQHUDO�UHJLVWHUV�RQO\��:H�DUH�QRZ�UHDG\�WR�FRQVLGHU�WKH�FRGLQJ�RI�WKH����ELW�JHQHUDO�UHJLVWHUV�7KH�029�(&;�($;�FRPPDQG��DV�QRWHG�LQ�VHFWLRQ������FDQ�EH�HQFRGHG�DV����&���7KH�FRUUHVSRQGLQJ����ELW�FRPPDQG�LV�029�&;�$;��6XUSULVLQJO\��WKH�FRGH�IRU�WKLV�FRPPDQG�LV�DOVR����&O��7KH�������ZDV�GHVLJQHG�WR�XVH�WKH�VDPH�HQFRGLQJV�IRU�WKH����ELW�UHJLVWHUV�DV�IRU�WKH����ELW�UHJLVWHUV��&OHDUO\�WKHUH�LV�D�SUREOHP�ZLWK�WKLV��:KHQ�WKH�SURFHVVRU�IHWFKHV�WKH�E\WHV����&O��ZKLFK�LQVWUXFWLRQ�VKRXOG�EH�H[HFXWHG��029�(&;�($;�RU�029�&;�$;"�,W�VR�KDSSHQV�WKDW�WKH�GHFLVLRQ�LV�EDVHG�RQ�D�VLQJOH�ELW�LQ�WKH�SURFHVVRU��7KLV�ELW�GHWHUPLQHV�ZKHWKHU�FRGH�LV�LQWHUSUHWHG�DV����ELW�FRGH��LQ�ZKLFK�FDVH����&��PHDQV�029�(&;�($;��RU����ELW�FRGH��LQ�ZKLFK�FDVH����&��PHDQV�029�&;�$;�:KHQ�WKH�ELW�LV�VHW�LW�GRHV�QRW�PHDQ�WKDW�WKH�LQVWUXFWLRQ�029�&;�$;�LV�XQDYDLODEOH��7R�HQFRGH�WKH�IDFW�WKDW�WKH����ELW�FRGLQJ�SUHVXPSWLRQ�LV�ZURQJ�D�RQH�E\WH�SUHIL[����LV�XVHG��6R�LQ����ELW�FRGH�������&��LV�WKH�FRGH�IRU�029�&;�$;�6LPLODUO\�WKH�029�(&;�($;�LQVWUXFWLRQ�LV�DYDLODEOH�LQ����ELW�FRGH��7KH�FRGH�IRU�LW�LV�������&O�7KLV�SUHIL[�LV�FDOOHG�WKH�RSHUDQG�VL]H�SUHIL[��,W�PHDQV�WKDW�WKH�RSHUDQG�VL]H�LV�QRW�WKH�GHIDXOW�VL]H�7\SLFDOO\�WKH�ELW�LV�VHW�ZKLOH�UXQQLQJ�/LQX[�IRU�H[DPSOH��DQG�FOHDUHG�ZKLOH�UXQQLQJ�'26��([FHSW�ZKHUH�VSHFLILFDOO\�VWDWHG�RWKHUZLVH��FRGH�JLYHQ�LQ�WKLV�ERRN�DVVXPHV�WKH�SURFHVVRUV�ELW�LV�VHW�IRU�WKH����ELW�GHIDXOW��+HQFH�����&��PHDQV�029�(&;�($;�DQG�������&��PHDQV�029�&;�$;��1RZ�WKDW�ZH�VHH�KRZ�WKH�FRGH����&��FDQ�KDYH�HLWKHU�RQH�RI�WZR�SRVVLEOH�PHDQLQJV��LW�LV�HDV\�WR�H[SODLQ�WKH�Y�LQ

7DEOH�������)�,QVWUXFWLRQV�6SHFLILHG�E\�5�%LWV�U ������ ������ ������ ������ ������ ������ ������ ������/RFDO7 6/'7�UP�� 675�UP�� //'7�UP�� /75�UP�� 9(55�UP�� 9(5:�UP��*OREDO7 6*'7�P�� 6,'7�P�� /*'7�P�� /,'7�P�� 60:6�UP�� /06:�UP��%LWV %7�UPY�LE� %76�UPY�LE� %75�UPY�LE� %7&�UPY�LE�

7DEOH����������YV�����%LW�&RGLQJ�([DPSOH���%LW�&RGH ���%LW�&RGH029�(&;��($; ���&� ������&O029�&;��$; ������&� ���&�

Page 79: Linux assembly language programming

WKH�HQWU\�LQ�WKH�ILUVW�FKDUW�IRU�WKH�FRGH���������029����UPY�UY7KH�Y�LQ�HDFK�RSHUDQG�PDUNHU�VWDQGV�IRU�YDULDEOH�ZKHUH�YDULDEOH�UHIHUV�WR�WKH�IDFW�WKDW�WKH�VL]H�PD\�EH�HLWKHU����RU����ELWV��6LPLODUO\�WKH�H�LQ�UHJLVWHU�GHVLJQDWLRQV�VXFK�DV�H$;�UHIHUV�WR�WKH�IDFW�WKDW�LQ����ELW�FRGLQJ�($;�LV�LQWHQGHG�DQG�LQ����ELW�FRGLQJ�$;�LV�LQWHQGHG�����7KH���%LW�5HJLVWHUV$OWKRXJK�WKH����ELW�DQG����ELW�UHJLVWHU�FRPPDQGV�DUH�IRUFHG�WR�VKDUH�RSFRGHV��WKH�HLJKW�ELW�UHJLVWHUV�JHQHUDOO\�KDYH�GHGLFDWHG�RSFRGHV��)RU�H[DPSOH��WKH�RSFRGH��$�GHVLJQDWHV�DQ�HLJKW�ELW�029�LQVWUXFWLRQ��7KH�HQWU\�LQ�7DEOH�����IRU��$�LV�����029����UE�UPEUE�VWDQGV�IRU�UHJLVWHU�E\WH�DQG�LV�FRGHG�IRU�LQ�WKH�UHJLVWHU�ELWV�RI�WKH�0RG50�E\WH��UPE�VWDQGV�IRU�UHJLVWHURU�PHPRU\�E\WH�DQG�LV�FRGHG�IRU�LQ�WKH�PHPRU\�ELWV�RI�WKH�0RG50�E\WH���$�&��LV�WKH�FRGH�IRU�029�$/�&/�7DEOH�����OLVWV�WKH�HLJKW�ELW�UHJLVWHU�FRGHV��7KH�FRGH�IRU�&/�JRHV�LQWR�WKH�0�ELWV�DQG�WKH�FRGH�IRU�$/�JRHV�LQWR�WKH�5�ELWV�

&RPELQLQJ�WKH�WZR�E\WHV�\LHOGV��$�&������/LQX[����)LOHV3URJUDPV�LQ�&�ZKLFK�LQFOXGH�FDOOV�WR�IXQFWLRQV�VXFK�DV�SULQWI���RU�VFDQI���UHTXLUH�OLQNLQJ�WR�WKH�FRPSLOHG�FRGH�IRU�WKHVH�IXQFWLRQV��7KLV�FRGH�LV�VWRUHG�LQ�OLEUDULHV�VXFK�DV�OLEF�VR��2QFH�WKLV�OLQNLQJ�LV�GRQH��WKH�SURJUDP�EHFRPHV�PXFK�ORQJHU��,Q�RUGHU�WR�H[DPLQH�WKH�PDFKLQH�FRGH�RI�D�SURJUDP��LW�LV�HDVLHU�WR�ORRN�DW�WKH�FRGH�EHIRUH�WKLV�OLQNLQJ�LV�GRQH�EHFDXVH�WKHUH�LV�VR�PXFK�OHVV�RI�LW��7KLV�FRGH�LV�VWRUHG�LQ�REMHFW�PRGXOHV�ZLWK�D��R�ILOH�H[WHQVLRQ��7KH�DQDORJRXV�ILOHV�LQ�'26�DUH�WKH��2%-�ILOHV��7R�LQVWUXFW�WKH�JQX�&�FRPSLOHU�WR�SURGXFH�D��R�ILOH��WKH��F�VZLWFK�FDQ�EH�XVHG��7KH�FRPPDQG����OLQX[ER[��JFF��F�PXOW�FSURGXFHV�D�PXOW�R�ILOH��7KLV�ILOH�FRQWDLQV�WKH�PDFKLQH�FRGH�RI�WKH�SURJUDP��LQ�DGGLWLRQ�WR�WDEOHV�ZKLFK�DOORZ�WKH�OLQNHU�WR�GR�LWV�MRE�7R�H[DPLQH�DQ�REMHFW�FRGH�ILOH��RQH�PD\�XVH�HLWKHU�WKH�RE�SURJUDP��REMHFW�GXPS��ZKLFK�FRPHV�ZLWK�WKLV�ERRN�RU�WKH�RG�SURJUDP��RFWDO�GXPS��ZKLFK�LV�D�VWDQGDUG�8QL[�XWLOLW\��7R�JHW�RG�WR�GLVSOD\�LQ�KH[��XVH�WKH�VZLWFKHV��W[�DQG��$[�����OLQX[ER[��RG��W[��$[�PXOW�R

7DEOH������&RGHV�IRU���%LW�5HJLVWHUV&RGHV�IRU���%LW�5HJLVWHUV$/ ��� $+ ���&/ ��� &+ ���'/ ��� '+ ���%/ ��� %+ ���

0RG 5 0� � � � � � � �� � � � � � � �

Page 80: Linux assembly language programming

RE�KDV�QR�VZLWFKHV�����OLQX[ER[��RE�PXOW�R&KDSWHU����0(025<,Q�FKDSWHU����VHFWLRQ�����ZH�QRWHG�WKDW�WKH�029�FRPPDQG�FDQ�EH�XVHG�WR�WUDQVIHU�GDWD�WR�DQG�IURP�PHPRU\�MXVW�DV�,1�DQG�287�FDQ�EH�XVHG�WR�WUDQVIHU�GDWD�WR�DQG�IURP�,�2�GHYLFHV��)RU�WKH�SURJUDPPHU��XVLQJ�029�WR�DFFHVV�PHPRU\�LV�VLPSOH��MXVW�HQFORVH�DQ�DGGUHVV�LQ�EUDFNHWV��,Q�QHLWKHU�'26�QRU�/LQX[��KRZHYHU��DUH�WKH�DGGUHVVHV�HQFORVHG�E\�EUDFNHWV�DFWXDO�PHPRU\�DGGUHVVHV��,Q�'26�DQ�DGGUHVV�SURFHVVLQJ�PHFKDQLVP�FDOOHG�VHJPHQWDWLRQ�LV�XVHG��DQG�LQ�/LQX[�DQRWKHU�RQH�FDOOHG�SDJLQJ�LV�XVHG��%XW�WKHVH�PHFKDQLVPV�FDQ�EH�FLUFXPYHQWHG��,Q�WKLV�FKDSWHU�ZH�PDNH�WKH�VLPSOLI\LQJ�DVVXPSWLRQ�WKDW�WKLV�LV�GRQH�VR�WKDW�DGGUHVVHV�HQFORVHG�LQ�EUDFNHWV�DUH�DFWXDO�KDUGZDUH�DGGUHVVHV��3URJUDPV�ZULWWHQ�RQ�WKLV�EDVLV�UXQ�XQGHU�(GOLQDV��6HJPHQWDWLRQ�DQG�SDJLQJ�ZLOO�EH�GHDOW�ZLWK�ODWHU��6HJPHQWDWLRQ�LV�GLVFXVVHG�LQ�FKDSWHU�����DQG�SDJLQJ�LV�GLVFXVVHG�LQ�FKDSWHU���������%\WH�'DWD�:LGWK'DWD�WUDQVIHU�EHWZHHQ�D�SURFHVVRU�DQG�LWV�PHPRU\�LV�HDV\�ZKHQ�ZRUG�VL]H�DQG�UHJLVWHU�VL]H�DJUHH��)RU�H[DPSOH��WKH������SURFHVVRU�IHWFKHV�HLJKW�ELW�ZRUGV�LQWR�LWV�HLJKW�ELW�UHJLVWHUV��(LJKW�ELW�UHJLVWHUV�DUH��RI�FRXUVH��PDLQO\�D�WKLQJ�RI�WKH�SDVW��%XW�HLJKW�ELW�ZRUGV�ZH�VWLOO�KDYH��,QWHO�KDV�LPSOHPHQWHG�PDQ\�PHDVXUHV�VR�WKDW�LWV�QHZ�SURFHVVRUV�ZRXOG�UXQ�ROG�VRIWZDUH��2QH�RI�WKHVH�KDV�EHHQ�WKH�PDLQWDLQHQFH�RI�HLJKW�ELW�ZRUGV��GHVSLWH�WKH�IDFW�WKDW�ERWK�SURFHVVRU�UHJLVWHUV�DQG�GDWD�WUDQVIHUV�ORQJ�DJR�RXWJUHZ�WKH�HLJKW�ELW�VL]H��7KH�����SURFHVVRU��IRU�H[DPSOH��KDV����ELW�UHJLVWHUV�DQG����ELW�GDWD�WUDQVIHUV�:KHQ�UHJLVWHU�DQG�ZRUG�VL]HV�GRQW�PDWFK��VLPSOH�WUDQVIHU�FRPPDQGV�QR�ORQJHU�PDNH�VHQVH��)RU�H[DPSOH��ZLWKRXW�VRPH�IXUWKHU�SURWRFROV�LQ�SODFH�WKH�FRPPDQG����029�>��+@��($;GRHV�QRW�PDNH�VHQVH��7KH�PHPRU\�ORFDWLRQ�UHIHUUHG�WR��OLNH�DOO�,QWHO�PHPRU\�ORFDWLRQV��LV�DQ�HLJKW�ELW�ORFDWLRQ��%XW�($;�RQ�WKH�RWKHU�KDQG�LV�D����ELW�UHJLVWHU�������6WRUDJH�3URWRFROV7ZR�IXUWKHU�SURWRFROV�DUH�XVHG�

z :KHQ�DQ�Q�E\WH�WUDQVIHU�LV�LQGLFDWHG�E\�DQ�DGGUHVV�D��WKH�PHPRU\�E\WHV�UHIHUUHG�WR�DUH�WKRVH�DW�WKH�DGGUHVVHV�D��D������«��D���Q������$OO�DUFKLWHFWXUHV�GR�WKLV�z :KHQ�DQ�Q�E\WH�QXPEHU�LV�VWRUHG�LQ�PHPRU\��LWV�E\WHV�DUH�VWRUHG�LQ�RUGHU�RI�VLJQLILFDQFH��OHDVW�VLJQLILFDQW�E\WHV�LQ�WKH�ORZHVW�DGGUHVVHV��1XPHULFDOO\�LQFUHDVLQJ�DGGUHVVHV�FRUUHVSRQG�WR�LQFUHDVLQJ�E\WH�VLJQLILFDQFH��1RW�DOO�DUFKLWHFWXUHV�GR�WKLV�

7KHVH�WZR�SURWRFROV�PDNH�LW�SRVVLEOH�WR�LQWHUSUHW�WKH�029�>��+@��($;�FRPPDQG��$V�VKRZQ�LQ�)LJXUH������WKH�E\WHV�LQ�($;�DUH�VWRUHG�LQ�DGGUHVVHV���+���$+���%+��DQG��&+��7KH�OHDVW�VLJQLILFDQW�E\WH�LQ�($;�LV�VWRUHG�LQ���+��WKH�QH[W�LQ��$+��DQG�VR�RQ��3URJUDP�����GHPRQVWUDWHV�WKH�XVH�RI�WKLV�LQVWUXFWLRQ��:KHQ�3URJUDP�����LV)LJXUH������029�>��+@��($;

Page 81: Linux assembly language programming

3URJUDP�������7LQ\�(GOLQDV�SURJUDP�ZKLFK�VWRUHV�DQ�LQSXW�QXPEHU�LQWR�PHPRU\�����������,1�($;��>�@���������029�>��+@��($;���������5(7UXQ�XQGHU�(GOLQDV��LW�LV�ORDGHG�VWDUWLQJ�DW�DGGUHVV����6LQFH�PHPRU\�ORFDWLRQV�XS�WR�WKH�DGGUHVV���+�DUH�DOO�GLVSOD\HG�ZKHQ�WKLV�SURJUDP�LV�ORDGHG��WKH�H[HFXWLRQ�RI�WKH�029�LQVWUXFWLRQ�LV�GLUHFWO\�REVHUYDEOH�������/LWWOH�DQG�%LJ�(QGLDQ�$UFKLWHFWXUH$UFKLWHFWXUHV�ZKLFK�XVH�WKH�E\WH�RUGHULQJ�JLYHQ�LQ�WKH�VHFRQG�RI�WKHVH�SURWRFROV�DUH�FDOOHG�OLWWOH�HQGLDQ�$UFKLWHFWXUHV�ZKLFK�GR�WKH�RSSRVLWH�DUH�FDOOHG�ELJ�HQGLDQ�$OO�,QWHO�SURFHVVRUV�DUH�OLWWOH�HQGLDQ��([DPSOHV�RI�ELJ�HQGLDQ�SURFHVVRUV�DUH�0RWRURODV������DQG�������SURFHVVRUV��0,36�DQG�3RZHU3&�SURFHVVRUV�FDQ�ZRUN�LQ�HLWKHU�PRGH�,Q�RUGHU�WR�HQFRXUDJH�VRIWZDUH�GHYHORSHUV�WR�PLJUDWH�DZD\�IURP�FRPSHWLQJ�KDUGZDUH��D�FRPPRQ�VWUDWHJHP�LV�WR�LQFRUSRUDWH�FRPSDWLELOLW\�IHDWXUHV��$�FRPSDWLELOLW\�IHDWXUH�DGGHG�WR�WKH�����SURFHVVRU�LV�WKH�%6:$3LQVWUXFWLRQ��,W�UHYHUVHV�WKH�E\WH�RUGHULQJ�RI�DQ\����ELW�JHQHUDO�UHJLVWHU��,WV�IRUPDW�LV�VLPSO\�����%6:$3�UHJ)RU�H[DPSOH�LI�WKH�($;�UHJLVWHU�FRQWDLQHG�WKH�QXPEHU���������+��WKHQ�IROORZLQJ�WKH�H[HFXWLRQ�RI�WKH�%6:$3�($;�FRPPDQG��LW�ZRXOG�FRQWDLQ�WKH�QXPEHU���������+�������$OLJQPHQW7KH�GLVFUHSDQF\�EHWZHHQ�WKH�IRXU�E\WH�GDWD�WUDQVIHU�VL]H�DQG�WKH�RQH�E\WH�ZRUG�VL]H�ZKLFK�H[LVWV�LQ�����DQG�����V\VWHPV�LV�QRW�IXOO\�UHIOHFWHG�LQ�WKH�KDUGZDUH��,Q�IDFW�WKH�RQH�E\WH�ZRUG�VL]H�LV�D�NLQG�RI�ILFWLRQ�PDLQWDLQHG�IRU�WKH�EHQHILW�RI�WKH�VRIWZDUH��$OWKRXJK�PHPRU\�RQ�WKHVH�V\VWHPV�LV�IRUFHG�WR�HPXODWH�D�RQH�E\WH�ZRUG�PHPRU\��ZRUGV�DUH�DFWXDOO\�IRXU�E\WHV�ZLGH��7KH�WZR�ORZHVW�ELWV�RI�WKH����ELW�DGGUHVV�EXV�DUH�LQ�IDFW�QRW�WKHUH��7KH�ZLUHV�RQ�WKH�DGGUHVV�EXV�DUH�$���WKURXJK�$���$��DQG�$��DUH�PLVVLQJ��)URP�D�KDUGZDUH�SRLQW�RI�YLHZ��D�����DGGUHVVHV��������ELW�ZRUGV��7KH���� ��ELW�PHPRU\�LV�D�ILFWLRQ��%XW�EHFDXVH�WKH�ILFWLRQ�LV�FRQVLVWHQWO\�PDLQWDLQHG��VRIWZDUH�ZKLFK�EHOLHYHV�WKLV�ILFWLRQ�GRHV�ZRUN��%XW�LW�GRHVQW�ZRUN�DV�ZHOO�DV�VRIWZDUH�ZKLFK�WDNHV�WKH�WUXH�VWDWH�RI�DIIDLUV�LQWR�DFFRXQW��)RU�H[DPSOH�WKH�FRPPDQG����029�($;��>��+@DFFHVVHV�IRXU�E\WHV�RI�PHPRU\�ZKRVH����ELW�DGGUHVVHV�DUH�������������������������������������������

Page 82: Linux assembly language programming

���������������������������������������������������������������������������������������������������������������������������������1RWH�WKDW�WKHVH�DGGUHVVHV�GLIIHU�RQO\�LQ�WKH��QRQ�H[LVWHQW��ERWWRP�WZR�ELWV��7KHVH�IRXU�E\WHV�DUH�DFWXDOO\�MXVW�RQH�IRXU�E\WH�ZRUG��7KH�FRPPDQG�FDQ�EH�DFFRPSOLVKHG�ZLWK�D�VLQJOH�PHPRU\�WUDQVIHU��2Q�WKH�RWKHU�KDQG�WKH�FRPPDQG����029�($;��>��+@ZKLFK�DOVR�DFFHVVHV�IRXU�E\WHV�RI�PHPRU\��FDQQRW�EH�FDUULHG�RXW�LQ�WKH�VDPH�ZD\��7KH����ELW�DGGUHVVHV�RI�WKHVH�IRXU�E\WHV�DUH����������������������������������������������������������������������������������������������������������������������������������������������������������������������������7R�DFFHVV�WKHVH�IRXU�E\WHV��WZR�GLVWLQFW�PHPRU\�WUDQVIHUV�DUH�UHTXLUHG��,Q�FRGH�ZKLFK�LV�DFFHVVLQJ�D�ODUJH�QXPEHU�RI�FRQVHFXWLYH�PHPRU\�ORFDWLRQV��IRXU�E\WHV�DW�D�WLPH��SHUIRUPDQFH�ZLOO�EH�FXW�LQ�KDOI�LI�WKH�DGGUHVVHV�FDOOHG�DUH�QRW�WKRVH�ZKRVH�ERWWRP�WZR�ELWV�DUH�]HUR��L�H��D�PXOWLSOH�RI�IRXU��0HPRU\�WUDQVIHUV�ZKLFK�VWUDGGOH�IRXU�E\WH�ZRUG�ERXQGDULHV�DUH�VDLG�WR�EH�RXW�RI�DOLJQPHQW��6WDUWLQJ�ZLWK�WKH�����SURFHVVRU��D�IODJ�ZDV�DGGHG�ZKLFK�GHWHFWV�PHPRU\�WUDQVIHUV�WKDW�DUH�RXW�RI�DOLJQPHQW�����$GGUHVVHV�LQ�%UDFNHWV7KH�XVH�RI�029�WR�DFFHVV�PHPRU\�MXVW�VFUDWFKHV�WKH�VXUIDFH�RI�DYDLODEOH�PHPRU\�FRPPDQGV��$OO�RI�WKH�HQWULHV�LQ�7DEOH�����FRQWDLQLQJ�RSHUDQG�NH\V�WKDW�FRQWDLQ�DQ�P�GHVFULEH�FRPPDQGV�WKDW�DFFHVV�PHPRU\��)URP�WKH�WDEOH��ZH�FDQ�VHH�WKDW�029��$''��25��$'&��6%%��$1'��68%��DQG�;25�DOO�DOORZ�PHPRU\�RSHUDQGV�LQ�HLWKHU�WKH�VRXUFH�RU�WKH�GHVWLQDWLRQ�RSHUDQG�SRVLWLRQ��0HPRU\�RSHUDQGV�PD\�EH�VXSSOLHG�XVLQJ�VHYHUDO�GLIIHUHQW�IRUPDWV�������7KH�>LPP@�)RUPDW$OO�WKH�PHPRU\�RSHUDQG�H[DPSOHV�SUHVHQWHG�VR�IDU�KDYH�XVHG�WKH�>LPP@�IRUPDW�ZLWK�WKH�029�LQVWUXFWLRQ��,OOXVWUDWLQJ�WKH�>LPP@�IRUPDW�ZLWK�WKH�$''�FRPPDQG�ZH�KDYH�ERWK����$''�UHJ�>LPP@DQG����$''�>LPP@�UHJZKHUH�LPP�FDQ�EH�DQ\�IRXU�E\WH�QXPEHU�$V�ZH�DOO�NQRZ��PHPRU\�PD\�EH�XVHG�IRU�VWRUDJH�RI�PDQ\�NLQGV�RI�GDWD��LQFOXGLQJ�WH[W��JUDSKLFV��DQG�QXPEHUV��,Q�WKH�IROORZLQJ�SDUDJUDSKV�ZH�ORRN�DW�KRZ�LW�LV�XVHG�LQ�FRQQHFWLRQ�ZLWK�QXPEHUV��LQ�SDUWLFXODU�ZLWK�ELJ�QXPEHUV����%LW�$ULWKPHWLF0HPRU\�VSDFH�LV�PXFK�ODUJHU�WKDQ�SURFHVVRU�VSDFH��:KHQ�QXPEHUV�EHFRPH�WRR�ODUJH�IRU�WKH�SURFHVVRU�WR�ZRUN�ZLWK��WKH�DULWKPHWLF�FDQ�EH�GRQH�SLHFHPHDO��ZLWK�SLHFHV�VPDOO�HQRXJK�IRU�WKH�SURFHVVRU�WR�KDQGOH�ORDGHG�LQ�IURP�PHPRU\�DV�WKH\�DUH�QHHGHG��6RPH�IHDWXUHV�RI�WKH�SURFHVVRU�DUH�GHVLJQHG�ZLWK�WKLV�NLQG�RI�DULWKPHWLF�LQ�PLQG��7KH�$'&�LQVWUXFWLRQ�LV�D�FDVH�LQ�SRLQW��7KLV�LQVWUXFWLRQ�PDNHV�LW�SRVVLEOH�WR�GR�SLHFHPHDO�DGGLWLRQ�RI�ODUJH�QXPEHUV��6XSSRVH�WKDW�ZH�KDYH�WKH�QXPEHUV�����������������+�DQG�$$$$%%%%&&&&''''+�VWRUHG�DW�ORFDWLRQV����+�DQG����+�LQ�PHPRU\��DQG�WKDW�ZH�ZDQW�WR�DGG�WKHP��8VLQJ�WKH�$''�LQVWUXFWLRQ�RQ�WKH�ERWWRP�IRXU�E\WHV�RI�WKHVH�QXPEHUV�ZLOO�VHW�WKH�FDUU\�IODJ��8VLQJ�WKH�$'&LQVWUXFWLRQ�RQ�WKH�QH[W�IRXU�E\WHV�WDNHV�DFFRXQW�RI�WKH�FDUU\��7KH�$'&�LQVWUXFWLRQ�LV�YHU\�VLPLODU�WR�WKH�$''

Page 83: Linux assembly language programming

LQVWUXFWLRQ��,W�PHDQVZKHUHDV�WKH�RUGLQDU\�$''�LQVWUXFWLRQ�PHDQV7KH�DGGLWLRQ�FDQ�WKHQ�EH�FDUULHG�RXW�LQ�WZR�VWDJHV��WKH�ILUVW�RQH�XVLQJ�$''�DQG�WKH�QH[W�RQH�XVLQJ�$'&�

,Q�RUGHU�IRU�WKH�FDUU\LQJ�WR�ZRUN��LW�LV�LPSRUWDQW�WKDW�QRWKLQJ�GLVWXUE�WKH�FDUU\�IODJ�EHWZHHQ�WKH�ORZ�RUGHU�DGGLWLRQ�DQG�WKH�KLJK�RUGHU�DGGLWLRQ��7KH�IROORZLQJ�FRGH�GRHV�WKLV�DULWKPHWLF�XVLQJ�WKH�HLJKW�E\WHV�VWDUWLQJ�DW����+�DV�WKH�GHVWLQDWLRQ�DQG�WKH�HLJKW�E\WHV�VWDUWLQJ�DW����+�DV�WKH�VRXUFH��:KHQ�WKLV�SURJUDP�ILQLVKHV��WKH3URJUDP��������������������������������E\WH�'HVWLQDWLRQ�DW����+���������������������������E\WH�6RXUFH�DW����+�������029�($;�>���+@����%RWWRP���6RXUFH�E\WHV�������$''�>���+@��($;���$GG�WR�ERWWRP���'HVWLQDWLRQ�E\WHV�������029�($;�>��&+@����7RS���6RXUFH�E\WHV�������$'&�>���+@��($;���$GG�WR�WRS���'HVWLQDWLRQ�E\WHVHLJKW�E\WH�VXP�LV�ORFDWHG�LQ�WKH�HLJKW�E\WHV�VWDUWLQJ�DW�WKH�DGGUHVV����+��:KHQ�WKH�$'&�LQVWUXFWLRQ�ILQLVKHV��WKH�RYHUIORZ��FDUU\��DQG�VLJQ�IODJV�ZLOO�EH�FRUUHFW�IRU�HLJKW�E\WH�DULWKPHWLF��7KH�]HUR�IODJ�GRHV�QRW�ZRUN�VR�ZHOO�IRU�HLJKW�E\WHV��:KHQ�VHW��LW�QHHG�QRW�LQGLFDWH�WKDW�WKH�HLJKW�E\WH�VXP�LV���3RZHUV�RI��([SDQGLQJ�RQ�WKLV�LGHD��ZH�FDQ�FRGH�D�OLWWOH����ELW�SRZHU�RI���FDOFXODWRU�XVLQJ�WKH�IROORZLQJ�DOJRULWKP�

,QLWLDOL]H�\� ��7KHQ�UHSHDW�

3URJUDP�����KDV�QR�LQSXW�RU�RXWSXW��,W�FDQ�EH�REVHUYHG�E\�VWHSSLQJ�WKURXJK�LW�LQ�(GOLQDV��7KH�>LPP@�IRUPDW�LV�XVHIXO�LQ�UHIHUULQJ�WR�D�IHZ�IL[HG�ORFDWLRQV�LQ�PHPRU\��,W�LV�QRW�XVHIXO�LQ�SURFHVVLQJ�D�ORQJ�VXFFHVVLRQ�RI�E\WHV�LQ�PHPRU\�3URJUDP�������(GOLQDV�SURJUDP�ZKLFK�ILQGV����ELW�SRZHUV�RI�����6WRUH�WKH���E\WHV�RI�[�VWDUWLQJ�DW�PHPRU\�DGGUHVV����+���6WRUH�WKH���OHDVW�VLJQLILFDQW�E\WHV�RI�\�LQ�($;���6WRUH�WKH���PRVW�VLJQLILFDQW�E\WHV�RI�\�LQ�(%;���\� ��

Page 84: Linux assembly language programming

�����������029�($;��������������029�(%;��������������029�(';�����[� �\$%&��������029�>���+@��($;�����������029�>���+@��(%;��\� �\���[�����������$''�($;�>���+@�����������$'&�(%;�>���+@��\� �\���[�����������$''�($;�>���+@�����������$'&�(%;�>���+@�����������,1&�(';���.HHS�WUDFN�RI�WKH�H[SRQHQW�������������-03�$%&������7KH�>UHJ@�)RUPDW/RQJ�VXFFHVVLRQV�RI�E\WHV�RFFXU�LQ�ERWK�DUUD\V�DQG�LQ�YHU\�ODUJH�QXPEHUV��7KH�>UHJ@�IRUPDW�LV�PXFK�EHWWHU�VXLWHG�WR�GHDO�ZLWK�WKHVH�VLWXDWLRQV�WKDQ�LV�WKH�>LPP@�IRUPDW��8VLQJ�029�WR�LOOXVWUDWH�WKH�>UHJ@�IRUPDW��ZH�KDYH�ERWK����029�UHJ�>UHJ@DQG����029�>UHJ@�UHJ,Q�WKH�ILUVW�RI�WKHVH��WKH�>UHJ@�VRXUFH�RSHUDQG�UHIHUV�WR�WKH�ORFDWLRQ�LQ�PHPRU\�ZKRVH�DGGUHVV�LV�LQ�WKH�UHJLVWHU�ZKRVH�QDPH�LV�LQ�EUDFNHWV��)RU�H[DPSOH��WKH�FRGH����029�(%;����+����029�($;��>(%;@WUDQVIHUV�IRXU�E\WHV�LQWR�WKH�($;�UHJLVWHU�IURP�PHPRU\�VWDUWLQJ�DW�DGGUHVV���+�$V�DQ�H[DPSOH�RI�WKH�XVHIXOQHVV�RI�WKH�>UHJ@�IRUPDW��VXSSRVH�ZH�FRQVLGHU�WKH�SUREOHP�RI�DGGLQJ�WZR�����E\WH�QXPEHUV�

,Q�3URJUDP�����WKH�DGGUHVVHV�ZHUH�DFFHVVHG�GLUHFWO\�XVLQJ�WKH�>LPP@�IRUPDW��(DFK�IRXU�E\WHV�RI�WKH�DGGLWLRQ�ZHUH�GRQH�XVLQJ�WZR�LQVWUXFWLRQV��D�029�DQG�DQ�$'&��8VLQJ�WKDW�VDPH�WHFKQLTXH�KHUH�WR�GR�DGG�����E\WH�QXPEHUV�ZRXOG�UHTXLUH�PXOWLSO\LQJ�WKH�QXPEHU�RI�LQVWUXFWLRQV�QHHGHG�E\�����&RQVHTXHQWO\�ZH�ZRXOG�QHHG�����OLQHV�RI�FRGH��,I�ZH�XVH�WKH�>UHJ@�IRUPDW��RQ�WKH�RWKHU�KDQG��ZH�PD\�XVH�D�UHJLVWHU�IRU�WKH�VRXUFH�DQG�GHVWLQDWLRQ�DGGUHVVHV�DQG�LQFUHPHQW�WKHP�LQ�D�ORRS��,I�ZH�XVH�(',�IRU�WKH�GHVWLQDWLRQ�LQGH[�DQG�(6,�IRU�WKH�VRXUFH�LQGH[��WKHQ�ZH�EHJLQ�E\�VWRULQJ����+�LQ�(',�DQG����+�LQ�(6,��:H�PXVW�WKHQ�LQFUHDVH�WKHVH�SRLQWHUV�IRXU�E\WHV�DW�D�WLPH�DV�ZH�WUDYHUVH�WKH�WZR�ELJ�QXPEHUV��7KLV�FRGH�LV�PXFK�VKRUWHU�WKDQ�WKH����3URJUDP��������&RGH�ZKLFK�DGGV�WZR�����E\WH�QXPEHUV�\�DQG�[���\� �\���[���$VVXPH�WKH�����E\WHV�RI�\�DUH�VWRUHG�VWDUWLQJ�DW�PHPRU\�DGGUHVV����+���$VVXPH�WKH�����E\WHV�RI�[�DUH�VWRUHG�VWDUWLQJ�DW�PHPRU\�DGGUHVV����+�

Page 85: Linux assembly language programming

��8VH�(';�WR�VWRUH�D�GHFUHPHQW�FRXQWHU�IRU�WKH�\� �\���[�ORRS�����������029�(',�����+���,QLWLDOL]H�SRLQWHU�LQWR�\����������029�(6,�����+���,QLWLDOL]H�SRLQWHU�LQWR�[����\� �\���[���������029�(';����+������/RRS�QHHGV����LWHUDWLRQV����������&/&���������������&OHDU�WKH�FDUU\�IODJ�;<=������029�($;�>(6,@�������6RXUFH�E\WHV�LQWR�WKH�3URFHVVRU����������$'&�>(',@�($;�����'R�WKH�DGGLWLRQ����������,1&�(6,�������������������,1&�(6,�������������������,1&�(6,�����������7KLV�LV�XJO\����������,1&�(6,�������������������,1&�(',�����������%XW�XVLQJ�$''�KHUH�ZRXOG���������,1&�(',�����������FOHDU�WKH�FDUU\�IODJ����������,1&�(',�������������������,1&�(',�������������������'(&�(';�����������'HFUHPHQW�WKH�ORRS�FRXQWHU����������-1=�;<=�����������6HH�LI�WKH�ORRS�LV�ILQLVKHG�OLQHV�ZKLFK�ZRXOG�KDYH�UHVXOWHG�IURP�XVLQJ�WKH�>LPP@�IRUPDW�$W�ILUVW�VLJKW�LW�ZRXOG�DSSHDU�WKDW�ZH�FRXOG�GR�EHWWHU�E\�XVLQJ�$''�LQVWUXFWLRQV�LQ�SODFH�RI�PXOWLSOH�,1&LQVWUXFWLRQV��%XW�WKLV�ZRXOG�DFWXDOO\�UXLQ�HYHU\WKLQJ��%HFDXVH�ZH�DUH�XVLQJ�D�ORRS�WR�SURFHHG�IRXU�E\WHV�DW�D�WLPH�IURP�WKH�OHDVW�VLJQLILFDQW�WR�WKH�PRVW�VLJQLILFDQW�E\WHV��ZH�HQFRXQWHU�D�SUREOHP�ZLWK�WKH�FDUU\�IODJ��,I�LQ�EHWZHHQ�WZR�H[HFXWLRQV�RI�WKH�$'&�LQVWUXFWLRQ�ZH�PRYH�IRXU�E\WHV�GRZQ�WKH�QXPEHU�XVLQJ�DQ�$''LQVWUXFWLRQ��ZH�KDYH�PHVVHG�XS�WKH�FDUU\�IODJ��,Q�FKDSWHU���LW�LV�QRWHG�WKDW�WKH�FDUU\�IODJ�LV�XQDIIHFWHG�E\�WKH�,1&�DQG�'(&�LQVWUXFWLRQV��7KH�UHDVRQ�IRU�WKLV�DUFDQH�OLWWOH�H[FHSWLRQ�VXGGHQO\�EHFRPHV�FOHDU��0XOWLE\WH�DULWKPHWLF�QHHGV�D�FDUU\�IODJ�ZKLFK�FDQ�VXUYLYH�ORRS�FRXQWHU�DGMXVWPHQWV��%HFDXVH�WKH\�GRQW�DIIHFW�WKH�FDUU\�IODJ��WKH�,1&�DQG�'(&�LQVWUXFWLRQV�FDQ�EH�XVHG�WR�FDUU\�RXW�KDUPOHVV�ORRS�FRXQWHU�DGMXVWPHQWV��$GGLQJ���E\�XVLQJ�IRXU�,1&�LQVWUXFWLRQV�LV�QRW�EHDXWLIXO��EXW�LW�ZRUNV�7KLV�FRGH�LV�QRW�EDG�IURP�WKH�VWDQGSRLQW�RI�WDNLQJ�XS�PHPRU\�VSDFH�VLQFH�PHPRU\�LV�FKHDS��%XW�LW�LV�EDG�IURP�WKH�VWDQGSRLQW�RI�DGGLQJ�H[HFXWLRQ�WLPH�WR�D�ORRS��,I�WKHUH�LV�RQH�SODFH�ZKHUH�H[HFXWLRQ�WLPH�LV�FRVWO\�LW�LV�LQ�WKH�PLGGOH�RI�D�QHVWHG�ORRS��DQG�WKDW�LV�H[DFWO\�ZKHUH�WKRVH�H[WUD�,1&�LQVWUXFWLRQV�DUH�$QRWKHU�PHPRU\�IRUPDW�LV�XVHIXO�LQ�GHDOLQJ�ZLWK�WKLV�SUREOHP�������7KH�>UHJ�VFDOH UHJ�LPP@�)RUPDW7KH�PRVW�JHQHUDO�PHPRU\�IRUPDW�LV�WKH�>UHJ���VFDOH� �UHJ���LPP@�IRUPDW��ZKHUH�VFDOH�LV�D�VFDOH�IDFWRU�ZKLFK�PXVW�EH�HLWKHU����������RU����7KH�UHJLVWHU�ZKLFK�LV�PXOWLSOLHG�E\�WKH�VFDOH�IDFWRU�LV�FDOOHG�WKH�LQGH[�UHJLVWHU�7KH�RWKHU�UHJLVWHU�LV�FDOOHG�WKH�EDVH�UHJLVWHU��6RPH�ILHOGV�PD\�EH�RPLWWHG��7KLV�JLYHV�XV�WKH�HIIHFW�RI�D�YDULHW\�RI�IRUPDWV��LQFOXGLQJ

LQ�DGGLWLRQ�WR�WKH�>UHJ@�DQG�>LPP@�IRUPDWV�DOUHDG\�GLVFXVVHG��,W�LV�D�OLWWOH�KDUG�WR�EHOLHYH�WKDW�LQVWUXFWLRQV�ZLWK�WKLV�GHJUHH�RI�FRPSOH[LW\�DUH�KDUGFRGHG�LQWR�WKH�SURFHVVRUV��%XW�WKH�FRVW�LQ�WHUPV�RI�LQVWUXFWLRQ�OHQJWK�IRU�DOO�WKLV�FRPSOH[LW\�LV�DFWXDOO\�MXVW�RQH�PRUH�E\WH�RI�FRGH�IRU�LQVWUXFWLRQV�ZKLFK�XWLOL]H�WKLV�JHQHUDO�IRUPDW��7KH�E\WH�LV�FDOOHG�WKH�6,%�E\WH��ERWK�IRU�VFDOHG�LQGH[�EDVH�E\WH�DQG�VLEOLQJ�RI�WKH�0RG50�E\WH�7DNLQJ�XS�WKH�SUREOHP�RI�WKH�UHSHDWHG�,1&�LQVWUXFWLRQ�LQ�3URJUDP������QRWH�WKDW�D�VFDOH�IDFWRU�RI���ZRXOG�

Page 86: Linux assembly language programming

LQFUHDVH�WKH�DGGUHVV�E\���ZKHQHYHU�WKH�LQGH[�UHJLVWHU�ZDV�LQFUHPHQWHG�E\����,Q�WKH�FRGH�VKRZQ�LQ�3URJUDP����WKH�>VFDOH UHJ���LPP@�IRUPDW�LV�XVHG�WR�UHIHU�WR�ERWK�VRXUFH�DQG�GHVWLQDWLRQ�PHPRU\�ORFDWLRQV��,Q�WKLV�FRGH�ZH�VHH�WKDW�D�VLQJOH�,1&�LQVWUXFWLRQ�WDNHV�WKH�SODFH�RI�HLJKW�,1&�LQVWUXFWLRQV�LQ�3URJUDP�����3URJUDP�������(GOLQDV�SURJUDP�ZKLFK�ILQGV�����E\WH�SRZHUV�RI�����6WRUH�WKH�����E\WHV�RI�[�VWDUWLQJ�DW�PHPRU\�DGGUHVV����+���6WRUH�WKH�����E\WHV�RI�\�VWDUWLQJ�DW�PHPRU\�DGGUHVV����+�����������029�(%;������,QLWLDOL]H�EDVH�����������029�(';������,QLWLDOL]H�H[SRQHQW��\� ������������029�($;������'R�WKH�DGGLQJ�LQ�($;�����������029�(',����+���/RRS�QHHGV����LWHUDWLRQV�=52�������'(&�(',����������029�>� (',������+@�($;����������-1=�=52����������029�>� (',������+@�(%;���[� �\��0DLQ�LQILQLWH�ORRS�VWDUWV�KHUH��/83�������029�(',����+���/RRS�QHHGV����LWHUDWLRQV�����������029�(6,��(%;���,QLWLDOL]H�PDLQ�ORRS�FRXQWHU�%(*�������'(&�(',����������029�($;�>� (',������+@����������029�>� (',������+@�($;����������-1=�%(*��\� �\���[$*1�������029�(&;����+���/RRS�QHHGV����LWHUDWLRQV�;<=�������029�($;�>� (',������+@����������$'&�($;�>� (',������+@����������029�>� (',������+@��($;����������,1&�(',����������'(&�(&;����������-1=�;<=�����������'(&�(6,����������-1=�$*1�����������,1&�(';����������-03�/832QH�YDULDWLRQ�ZKLFK�LV�QRW�SHUPLWWHG�LV�WKH�XVH�RI�PHPRU\�UHIHUHQFHV�LQ�ERWK�RSHUDQG�SRVLWLRQV��7KHUH�DUH�QR�[���SURFHVVRU�LQVWUXFWLRQV�ZKLFK�XVH�PHPRU\�DV�ERWK�VRXUFH�DQG�GHVWLQDWLRQ�RSHUDQGV��7KH�LQVWUXFWLRQ����$''�>($;@�>(%;@IRU�H[DPSOH��GRHV�QRW�H[LVW��7KHUH�DUH�KRZHYHU�LQVWUXFWLRQV�ZKLFK�LQYROYH�ERWK�UHDGLQJ�IURP�DQG�ZULWLQJ�WR�PHPRU\��,1&�>($;@�IRU�H[DPSOH�ERWK�UHDGV�IURP�DQG�ZULWHV�WR�WKH�PHPRU\�ORFDWLRQ�ZKRVH�DGGUHVV�LV�LQ�($;��$UFKLWHFWXUHV�FDOOHG�ORDG�VWRUH�DUFKLWHFWXUHV�GR�QRW�DOORZ�PL[LQJ�SURFHVVRU�RSHUDWLRQV�ZLWK�PHPRU\�RSHUDWLRQV��7KH�RQO\�FRPPDQGV�LQ�D�ORDG�VWRUH�DUFKLWHFWXUH�ZKLFK�DFFHVV�PHPRU\�DUH�ORDG�DQG�VWRUH����������%LW�$GGUHVVHV,Q�VHFWLRQ�������WKH�>UHJ@�IRUPDW�IRU�PHPRU\�DGGUHVVLQJ�ZDV�SUHVHQWHG�ZKHUH�UHJ�FRXOG�EH�DQ\�RI�WKH�HLJKW����ELW�JHQHUDO�UHJLVWHUV��7KH������DQG�������DOVR�XVH�D�>UHJ@�IRUPDW��1RW�DOO�HLJKW����ELW�UHJLVWHUV�DUH�SHUPLWWHG��KRZHYHU��RQO\�%3��%;��6,��DQG�',��7KHUH�LV�DOVR�D�>UHJ���UHJ���LPP@�IRUP��LPP�PXVW�EH�D����ELW�QXPEHU��,I�WZR�UHJLVWHUV�DUH�XVHG��WKH�RQO\�DOORZHG�FRPELQDWLRQV�DUH��%3���6,��%3���',��%;���6,��DQG�%;���',��6LQFH�WKHVH�UHVWULFWLRQV�DUH�HDV\�WR�IRUJHW��SURJUDPPHUV�QRW�DFFXVWRPHG�WR����ELW�DGGUHVVHV�PD\�ILQG�WKHPVHOYHV�XVLQJ�GLVDOORZHG�IRUPV�RI�DGGUHVV��0RVW�SURJUDPPHUV�ZLOO�SUHIHU�WR�DYRLG����ELW�DGGUHVVLQJ�ZKHQHYHU�SRVVLEOH�7KHVH����ELW�IRUPV�RI�PHPRU\�DGGUHVV�FDQ�EH�XVHG�RQ�DQ��������:KHQ�WKH\�RFFXU�LQ����ELW�FRGH��D�VSHFLDO�

Page 87: Linux assembly language programming

SUHIL[����+��KDV�WR�EH�DSSOLHG�WR�WKH�PDFKLQH�FRGH�WR�QRWLI\�WKH�SURFHVVRU�WKDW�WKH�PHPRU\�DGGUHVV�ELWV�LQ�WKH�0RG50�E\WH�DUH�FRGHG�XVLQJ�WKH�ROG����ELW�FRGLQJ�V\VWHP��7KLV�SUHIL[�LV�FDOOHG�WKH�DGGUHVV�VL]H�SUHIL[�,W�LV�VLPLODU�WR�WKH�RSHUDQG�VL]H�SUHIL[�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ�����������&,6&�YV��5,6&$Q�[���FRPSXWHU�LV�JHQHUDOO\�FRQVLGHUHG�WR�EH�D�FRPSOH[�LQVWUXFWLRQ�VHW�FRPSXWHU��&,6&���7KLV�LV�SDUWO\�EHFDXVH�RI�FRPSOLFDWHG�DGGUHVVLQJ��DV�LQ�WKH�>(';���� (6,���$%&@�PHPRU\�RSHUDQG��0DFKLQHV�VXFK�DV�WKH�681�DQG�0,36�ZRUNVWDWLRQV�DUH�EDVHG�RQ�WKH�LGHD�WKDW�E\�VLPSOLI\LQJ�WKH�LQVWUXFWLRQV�DQG�KDYLQJ�IHZHU�RI�WKHP��WKH\�EHFRPH�HDVLHU�DQG�IDVWHU�WR�H[HFXWH��7KLV�FDQ�PRUH�WKDQ�PDNH�XS�IRU�WKH�IDFW�WKDW�LW�WDNHV�PRUH�RI�WKHVH�OLWWOH�LQVWUXFWLRQV�WR�ZULWH�D�SURJUDP��&RPSXWLQJ�EDVHG�RQ�WKLV�SKLORVRSK\�LV�FDOOHG�5,6&��UHGXFHG�LQVWUXFWLRQ�VHW�FRPSXWLQJ��7KH�5,6&�YV��&,6&�LVVXH�LV�QRW�DQ�HLWKHU±RU�LVVXH�OLNH�OLWWOH�HQGLDQ�YV��ELJ�HQGLDQ��5,6&�LV�D�VHW�RI�IHDWXUHV�ZKLFK�PD\�EH�DGRSWHG�SDUWLDOO\��LQ�YDU\LQJ�GHJUHHV��2QH�UHDVRQ�WKDW�WKH�����DQG�3HQWLXP�SURFHVVRUV�ZHUH�DEOH�WR�FRPSHWH�ZLWK�WKH�HDUO\�5,6&�3RZHU3&�SURFHVVRUV�LV�WKDW�WKH\�DGRSWHG�D�SLHFHPHDO�5,6&�SKLORVRSK\��$OWKRXJK�&,6&�LQVWUXFWLRQV�DUH�DOORZHG�RQ�D�3HQWLXP��LW�ZRUNV�IDVWHU�LI�SURJUDPPHG�XVLQJ�D�5,6&�OLNH�VXEVHW�RI�WKH�WRWDO�LQVWUXFWLRQ�VHW�7KHLU�QDPHV�QRWZLWKVWDQGLQJ��WKH�3HQWLXP�,,�DQG�3HQWLXP�3UR�KDYH�JRQH�RYHU�WR�D�WRWDOO\�5,6&�DUFKLWHFWXUH��7KH�LQVWUXFWLRQ�VHW�XVHG�LQWHUQDOO\�LV�D�SXUH�5,6&�LQVWUXFWLRQ�VHW��7UDGLWLRQDO�[���LQVWUXFWLRQV�DUH�FRQYHUWHG�LQWHUQDOO\�WR�5,6&�LQVWUXFWLRQV�EHIRUH�WKH\�DUH�H[HFXWHG��,Q�D�VHQVH��WKH��HQG�RI�WKH�OLQH��WDJ�KXQJ�RQ�WKH�3HQWLXP�E\�$SSOH�PDUNHWHUV�ZDV�FRUUHFW��%XW�LURQLFDOO\������DVVHPEO\�ODQJXDJH�LV�QRZ�VWURQJHU�WKDQ�HYHU�����2SHUDQG�6L]H�$PELJXLW\,Q�PRVW�WZR�RSHUDQG�LQVWUXFWLRQV��ERWK�RSHUDQGV�PXVW�KDYH�WKH�VDPH�VL]H��6R�ZKHQ�D�PHPRU\�RSHUDQG�LV�XVHG�LQ�VXFK�D�FRQWH[W��WKH�QXPEHU�RI�E\WHV�LW�UHIHUV�WR�FDQ�EH�GHWHUPLQHG�LI�WKH�RWKHU�RSHUDQG�LV�D�UHJLVWHU�RSHUDQG��)RU�H[DPSOH��LQ�$''�>(%;@�$;�WKH�PHPRU\�RSHUDQG�>(%;@�PXVW�UHIHU�WR�WZR�E\WHV�RI�PHPRU\�VLQFH�$;�LV�D�WZR�E\WH�UHJLVWHU��+RZHYHU��ZKHQ�D�PHPRU\�RSHUDQG�LV�XVHG�ZLWK�DQ�LPPHGLDWH�RSHUDQG��WKH�UHVXOW�LV�DPELJXRXV��)RU�H[DPSOH��WKH�IROORZLQJ�FRPPDQG�LV�DPELJXRXV������029�>(%;@���6LPLODUO\��ZKHQ�D�PHPRU\�RSHUDQG�LV�XVHG�ZLWK�D�XQDU\�RSHUDWLRQ�VXFK�DV�1(*��ZKLFK�WDNHV�WKH�WZRV�FRPSOHPHQW�RI�D�QXPEHU���WKH�RSHUDQG�VL]H�LV�LQGHWHUPLQDWH��$Q�LQVWUXFWLRQ�VXFK�DV����1(*�>(%;@PLJKW�ZHOO�UHIHU�WR�RQH��WZR��RU�IRXU�E\WHV�RI�PHPRU\��8QGHU�WKHVH�FLUFXPVWDQFHV��DQ�DVVHPEOHU�KDV�WR�PDNH�D�FKRLFH��1$60�FKRRVHV�WR�SURGXFH�DQ�HUURU�PHVVDJH��,Q����ELW�FRGH�(GOLQDV�GHIDXOWV�WR�D�IRXU�E\WH�UHIHUHQFH�ZKHQ�WKH�UHIHUHQFH�LV�DPELJXRXV��,Q����ELW�FRGH��WKH�GHIDXOW�LV�WZR�E\WH��7R�LQGLFDWH�WKH�RQH�E\WH�FDVH�LQ�(GOLQDV�\RX�PD\�XVH�WKH�FXVWRPDU\�EXW�FOXPV\�QRWDWLRQ����1(*�%<7(�375�>(%;@,Q�1$60��WKH�FRGH�LV����1(*�%<7(�>(%;@7R�LQGLFDWH�D�IRXU�E\WH�UHIHUHQFH�LQ�1$60��WKH�FRGH�LV����1(*�':25'�>(%;@$�WZR�E\WH�UHIHUHQFH�LV�LQGLFDWHG�XVLQJ�:25'�DV�D�TXDOLILHU��7KHVH�TXDOLILHUV�FOHDUO\�GR�WKH�MRE��7KH�LPSOLHG�FRQFHVVLRQ�WKDW�D�ZRUG�LV����ELWV�LV�XQIRUWXQDWH��,Q�OLJKW�RI�QRWDWLRQ�VXFK�DV�%<7(�375��WKH�$77�SUDFWLFH�RI�DGGLQJ�D�OHWWHU�WR�WKH�PQHPRQLF�GRHVQW�VHHP�VR�EDG��,Q�IDFW��WKH�,QWHO�DVVHPEOHU�GRHV�XVH�PQHPRQLFV�RI�WKLV�VRUW�LQ�D�IHZ�FDVHV�VXFK�DV�/2'6%�DQG�6726%��ORDG�VWULQJ�E\WH�DQG�VWRUH�VWULQJ�E\WH������/DEHOV

Page 88: Linux assembly language programming

,Q�SURJUDPPLQJ�MXPSV��ODEHOV�DUH�XVHG�DV�D�FRQYHQLHQFH��8VLQJ�D�ODEHO�ZLWK�D�MXPS�LQVWUXFWLRQ�PDNHV�LW�XQQHFHVVDU\�WR�FRXQW�WKH�QXPEHU�RI�E\WHV�XSVWUHDP�RU�GRZQVWUHDP�WR�WKH�MXPS�WDUJHW��&RXQWLQJ�WKHVH�E\WHV�UHTXLUHV�DVVHPEOLQJ�WKH�LQWHUYHQLQJ�FRGH�DQG�KDV�WR�EH�GRQH�RYHU�DJDLQ�DQ\�WLPH�WKH�LQWHUYHQLQJ�FRGH�LV�FKDQJHG��6R�ODEHOV�DUH�D�JUHDW�FRQYHQLHQFH��%XW�VWLOO�WKH\�DUH�RQO\�D�FRQYHQLHQFH�/DEHOV�PD\�DOVR�EH�XVHG�LQ�DFFHVVLQJ�PHPRU\�VWRUDJH�ORFDWLRQV��,Q�3URJUDP�����ZH�VHH�$%&�XVHG�DV�WKH�ODEHO�IRU�D�ORFDWLRQ�ZKHUH�DQ�LQSXW�E\WH�LV�VWRUHG��,Q�WKH3URJUDP�������7LQ\�(GOLQDV�SURJUDP�ZKLFK�XVHV�D�ODEHO�WR�UHIHUHQFH�D�GDWD�VWRUDJH�ORFDWLRQ�����������,1�$/��>�@�������(�������������029�>$%&@��$/��������������������������������������������������������������������������������5(7��������������&�$%&������123����������������PDFKLQH�FRGH�IRU�WKH�029�>$%&@��$/�LQVWUXFWLRQ��WKH�ODEHO�$%&�LV�UHSODFHG�E\�D�QXPEHU��%DVHG�RQ�WKH�HQFRGLQJ�RI�MXPS�LQVWUXFWLRQV�GLVFXVVHG�LQ�FKDSWHU����ZH�VKRXOG�H[SHFW�WR�VHH�$%&�UHSODFHG�E\�WKH�QXPEHU����VLQFH�WKH�ODEHO�$%&�RFFXUV�RQH�E\WH�SDVW�WKH�EHJLQQLQJ�RI�WKH�QH[W�LQVWUXFWLRQ��%DVHG�RQ�WKH�029�LQVWUXFWLRQV�LQ�VHFWLRQ������ZH�VKRXOG�H[SHFW�WR�VHH�$%&�UHSODFHG�E\�WKH�DGGUHVV�RI�WKH�LQVWUXFWLRQ�RQ�ZKLFK�WKH�ODEHO�$%&RFFXUV��LQ�WKLV�FDVH����LI�ZH�DVVXPH�WKDW�LW�LV�ORDGHG�VWDUWLQJ�DW����DV�LW�ZRXOG�EH�E\�(GOLQDV�������$GGUHVV�(QFRGLQJ7KHUH�DUH�WZR�FRPPRQ�PHWKRGV�IRU�HQFRGLQJ�WKH�DGGUHVV�RI�VRPH�WDUJHWHG�PHPRU\�ORFDWLRQ�

z 5HODWLYH�(QFRGLQJ��7KH�QXPHULFDO�GLIIHUHQFH�EHWZHHQ�WKH�DGGUHVV�RI�WKH�WDUJHWHG�ORFDWLRQ�DQG�WKH�DGGUHVV�RI�WKH�IROORZLQJ�LQVWUXFWLRQ�LV�XVHG�LQ�WKH�PDFKLQH�FRGH�z $EVROXWH�(QFRGLQJ��7KH�WDUJHW�DGGUHVV�LWVHOI�LV�XVHG�LQ�WKH�PDFKLQH�FRGH�

$OO�WKH�MXPS�LQVWUXFWLRQV�GLVFXVVHG�LQ�FKDSWHU���XVH�UHODWLYH�HQFRGLQJ��$EVROXWH�HQFRGLQJ�LV�XVHG�IRU�MXPS�LQVWUXFWLRQV�XVHG�LQ������FRGH�DQG�DOVR�LQ�VR�FDOOHG�IDU�MXPSV�LQ�[���PDFKLQH�FRGH��7KH�H[LVWHQFH�RI�VRPH�DEVROXWH�HQFRGLQJ�LV�DOPRVW�XQDYRLGDEOH���7KH�RQO\�DOWHUQDWLYH�ZRXOG�EH�WR�GHVLJQ�WKH�SURFHVVRU�WR�WDNH�RYHU�WKH�MRE�RI�PHPRU\�DOORFDWLRQ��$OO�PHPRU\�DFFHVVLQJ�LQVWUXFWLRQV�LQ�[���PDFKLQH�FRGH��029��$''��HWF���XVH�DEVROXWH�HQFRGLQJ�������3URJUDP�/RDGLQJ'RUPDQW�SURJUDPV�XVXDOO\�UHVLGH�RQ�WKH�KDUG�GLVN�RU�VRPH�RWKHU�VHFRQGDU\�VWRUDJH�GHYLFH��7R�H[HFXWH��WKH\�QHHG�WR�EH�LQ�PHPRU\��7R�JHW�D�SURJUDP�WR�H[HFXWH��WKH�XVHU�SDVVHV�LWV�ILOH�QDPH�WR�WKH�RSHUDWLQJ�V\VWHP��E\�W\SLQJ�LW�RQ�WKH�FRPPDQG�OLQH�IRU�H[DPSOH���WR�H[HFYH���LQ�WKH�FDVH�RI�/LQX[��H[HFYH����QRW�WKH�XVHU�RU�WKH�SURJUDPPHU��GHFLGHV�ZKHUH�LQ�PHPRU\�WKH�SURJUDP�ZLOO�EH�ORDGHG��6LQFH�SURJUDPPHUV�KDYH�QR�FRQWURO�RYHU�WKH�ORFDWLRQ�RI�WKHLU�SURJUDPV�LQ�PHPRU\��LW�PDNHV�XVLQJ�LQVWUXFWLRQV�WKDW�XVH�DEVROXWH�PHPRU\�HQFRGLQJ�SUREOHPDWLF�ZKHQ�ODEHOV�DUH�XVHG�WR�UHIHU�WR�PHPRU\��,Q�IDFW�LW�PDNHV�DVVHPEOLQJ�SURJUDPV�XVLQJ�PHPRU\�ODEHOV�LQWR�SODLQ�XQDLGHG�PDFKLQH�FRGH�LPSRVVLEOH��([HFXWDEOH�FRGH�UHVXOWLQJ�IURP�SURJUDPV�XVLQJ�PHPRU\�ODEHOV�PXVW�EH�DFFRPSDQLHG�E\�WDEOHV�LGHQWLI\LQJ�DOO�WKH�SRLQWV�LQ�WKH�FRGH�ZKHUH�DQ�DEVROXWH�DGGUHVV�RFFXUV��7KHVH�WDEOHV�DUH�FDOOHG�UHORFDWLRQ�WDEOHV��$OO�REMHFW�FRGH�ILOHV���R�ILOHV�LQ�/LQX[��FRQWDLQ�UHORFDWLRQ�WDEOHV��:KHQ�D�SURJUDP�LV�ORDGHG�LQWR�PHPRU\��WKHVH�WDEOHV�DUH�XVHG�WR�IL[�HDFK�DEVROXWH�DGGUHVV�LQ�WKH�PDFKLQH�FRGH�VR�WKDW�LW�SRLQWV�WR�WKH�DGGUHVV�ZKLFK�LV�YDOLG�JLYHQ�ZKHUH�WKH�SURJUDP�LV�DFWXDOO\�ORDGHG�7KH�(GOLQDV�VLPXODWRU�ORDGV�DOO�SURJUDPV�VWDUWLQJ�DW�WKH�DGGUHVV�]HUR��:H�FDQ�FRXQW�WKH�E\WHV�LQ�3URJUDP����IURP�WKHUH�WR�WKH�OLQH�ZLWK�$%&�RQ�LW��,I�ZH�GR�ZH��ILQG�WKDW�WKH�123�LQVWUXFWLRQ�RFFXUV�DW�DGGUHVV����7KDW�LV�ZK\�WKH�PDFKLQH�FRGH�JLYHQ�IRU�WKH�029�>$%&@��$/�LQVWUXFWLRQ�LQ�3URJUDP�����VKRZV�WKH�ODEHO�$%&�HQFRGHG�

Page 89: Linux assembly language programming

DV����7KH�LQVWUXFWLRQ�029�>�@��$/�FRXOG�WKHUHIRUH�EH�XVHG�LQ�SODFH�RI�029�>$%&@��$/��,I�WKLV�SURJUDP�ZHUH�WR�EH�UHORFDWHG�VR�WKDW�LW�VWDUWHG�DW�WKH�DGGUHVV����+��WKHQ�WKH�FRGH�IRU�WKH�$%&�ODEHO�LQ�WKH�029LQVWUXFWLRQ�ZRXOG�QHHG�WR�EH����+�LQVWHDG�RI���������9DULDEOHV,Q�KLJK�OHYHO�SURJUDPPLQJ�ODQJXDJHV��YDULDEOHV�DUH�RIWHQ�LPSOHPHQWHG�DV�ODEHOOHG�PHPRU\�ORFDWLRQV��$OWKRXJK�D�FRPSLOHU�PD\�XVH�D�UHJLVWHU��D�PRUH�W\SLFDO�LPSOHPHQWDWLRQ�RI�D�YDULDEOH�LV�DV�D�ODEHOOHG�PHPRU\�ORFDWLRQ��7KLV�LV�WUXH�SDUWLFXODUO\�IRU�JOREDO�YDULDEOHV�������$UUD\V$V�DQ�H[DPSOH�RI�KRZ�WKHVH�DGGUHVVLQJ�PRGHV�PLJKW�EH�XVHG�WR�KDQGOH�DUUD\�SURJUDPPLQJ��FRQVLGHU�WKH�IROORZLQJ�&�FRGH�ZKLFK�FRXQWV�KRZ�PDQ\�]HURV�DQG�RQHV�WKHUH�DUH�LQ�WKH�SDUW�RI�DQ�DUUD\��[>��@>���@��ZKHUH�WKH�URZV�RI�LQWHUHVW�DUH�IURP����WKURXJK����DQG�WKH�FROXPQV�DUH�IURP����WKURXJK�����7R�FRGH�WKLV�LQ�DVVHPEOHU��ZH�FDQ�XVH�(%;�IRU�QXPB]HURV��(&;�IRU�QXPBRQHV��DQG�WKH�ODEHO�$%&�IRU�WKH�EHJLQQLQJ�RI�WKH�DUUD\�[��7R�UHIHUHQFH�WKH�DUUD\�ORFDWLRQ�[>L@>M@�ZH�QHHG�WR�XVH�WKH�IDFW�WKDW�WKH�DGGUHVV�[>L@>M@�LV�L ��� ����M ��E\WHV�SDVW�[>�@>�@� �$%&��7KH�����LQ�L ��� ��FRPHV�IURP�WKH�GHFODUDWLRQ�LQW�[>��@>���@�ZKLFK�WHOOV�XV�WKDW�HYHU\�URZ�FRQWDLQV�����IRXU�E\WH�ORFDWLRQV��$OWKRXJK�ZH�PLJKW�OLNH�WR�XVH�(',�IRU�L�DQG�(6,�IRU�M�DQG�UHIHUHQFH�[>L@>M@�XVLQJ�>$%&������ (',���� (6,@��WKLV�PXFK�ODWLWXGH�GRHV�QRW�H[LVW�LQ�WKH�FRGLQJ�VSDFH��7KH�PXOWLSOLHU���LV�DOORZHG�RQ�RQH�UHJLVWHU��EXW�QHLWKHU�D�PXOWLSOLHU�RI�����QRU�KDYLQJ�WZR�VFDOHG�UHJLVWHUV�LV�DOORZHG��+HQFH�LW�PDNHV�VHQVH�WR�XVH�(';�IRU���� L��>$%&���(';���� (6,@3URJUDP�����QXPB]HURV� ���QXPBRQHV� ���IRU�L� �����L�������L� �L�����IRU�M� �����M�������M� �M������̂���LI��[>L@>M@� �����������QXPB]HURV� �QXPB]HURV���������LI��[>L@>M@� �����������QXPBRQHV� �QXPBRQHV�����`����,PPHGLDWH�6WRUDJH7KH�MRE�RI�DQ�DVVHPEOHU�LV�WR�SURGXFH�REMHFW�FRGH�ILOHV��$Q�DVVHPEO\�ODQJXDJH�SURJUDP�LV�WKH�LQSXW�WR�DQ�DVVHPEOHU��([FHSW�IRU�FRPPHQWV��DOO�WKH�OLQHV�RI�DOO�WKH�DVVHPEO\�ODQJXDJH�ILOHV�ZH�KDYH�ZRUNHG�ZLWK�VR�IDU�KDYH�FRQVLVWHG�RI�LQVWUXFWLRQV�ZKLFK�DUH�WUDQVODWHG�LQWR�SURFHVVRU�LQVWUXFWLRQV�DV�ZDV�GRQH�LQ�FKDSWHU����$XWRPDWLF�WUDQVODWLRQ�E\�WKH�DVVHPEOHU�LV�D�JUHDW�FRQYHQLHQFH�DQG�LV�PRVWO\�ZKDW�DVVHPEO\�ODQJXDJH�LV�DOO�DERXW��1RQHWKHOHVV�LW�LV�VRPHWLPHV�GHVLUDEOH�WR�IRUHJR�WUDQVODWLRQ�DQG�VSHFLI\�REMHFW�FRGH�E\WHV�GLUHFWO\��7ZR�QRWDEOH�RFFDVLRQV�IRU�WKLV�DUH

z 'DWD�E\WHV�QHHG�WR�EH�LQVHUWHG�GLUHFWO\�z 3URFHVVRU�LQVWUXFWLRQV�QHHG�WR�EH�DVVHPEOHG�E\�KDQG�

7KH�IROORZLQJ�V\QWD[�LV�XVHG�WR�LQVHUW�LPPHGLDWHO\�JLYHQ�E\WHV�GLUHFWO\�LQWR�WKH�PDFKLQH�FRGH�������%\WH�'HILQLWLRQ�$VVHPEOHU�'LUHFWLYH,Q�1$60��WKH�FRPPDQG����GE�LPPVWRUHV�DQ\�RQH�E\WH�QXPEHU�LQWR�WKH�REMHFW�FRGH�ILOH��GE�VWDQGV�IRU�GHILQH�E\WH��,QVWUXFWLRQV�VXFK�DV�GE�ZKLFK�GR�QRW�WUDQVODWH�LQWR�SURFHVVRU�LQVWUXFWLRQV�DUH�VRPHWLPHV�FDOOHG�SVHXGR�LQVWUXFWLRQV��6LQFH�WKH\�DUH�DFWXDOO\�

Page 90: Linux assembly language programming

LQVWUXFWLRQV�WR�WKH�DVVHPEOHU��LW�LV�EHWWHU�WR�FDOO�WKHP�DVVHPEOHU�GLUHFWLYHV��$VVHPEOHU�GLUHFWLYHV�W\SLFDOO\�ODFN�WKH�XQLYHUVDOLW\�RI�SURFHVVRU�LQVWUXFWLRQV�ZKLFK�XVXDOO\�IROORZ�WKH�IRUPDW�ODLG�GRZQ�E\�WKH�PDQXIDFWXUHU��(GOLQDV�IROORZV�WKH�8QL[�WUDGLWLRQ�WKDW�DOO�DVVHPEOHU�GLUHFWLYHV�EHJLQ�ZLWK�D�GRW��DQG�XVHV��GE�:LWKRXW�WKH�LQLWLDO�GRW��WKH�GHILQH�E\WH�V\QWD[�LV�YHU\�ZLGHVSUHDG��:KHQ�XVHG�ZLWK�ODEHOV�LW�ZRUNV�LQ�ERWK�0LFURVRIW�DQG�7XUER�DVVHPEOHUV��,Q�WKHVH�DVVHPEOHUV3URJUDP���������������029�(%;����������QXPB]HURV����������029�(&;����������QXPBRQHV����������029�(';�������������� �����,QLWLDOO\�L� ������2XWHU�ORRS�EHJLQV�KHUH��27/�������029�(6,����������/HW�M� ������,QQHU�ORRS�EHJLQV�KHUH��,1/�������029�($;��>$%&���� (6,���(';@���������������������������$%&� �[>�@>�@����������������������������(';� �[>L@>�@���[>�@>�@���������������������������� M� �[>L@>M@���[>L@>�@���������������������������(6,� �M����������&03�($;����������&KHFN�IRU�]HURV����������-1(�12=�������������������,1&�(%;����������&RXQW�]HURV12=��������&03�($;���������&KHFN�IRU�RQHV����������-1(�122����������,1&�(&;����������&RXQW�RQHV122�������,1&�(6,����������M M���O����������&03�(6,����������&KHFN�WKDW�M���������������-/�,1/�����������,QQHU�ORRS�HQGV�KHUH�����������$''�(';����������,QFUHDVH�(';�E\����� ������������&03�(';�������������������� ����� ������������-/�27/�����������2XWHU�ORRS�HQGV�KHUH�$%&�������123��������������%HJLQ�DUUD\�KHUH�WKH�GHILQH�E\WH�GLUHFWLYH�KDV�WKH�IODYRU�RI�D�GDWD�W\SH�GHFODUDWLRQ��7KLV��GDWD�W\SH��LV�XVHG�WR�UHVROYH�DPELJXLWLHV�RI�WKH�NLQG�QRWHG�LQ�VHFWLRQ������)RU�H[DPSOH��LI�WKH�ODEHO�$%&�LV�XVHG�LQ�D�SURJUDP�ZLWK�WKH�OLQH����$%&�'%�����$%&�LV�RI�W\SH�E\WHWKHQ�D�FRPPDQG�VXFK�DV����1(*�>$%&@PHDQV�WKH�VDPH�WKLQJ�DV����1(*�%<7(�375�>$%&@,Q�1$60��DQG�LQ�(GOLQDV��SURJUDPV��WKHUH�LV�QR�W\SH�VLJQLILFDQFH�DWWDFKHG�WR�GE��&RPPRQ�HPEHOOLVKPHQWV�RI�WKH�VLPSOH�V\QWD[�DOVR�ZRUN�LQ�ERWK�����GE�LPP��LPP�����ZKHUH�D�VHTXHQFH�RI�RQH�E\WH�QXPEHUV�IROORZV�WKH�GE��VWRUHV�D�VHTHQFH�RI�E\WHV�LQWR�WKH�REMHFW�FRGH�ILOH�,Q�(GOLQDV��LW�LV�DOVR�SRVVLEOH�WR�XVH�DQ�LQWHJHU�PXOWLSOLHU�RQ�WKH�OHIW��)RU�H[DPSOH��WKH�IROORZLQJ�FRGH�VWRUHV�]HUR�LQWR�RQH�KXQGUHG�E\WHV�RI�PHPRU\������GE����� ��

Page 91: Linux assembly language programming

,Q�1$60�WKH�VDPH�HIIHFW�FDQ�EH�DFKLHYHG�XVLQJ�WKH�FRGH����7,0(6�����GE��������+DQG�&RGLQJ�RI�,QVWUXFWLRQV%HFDXVH�D�QHZ�SURFHVVRU�RIWHQ�XVHV�DQ�LQVWUXFWLRQ�VHW�ZKLFK�LV�WKH�VDPH�DV�DQ�ROG�LQVWUXFWLRQ�VHW�H[FHSW�IRU�RQH�RU�WZR�QHZ�LQVWUXFWLRQV��LW�LV�RIWHQ�ZRUWKZKLOH�WR�XVH�DQ�ROG�DVVHPEOHU�WR�SURJUDP�D�QHZ�SURFHVVRU��1HZ�LQVWUXFWLRQV�FDQ�EH�XWLOL]HG�E\�KDQG�FRGLQJ�WKHP��2SHQ�VRXUFH�DGYRFDWHV�PD\�ZHOO�QRWH�WKDW�LI�WKH�DVVHPEOHU�ZHUH�DQ�RSHQ�VRXUFH�SURJUDP��LW�FRXOG�VLPSO\�EH�UHSURJUDPPHG�WR�KDQGOH�WKH�QHZ�LQVWUXFWLRQ��%XW�WKDW�LV�DQRWKHU�TXHVWLRQ�3URJUDP�������8VLQJ�LPPHGLDWH�VWRUDJH�WR�HQFRGH�WKH�&38,'�LQVWUXFWLRQ������������029�($;�������������GE��)+��$�+����������,PPHGLDWH�VWRUDJH������,QLWLDOL]LQJ�'DWD,Q�&�LW�LV�HDV\�WR�JHW�WKH�LPSUHVVLRQ�WKDW�WKHUH�LV�QR�GLIIHUHQFH�EHWZHHQ�D�GHFODUDWLRQ�ZLWK�DQ�LQLWLDOL]DWLRQ�VXFK�DV����FKDU�[� ���DQG�D�GHFODUDWLRQ�IROORZHG�E\�DQ�DVVLJQPHQW�VXFK�DV����FKDU�[�����[� ���,Q�IDFW��KRZHYHU��WKHUH�LV�D�GLIIHUHQFH��,Q�WKH�VHFRQG�FDVH�WKHUH�LV�DQ�LPSOLHG�SURFHVVRU�LQVWUXFWLRQ�ZKLFK�VWRUHV�WKH�LPPHGLDWH�YDOXH����,Q�WKH�ILUVW�FDVH��KRZHYHU��QR�SURFHVVRU�LQVWUXFWLRQ�LV�LPSOLHG��7KH�VWRUDJH�LQGLFDWHG�PD\�EH�SHUIRUPHG�E\�VWRULQJ�WKH���DW�D�SURJUDP�LQWHUQDO�DGGUHVV�E\�WKH�DVVHPEOHU�EHIRUH�WKH�SURJUDP�LV�HYHU�ORDGHG�3URJUDP��������7LQ\�(GOLQDV�SURJUDP�ZKLFK�XVHV�D�ODEHO�WR�DFFHVV�VWRUHG�GDWD�����������029�$/�>$%&@���������287�>�@��$/���������5(7$%&�������GE�&KDSWHU����7+(�67$&.7KH�VWDFN�LV�D�SRUWLRQ�RI�PHPRU\�ZKLFK�LV�VKDUHG�ZLWK�WKH�RSHUDWLQJ�V\VWHP��,W�LV�XVHG�E\�SURJUDPV�IRU�FRPPXQLFDWLRQ�ZLWK�VXESURJUDPV��IRU�WHPSRUDU\�VWRUDJH��DQG�ZKHQ�PDNLQJ�V\VWHP�FDOOV��,W�LV�FDOOHG�WKH�VWDFN�EHFDXVH�LW�KDV�D��ODVW�VWRUHG�ILUVW�UHWULHYHG��SROLF\��,W�LV�LQ�IDFW�DQ�H[DPSOH�RI�WKH�GDWD�VWUXFWXUH�WKDW�LV�FDOOHG�D�VWDFN��%HFDXVH�LW�LV�XVHG�E\�WKH�RSHUDWLQJ�V\VWHP�DV�ZHOO�DV�E\�WKH�SURJUDPPHU��LW�PXVW�EH�XVHG�UHVSRQVLEO\��0LVXVLQJ�WKH�VWDFN�LV�D�YHU\�HDV\�ZD\�WR�FUDVK�D�SURJUDP��RU�WKH�ZKROH�V\VWHP��LI�WKH�RSHUDWLQJ�V\VWHP�LV�XQSURWHFWHG�����3XVK�DQG�3RS�2SHUDWLRQV7KH�IROORZLQJ�ILJXUH�VKRZV�WKH�VWDFN�DQG�WKH�(63�UHJLVWHU��7KLV�UHJLVWHU�KDV�WKH�MRE�RI�NHHSLQJ�WUDFN�RI�WKH�VWDFN��,W�GRHV�WKLV�E\�KROGLQJ�WKH�DGGUHVV�RI�WKH�WRS�RI�WKH�VWDFN��7KH�63�LQ�(63�VWDQGV�IRU�VWDFN�SRLQWHU�

Page 92: Linux assembly language programming

$OWKRXJK�WKH�(63�LV�FDOOHG�D�JHQHUDO�UHJLVWHU�EHFDXVH�LW�LV�DFFHVVLEOH�WR�WKH�SURJUDPPHU�OLNH�WKH�UHJLVWHUV�($;��(%;��HWF���ZULWHV�WR�(63�VKRXOG�EH�GRQH�RQO\�ZLWK�JUHDW�FDUH�6XSSRVH�WKDW�(63�FRQWDLQHG�WKH�DGGUHVV���+�DV�LQ�)LJXUH������7KHQ�VWRULQJ�WKH�E\WH���+�RQ�WKH�VWDFN�ZRXOG�ILOO�WKH�ORFDWLRQ���+�DQG�WKH�VWDFN�SRLQWHU�ZRXOG�EH�FKDQJHG��DV�VKRZQ�LQ�)LJXUH������7KLV�NLQG�RI�RSHUDWLRQ�LV�FDOOHG�D�SXVK��7KH�RQH�E\WH�SXVK�VKRZQ�KHUH�LV�HVVHQWLDOO\�WKH�VDPH�DV�WKH�IROORZLQJ�WZR�RSHUDWLRQV�

)LJXUH������%HIRUH�3XVK

)LJXUH������$IWHU�3XVK

�����'(&�(63���0RYH�WKH�SRLQWHU�WR�WKH�ILUVW�YDFDQF\������029�>(63@���+��6WRUH���+�DW�WKH�DGGUHVV�LQ�(63�,Q�IDFW��WKH�[���GRHV�QRW�DOORZ�RQH�E\WH�SXVKHV��$OO�SXVKHV�PXVW�EH�HLWKHU�WZR�E\WH�RU�IRXU�E\WH�SXVKHV��7KH�QXPEHU�RI�E\WHV�SXVKHG�LV�GHWHUPLQHG�E\�WKH�VL]H�RI�WKH�RSHUDQG�RQ�WKH�386+�LQVWUXFWLRQ�������7KH�386+�&RPPDQG7KH�PRVW�FRPPRQ�IRUP�RI�WKH�386+�LQVWUXFWLRQ�LV����386+�UHJ$OORZDEOH�UHJLVWHUV�LQFOXGH�WKH�����DQG����ELW�JHQHUDO�UHJLVWHUV��EXW�QRW�WKH�HLJKW�ELW�UHJLVWHUV��0HPRU\�DQG�LPPHGLDWH�RSHUDQGV�FDQ�DOVR�EH�XVHG�ZLWK�386+��EXW�WKH�UHJLVWHU�RSHUDQG�IRUP�LV�WKH�PRVW�XVHIXO�)LJXUH�����DQG�)LJXUH�����VKRZ�WKH�HIIHFW�RI�D�386+�($;�LQVWUXFWLRQ�

)LJXUH������%HIRUH�386+�($;

Page 93: Linux assembly language programming

)LJXUH������$IWHU�386+�($;

LV�YHU\�VLPLODU�WR����68%�(63�������029�>(63@��($;%HFDXVH�WKH�VWDFN�SRLQWHU�SRLQWV�WR�WKH�ODVW�RFFXSLHG�ORFDWLRQ�UDWKHU�WKDQ�WKH�ILUVW�XQRFFXSLHG�ORFDWLRQ�RI�WKH�VWDFN��D�386+�PXVW�EH�FDUULHG�RXW�E\�VXEWUDFWLQJ�IURP�WKH�VWDFN�SRLQWHU�ILUVW�DQG�WKHQ�WUDQVIHUULQJ�WKH�E\WHV�WR�WKH�VWDFN�UDWKHU�WKDQ�WKH�RWKHU�ZD\�DURXQG��+DYLQJ�WKH�VWDFN�SRLQWHU�SRLQW�WR�WKH�ILUVW�DYDLODEOH�ORFDWLRQ�ZRXOG�EH�D�UHDVRQDEOH�SROLF\�LI�DOO�SXVKHV�DQG�SRSV�ZHUH�WKH�VDPH�VL]H��%XW�VLQFH�SXVKHV�DQG�SRSV�PD\�EH�HLWKHU�WZR�RU�IRXU�E\WHV��WKLV�LV�QRW�D�WHQDEOH�SROLF\�������7KH�323�&RPPDQG7KH�RSSRVLWH�RSHUDWLRQ�LV�FDOOHG�D�SRS��/LNH�WKH�386+�LQVWUXFWLRQ��323�WDNHV�UHJLVWHU�DQG�PHPRU\�RSHUDQGV��ZKLFK�PD\�EH�HLWKHU�WZR�RU�IRXU�E\WHV��8QOLNH�386+��LW�GRHV�QRW�WDNH�LPPHGLDWH�RSHUDQGV��$V�ZLWK�SXVKHV��WKH�VL]H�RI�WKH�RSHUDQG�GHWHUPLQHV�WKH�QXPEHU�RI�E\WHV�WR�EH�SRSSHG��6LQFH�%;�LV�D�WZR�E\WH�UHJLVWHU��323�%;�SRSV�WZR�E\WHV�RII�WKH�VWDFN�����323�%;LV�YHU\�VLPLODU�WR����029�%;��>(63@����$''�(63���2QH�XVH�IRU�WKH�VWDFN�LV�VLPSO\�IRU�VWRUDJH�ZKHQ�WKHUH�DUH�QRW�HQRXJK�UHJLVWHUV�DYDLODEOH��6XSSRVH�WKHUH�DUH�YDOXHV�LQ�($;�DQG�(%;�ZKLFK�DUH�LPSRUWDQW�DQG�QHHG�WR�EH�VDYHG��EXW�WKDW�DOVR�D�FRPSXWDWLRQ�KDV�WR�EH�GRQH�ZKLFK�XVHV�WKH�UHJLVWHUV�($;�DQG�(%;��7KLV�LV�D�VLWXDWLRQ�ZKLFK�FDOOV�IRU�XVLQJ�WKH�VWDFN��%HIRUH�WKH�FRPSXWDWLRQ�LV�GRQH��WKH�YDOXHV�LQ�WKH�UHJLVWHUV�($;�DQG�(%;�PD\�EH�VDYHG�RQ�WKH�VWDFN��$IWHU�WKH�

Page 94: Linux assembly language programming

FRPSXWDWLRQ�LV�ILQLVKHG��WKH\�PD\�EH�UHVWRUHG�DJDLQ��7KH�IROORZLQJ�FRGH�GRHV�WKLV�����386+�($;����386+�(%;�������������&RPSXWDWLRQ�����������323�(%;����323�($;7KH�RUGHU�RI�WKH�SRSV�LV�WKH�H[DFW�UHYHUVH�RI�WKH�RUGHU�RI�WKH�SXVKHV��7KLV�LV�EHFDXVH�RI�WKH��ODVW�VWRUHG�ILUVW�UHWULHYHG��FKDUDFWHU�RI�D�VWDFN��7KH�YDOXHV�LQ�($;�DQG�(%;�DW�WKH�HQG�VKRXOG�EH�WKH�VDPH�DV�DW�WKH�EHJLQQLQJ��%XW�WKLV�ZLOO�RQO\�EH�WUXH�LI�WKH�LQWHUYHQLQJ�FRPSXWDWLRQ�XVHV�WKH�VWDFN�UHVSRQVLEO\��7KLV�PHDQV�WKDW�HDFK�SXVK�VKRXOG�EH�PDWFKHG�ZLWK�D�SRS��,I�SXVKHV�DQG�SRSV�DUH�QRW�EDODQFHG��WKHQ�WKH�YDOXHV�SRSSHG�LQWR�(%;�DQG�($;�DW�WKH�HQG�RI�FRPSXWDWLRQ�ZLOO�QRW�EH�WKH�VDPH�DV�WKHLU�RULJLQDO�YDOXHV�:KHQ�ZULWLQJ�D�XVHU�SURJUDP�WR�EH�UXQ�LQ�8QL[��LW�LV�QRW�QHFHVVDU\�WR�LQLWLDOL]H�WKH�VWDFN�E\�VWRULQJ�D�YDOXH�LQ�(63��,Q�IDFW��VLQFH�WKH�VWDFN�LV�DOUHDG\�VHW�XS��VWRULQJ�DQ�DUELWUDU\�YDOXH�LQ�(63�ZRXOG�GLVUXSW�WKH�H[LVWLQJ�VWDFN�DQG�FUDVK�WKH�SURJUDP��:KHQ�ZULWLQJ�D�SURJUDP�WR�UXQ�LQ�(GOLQDV��KRZHYHU��LW�LV�QHFHVVDU\�WR�LQLWLDOL]H�(63�����6XESURJUDPV+LJK�OHYHO�SURJUDPPLQJ�ODQJXDJHV�XVH�VXESURJUDPV�LQ�RUGHU�WR�UHGXFH�FRPSOH[�WDVNV�WR�VLPSOHU�FRPSRQHQWV��,Q�&��VXESURJUDPV�DUH�IXQFWLRQV��$�IXQFWLRQ�PD\�EH�FDOOHG�DV�WKRXJK�LW�ZHUH�DQRWKHU�&�LQVWUXFWLRQ��,I�WKH�IXQFWLRQ�VXESU���KDV�EHHQ�GHILQHG��WKHQ�LW�PD\�DSSHDU�LQ�D�OLQH�RI�D�PDLQ�SURJUDP��DV�LQ�3URJUDP�����3URJUDP�����PDLQ���̂���LQW�[��\��]��������VXESU����7KLV�VXESURJUDP�LV�GHILQHG�VHSDUDWHO\����`������7KH�&$//�DQG�5(7�&RPPDQGV&RGLQJ�DQ�DVVHPEOHU�SURJUDP�ZKLFK�KDV�D�VXESURJUDP�LV�GRQH�XVLQJ�WKH�&$//�DQG�5(7�LQVWUXFWLRQV��5(7VWDQGV�IRU�UHWXUQ��7KHVH�FRPPDQGV�ZRUN�OLNH�MXPS�WR�DQG�MXPS�EDFN�FRPPDQGV��7KH�IRUPDW�RI�WKH�&$//LQVWUXFWLRQ�LV�YHU\�VLPLODU�WR�WKH�IRUPDW�RI�WKH�-03�LQVWUXFWLRQ�3URJUDP�����VXESU���̂���LQW�D��E��F��������UHWXUQ�F�`����&$//�ODEHO$V�ZLWK�WKH�-03�LQVWUXFWLRQ��WKH�ODEHO�LV�FUHDWHG�E\�WKH�SURJUDPPHU�DQG�UHIHUV�WR�WKH�OLQH�ZKRVH�ODEHO�ILHOG�LW�RFFXSLHV�:KHQ�WKH�VXESURJUDP�LV�GRQH��FRQWURO�QHHGV�WR�EH�WUDQVIHUUHG�EDFN�WR�WKH�PDLQ�SURJUDP��LQ�SDUWLFXODU�WKH�QH[W�LQVWUXFWLRQ�H[HFXWHG�LQ�WKH�PDLQ�SURJUDP�QHHGV�WR�EH�WKH�LQVWUXFWLRQ�IROORZLQJ�WKH�&$//�LQVWUXFWLRQ��7R�PDNH�WKLV�SRVVLEOH��WKH�SURFHVVRU�SXVKHV�WKH�DGGUHVV�RI�WKH�QH[W�LQVWUXFWLRQ�RQWR�WKH�VWDFN�EHIRUH�LW�OHDYHV�WKH�

Page 95: Linux assembly language programming

PDLQ�SURJUDP��&$//�GRHV�WKLV��7KH�5(7�LQVWUXFWLRQ�SRSV�WKLV�DGGUHVV�RII�WKH�VWDFN�DQG�MXPSV�WR�LW�)RU�H[DPSOH��3URJUDP�����LV�D�SURJUDP�WKDW�DFFHSWV�D�XVHU�LQSXW��XVHV�D�VXESURJUDP�ZKLFK�DGGV���WR�WKH�(%;�UHJLVWHU�WR�LQFUHPHQW�WKH�QXPEHU��DQG�WKHQ�RXWSXWV�WKH�UHVXOW�EDFN�WR�WKH�XVHU�3URJUDP����������������029�(63������+���LQLWLDOL]H�WKH�VWDFN���(GOLQDV�SURJUDPV�PXVW�LQLWLDOL]H�WKH�VWDFN��8QL[�SURJUDPV�PXVW�QRW������������,1�($;�>�@�������*HW�D�XVHU�LQSXW����������029�(%;��($;�����(%;�LV�ZKHUH�WKH�VXEURXWLQH�ZRUNV�����������&$//�VXESU�������/HDYH�IRU�WKH�VXEURXWLQH�����������029�($;��(%;�����%DFN�QRZ�IURP�WKH�VXEURXWLQH�����������287�>�@��($;�����2XWSXW�WKH�LQFUHPHQWHG�YDOXH����������5(7��������������*R�EDFN�WR�(GOLQDV��VXESU�����������,1&�(%;����������6XESURJUDP�GRHV�LWV�MRE�����������5(7��������������*R�EDFN�WR�WKH�PDLQ�SURJUDP�)RU�D�PRUH�LQYROYHG�H[DPSOH��FRQVLGHU�WKH�IROORZLQJ�DOJRULWKP��7KLV�DOJRULWKP�LV�DW�WKH�KHDUW�RI�D�ZHOO�NQRZQ��XQVROYHG�PDWKHPDWLFV�SUREOHP�FDOOHG�WKH�&ROODW]�3UREOHP�

,I�[�LV�HYHQ�GLYLGH�LW�E\��,I�[�LV�RGG�PXOWLSO\�LW�E\���DQG�DGG���WR�LW�5HSHDW�WKLV�SURFHVV�XQWLO�[� ���

6XSSRVH�ZH�ZDQW�D�SURJUDP�ZKLFK�H[HFXWHV�WKLV�DOJRULWKP�DQG�FRXQWV�KRZ�PDQ\�VWHSV�DUH�UHTXLUHG�XQWLO�WKH�YDOXH�RI�[�EHFRPHV���6LQFH�LW�UHTXLUHV�D�ORRS�WR�GHWHUPLQH�ZKHWKHU�D�QXPEHU�LV�HYHQ�RU�RGG��RU�WR�GLYLGH�LW�E\����LI�ZH�DUH�XVLQJ�RQO\�DGG��VXEWUDFW��DQG�FRQGLWLRQDO�MXPS�FRPPDQGV��LW�PDNHV�VHQVH�WR�GHYLVH�D�VXESURJUDP�WR�GR�WKLV��6SHFLILFDOO\��VXSSRVH�ZH�DVVLJQ�WKH�VXESURJUDP�WKH�WDVN�RI�H[DPLQLQJ�WKH�($;�UHJLVWHU�DQG�VWRULQJ�KDOI�RI�($;�LQ�(%;�LI�($;�LV�HYHQ��DQG�]HUR�LQ�(%;�RWKHUZLVH��:H�PD\�FRGH�WKLV�VXESURJUDP�DV�IROORZV�3URJUDP�����+$)���029�(&;��($;������029�(%;���$*1���,1&�(%;����������&RXQW�WKH�VXEWUDFWLRQV������68%�(&;����������5HSHDWHGO\�VXEWUDFW��������-*�$*1����������������-=�'81�����������,W�FRPHV�RXW�HYHQ������029�(%;����������,WV�QRW�HYHQ�'81���5(7:LWK�WKLV�VXESURJUDP�ZH�PD\�QRZ�ZULWH�D�PDLQ�SURJUDP�ZKLFK�H[HFXWHV�3URJUDP���������3DUDPHWHU�3DVVLQJ2QH�RI�WKH�PRVW�LPSRUWDQW�IXQFWLRQV�RI�WKH�VWDFN�LV�WKDW�LW�LV�XVHG�IRU�SDUDPHWHU�SDVVLQJ��)RU�H[DPSOH��VXSSRVH�WKH�FKDUDFWHU�FRGH�FRQYHUWLQJ�IXQFWLRQ�WRORZHU����LV�FDOOHG�LQ�D�&�SURJUDP�7KH�WRORZHU����IXQFWLRQ�LQ�WKH�VWDQGDUG�&�OLEUDU\�FW\SH�K�FRQYHUWV�WKH�FKDUDFWHU�FRGHV�WR�ORZHU�FDVH��)RU�H[DPSOH��RQ�D�PDFKLQH�XVLQJ�$6&,,��FRGH�LW�ZLOO�UHWXUQ�����WKH�$6&,,�FRGH�IRU�D��LI�JLYHQ�����WKH�$6&,,�

Page 96: Linux assembly language programming

FRGH�IRU�$��DV�DQ�LQSXW�SDUDPHWHU��7KH�LQSXW�SDUDPHWHU�LV�SXVKHG�RQWR�WKH�VWDFN��6R�WKH�DVVHPEOHU�FRGH�IRU�WKH�VDPH�IXQFWLRQ�FDOO�ORRNV�OLNH�WKLV�3URJUDP���������029�(%;��������386+�(%;�������029�(';����������,1�($;��>';@$%&����&03�($;����������������-(�),1����������,I�($;� ���WKHQ�LWV�RYHU��������,1&�(';���������8VH�(';�DV�WKH�FRXQWHU��������&$//�+$)��������7KLV�LV�WKH�VXEURXWLQH�FDOO��������&03�(%;���������(%;� ���PHDQV�($;�LV�RGG�������-(�2''�����������������029�($;��(%;����,I�QRW�WKHQ�(%;�LV�KDOI�RI�($;�������-03�$%&���������2''����029�(%;��($;����7ULSOH�($;�DQG�DGG���������$''�($;��(%;�����������$''�($;��(%;�����������,1&�($;�������-03�$%&���������),1����029�($;��(';����(';�FRQWDLQV�WKH�ILQDO�FRXQW��������029�(';����������287�>';@��($;�������5(73URJUDP������LQFOXGH��FW\SH�K!PDLQ���̂���LQW�[�\�����[� ������ �[� �$� �����\� �WRORZHU�[���� �\� �D� �`����&$//�WRORZHU����$''�(63���$OWKRXJK�LW�PLJKW�VHHP�OLNH�D�QDWXUDO�LGHD�WR�XVH�WKH�VWDFN�IRU�WKH�UHWXUQ�YDOXH��LW�LV�PRUH�FRPPRQ�WR�XVH�D�UHJLVWHU��,Q�JQX�&�IRU�WKH�[����UHWXUQHG�LQWHJHU�YDOXHV�DUH�VWRUHG�LQ�WKH�($;�UHJLVWHU��/DQJXDJHV�GLIIHU�DV�WR�ZKHWKHU�WKH�VXESURJUDP�RU�WKH�PDLQ�SURJUDP�LV�UHVSRQVLEOH�IRU�SRSSLQJ�WKH�SDUDPHWHUV�RII�WKH�VWDFN��,Q�)RUWUDQ��%DVLF��DQG�3DVFDO�WKH�VXESURJUDP�SRSV�WKH�VWDFN��EXW�LQ�&�WKH�FDOOLQJ�SURJUDP�GRHV��7KLV�LV�WKH�UHDVRQ�IRU�WKH�$''�(63����LQVWUXFWLRQ�LQ�WKH�FDOOLQJ�SURJUDPV�MXVW�VKRZQ�/DQJXDJHV�DOVR�GLIIHU�LQ�WKH�RUGHU�LQ�ZKLFK�SDUDPHWHUV�DUH�SXVKHG�RQWR�WKH�VWDFN��&�SXVKHV�SDUDPHWHUV�VWDUWLQJ�IURP�WKH�ULJKW��6XSSRVH�ZH�KDYH�GHILQHG�DQ�LQWHJHU�SRZHU�IXQFWLRQ�LSRZ�������LQW�LSRZ�LQW�EDVH��LQW�H[SRQHQW��7KH�DVVHPEOHU�FRGH�WR�FDOO�WKLV�IXQFWLRQ�WR�FDOFXODWH����ORRNV�OLNH�WKLV�����029�(%;�������386+�(%;����029�(%;�������386+�(%;����&$//�LSRZ����$''�(63���$IWHU�WKLV�FDOO��WKH�UHVXOW�LSRZ������� ���ZLOO�EH�VWRUHG�LQ�WKH�($;�UHJLVWHU�

Page 97: Linux assembly language programming

������7KH�*OREDO�$VVHPEOHU�'LUHFWLYH,Q�WKH��R�ILOHV�SURGXFHG�E\�WKH�JQX�FRPSLOHU��V\PEROV�VXFK�DV�SULQWI�RU�WRORZHU�ZKLFK�QHHG�H[WHUQDO�OLQNDJH�DUH�FRGHG�GLIIHUHQWO\�LQ�WKH�V\PERO�WDEOHV��:LWKRXW�WKLV�VSHFLDO�FRGLQJ�WKH�JQX�OLQNHU�ZLOO�SDVV�WKHP�E\�DQG�OLQNDJH�ZLOO�IDLO��,Q�RUGHU�WR�UHFHLYH�WKLV�VSHFLDO�HQFRGLQJ��WKH�DVVHPEO\�ODQJXDJH�VRXUFH�FRGH�PXVW�VSHFLDOO\�LQGLFDWH�V\PEROV�ZKLFK�DUH�WR�UHFHLYH�WKLV�WUHDWPHQW��7KHUH�LV�DQ�DVVHPEOHU�GLUHFWLYH�UHFRJQL]HG�E\�WKH�JQX�DVVHPEOHU�DQG�E\�(GOLQDV�ZKLFK�ZLOO�FDXVH�WKH�DVVHPEOHU�WR�HQFRGH�D�V\PERO�LQ�WKH�V\PERO�WDEOH�DV�DYDLODEOH�IRU�OLQNDJH��,WV�V\QWD[�LV�����JOREO�V\PERO,Q�1$60�WKH�V\QWD[�LV�����JOREDO�V\PERO������&DOOLQJ�$VVHPEOHU�IURP�&7KH�+$)�VXESURJUDP�ZRXOG�QRW�ZRUN�LI�FDOOHG�IURP�&�EHFDXVH�LW�GRHV�QRW�UHWXUQ�YDOXHV�LQ�WKH�($;�UHJLVWHU��$OVR��LW�GRHV�QRW�SXVK�WKH�UHJLVWHUV�LW�XVHV��,Q�WKH�FRGH�EHORZ��(&;�LV�SXVKHG�EHFDXVH�LW�LV�XVHG�DQG�WKH�FDOOLQJ�SURJUDP�FRXOG�EH�XVLQJ�LW�IRU�VRPHWKLQJ�HOVH��:H�DOVR�QHHG�WR�PDNH�WKH�IXQFWLRQ�QDPH�YLVLEOH�XVLQJ�WKH�JOREDO�GLUHFWLYH�:H�KDYH�MXVW�ZULWWHQ�D�IXQFWLRQ�LQ�DVVHPEOHU�ZKLFK�ZH�FDQ�FDOO�IURP�D�&�SURJUDP��7KH�&�SURJUDP�ZLOO�VWRUH�WKH�FDOOLQJ�SDUDPHWHU�RQ�WKH�VWDFN��,W�ZLOO�EH�EXULHG�XQGHU�WKH�UHWXUQ�DGGUHVV�SXVKHG�E\�WKH�FDOOLQJ�SURJUDP�DQG�WKH�FRQWHQWV�RI�(&;�ZKLFK�ZHUH�MXVW�SXVKHG��7KHVH�WZR�LWHPV�RFFXS\�HLJKW�E\WHV�RQ�WKH�VWDFN��VR�WKH�FDOOLQJ�SDUDPHWHU�LV�DFFHVVHG�DW�WKH�DGGUHVV�(63������7KH�UHVXOW�LV�VWRUHG�LQ�($;�LQVWHDG�RI�(%;��7R�VDYH�WKH�REMHFW�FRGH�DV�D��R�ILOH�ZKLOH�LQ�(GOLQDV��XVH�WKH�R�NH\��7R�SURGXFH�DQ�REMHFW�FRGH�ILOH�XVLQJ�1$60��HQWHU3URJUDP�������������JOREDO�KDOI���RU���JOREO�LQ�(GOLQDVKDOI����386+�(&;����������(&;�LV�XVHG��VR�SXVK�LW���������029�(&;��>(63�����@��������������������������6WDFN�WRS�����LQWHJHUV��������029�($;���$*1�����,1&�($;�����������&RXQW�WKH�VXEWUDFWLRQV��������68%�(&;�����������5HSHDWHGO\�VXEWUDFW����������-*�$*1�������������������-=�'81������������,W�FRPHV�RXW�HYHQ��������029�($;�����������,WV�QRW�HYHQ�'81�����323�(&;��������5(7����OLQX[ER[��QDVP��I�HOI�KDOI�DVP7KH��I�HOI�VZLWFK�VSHFLILHV�WKH�IRUPDW�RI�WKH�REMHFW�FRGH�ILOH�ZKLFK�LQ�FXUUHQW�/LQX[�LV�HOI��7KLV�IRUPDW�LV�GLVFXVVHG�IXUWKHU�LQ�FKDSWHU���3URJUDP�����LV�D�&�SURJUDP�ZKLFK�FDOOV�WKH�IXQFWLRQ�KDOI���ZKRVH�DVVHPEO\�FRGH�LV�VKRZQ�LQ�3URJUDP������,I�3URJUDP�����LV�VDYHG�LQ�D�ILOH�FROODW]�F��WKHQ�WR�FRPSLOH�LW�DQG�OLQN�LW�ZLWK�KDOI����XVH�JFF�RQ�ERWK�ILOHV����OLQX[ER[��JFF�FROODW]�F�KDOI�R����5HFXUVLRQ,Q�UHFXUVLRQ��PXFK�RI�WKH�ZRUN�RI�FRPSXWDWLRQ�LV�GRQH�E\�WKH�SDUDPHWHU�SDVVLQJ�PHFKDQLVP�

Page 98: Linux assembly language programming

$�UHFXUVLYH�GHILQLWLRQ�FDQ�YHU\�RIWHQ�EH�HDVLO\�WXUQHG�LQWR�D�FRPSXWDWLRQDOO\�HIIHFWLYH��LI�QRW�HIILFLHQW��SURJUDP��7KLV�LV�W\SLFDOO\�LOOXVWUDWHG�XVLQJ�WKH�)LERQDFFL�QXPEHUV�

3URJUDP�����VKRZV�KRZ�WKLV�UHFXUVLYH�GHILQLWLRQ�FDQ�EH�WXUQHG�LQWR�&�FRGH��,Q�DVVHPEO\�ODQJXDJH��ZH�FDQ�FRGH�WKLV�HDVLO\��SURYLGHG�ZH�UHFDOO�WKDW�XVHG�UHJLVWHUV�RWKHU�WKDQ�($;�PXVW�EH�SXVKHG��3URJUDP������VKRZV�KRZ�ZH�FDQ�JHW�E\�XVLQJ�RQO\�(&;�DQG�($;��7R�WHVW�WKLV�SURJUDP�IURP�&��RQH�FDQ�XVH�D�VPDOO�FDOOLQJ�SURJUDP�VXFK�DV�3URJUDP�������7R�WHVW�D�SURJUDP�OLNH�WKLV�XVLQJ�(GOLQDV��LW�LV�DOVR�QHFHVVDU\�WR�LQLWLDOL]H�WKH�VWDFN��DV�LV�VKRZQ�LQ�WKH�ILUVW�OLQH�RI�3URJUDP�����3URJUDP�����PDLQ���̂���LQW�FRXQW�[�\�����FRXQW� �������SULQWI��(QWHU�D�QXPEHU����������VFDQI���G���[������ZKLOH�[�� �������^��������FRXQW� �FRXQW�������������\� �KDOI�[���� �7KLV�LV�WKH�VXEURXWLQH�FDOO�� ���������LI�\�� ���������������[� �\���������HOVH������������[� �� [�������������SULQWI��?Q�[� ��G����[������`����SULQWI��?Q�7KHUH�ZHUH��G�LWHUDWLRQV�?Q?Q���FRXQW��`3URJUDP�����LQW�ILE�LQW�N��̂����LQW�G������LI�N��������������G� ��������HOVH���������G� �ILE�N�O����ILE�N���������UHWXUQ�G�`3URJUDP�������������JOREDO�ILEILE����386+�(&;���������*LYHV�XV�DFFHVV�WR�(&;�������029�($;��>(63����@������������������������$FFHVV�SDUDPHWHU�������&03�($;����������LI�N�����������-$(�(/6����������������029�($;����������3XW�WKH�UHWXUQ�YDOXH�LQ�($;�������-03�'81(/6����'(&�($;����������*HW�N±��������029�(&;��($;�����($;�ZLOO�EH�RYHUZULWWHQ�

Page 99: Linux assembly language programming

�������386+�($;���������3DVV�N²��DV�SDUDPHWHU�������&$//�ILE���������*HW�EDFN�ILE�N±O��LQ�($;�������$''�(63����������*HW�ULG�RI�SDUDPHWHU�������'(&�(&;����������*HW�N±��������386+�(&;���������3DVV�N���DV�SDUDPHWHU�������029�(&;��($;�����3XW�ILE�N±O��LQWR�(&;�������&$//�ILE���������*HW�EDFN�ILE�N±���LQ�($;�������$''�(63����������*HW�ULG�RI�SDUDPHWHU�������$''�($;��(&;�����$GG�WKH�WZR�SDUWLDO�UHVXOWV�������323�(&;����������5HVWRUH�WKH�RULJLQDO�YDOXH�������5(73URJUDP������PDLQ���̂���LQW�[��\����������SULQWI��(QWHU�D�QXPEHU����������VFDQI���G���[�����������\� �ILE�[�����������SULQWI���G?Q���\��`&KDSWHU����/,18;�86(5�352*5$06$W�WKH�EHJLQQLQJ�RI�FKDSWHU���LW�ZDV�QRWHG�WKDW�PHPRU\�DGGUHVVHV�XVHG�LQ�/LQX[�XVHU�SURJUDPV�DUH�QRW�WUXH�PHPRU\�DGGUHVVHV��7KH�PDLQ�UHDVRQ�IRU�WKLV�LV�WKDW�/LQX[�QHHGV�WR�SUHYHQW�WKH�XVHU�IURP�KDYLQJ�GLUHFW�DFFHVV�WR�PHPRU\��6HH�)LJXUH�����

)LJXUH������3URWHFWHG�2SHUDWLQJ�6\VWHP�VXFK�DV�/LQX[

/LQX[�LV�D�PXOWLWDVNLQJ�V\VWHP��$�PXOWLWDVNLQJ�V\VWHP�KDV�PDQ\�XVHU�MREV�DQG�DQ�RSHUDWLQJ�V\VWHP��ZKLFK�DUH�DOO�UXQQLQJ�DW�RQFH��2Q�D�PDFKLQH�ZKHUH�DQ\�MRE�FDQ�RYHUZULWH�WKH�PHPRU\�EHORQJLQJ�WR�DQRWKHU�MRE��D�PXOWLWDVNLQJ�V\VWHP�LV�LPSRVVLEOH��0XOWLWDVNLQJ�UHTXLUHV�PHPRU\�SURWHFWLRQ��/LQX[�XVHV�SDJLQJ�WR�LPSOHPHQW�D�PHPRU\�SURWHFWLRQ�V\VWHP�3DJLQJ�ZDV�RULJLQDOO\�GHVLJQHG�DV�D�V\VWHP�IRU�HFRQRPL]LQJ�RQ�PHPRU\��/LQX[�XVHV�LW�IRU�WKLV�SXUSRVH�DV�ZHOO�DV�IRU�PHPRU\�SURWHFWLRQ��3DJLQJ�ZRUNV�E\�LQWHUFHSWLQJ�HDFK�PHPRU\�DFFHVV�HQFRXQWHUHG�LQ�WKH�XVHUV�PDFKLQH�FRGH��,Q�RWKHU�ZRUGV��HYHU\�PHPRU\�UHIHUHQFH�LQ�D�XVHU�SURJUDP�LV�WXUQHG�LQWR�D�UHTXHVW�IRU�PHPRU\�DFFHVV�ZKLFK�LV�UHTXLUHG�WR�JR�DFURVV�WKH�GHVN�RI�WKH�SDJLQJ�V\VWHP�IRU�DSSURYDO��7KLV�PHDQV�WKDW�SDJLQJ�JHWV�FRQWURO�RYHU�PHPRU\�DFFHVV��,Q�RUGHU�IRU�WKLV�WR�KDSSHQ��WKH�SURFHVVRU�KDV�WR�KDYH�SDJLQJ�ZLUHG�LQWR�LW�1HLWKHU�WKH������QRU�WKH�������SURFHVVRUV�VXSSRUW�SDJLQJ��7KH�ILUVW�,QWHO�SURFHVVRU�ZLWK�SDJLQJ�VXSSRUW�LV�WKH�������

Page 100: Linux assembly language programming

����0XOWLWDVNLQJ%HIRUH�PXOWLWDVNLQJ�RSHUDWLQJ�V\VWHPV�H[LVWHG��FRPSXWHU�SURJUDPV�ZHUH�H[HFXWHG�LQ�VHTXHQFH��L�H���RQH�DIWHU�WKH�RWKHU��1R�SURJUDP�ZDV�DEOH�WR�EHJLQ�H[HFXWLQJ�XQWLO�WKH�SURJUDP�DKHDG�RI�LW�ZDV�ILQLVKHG��2SHUDWLQJ�V\VWHPV�ZKLFK�UDQ�SURJUDPV�LQ�VHULHV�OLNH�WKLV�ZHUH�FDOOHG�EDWFK�RSHUDWLQJ�V\VWHPV��$�PXOWLWDVNLQJ�V\VWHP�DOORZV�SURJUDPV�WR�WDNH�WXUQV�XVLQJ�SURFHVVRUV��$Q�RSHUDWLQJ�V\VWHP�SURJUDP�FDOOHG�WKH�VFKHGXOHU�DFWV�DV�D�UHIHUHH�DQG�IRUFHV�XVHU�SURJUDPV�WR�\LHOG�WR�RQH�DQRWKHU�HYHQ�ZKHQ�WKH\�DUH�QRW�ILQLVKHG��$W�DQ\�JLYHQ�PRPHQW��WKHUH�PD\�EH�PDQ\�XVHU�SURJUDPV�WDNLQJ�WXUQV�DQG�ZDLWLQJ�IRU�SURFHVVRU�WLPH��(DFK�RI�WKHVH�SURJUDPV�LV�FDOOHG�D�WDVN�RU�D�SURFHVV��$�GLVWLQFWLRQ�KDV�WR�EH�PDGH�EHWZHHQ�D�SURJUDP�DQG�D�SURFHVV�VLQFH�RQH�SURJUDP�FDQ�EH�FDOOHG�VHYHUDO�WLPHV�E\�VHYHUDO�XVHUV�DOO�DW�RQFH��(DFK�VHSDUDWH�LQVWDQFH�RI�D�SURJUDP�LV�D�SURFHVV��,Q�/LQX[�ZH�FDQ�OLVW�WKH�SURFHVVHV�E\�XVLQJ�WKH�����OLQX[ER[��SV�DX[FRPPDQG��2U�WR�FRQGXFW�D�PRUH�GHWDLOHG�H[DPLQDWLRQ��ZH�FDQ�H[SORUH�WKH��SURF�GLUHFWRU\�$�PXOWLWDVNLQJ�V\VWHP�VXFK�DV�/LQX[�LV�FRQWLQXDOO\�MXJJOLQJ�LWV�SURFHVVRU�UHVRXUFHV��SDVVLQJ�WKHP�IURP�SURFHVV�WR�SURFHVV��(DFK�WLPH�D�SURFHVV�JHWV�EXPSHG�IURP�D�SURFHVVRU��LW�KDV�WR�VDYH�LWV�FXUUHQW�VWDWH��3DUW�RI�WKH�ZRUN�RI�VDYLQJ�LV�GRQH�E\�D�KDUGZLUHG�URXWLQH�ZKLFK�LV�H[HFXWHG�ZKHQ�WKH�[���GRHV�D�WDVN�VZLWFK��,W�VDYHV�DOO�FXUUHQW�UHJLVWHUV�WR�D�UHJLRQ�LQ�PHPRU\�FDOOHG�WKH�WDVN�VWDWH�VHJPHQW��7KH�WDVN�VWDWH�VHJPHQW�KROGV�WKH�IUR]HQ�VWDWH�RI�D�WDVN�ZKLFK�LV�QRW�FXUUHQWO\�UXQQLQJ��(YHU\�WDVN�KDV�LWV�RZQ�WDVN�VWDWH�VHJPHQW��7KHVH�WDVN�VWDWH�VHJPHQWV�PDNH�LW�SRVVLEOH�WR�VZLWFK�IURP�RQH�WDVN�WR�DQRWKHU��)LJXUH�����VKRZV�WKH�EDVLF�OD\RXW�RI�D�WDVN�VWDWH�VHJPHQW��LQFOXGLQJ�WKH�VSDFH�IRU�DOO�WKH�JHQHUDO�UHJLVWHUV��DQG�D�UHJLVWHU�FDOOHG�WKH�&5��UHJLVWHU�6RPH�VSDFH�WKDW�LV�XQPDUNHG�LQ�WKLV�ILJXUH�LV�GLVFXVVHG�LQ�FKDSWHU����

)LJXUH������7DVN�6WDWH�6HJPHQW

Page 101: Linux assembly language programming

����3DJLQJ$V�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ������[���,�2�DGGUHVVHV�GR�QRW�XQGHUJR�SURFHVVLQJ��,I�WKH�';�UHJLVWHU�FRQWDLQV�D�QXPEHU�VXFK�DV�)&��+��WKHQ�WKH�H[HFXWLRQ�RI�WKH�,1�$/�>';@�FRPPDQG�FDXVHV�WKH����ELWV�RI�';�WR�EH�DSSOLHG�GLUHFWO\�WR�WKH�DGGUHVV�EXV�

)&��+� ��������������������6R�RQ�WKH�DGGUHVV�EXV�ZH�JHW

7KH�WRS����ELWV�DUH�MXVW���0HPRU\�DGGUHVVHV�RQ�WKH�RWKHU�KDQG�DUH�QRW�KDQGOHG�LQ�VXFK�D�VWUDLJKWIRUZDUG�IDVKLRQ��$�029�$/�>�)&��+@ZLOO�QRW�UHVXOW�LQ�WKHVH�VDPH�ELWV�EHLQJ�SXPSHG�RXW�RQWR�WKH�DGGUHVV�EXV��0HPRU\�DGGUHVVHV�XQGHUJR�D�WZR�VWHS�SURFHVV��� 6HJPHQWDWLRQ�� 3DJLQJ

2QO\�DW�WKH�HQG�RI�WKLV�SURFHVV��DQG�WKHQ�RQO\�LI�HYHU\WKLQJ�JRHV�ZHOO��LV�WKHUH�D�SK\VLFDO�DGGUHVV�ZKLFK�FDQ�EH�SXPSHG�RXW�RQWR�WKH�DGGUHVV�EXV��6LQFH�/LQX[�GRHV�QRW�XVH�VHJPHQWDWLRQ��GLVFXVVLRQ�RI�LW�LV�GHIHUUHG�WR�FKDSWHU����������9LUWXDO�0HPRU\$OO�DGGUHVVHV�OLH�LQ�WKH���WR���*LJ�UDQJH��$OWKRXJK�LW�ZRXOG�PDNH�VHQVH�WKDW�GLIIHUHQW�WDVNV�EH�UHTXLUHG�WR�XVH�GLIIHUHQW�SDUWV�RI�WKH���*LJ�VSDFH��/LQX[�GRHV�QRW�ZRUN�WKLV�ZD\��/LQX[�PD\�DOORFDWH�WKH�VDPH�DGGUHVVHV�WR�GLIIHUHQW�WDVNV�DW�WKH�VDPH�WLPH��7KHVH�DGGUHVVHV�DUH�QRW�UHDO��7KH\�DUH�FDOOHG�YLUWXDO�DGGUHVVHV��-XVW�DV�D�IUDXGXOHQW�DFFRXQWDQW�NHHSV�WZR�VHWV�RI�ERRNV��RQH�IRU�WKH�DXGLWRUV�DQG�RQH�IRU�WKH�WUXH�VWDWH�RI�DIIDLUV��/LQX[�PXVW�NHHS�D�VHW�RI�YLUWXDO�DGGUHVVHV�IRU�HDFK�WDVN��SOXV�RQH�VHW�RI�UHDO�DGGUHVVHV�IRU�WKH�DFWXDO�SK\VLFDO�ORFDWLRQV�RQ�GLVN�DQG�LQ�5$0�

)LJXUH������[���9LUWXDO�0HPRU\�6\VWHP

$�� $�� $�� $�� $�� $�� $� $� $� $� $� $� $� $� $� $�� � � � � � � � � � � � � � � �

Page 102: Linux assembly language programming

7KH�WUDQVODWLRQ�EHWZHHQ�WKH�YLUWXDO�DGGUHVVHV�DQG�WKH�UHDO�RQHV�LV�GRQH�XVLQJ�H[WHQVLYH�VHWV�RI�WDEOHV�FDOOHG�SDJH�WDEOHV��(DFK�SURFHVV�KDV�LWV�RZQ�VHW�RI�WDEOHV�)LJXUH�����VKRZV�WKH�VLWXDWLRQ�ZKLFK�UHVXOWV��7KH�UHDGHU�ZLOO�QRWH�WKDW�PHPRU\�KDV�EHHQ�VHULRXVO\�RYHUERRNHG��7KHUH�DUH�W\SLFDOO\�PDQ\�SURFHVVHV�UXQQLQJ��(DFK�SURFHVV�XVHV�SRWHQWLDOO\���*LJ�RI�YLUWXDO�DGGUHVV�VSDFH��%XW�WKH�W\SLFDO�FRPSXWHU�KDV�PXFK�OHVV�5$0�WKDQ�ZRXOG�EH�QHHGHG�WR�VXSSO\�DOO�SURFHVVHV�ZLWK���*LJ��$W�ILUVW�VLJKW��SDJLQJ�VHHPV�WR�EH�D�YHU\�EDG�LGHD��%XW�LQ�IDFW�LW�HFRQRPL]HV�JUHDWO\�RQ�PHPRU\�XVDJH�DQG�LV�RQH�RI�WKH�UHDVRQV�FRPSXWHUV�DUH�DEOH�WR�UXQ�ELJ�SURJUDPV�DV�IDVW�DV�WKH\�GR��$LUOLQHV�RYHUERRN�LQ�RUGHU�WR�NHHS�WKHLU�SODQHV�RFFXSLHG��7KH�FRVW�RI�IUHH�DLUOLQH�WLFNHWV�QRZ�DQG�WKHQ�WR�EXPSHG�SDVVHQJHUV�LV�PRUH�WKDQ�SDLG�IRU�E\�NHHSLQJ�WKH�VHDWV�IXOO��/LNHZLVH��WKH�RFFDVLRQDO�SDJH�IDXOW�LV�PRUH�WKDQ�PDGH�XS�IRU�E\�NHHSLQJ�PHPRU\�EXV\�

)LJXUH������/LQX[�9LUWXDO�0HPRU\�6\VWHP

Page 103: Linux assembly language programming

3DJLQJ�ZRUNV�E\�FRS\LQJ�WHPSRUDULO\�LGOH�SRUWLRQV�RI�PHPRU\�RQWR�GLVN��$V�VXJJHVWHG�E\�LWV�QDPH��LW�ZRUNV�LQ�XQLWV�FDOOHG�SDJHV��.�3DJHV2Q�DQ�[���PDFKLQH��D�SDJH�LV�������E\WHV��,Q�RUGHU�WR�VHW�XS�D�SDJLQJ�V\VWHP��IRXU�DUHDV�QHHG�WR�EH�GLYLGHG�XS�LQWR�SDJHV��� 7KH�DYDLODEOH�SK\VLFDO�PHPRU\�LV�EURNHQ�XS�LQWR�SDJHV��6LQFH������� ����� ��.� �����+��HYHU\�SDJH�VWDUWV�DW�DQ�DGGUHVV�HQGLQJ�LQ�WKUHH�KH[�]HURV��3DJHV�LQ�SK\VLFDO�PHPRU\�DUH�VRPHWLPHV�FDOOHG�SDJH�IUDPHV��� (DFK�WDVNV���*LJ�YLUWXDO�DGGUHVV�VSDFHV�LV�DOVR�GLYLGHG�LQWR�SDJHV����*LJ�FRUUHVSRQGV�WR���0HJ�RI�SDJHV�

$JDLQ��HYHU\�SDJH�VWDUWV�DW�DQ�DGGUHVV�HQGLQJ�LQ�WKUHH�KH[�]HURV��� 7KH�SRUWLRQ�RI�WKH�KDUG�GLVN�XVHG�IRU�SDJLQJ�LV�DOVR�GLYLGHG�LQWR�SDJHV��7KLV�SRUWLRQ�LV�RIWHQ�FDOOHG�WKH�VZDS�VSDFH��6LQFH�PRVW�GLVNV�DUH�IRUPDWWHG�LQWR�����E\WH�VHFWRUV��WKLV�PHDQV�WKH�QXPEHU�RI�VHFWRUV�DOORFDWHG�WR�WKH�VZDS�VSDFH�PXVW�EH�D�PXOWLSOH�RI�HLJKW�������� ��������� 7KH�SDJH�WDEOHV�XVHG�WR�WUDQVODWH�YLUWXDO�DGGUHVVHV�DUH�WKHPVHOYHV�VHW�XS�LQ�XQLWV�RI�SDJHV��7KHVH�WDEOHV�DUH�GHVFULEHG�LQ�VHFWLRQ�������

1RWH�WKDW�SDJHV�RI�YLUWXDO�PHPRU\��SK\VLFDO�PHPRU\��DQG�GLVN�DOO�KDYH�WKH�VDPH�VL]H��7KLV�IDFLOLWDWHV�GDWD�WUDQVIHUV�LQ�SDJH�VL]H�TXDQWLWLHV�������3DJLQJ�YV��6ZDSSLQJ7KH�WHUP�VZDS�VSDFH�LV�XQIRUWXQDWH�VLQFH��VZDSSLQJ��WUDGLWLRQDOO\�UHIHUV�WR�FRS\LQJ�HQWLUH�SURFHVVHV�WR�DQG�IURP�WKH�GLVN��:KHQ�GHPDQG�IRU�PHPRU\�RQ�D�PXOWLWDVNLQJ�V\VWHP�H[FHHGV�WKH�DYDLODEOH�5$0��D�YHU\�VLPSOH�VROXWLRQ�WR�WKLV�SUREOHP�LV�WR�MXVW�FRS\�VRPH�SURFHVV�RXW�WR�WKH�GLVN��7KDW�LV�ZKDW�VZDSSLQJ�GRHV��6ZDSSLQJ�GRHV�QRW�LQFUHDVH�PHPRU\�HIILFLHQF\��,W�MXVW�SUHYHQWV�PHPRU\�IURP�RYHUORDGLQJ��,W�FDQ�EH�GRQH�E\�WKH�RSHUDWLQJ�V\VWHP�RQ�LWV�RZQ��,W�GRHV�QRW�UHTXLUH�DQ\�VSHFLDO�KDUGZDUH�VXSSRUW��6ZDSSLQJ�ZDV�FRPPRQ�LQ�8QL[�V\VWHPV�EHIRUH�SDJLQJ�ZDV�LQYHQWHG��/LQX[�GRHV�QRW�XVH�VZDSSLQJ�DQG�QHYHU�KDV�$OWKRXJK�VZDSSLQJ�VROYHV�WKH�SUREOHP�RI�PHPRU\�XQDYDLODELOLW\��LW�GRHV�QRW�GR�YHU\�ZHOO�LQ�WHUPV�RI�PDNLQJ�PHPRU\�XVDJH�HIILFLHQW��&RS\LQJ�ZKROH�SURFHVVHV�LQWR�DQG�RXW�RI�PHPRU\�WHQGV�WR�IUDJPHQW�PHPRU\�MXVW�DV�FRS\LQJ�ILOHV�RQWR�DQG�RII�RI�D�GLVN�WHQGV�WR�IUDJPHQW�D�GLVN��)XUWKHUPRUH��E\�WUHDWLQJ�SURFHVVHV�DV�ZKROHV��LW�PLVVHV�RXW�RQ�WKH�SRVVLELOLW\�WKDW�E\�NHHSLQJ�MXVW�WKH�PRVW�LPSRUWDQW�SDUWV�RI�HDFK�SURFHVV�LQ�PHPRU\��LW�PD\�EH�SRVVLEOH�WR�UXQ�DOO�WKH�SURFHVVHV�ZLWKRXW�PXFK�RQJRLQJ�GLVN�DFFHVV��)DLOLQJ�WKLV��LW�PD\�DW�OHDVW�EH�SRVVLEOH�WR�JUHDWO\�UHGXFH�WKH�IUDFWLRQ�RI�WKH�SURFHVVRUV�WLPH�ZKLFK�LV�ZDVWHG�LQ�VHUYLFLQJ�PHPRU\�IDXOWV�3DJH�)DXOWV8VLQJ�SDJLQJ��DOO�WKH�SURFHVVHV�DUH�UXQ�DV�WKRXJK�WKH\�ZHUH�DOO�LQ�PHPRU\�VLPXOWDQHRXVO\��:KHQ�D�PDFKLQH�LQVWUXFWLRQ�LV�HQFRXQWHUHG�ZKLFK�UHIHUV�WR�D�PHPRU\�ORFDWLRQ�DFWXDOO\�RQ�GLVN��WKLV�LV�FDOOHG�D�SDJH�IDXOW�

Page 104: Linux assembly language programming

:KHQ�D�SDJH�IDXOW�RFFXUV��VRPH�SDJH�IUDPH�LQ�5$0�KDV�WR�EH�FKRVHQ�VR�WKDW�WKH�QHHGHG�SDJH�PD\�EH�ORDGHG�LQWR�LW�IURP�WKH�GLVN��,I�QR�SDJH�IUDPH�LV�IUHH��WKHQ�VRPH�SDJH�RI�PHPRU\�KDV�WR�EH�FKRVHQ�IRU�WUDQVIHU�WR�WKH�GLVN�VR�DV�WR�IUHH�XS�D�SDJH�IUDPH��7KLV�PHPRU\�SDJH�LV�FRSLHG�WR�WKH�GLVN�DQG�WKH�SDJH�FRQWDLQLQJ�WKH�PLVVHG�DGGUHVV�LV�FRSLHG�LQWR�5$0��7KHUH�DUH�PDQ\�GLIIHUHQW�DOJRULWKPV�LQ�XVH�ZKLFK�FKRRVH�SDJHV�WR�EH�H[SHOOHG�IURP�PHPRU\��6XFK�DOJRULWKPV�DUH�UHIHUUHG�WR�DV�SDJLQJ�DOJRULWKPV��0DQ\�SDJLQJ�DOJRULWKPV�FKRRVH�SDJHV�IRU�H[SXOVLRQ�RQ�WKH�EDVLV�RI�XVDJH��8QXVHG�SDJHV�JHW�H[SHOOHG�������.HUQHO�$GGUHVVHV$OWKRXJK�/LQX[�PD\�DQG�RIWHQ�GRHV�DOORFDWH�WKH�VDPH�YLUWXDO�DGGUHVVHV�WR�GLIIHUHQW�WDVNV��LW�XVHV�D�VSHFLDO�VHW�RI�YLUWXDO�DGGUHVVHV�IRU�NHUQHO�PHPRU\�DQG�WKHVH�DUH�QHYHU�GXSOLFDWHG�

z .HUQHO�DGGUHVVHV�OLH�LQ�WKH�UDQJH�IURP�&�������+�WR�))))))))+��L�H�����WR���*LJ�z 8VHU�DGGUHVVHV�LQ�WKH�UDQJH�IURP���WR�%)))))))+��L�H�����WR���*LJ�

)LJXUH�����LOOXVWUDWHV�WKLV�PHPRU\�SROLF\�IURP�WKH�VWDQGSRLQW�RI�D�VLQJOH�SURFHVV��)LJXUH�����VKRZV�LW�IURP�WKH�VWDQGSRLQW�RI�WKH�HQWLUH�V\VWHP��8VHU�YLUWXDO�DGGUHVVHV�DUH�DOORWWHG�LQGLYLGXDOO\��.HUQHO�DGGUHVVHV�DUH�V\VWHP�ZLGH�)LJXUH������6LQJOH�3URFHVV�9LHZ�RI�0HPRU\

Page 105: Linux assembly language programming

%HIRUH�YHUVLRQ��������RI�/LQX[��WKH�VHSDUDWLRQ�RI�NHUQHO�DQG�XVHU�PHPRU\�ZDV�DFFRPSOLVKHG�XVLQJ�WKH�VHJPHQWDWLRQ�SURFHVV��/LQX[�FXUUHQWO\�PDNHV�QR�XVH�RI�VHJPHQWDWLRQ��1RZ�WKH�VHSDUDWLRQ�LV�DFFRPSOLVKHG�VLPSO\�DV�DQ�DOORFDWLRQ�SROLF\��7KLV�LQFLGHQWDOO\�PDNHV�[���/LQX[�PRUH�OLNH�$OSKD�/LQX[��7KH�$OSKD�DUFKLWHFWXUH�KDV�QR�VHJPHQWDWLRQ��6HJPHQWDWLRQ�LV�GLVFXVVHG�LQ�FKDSWHUV����DQG����������.HUQHO�3DJHV7KH�/LQX[�SDJLQJ�DOJRULWKP�QHYHU�SDJHV�NHUQHO�PHPRU\�RXW�WR�GLVN��7KH�/LQX[�NHUQHO�LV�WKHUHIRUH�DOZD\V�LQ�5$0�7KLV�LV�RQH�UHDVRQ�WKDW�FRPSLOLQJ�/LQX[�VSHFLDOO\�IRU�HDFK�PDFKLQH�LV�ZRUWKZKLOH��,I�WKH�NHUQHO�LV�FRPSLOHG�ZLWK�FRGH�ZKLFK�LVQW�QHHGHG��VXFK�DV�GHYLFH�GULYHUV�IRU�GHYLFHV�WKH�PDFKLQH�GRHVQW�KDYH��5$0�ZLOO�EH�SHUPDQHQWO\�RFFXSLHG�E\�FRGH�ZKLFK�LV�QHYHU�XVHG�,W�LV�DOVR�WKH�UHDVRQ�WKDW�PDFKLQHV�UHTXLUH�DSSUR[LPDWHO\���0HJ�RI�5$0��GHSHQGLQJ�RQ�WKH�/LQX[�YHUVLRQ��WR�UXQ�/LQX[�DW�DOO�������.HUQHO�0RGXOHV$OWKRXJK�NHUQHO�PHPRU\�LV�QHYHU�WRXFKHG�E\�WKH�SDJLQJ�V\VWHP��LW�KDV�EHHQ�SRVVLEOH�VLQFH�/LQX[�YHUVLRQ�����WR�DGG�RU�GHOHWH�FKXQNV�RI�NHUQHO�PHPRU\��SURYLGHG�WKH\�KDYH�EHHQ�FRPSLOHG�VHSDUDWHO\�DV�PRGXOHV��7KH�FRPPDQGV�����OLQX[ER[��LQVPRG�PRGXOHIRU��LQVWDOO�PRGXOH��DQG�����OLQX[ER[��UPPRG�PRGXOHIRU��UHPRYH�PRGXOH��GR�FKDQJH�WKH�DPRXQW�RI�5$0�RFFXSLHG�E\�WKH�NHUQHO��7R�LQVSHFW�PHPRU\�WR�ILQG�RXW�WKH�DPRXQW�RI�PHPRU\�DYDLODEOH��WKH�/LQX[�FRPPDQG�����OLQX[ER[��IUHHLV�XVHIXO�����$GGUHVV�7UDQVODWLRQ/LQX[�XVHU�PHPRU\�DGGUHVVHV�DUH�YLUWXDO�DGGUHVVHV��QRW�DFWXDO�SK\VLFDO�DGGUHVVHV��/LQX[�XVHV�SDJLQJ�WR�WUDQVODWH�YLUWXDO�DGGUHVVHV�WR�5$0�DGGUHVVHV��[���SDJLQJ�REWDLQV�LWV�WUDQVODWLRQV�IURP�SDJH�WDEOHV�VHW�XS�E\�WKH�RSHUDWLQJ�V\VWHP��6LQFH�WKH�WUDQVODWLRQ�SURFHVV�LV�KDUGZLUHG�LQWR�WKH�SURFHVVRU��[���SDJH�WDEOHV�PXVW�KDYH�WKH�WZR�WLHUHG�VWUXFWXUH�VKRZQ�LQ�)LJXUH�����

)LJXUH������[���3DJH�7DEOH�6WUXFWXUH

Page 106: Linux assembly language programming

������7ZR�7LHUHG�[���3DJH�7DEOHV(DFK�WDEOH�LQ�WKLV�VWUXFWXUH�KDV������IRXU�E\WH�HQWULHV��7KH�VL]H�RI�HDFK�WDEOH�WKHUHIRUH�LV��.��1RWH�WKDW�HDFK�WDEOH�LV�DOVR�D�SDJH�$�SDJH�WDEOH�WDEOH�OLVWV�WKH�ORFDWLRQV�RI������SDJH�WDEOHV��(DFK�SDJH�WDEOH�OLVWV�WKH�ORFDWLRQV�RI������SDJHV��(DFK�SDJH�FRQWDLQV������E\WHV��7KH�WRWDO�PHPRU\�UHIHUHQFHG�E\�D�SDJH�WDEOH�WDEOH�LV�WKHUHIRUH���������������� ���� ��� ���� ����� ���*LJDE\WHV��7KLV�LV�WKH�VL]H�RI�RQH�YLUWXDO�DGGUHVV�VSDFH�������$GGUHVV�3DUVLQJ$OO�YLUWXDO�DGGUHVVHV�DUH����ELW�TXDQWLWLHV��7KHVH����ELWV�DUH�EURNHQ�XS�DV�IROORZV�7KHVH�ELWV�DUH�DOORFDWHG�DV�VKRZQ�LQ�)LJXUH������7KH�WZR�WHQ�ELW�QXPEHUV�DUH�LQGLFHV�LQWR�WDEOHV�ZLWK������ �����HQWULHV��$�WHQ�ELW�QXPEHU�LV�D�QXPEHU�IURP���WR�������7KH����ELW�QXPEHU�LV�DQ�LQGH[�LQWR�D�SDJH��$�SDJH�KDV�����E\WHV��$����ELW�QXPEHU�LV�D�QXPEHU�IURP���WR�������,W�SLFNV�RXW�RQH�E\WH�IURP�D�SDJH�

)LJXUH������9LUWXDO�$GGUHVV�7UDQVODWLRQ

������7UDQVODWLRQ�([DPSOH6XSSRVH�ZH�KDYH�D�YLUWXDO�DGGUHVV�RI��$�%�&�'+��7KLV����ELW�DGGUHVV�LV�EURNHQ�LQWR�LWV�WKUHH�SDUWV�

7UDQVODWLRQ�EHJLQV�DW�WKH�SDJH�WDEOH�WDEOH��7KH�ILUVW�WHQ�ELWV�SLFN�RXW�DQ�HQWU\�IURP�WKLV�WDEOH��,Q�RXU�H[DPSOH��WKHVH�ELWV�DUH��������������� ����������� ���+� ������,QGLFHV�VWDUW�DW�]HUR��7KH�ILUVW�LWHP�IHWFKHG�LV�WKH����WK�IRXU�E\WH�HQWU\�LQ�WKH�SDJH�WDEOH�WDEOH��,I�DOO�JRHV�ZHOO��WKLV�HQWU\�FRQWDLQV�DQ�DGGUHVV��,Q�VHFWLRQ������LW�LV�VKRZQ�KRZ�WR�H[WUDFW�WKLV�DGGUHVV��7KH�DGGUHVV�LV�WKH�DGGUHVV�RI�D�SDJH�WDEOH��7KH�QH[W�WHQ�ELWV����������������HTXDO��%�+��RU������ZKLFK�LV�WKH�QXPEHU�RI�DQ�HQWU\�LQ�WKH�SDJH�WDEOH��$JDLQ�LI�DOO�JRHV�ZHOO��ZH�PD\�H[WUDFW�DQ�DGGUHVV�IURP�WKLV�HQWU\��7KLV�DGGUHVV�LV�WKH�5$0�DGGUHVV�RI�WKH�SDJH�RQ�ZKLFK�WKH�LQIRUPDWLRQ�EHLQJ�VRXJKW�LV�ORFDWHG��6XSSRVH�WKDW�WKLV�DGGUHVV�KDSSHQV�WR�EH��������+��7KH�ODVW����ELWV�RI�WKH�YLUWXDO�DGGUHVV����������������� �2&�'+��DUH�WKH�RIIVHW�ZLWKLQ�WKH�SDJH��7KH�WUDQVODWHG�DGGUHVV�LV�WKHQ�����&�'+�������3DJH�7DEOH�(QWULHV6XSSRVH�D�PHPRU\�DGGUHVV�LV�HQFRXQWHUHG�E\�WKH�SURFHVVRU�IRU�WKH�ILUVW�WLPH�LQ�D�UHDG�FRPPDQG�VXFK�DV

Page 107: Linux assembly language programming

�����029�$/�>��������+@$V�MXVW�H[SODLQHG�LQ�VHFWLRQ��������D�WDEOH�HQWU\�IRU�WKLV�DGGUHVV�LV�REWDLQHG��7KLV�HQWU\�LV�IRXU�E\WHV�LQ�VL]H��,WV�OHDVW�VLJQLILFDQW�ELW�LV�FDOOHG�WKH�SUHVHQW�ELW��,Q�WKH�GLDJUDP�VKRZQ�KHUH��LW�LV�PDUNHG��3�3��IRU�SDJH�SUHVHQW�:KHQ�WKH�SUHVHQW�ELW�LV�VHW��LW�PHDQV�WKDW�WKH�VRXJKW�DIWHU�SDJH�LV�ORFDWHG�LQ�5$0��,Q�WKLV�FDVH�WKH�FDOOLQJ�SURJUDP�LV�OXFN\�DQG�WKH�SDJH�WDEOH�HQWU\�MXVW�UHDG�SURYLGHV�WKH�SK\VLFDO�DGGUHVV�RI�WKH�SDJH�FRQWDLQLQJ�WKH�UHTXLUHG�E\WH��6LQFH�DOO�SDJH�IUDPHV�LQ�SK\VLFDO�PHPRU\�DUH�VWRUHG�DW�DGGUHVVHV�ZKRVH�ERWWRP����ELWV�DUH�]HUR��WKH�DGGUHVV�FDQ�EH�JLYHQ�XVLQJ�LWV�XSSHU����ELWV��7KDW�LV�ZKDW�WKH�WRS����ELWV�RI�WKH�SDJH�WDEOH�HQWU\�SURYLGH��2QFH�WKH�DGGUHVV�RI�WKH�SDJH�LV�GHWHUPLQHG��WKH�PHPRU\�UHDG�LV�FRPSOHWHG�DV�VKRZQ�LQ�VHFWLRQ������������0HPRU\�3URWHFWLRQ:KHQ�WKH�SUHVHQW�ELW�LV�QRW�VHW��WKHUH�DUH�WZR�SRVVLELOLWLHV��� ,W�PD\�PHDQ�WKDW�WKH�SDJH�FRQWDLQLQJ�WKH�VRXJKW�DIWHU�E\WH�LV�ORFDWHG�RQ�GLVN��,Q�WKLV�FDVH��D�3DJH�)DXOW�UHVXOWV��� ,W�PD\�DOVR�PHDQ�WKDW�WKH�DGGUHVV�LV�QRW�YDOLG�DW�DOO��,Q�WKLV�FDVH��D�6HJPHQWDWLRQ�)DXOW�UHVXOWV�

7KH�ILUVW�SRVVLELOLW\�LV�QR�VXUSULVH��7KH�LGHD�RI�SDJLQJ�LV�WR�SXW�VRPH�PHPRU\�SDJHV�RXW�RQWR�WKH�GLVN��:KHQ�D�SURJUDP�WULHV�WR�DFFHVV�WKHP��WKLV�LV�RI�FRXUVH�D�SUREOHP��3UREOHPV�OLNH�WKLV�DUH�GHDOW�ZLWK�LQ�FKDSWHU����VHFWLRQ�����7KH�VHFRQG�SRVVLELOLW\�LV�VRPHZKDW�IRUHLJQ�WR�WKH�LGHD�RI�SDJLQJ�DV�D�PHPRU\�HFRQRPL]LQJ�IHDWXUH��%XW�LW�EULQJV�RXW�H[DFWO\�ZKDW�ZH�PHDQ�ZKHQ�ZH�VD\�WKDW�/LQX[�XVHV�SDJLQJ�WR��SURWHFW��PHPRU\��%HFDXVH�WKH�SDJH�WDEOHV�DUH�XQGHU�WKH�FRQWURO�RI�WKH�RSHUDWLQJ�V\VWHP��LW�JLYHV�WKH�RSHUDWLQJ�V\VWHP�DQ�RSSRUWXQLW\�WR�LQWHUFHSW�HYHU\�VLQJOH�PHPRU\�UHTXHVW��7KLV�LV�KRZ�/LQX[�NHHSV�SRWHQWLDOO\�RYHUZKHOPLQJ�GHPDQGV�IRU�PHPRU\�XQGHU�FRQWURO��2QO\�DGGUHVVHV�RQ�SDJHV�ZKLFK�LW�KDV�DOORFDWHG�WR�SURFHVVHV�ZLOO�KDYH�WKH�SUHVHQW�ELW�LQ�WKH�SDJH�WDEOHV�VHW��$Q\�UHIHUHQFH�WR�DQ�XQDOORFDWHG�SDJH�UHVXOWV�LQ�WKH�GUHDGHG��6HJPHQWDWLRQ�)DXOW��HUURU�PHVVDJH�������7KH�&5��5HJLVWHU7UDQVODWLRQ�EHJLQV�DW�WKH�SDJH�WDEOH�WDEOH��(DFK�WDVN�KDV�LWV�RZQ�SDJH�WDEOH�WDEOH��7KH�SK\VLFDO�DGGUHVV�RI�WKH�SDJH�WDEOH�WDEOH�LV�VWRUHG�LQ�D�UHJLVWHU�FDOOHG�&5���&5�VWDQGV�IRU�FRQWURO�UHJLVWHU��7KH�FRQWURO�UHJLVWHUV�ZHUH�DGGHG�WR�WKH�[���SURFHVVRUV�VWDUWLQJ�ZLWK�WKH������)RU�PRUH�GLVFXVVLRQ�RI�WKHVH�UHJLVWHUV�VHH�FKDSWHU�����VHFWLRQ������&5��LV�UHORDGHG�DXWRPDWLFDOO\�HYHU\�WLPH�WKH�[���SURFHVVRU�FKDQJHV�IURP�RQH�WDVN�WR�DQRWKHU��7KLV�LV�ZKDW�PDNHV�LW�SRVVLEOH�IRU�HDFK�WDVN�WR�KDYH�LWV�RZQ�VHW�RI�YLUWXDO�DGGUHVVHV��7KH�NHUQHO�PHPRU\�LQ�WKH�ODVW�RQH�IRXUWK�RI�WKH�DGGUHVV�VSDFH��VHH�VHFWLRQ��������LV�WKHUH�EHFDXVH�/LQX[�SXWV�LW�WKHUH��7KLV�DGGUHVV�VSDFH�LV�VKDUHG�EHFDXVH�WKH�SDJH�WDEOHV�ZKLFK�WUDQVODWH�WKHVH�DGGUHVVHV�DUH�VKDUHG��7KH�ODVW�RQH�TXDUWHU�RI�HYHU\�SDJH�WDEOH�WDEOH�RQ�WKH�V\VWHP�LV�LGHQWLFDO�������.HUQHO�0HPRU\�$FFHVV7KH�IDFW�WKDW�NHUQHO�DGGUHVVHV�DUH�VWRUHG�LQ�DOO�WKH�SDJH�WDEOHV�RQ�WKH�V\VWHP�PLJKW�OHDG�XV�WR�EHOLHYH�WKDW�NHUQHO�PHPRU\�FDQ�EH�XVHG�E\�DOO�SURFHVVHV�RQ�WKH�V\VWHP��,Q�D�ZD\�WKLV�LV�WUXH��,Q�FKDSWHU����VHFWLRQ�����ZH�ZLOO�VHH�KRZ�XVHU�FRGH�PD\�LQYRNH�V\VWHP�FDOOV�WR�JHW�DFFHVV�WR�NHUQHO�PHPRU\��+RZHYHU��XVHU�FRGH�E\�LWVHOI�GRHV�QRW�KDYH�WKLV�NLQG�RI�DFFHVV��,W�LV�EORFNHG�E\�WKH�8B6�XVHU�VXSHUYLVRU�ELW�RI�WKH�WDEOH�HQWULHV�IRU�NHUQHO�PHPRU\���6HH�)LJXUH������

)LJXUH������3DJH��7DEOH��7DEOH�(QWU\

Page 108: Linux assembly language programming

7KLV�ELW��LI�LW�LV����GRHV�QRW�EORFN�DFFHVV��,I�LW�LV����LW�LV�FKHFNHG�DJDLQVW�D�WZR�ELW�SULYLOHJH��YDOXH�VWRUHG�LQ�D�VSHFLDO�UHJLVWHU�FDOOHG�WKH�&3/�UHJLVWHU��7KLV�UHJLVWHU�DQG�WKH�SULYLOHJH�OHYHOV�VWRUHG�LQ�LW�DUH�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ������$FFHVV�LV�EORFNHG�LI�WKH�YDOXH�LQ�WKH�&3/�UHJLVWHU�LV����:KHQ�XVHU�SURJUDPV�DUH�UXQQLQJ��WKH�&3/�UHJLVWHU�KROGV����7KLV�LV�WKH�EDVLF�SURWHFWLRQ�WKDW�NHUQHO�PHPRU\�KDV�DJDLQVW�DFFHVV�E\�XVHU�SURJUDPV�������3DJLQJ�3DJH�7DEOHV(QWULHV�LQ�WKH�SDJH�WDEOH�WDEOH�ORRN�MXVW�OLNH�HQWULHV�LQ�WKH�SDJH�WDEOH��7KH�SUHVHQW�ELW�LQ�HDFK�PHDQV�WKH�VDPH�WKLQJ��,I�LW�LV�FOHDUHG�LW�PHDQV�WKDW�WKH�VRXJKW�DIWHU�LWHP�LV�QRW�SUHVHQW��-XVW�DV�D�SDJH�RI�VRPH�SURFHVVV�PHPRU\�FDQ�EH�SDJHG�RXW�WR�GLVN��VR�FDQ�D�SDJH�WDEOH��-XVW�DV��.�RI�DGGUHVV�VSDFH�LQ�D�SDJH�FDQ�EH�PDUNHG�DV�XQDOORFDWHG��VR�FDQ�WKH���0HJ�RI�DGGUHVV�VSDFH�XQGHU�D�SDJH�WDEOH�EH�PDUNHG�DV�XQDOORFDWHG�$�PLVVLQJ�SDJH�WDEOH�FDXVHV�D�SDJH�IDXOW�RU�D�VHJPHQWDWLRQ�IDXOW��MXVW�OLNH�D�PLVVLQJ�SDJH�RI�XVHU�PHPRU\�����3URJUDP�6HJPHQWV&RQVLGHU�3URJUDP������:KHQ�WKLV�SURJUDP�LV�UXQ��WKH�OLQH�ODEHOOHG�$%&�ZLSHV�LWVHOI�RXW��7KLV�SURJUDP�LV�DQ�H[DPSOH�RI�VHOI�PRGLI\LQJ�FRGH�2QFH�XSRQ�D�WLPH�LQ�WKH�EDG�ROG�GD\V��VHOI�PRGLI\LQJ�FRGH�ZDV�VRPHWLPHV�XVHG�WR�VDYH�D�IHZ�E\WHV�RI�PHPRU\�VSDFH��7RGD\�VHOI�PRGLI\LQJ�FRGH�LV�QRW�FRQVLGHUHG�JRRG�SURJUDPPLQJ��7RP�6KDQOH\�SXW�LW�PRUH�EOXQWO\�ZKHQ�KH�ZURWH�WKDW�SURJUDPPHUV�ZKR�FUHDWH�VHOIPRGLI\LQJ�FRGH�VKRXOG�EH��FDVW�LQWR�WKH�SLWV���2UGLQDULO\��WKH�RQO\�UHDVRQ�WKDW�D�UXQQLQJ�SURJUDP�LV�PRGLILHG�LV�WKDW�VRPHWKLQJ�KDV�JRQH�ZURQJ��5XQQLQJ�SURJUDPV�VKRXOG�QRW�JHW�PRGLILHG�3URJUDP�������3URJUDP�ZKLFK�VHOI�GHVWUXFWV����������,1�$/��>�@$%&�����029�>$%&@��$/��������5(7������1RQ�:ULWHDEOH�0HPRU\8QL[�UHTXLUHV�WKDW�UXQQLQJ�SURJUDPV�EH�SURWHFWHG�IURP�DFFLGHQWDO�PRGLILFDWLRQ�E\�EHLQJ�VWRUHG�LQ�PHPRU\�ZKLFK�LV��QRW�ZULWHDEOH���/LQX[�XVHV�ELW���RI�WKH�SDJH�WDEOH�HQWU\�WR�LPSOHPHQW�WKLV�UHTXLUHPHQW��7KLV�LV�WKH�ELW�PDUNHG��:B5��IRU�:ULWH�5HDG�LQ�WKH�GLDJUDP��,I�WKLV�ELW�LV�FOHDUHG��WKH�LQGH[HG�SDJH�LV�QRW�ZULWHDEOH��:KHQ�WKH�SURFHVVRU�HQFRXQWHUV�D�ZULWH�FRPPDQG�VXFK�DV�����029�>��������+@�$/WKLV�ELW�LV�FKHFNHG��)LUVW�WKH�SDJH�WDEOH�HQWU\�IRU�WKH�DGGUHVV���������+�LV�IHWFKHG��$VVXPLQJ�WKH�SUHVHQW�ELW�LQ�WKH�HQWU\�IRU�WKLV�SDJH�LV�VHW��WKHQ�EHFDXVH�WKLV�LQVWUXFWLRQ�LV�D�ZULWH�FRPPDQG��ELW����WKH�ZULWH�RU�UHDG�ELW��LV�FKHFNHG��,I�WKLV�ELW�LV�QRW�VHW��WKH�SURFHVVRU�ZLOO�QRW�H[HFXWH�WKH�LQVWUXFWLRQ�DQG�/LQX[�LVVXHV�D��6HJPHQWDWLRQ�)DXOW��HUURU�PHVVDJH��)DXOWV�DUH�GHVFULEHG�LQ�JUHDWHU�GHWDLO�LQ�FKDSWHU����VHFWLRQ�����8QL[�SURWHFWV�FRGH�E\�PDUNLQJ�LW�DV�QRQZULWHDEOH�������:ULWHDEOH�0HPRU\'DWD�VSDFH�XVHG�IRU�FRPSXWDWLRQ�QHHGV�WR�EH�LQ�PHPRU\�ZKLFK�LV�ZULWHDEOH��&RQVLGHU�3URJUDP������7KH�ODEHO�;<=�MXVW�PDUNV�VWRUHG�GDWD��7KH�FRGH�LV�SHUIHFWO\

Page 109: Linux assembly language programming

3URJUDP�������7LQ\�1$60�SURJUDP�ZKLFK�FUDVKHV�WU\LQJ�WR�LQFUHPHQW�D�E\WH�RI�VWRUHG�GDWD����������JOREDO�PDLQPDLQ����029�$/�>;<=@��������,1&�$/��������029�>;<=@��$/��������5(7;<=�����GE��UHDVRQDEOH��%XW�EHFDXVH�WKH�HQWLUH�SURJUDP�LV�VWRUHG�LQ�QRQZULWHDEOH�PHPRU\��D�VHJPHQWDWLRQ�IDXOW�RFFXUV�ZKHQ�WKH�SURFHVVRU�DWWHPSWV�WR�H[HFXWH�WKH�029�>;<=@��$/�LQVWUXFWLRQ��7KLV�LV�D�SUREOHP�

z 2Q�WKH�RQH�KDQG�/LQX[�SURWHFWV�WKH�FRGH�LQ�3URJUDP�����E\�VWRULQJ�LW�RQ�SDJHV�ZKLFK�DUH�QRW�ZULWHDEOH�z 2Q�WKH�RWKHU�KDQG�WKH�ODEHO�;<=�LQ�3URJUDP�����PDUNV�ZULWHDEOH�VSDFH��,W�WKHUHIRUH�FDQQRW�EH�VWRUHG�RQ�WKH�VDPH�SDJH�DV�WKH�H[HFXWDEOH�OLQHV�RI�WKH�SURJUDP�

%HFDXVH�ZULWH�SURWHFWLRQ�IRU�FRGH�LV�LPSOHPHQWHG�XVLQJ�SDJH�WDEOH�HQWULHV��WKHQ�DW�OHDVW�WZR�GLIIHUHQW�SDJHV�DUH�QHHGHG�IRU�3URJUDP������RQH�ZLWK�ZULWH�SURWHFWLRQ�DQG�RQH�ZLWKRXW�LW��1R�SDJH�FDQ�EH�VKDUHG�E\�ZULWH�SURWHFWHG�FRGH�DQG�ZULWHDEOH�GDWD�VSDFH�������7H[W�DQG�'DWD�6HJPHQWV3URJUDPV�KDYH�WR�EH�EURNHQ�XS��7KH�GLIIHUHQW�SLHFHV�RI�DQ�H[HFXWDEOH�ILOH�DUH�FDOOHG�VHJPHQWV�7KH�PDFKLQH�FRGH�FRXOG�EH�EURNHQ�XS�ZKHQ�LW�ZDV�ORDGHG��EXW�WKLV�ZRXOG�SODFH�XQUHDVRQDEOH�GHPDQGV�RQ�WKH�ORDGLQJ�SURJUDP��,Q�RUGHU�WKDW�WKH�VHJPHQWV�GR�QRW�KDYH�WR�EH�FUHDWHG�DW�ORDG�WLPH��WKH�H[HFXWDEOH�ILOH�LV�GLYLGHG�LQWR�VHJPHQWV��(YHQWXDOO\�ZH�ZLOO�GHVFULEH�ILYH�GLIIHUHQW�NLQGV�RI�VHJPHQWV��6R�IDU�ZH�KDYH�PDGH�D�FDVH�IRU�WZR�

z 7H[W�VHJPHQWV��([HFXWDEOH�FRGH�QHHGV�D�VHJPHQW�ZKLFK�LV�VWRUHG�LQ�SDJHV�ZKRVH�:ULWH�5HDG�ELW�LV�FOHDUHG��,W�LV�FDOOHG�WKH�WH[W�VHJPHQW�z 'DWD�VHJPHQWV��6RPH�SURJUDPV�QHHG�VSDFH�LQ�WKH�H[HFXWDEOH�ILOH�ZKHUH�GDWD�FDQ�EH�ZULWWHQ��,W�LV�VWRUHG�LQ�SDJHV�ZKRVH�:ULWH�5HDG�ELW�LV�VHW��,W�LV�FDOOHG�WKH�GDWD�VHJPHQW�

������7H[W�DQG�'DWD�6HFWLRQV-XVW�DV�DQ�H[HFXWDEOH�ILOH�KDV�VHJPHQWV��DQ�REMHFW�FRGH�ILOH�KDV�VHFWLRQV��2QH�RI�WKH�OLQNHUV�MREV�LV�WR�SXW�WRJHWKHU�D�WH[W�VHJPHQW�IURP�WKH�WH[W�VHFWLRQV�RI�DOO�WKH�REMHFW�FRGH�ILOHV�EHLQJ�OLQNHG��D�GDWD�VHJPHQW�IURP�DOO�WKH�GDWD�VHFWLRQV��HWF��/LQNHUV�KDYH�D�ORW�RI�ZRUN�WR�GR�:KR�FUHDWHV�WKH�VHFWLRQV�LQ�WKH�REMHFW�FRGH�ILOHV"�2EMHFW�FRGH�ILOHV�DUH�FUHDWHG�E\�DVVHPEOHUV�������6HFWLRQ�'HILQLWLRQ�'LUHFWLYHV$VVHPEOHUV�GR�QRW�VHSDUDWH�FRGH�LQWR�WH[W�DQG�GDWD�VHFWLRQV�DFWLQJ�RQ�WKHLU�RZQ��$W�OHDVW��PRVW�DVVHPEOHUV�DUH�QRW�WKDW�VPDUW��7KH�SURJUDPPHU�QHHGV�WR�KHOS�RXW�E\�XVLQJ�GLUHFWLYHV�WKDW�VSHFLI\�ZKLFK�FRGH�JRHV�LQWR�ZKLFK�VHFWLRQ��7KH�IROORZLQJ�1$60�GLUHFWLYH�FDQ�EH�XVHG�WR�LQLWLDWH�VHFWLRQV������VHFWLRQ��WH[WVSHFLILHV�D�WH[W�VHFWLRQ��6LPLODUO\������VHFWLRQ��GDWD

Page 110: Linux assembly language programming

LQLWLDWHV�D�GDWD�VHFWLRQ�:LWK�WKHVH�GLUHFWLYHV�ZH�FDQ�GLUHFW�1$60�WR�SURGXFH�D��R�ILOH�ZLWK�ERWK�WH[W�DQG�GDWD�VHFWLRQV��$GGLQJ�WKHVH�GLUHFWLYHV�WR�3URJUDP�����JLYHV�XV�3URJUDP������ZKLFK�ZLOO�FRPSLOH�DQG�UXQ�ZLWKRXW�FUDVKLQJ�3URJUDP�������7LQ\�SURJUDP�ZKLFK�LQFUHPHQWV�D�E\WH�RI�VWRUHG�GDWD����������JOREDO�PDLQ��������VHFWLRQ��WH[WPDLQ����029�$/�>;<=@��������,1&�$/��������029�>;<=@��$/��������5(7��������VHFWLRQ��GDWD;<=�����GE��������6HJPHQWV�LQ�&�&RGH3URJUDP�����FDQ�EH�XVHG�WR�GHWHUPLQH�WKH�DGGUHVVHV�RI�SDJHV�DOORFDWHG�WR�LWVHOI�������&DOOLQJ�&�IURP�$VVHPEOHU&DOOLQJ�IXQFWLRQV�LQYROYHV�XVLQJ�WKH�VWDFN��:KHQ�IXQFWLRQV�DUH�FDOOHG�XVLQJ�DVVHPEOHU��LW�LV�SRVVLEOH�WR�VHH�H[DFWO\�KRZ�WKH�VWDFN�LV�XVHG�LQ�D�IXQFWLRQ�FDOO��2QFH�\RX�NQRZ�KRZ�WR�XVH�WKH�VWDFN�WR�FDOO�D�IXQFWLRQ��\RX�FDQ�FDOO�&�OLEUDU\�IXQFWLRQV�WR�JHW�DFWXDO�LQSXW�DQG�RXWSXW�IRU�DVVHPEOHU�SURJUDPV�ZKLFK�UXQ�XQGHU�/LQX[�,Q�RUGHU�WR�FDOO�SULQWI���DQG�VFDQI���XVLQJ�DVVHPEOHU��LW�LV�QHFHVVDU\�WR�SXVK�VWULQJV�RQWR�WKH�VWDFN��7KLV�LV�EHFDXVH�WKH�ILUVW�DUJXPHQW�RI�HDFK�RI�WKHVH�IXQFWLRQV�LV�DOZD\V�D�VWULQJ��7KH�GE�DVVHPEOHU�GLUHFWLYH�LQWURGXFHG�LQ�FKDSWHU����VHFWLRQ�������FDQ�EH�XVHG�WR�VWRUH�VWULQJV�DV�ZHOO�DV�QXPEHUV��)RU�H[DPSOH�������GE��+HOOR�ZRUOG�?Q?[��FDQ�EH�XVHG�WR�VWRUH�D�VWULQJ��,I�WKH�ORFDWLRQ�LV�ODEHOOHG��WKHQ�WKH�ODEHO�PD\�EH�XVHG�WR�SXVK�WKH�DGGUHVV�RI�WKH�VWRUHG�VWULQJ��,Q�(GOLQDV�WKH�DOORZDEOH�VWULQJV�DUH�H[DFWO\�OLNH�WKRVH�DOORZHG�LQ�WKH�&�ODQJXDJH�H[FHSW�WKDW�QXOO�WHUPLQDWLRQ�PXVW�EH�H[SOLFLWO\�HQFRGHG�LI�LW�LV�GHVLUHG��7KH�&�ODQJXDJH�KH[�HVFDSH�VHTXHQFH�?[�PD\�EH�XVHG�WR�LQFOXGH�D�QXOO�RU�DQ\�RWKHU�FKDUDFWHU�LQWR�WKH�VWULQJ�3URJUDP�����FKDU�D� �$�PDLQ��^���FKDU� Q�����LQW�L�W�����Q� �D�����SULQWI��(QWHU�D�SRLQWHU�GLVSODFHPHQW�LQ�KH[��������VFDQI���[���L������SULQWI��3RLQWHU�YDOXH�LQ�KH[� ��[?Q����Q���L�������SULQWI��5HDG��ZULWH��RU�VNLS"���(QWHU�������RU�����������VFDQI��G���W������LI��W� �����������SULQWI��&RQWHQWV�WKHUH ��[��� �Q���L�������HOVH�LI��W� ����������� �Q���L�� �<�����SULQWI��?Q���`,Q�1$60��QRQ�$6&,,�FKDUDFWHUV�DUH�FRGHG�RXWVLGH�WKH�VWULQJ�XVLQJ�FRPPDV�

Page 111: Linux assembly language programming

�����GE��+HOOR�ZRUOG����$+��,Q�RUGHU�WR�FDOO�VFDQI���IURP�DVVHPEOHU�LW�LV�QHFHVVDU\�WR�KDYH�D�ODEHO�LQ�D�GDWD�VHJPHQW��7KH�VFDQI��IXQFWLRQ�WDNHV�XVHU�LQSXW�DQG�ZULWHV�LW�LQWR�PHPRU\��7KLV�PHPRU\�FDQQRW�EH�LQ�WKH�WH[W�VHJPHQW��,W�PXVW�EH�LQ�D�GDWD�VHJPHQW��%HFDXVH�SULQWI�DQG�VFDQI�RFFXU�DV�UHIHUHQFHV�WR�XQNQRZQ�ORFDWLRQV��1$60�UHTXLUHV�WKH�XVH�RI�DQ�H[WHUQ�GLUHFWLYH��1$60�ZLOO�SURGXFH�DQ�HUURU�PHVVDJH�LI�D�ODEHO�LV�UHIHUUHG�WR�ZKLFK�GRHV�QRW�RFFXU�LQ�WKH�ODEHO�ILHOG�RI�D�OLQH�LQ�WKH�SURJUDP�EHLQJ�DVVHPEOHG��3URJUDP�����VKRZV�KRZ�WR�FDOO�SULQWI��DQG�VFDQI���IURP�D�1$60�SURJUDP��$�ZRUG�RI�ZDUQLQJ�LV�LQ�RUGHU�UHJDUGLQJ�UHJLVWHU�XVDJH��$OWKRXJK�ZH�PLJKW�H[SHFW�&�OLEUDU\�IXQFWLRQV�VXFK�DV�SULQWI���DQG�VFDQI���WR�VDYH�UHJLVWHUV�RQ�WKH�VWDFN�EHIRUH�XVLQJ�WKHP��WKH\�GRQW�QHFHVVDULO\��9DOXHV�VWRUHG�LQ�UHJLVWHUV�EHIRUH�D�FDOO�WR�SULQWI���QHHG�QRW�EH�WKHUH�DIWHU�WKLV�FDOO��7R�SUHVHUYH�YDOXHV�IURP�GHVWUXFWLRQ�E\�D�OLEUDU\�IXQFWLRQ�FDOO��WKH�SURJUDPPHU�PXVW�DVVXPH�WKH�UHVSRQVLELOLW\�RI�VDYLQJ�WKHP�RQ�WKH�VWDFN��7KH�OLQHV�ODEHOHG�$%&��%&'��DQG�&'(�VWRUH�VWULQJV��;<=�LV�ORFDWHG�LQ�WKH�GDWD�VHJPHQW��&RQVHTXHQWO\��WKH�029�($;��>;<=@�LQVWUXFWLRQ�FDQ�H[HFXWH�ZLWKRXW�FDXVLQJ�D�PHPRU\�YLRODWLRQ�����2WKHU�'DWD�6HJPHQWV/LQX[�XVHU�PHPRU\�LV�GDWD�VSDFH�WKDW�LV�LQWHUQDO�WR�WKH�SURJUDP�LWVHOI��7KHUH�DUH�WKUHH�NLQGV�RI�GDWD�VSDFH�LQWHUQDO�WR�D�SURJUDP�3URJUDP�������7KLV�SURJUDP�FDOFXODWHV�\� ��� �[������������VHFWLRQ��WH[W��������JOREDO�PDLQ��������H[WHUQ�SULQWI��������H[WHUQ�VFDQIPDLQ����386+�$%&��������&$//�SULQWI��������$''�(63�����������386+�;<=��������386+�%&'��������&$//�VFDQI��������$''�(63�����������029�($;��>;<=@��������$''�($;��($;��������,1&�($;��������386+�($;��������386+�&'(��������&$//�SULQWI��������$''�(63�����������5(7$%&�����GE��(QWHU�D�QXPEHU������$+��%&'�����GE���G�?[�����$+��&'(�����GE��<RX�JHW��G�?[�����$+����������VHFWLRQ��GDWD;<=�����GE��� ���� ,QLWLDOL]HG�GDWD�VSDFH��,W�LV�VSDFH�WKDW�LV�LQWHUQDO�WR�WKH�H[HFXWDEOH�ILOH��HYHQ�ZKHQ�WKH�ILOH�LV�O\LQJ�LGOH�RXW�RQ�WKH�GLVN��� 8QLQLWLDOL]HG�GDWD�VSDFH��,W�LV�VSDFH�WKDW�LV�DGGHG�WR�WKH�SURJUDP�ZKHQ�WKH�SURJUDP�LV�ORDGHG��� '\QDPLFDOO\�$OORFDWHG�0HPRU\��,W�LV�VSDFH�WKDW�LV�DGGHG�WR�WKH�SURJUDP�ZKHQ�LW�LV�H[HFXWLQJ�

������,QLWLDOL]HG�'DWD�6SDFH,Q�FKDSWHU����VHFWLRQ�������WKH�XVH�RI�WKH�GE�GLUHFWLYH�ZDV�GLVFXVVHG�LQ�FRQQHFWLRQ�ZLWK�WKH�LQLWLDOL]DWLRQ�RI�GDWD��7KH�IDFW�WKDW�WKLV�GDWD�QHHGV�WR�EH�VWRUHG�SHUPDQHQWO\�UHTXLUHV�WKDW�LW�EH�D�SDUW�RI�WKH�H[HFXWDEOH�ILOH�

Page 112: Linux assembly language programming

,I�WKH�VSDFH�ZKLFK�LV�RFFXSLHG�E\�WKLV�GDWD�LV�HYHU�ZULWWHQ�WR�E\�WKH�SURJUDP��WKHQ�LW�PXVW�EH�LQ�D�GDWD�VHJPHQW��7KH�����VHFWLRQ��GDWDGLUHFWLYH�LV�WKH�ULJKW�WRRO�IRU�WKLV�MRE�6RPHWLPHV�VWRUHG�GDWD�LV�QHYHU�RYHUZULWWHQ��)RU�H[DPSOH��FRQWURO�VWULQJV�VXFK�DV��+HOOR�ZRUOG���DUH�HVVHQWLDOO\�QHYHU�ZULWWHQ�RQ��7KLV�NLQG�RI�GDWD�PD\�MXVW�DV�ZHOO�EH�VWRUHG�LQ�ZULWH�SURWHFWHG�SDJHV��,Q�WKH�JQX�DVVHPEOHU�WKHUH�LV�D�VSHFLDO�VHFWLRQ�ODEHO�IRU�VHFWLRQV�RI�WKLV�NLQG���URGDWD�������8QLQLWLDOL]HG�'DWD�6SDFH6SDFH�ZKLFK�LV�QHHGHG�E\�WKH�UXQQLQJ�SURJUDP��EXW�ZKLFK�GRHV�QRW�FRQWDLQ�GDWD�LQLWLDOO\��PD\�EH�DGGHG�WR�WKH�SURJUDP�ZKHQ�LW�LV�ORDGHG��$Q�DUUD\�GHFODUHG�E\�����LQW�[>������@�PD\�ZHOO�RFFXS\���������E\WHV�RI�VSDFH��3XWWLQJ�VXFK�DQ�DUUD\�LQWR�DQ�H[HFXWDEOH�ILOH�ZRXOG�EH�D�ZDVWH�RI�GLVN�VSDFH��7R�VHW�WKH�VSDFH�DVLGH�DW�ORDG�WLPH��WKH��EVV�VHFWLRQ�ODEHO�LV�XVHG�������'\QDPLFDOO\�$OORFDWHG�0HPRU\3URJUDPV�JHW�PHPRU\�DW�UXQ�WLPH�XVLQJ�WKH�V\VWHP�FDOO�PDOORF����6\VWHP�FDOOV�DUH�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ���������,�2�3URWHFWLRQ,Q�VHFWLRQ�����ZH�KDYH�GLVFXVVHG�WKH�XVH�RI�SDJLQJ�DV�D�ZD\�RI�SURWHFWLQJ�PHPRU\�IURP�XQUHJXODWHG�XVHU�DFFHVV��:H�KDYH�DOVR�QRWHG�WKDW�,�2�DGGUHVVLQJ�LV�XQSURFHVVHG��,W�GRHVQW�XVH�SDJLQJ��VHJPHQWDWLRQ��RU�DQ\�RWKHU�NLQG�RI�WDPSHULQJ�ZLWK�WKH�DGGUHVVHV�LQ�WKH�EUDFNHWV��%XW�WKHUH�LV�VXSSRUW�IRU�,�2�SURWHFWLRQ�LQ�WKH�î���DUFKLWHFWXUH�DQG�/LQX[�GRHV�XVH�LW�����([HFXWDEOH�)LOHV�LQ�(/)�)RUPDW,Q�FKDSWHU����VHFWLRQ�����ZH�QRWHG�WKDW�EHFDXVH�SURJUDPV�FRQWDLQ�DEVROXWH�DGGUHVVHV�ZKLFK�DUH�QRW�GHWHUPLQHG�XQWLO�ORDGLQJ�WLPH��H[HFXWDEOH�ILOHV�FRQWDLQ�UHORFDWLRQ�WDEOHV�ZKLFK�OLVW�WKHVH�ORFDWLRQV�LQ�WKH�ILOH��7KHVH�WDEOHV�QHHG�WR�KDYH�VRPH�VSHFLILHG�IRUPDW�,Q�VHFWLRQ�����ZH�QRWHG�WKDW�VLQFH�SURJUDPV�KDYH�VHJPHQWV�ZKLFK�DUH�VDYHG�RQ�VHSDUDWH�SDJHV��GHSHQGLQJ�RQ�ZKHWKHU�WKH�VHJPHQWV�DUH�ZULWHDEOH�RU�QRW��WKH�ORFDWLRQ�RI�WKHVH�VHJPHQWV�ZLWKLQ�WKH�ILOH�PXVW�EH�NQRZQ�WR�WKH�RSHUDWLQJ�V\VWHP��,I�/LQX[�GLG�QRW�KDYH�WKLV�LQIRUPDWLRQ��LW�ZRXOG�QRW�EH�DEOH�WR�GHWHUPLQH�ZKLFK�SDUWV�RI�WKH�ILOH�WR�VWRUH�LQ�ZULWHDEOH�SDJHV�RI�PHPRU\�DQG�ZKLFK�LQ�UHDG�RQO\�)RU�DOO�WKHVH�UHDVRQV��H[HFXWDEOH�ILOHV�PXVW�KDYH�VRPH�GHILQLWH�IRUPDW��7KH�IRUPDW�XVHG�E\�/LQX[��VWDUWLQJ�ZLWK�YHUVLRQ������LV�FDOOHG�(/)��([HFXWDEOH�DQG�/LQNLQJ�)RUPDW��7ZR�RWKHU�8QL[�H[HFXWDEOH�ILOH�IRUPDWV�DUH�&2))��&RPPRQ�2EMHFW�)LOH�)RUPDW��DQG�D�RXW��$OWKRXJK�DOO�8QL[�V\VWHPV�XVH�D�RXW�DV�WKH�QDPH�RI�WKH�H[HFXWDEOH�ILOH�SURGXFHG�E\�WKH�&�FRPSLOHU��LW�LV�DOVR�WKH�QDPH�RI�RQH�SDUWLFXODU�IRUPDW�IRU�H[HFXWDEOH�ILOHV�DQG�REMHFW�FRGH�ILOHV��$W�RQH�WLPH�DOO�YHUVLRQV�RI�8QL[�XVHG�WKH�D�RXW�IRUPDW��1RZ�PRVW�YHUVLRQV�XVH�(/)��7KH�ERRN�8QGHUVWDQGLQJ�DQG�8VLQJ�&2))�SUHVHQWV�D�WKRURXJK�GHVFULSWLRQ�RI�ERWK�&2))�DQG�D�RXW�)LJXUH��±��VKRZV�WKH�OD\RXW�RI�DQ�H[HFXWDEOH�ILOH�LQ�(/)�IRUPDW�

)LJXUH������(/)�)RUPDW

Page 113: Linux assembly language programming
Page 114: Linux assembly language programming

������7KH�(/)�+HDGHU7KH�(/)�KHDGHU�LGHQWLILHV�WKH�ILOH�DV�DQ�(/)�ILOH�DQG�VSHFLILHV�ZKDW�NLQG�RI�(/)�ILOH�LW�LV��,W�DOVR�VSHFLILHV�WKH�VL]H�DQG�ORFDWLRQ�RI�WKH�SURJUDP�KHDGHU�WDEOH�DQG�WKH�VHFWLRQ�KHDGHU�WDEOH�

z 7KH�ILUVW�HQWU\�LV�DQ�LGHQWLILHU�VWULQJ�FRQWDLQLQJ�(/)�z 7KH�VHFRQG�HQWU\�LV�D�QXPEHU�ZKLFK�LV���LI�WKH�ILOH�LV�DQ�REMHFW�ILOH����LI�WKH�ILOH�LV�DQ�H[HFXWDEOH�ILOH����LI�WKH�ILOH�LV�D�VKDUHG�REMHFW�ILOH��DQG���LI�LW�LV�D�FRUH�ILOH��6KDUHG�REMHFW�ILOHV�DUH�GLVFXVVHG�LQ�FKDSWHU����&RUH�ILOHV�DUH�SURGXFHG�ZKHQHYHU�D�SURJUDP�FUDVKHV��7KH\�DUH�FUHDWHG�IRU�GHEXJJLQJ�SXUSRVHV�z 7KH�WKLUG�HQWU\�QXPEHU�VSHFLILHV�WKH�PDFKLQH�DUFKLWHFWXUH��7KH�QXPEHU���VWDQGV�IRU�WKH�[���DUFKLWHFWXUH�z 7KHUH�DUH����PRUH�HQWULHV�LQ�WKH�(/)�KHDGHU�ILOH��LQFOXGLQJ�HQWULHV�IRU�WKH�VL]H�DQG�ORFDWLRQ�RI�WKH�SURJUDP�KHDGHU�WDEOH�DQG�WKH�VHFWLRQ�KHDGHU�WDEOH�

������7KH�3URJUDP�+HDGHU�7DEOH7KH�SURJUDP�KHDGHU�WDEOH�KDV�RQH�HQWU\�IRU�HDFK�VHJPHQW��(DFK�HQWU\�LQ�WKH�SURJUDP�KHDGHU�WDEOH�FRQWDLQV�HLJKW�LWHPV�RI�LQIRUPDWLRQ��� 7\SH��7KH�W\SH�LV���LI�WKH�VHJPHQW�LV�WR�EH�ORDGHG�ZKHQ�WKH�ILOH�LV�H[HFXWHG��2WKHU�W\SHV�DUH�QRW�ORDGHG�LQWR�PHPRU\��� )LOH�2IIVHW��7KLV�RIIVHW�JLYHV�WKH�ORFDWLRQ�RI�WKH�VHJPHQW�ZLWKLQ�WKH�ILOH��/LNH�DOO�RIIVHWV��LW�LV�WKH�QXPEHU�RI�E\WHV�IURP�WKH�EHJLQQLQJ��� 9LUWXDO�$GGUHVV��7KLV�LV�WKH�DGGUHVV�ZKHUH�WKH�ILUVW�E\WH�RI�WKH�VHJPHQW�LV�WR�EH�ORDGHG��� 3K\VLFDO�$GGUHVV��)RU�[���/LQX[�V\VWHPV�WKLV�HQWU\�LV�D�PLVQRPHU��,W�LV�LJQRUHG��� )LOH�6L]H��7KLV�LV�WKH�QXPEHU�RI�E\WHV�LQ�WKH�VHJPHQW�EHIRUH�LW�LV�ORDGHG��� 0HPRU\�6L]H��7KLV�LV�WKH�QXPEHU�RI�E\WHV�LQ�WKH�VHJPHQW�DIWHU�LW�LV�ORDGHG��� 3HUPLVVLRQV��7KLV�FRGH�FRQWDLQV�WKH�UHDG�ZULWH�H[HFXWH�SHUPLVVLRQV��� $OLJQPHQW��7KH�VHJPHQW�PXVW�EHJLQ�RQ�D�PXOWLSOH�RI�WKLV�HQWU\�

$V�DQ�H[DPSOH��7DEOH�����OLVWV�WKH�3URJUDP�+HDGHU�WDEOH�IRU�FKPRG��/LNH�PRVW�8QL[�FRPPDQGV��WKH�FKPRGFRPPDQG�LV�DFWXDOO\�DQ�H[HFXWDEOH�ILOH��2Q�PRVW�V\VWHPV�LW�LV�ORFDWHG�LQ��ELQ� 7DEOH�����ZDV�SURGXFHG�E\�UXQQLQJ�WKH�RE�SURJUDP�RQ�WKLV�ILOH�������(/)�6HJPHQWV,Q�/LQX[�����DQ�H[HFXWDEOH�ILOH�W\SLFDOO\�KDV�ILYH�VHJPHQWV��6HJPHQW���LV�DOZD\V�WKH�3URJUDP�+HDGHU�WDEOH��1RWH�WKDW�LQ�7DEOH�����WKH�YDOXH�RI�WKH�7\SH�ILHOG�IRU�6HJPHQW���LV���IRU�SURJUDP�KHDGHU�6HJPHQWV�KDYH�UHDG�ZULWH�H[HFXWH�SHUPLVVLRQV�DVVRFLDWHG�ZLWK�WKHP��MXVW�DV�ILOHV�LQ�8QL[�GR��7KH�VHYHQWK�LWHP�LQ�HDFK�HQWU\�RI�WKH�3URJUDP�+HDGHU�WDEOH�LV�WKH�SHUPLVVLRQ�FRGH�IRU�WKDW�HQWU\��,W�LV�HDVLO\�XQGHUVWRRG�ZKHQ�ZULWWHQ�DV�D�ELQDU\�QXPEHU��)RU�H[DPSOH��D�SHUPLVVLRQ�FRGH�RI���PHDQV�SHUPLVVLRQ�WR�UHDG�DQG�ZULWH�EXW�QRW�WR�H[HFXWH�

7DEOH������3URJUDP�+HDGHU�7DEOH�IRU�FKPRG�������G��3URJUDP�+HDGHU�7DEOH

Page 115: Linux assembly language programming

1RWH�WKDW�WZR�RI�WKH�VHJPHQWV�DUH�ORDGDEOH��7KHVH�DUH�WKH�FRGH�DQG�GDWD�VHJPHQWV�$OWKRXJK�WKH�OLQNHU�FRPELQHV�VHFWLRQV�LQWR�VHJPHQWV��WKHUH�DUH�VHFWLRQV�ZKLFK�DUH�QRW�SDUW�RI�DQ\�VHJPHQW��7KH�6HFWLRQ�+HDGHU�WDEOH�OLVWV�DQG�GHVFULEHV�WKHVH�VHFWLRQV��7KHVH�SDUWV�RI�DQ�H[HFXWDEOH�ILOH�DOVR�RFFXU�LQ�DQ�REMHFW�ILOH�DQG�DUH�GLVFXVVHG�LQ�VHFWLRQ�����&RQVLGHU�WKH�IROORZLQJ�&�SURJUDP��3URJUDP�����SULQWV�RXW�SRLQWHUV��3RLQWHUV�DUH�MXVW�DGGUHVVHV��%HFDXVH�&�LV�D�UHODWLYHO\�ORZ�OHYHO�ODQJXDJH��ZH�ZRXOG�H[SHFW�WKHVH�SRLQWHUV�WR�EH�WKH�VDPH�DV�WKRVH�RFFXUULQJ�LQ�WKH�PDFKLQH�FRGH�����2EMHFW�)LOHV�LQ�(/)�)RUPDW0RVW�SURJUDPV�DUH�QRW�ZULWWHQ�FRPSOHWHO\�IURP�VFUDWFK��7KH\�UHO\�RQ�SURJUDPV�ZKLFK�KDYH�DOUHDG\�EHHQ�ZULWWHQ�DQG�DUH�XVHG�RYHU�DQG�RYHU�DJDLQ��VXFK�DV�SULQWI����)LOHV�ZKLFK�QHHG�RWKHU�FRGH�LQ�RUGHU�WR�UXQ�DUH�FDOOHG�REMHFW�FRGH�ILOHV��,W�LV�WKH�MRE�RI�WKH�OLQNHU�WR�FRPELQH�REMHFW�FRGH�IURP�GLIIHUHQW�ILOHV�LQWR�DQ�H[HFXWDEOH�ILOH��7KH�FRGH�IRU�SULQWI����IRU�H[DPSOH��LV�ORFDWHG�LQ��OLE�OLEF�VR��7\SLFDOO\�WKH�SURJUDPPHU�FUHDWHV�RQH�RU�WZR�RI�WKHVH�REMHFW�FRGH�ILOHV�XVLQJ�JFF�RU�DQ�DVVHPEOHU��DQG�WKH�UHVW�DUH�UHWULHYHG�E\�WKH�OLQNHU�IURP�VWDQGDUG�OLEUDULHV�VWRUHG�RQ�WKH�V\VWHP��7KLV�SURFHVV�LV�QRW�REYLRXV�IURP�WKH�FRPPDQG�OLQH�VLQFH�WKH�OLQNHU�LV�FDOOHG�E\�JFF�,W�LV�LPSRUWDQW�WR�UHDOL]H�WKDW�WKH�FUHDWLRQ�RI�DQ�REMHFW�FRGH�ILOH�LV�WKH�PDLQ�SXUSRVH�RI�DQ�DVVHPEOHU��,Q�VHFWLRQ�UHIVGHIGLU�DVVHPEOHU�FRPPDQGV�IRU�VKDSLQJ�REMHFW�ILOHV�ZLOO�EH�GLVFXVVHG��%XW�ILUVW��REMHFW�FRGH�ILOHV�WKHPVHOYHV�QHHG�WR�EH�GHVFULEHG��-XVW�DV�WKH�IRUPDW�RI�DQ�H[HFXWDEOH�ILOH�LV�SUHVFULEHG�E\�(/)��VR�LV�WKH�IRUPDW�RI�DQ�REMHFW�FRGH�ILOH��)LJXUH��±���VKRZV�WKH�VWUXFWXUH�RI�DQ�(/)�REMHFW�FRGH�ILOH��7KH�(/)�+HDGHU�LQ�DQ�REMHFW�ILOH�LV�WKH�VDPH�DV�WKH�(/)�KHDGHU�LQ�DQ

)LJXUH�������(/)�2EMHFW�)LOH�)RUPDW

�������G��3URJUDP�+HDGHU�7DEOH1XP 6HJ�7\SH )LOH�2IIVW 9LUWXDO�$GGUHVV 3K\VLFDO�$GGUHVV )LOH�6L]H 0HP�6L]H 3HUP $OLJQPHQW��� ���� ���� ������� ������� ��D� ��D� ���� ������� ���� ��G� �����G� �����G� ���� ���� ���� ������� ���� ���� ������� ������� �G�� �G�� ���� ������� ���� �G�� ���DG�� ���DG�� ���F ��IF ���� ������� ���� �GF� ���DGF� ���DGF� ���� ���� ���� ����7\SH��� �ORDGDEOH���� �G\QDPLF�LQIR���� �LQWHUSUHWHU�� �QRWH���� �SURJUDP�KHDGHUU Z [� � �

Page 116: Linux assembly language programming

3URJUDP�������LQW�D� ��[����������E� ��[�����������LQW�F� ��[����������G� ��[�����������PDLQ���^��� �6WRUH�QXPEHUV�ZKLFK�ZLOO�EH�YHU\�HDV\�WR�SLFN�RXW��IURP�WKH�PDFKLQH�FRGH�RI�WKH�FRPSLOHG�SURJUDP�� �������D� ��[OOOOOOOO�������E� ��[���������������F� ��[���������������G� ��[���������������SULQWI��9DULDEOHV��$GGUHVVHV�?Q��������SULQWI���D��[?Q���D��������SULQWI���E��[?Q���E��������SULQWI���F��[?Q���F��������SULQWI���G��[?Q���G����� ��[�PHDQV�WR�XVH��KH[DGHFLPDO��RXWSXW��� �������SULQWI��?Q���`H[HFXWDEOH�ILOH�

Page 117: Linux assembly language programming

������6HFWLRQ�+HDGHU�7DEOH7KH�6HFWLRQ�+HDGHU�WDEOH�OLVWV�DOO�WKH�VHFWLRQV�LQ�WKH�REMHFW�ILOH��7KH�WDEOH�VKRZQ�LQ�7DEOH�����ZDV�SURGXFHG�E\�UXQQLQJ�RE�RQ�WKH��R�ILOH�IRU�3URJUDP������7KH�)ODJV�LWHP�FRQWDLQV�DWWULEXWH�ELWV��ZKLFK�DUH�VRPHZKDW�OLNH�WKH�SHUPLVVLRQ�ELWV�LQ�WKH�SURJUDP�KHDGHU�WDEOH�RI�WKH�H[HFWXDEOH�ILOH��%LW���LV���LI�D�VHFWLRQ�LV�H[HFXWDEOH��,Q�7DEOH�����WKH�RQO\�VHFWLRQ�ZLWK�ELW���VHW�LV�VHFWLRQ����ZKLFK�LV�LQ�IDFW�WKH�WH[W�VHFWLRQ��%LW���LV���IRU�ZULWHDEOH�VHFWLRQV��2QO\�VHFWLRQV���DQG���DUH�ZULWHDEOH��6HFWLRQ���WXUQV�RXW�WR�EH�WKH�GDWD�VHFWLRQ�������6HFWLRQV:KHQ�WKH�OLQNHU�FUHDWHV�D�WH[W�VHJPHQW��LW�FRPELQHV�WKH�WH[W�VHFWLRQV�IURP�WKH�REMHFW�FRGH�ILOHV��:KHQ�LW�FUHDWHV�D�GDWD�VHJPHQW��LW�FRPELQHV�GDWD�VHFWLRQV��7KH�OLQNLQJ�SURFHVV�LQYROYHV�FROODWLQJ�:KHQ�WKH�JQX�OLQNHU�OLQNV��R�ILOHV��LW�QHHGV�WR�GHVLJQDWH�DQ�DGGUHVV�ZKHUH�H[FHFXWLRQ�LV�WR�FRPPHQFH��7KH�SURJUDPPHU�FDQ�GHVLJQDWH�WKLV�E\�XVLQJ�WKH�ODEHO�PDLQ�DQG�PDNLQJ�VXUH�LW�LV�YLVLEOH�WR�WKH�OLQNHU�E\�XVLQJ�WKH�JOREDO�DVVHPEOHU�GLUHFWLYH�)XUWKHU�5HDGLQJ8QGHUVWDQGLQJ�(/)�2EMHFW�)LOHV�DQG�'HEXJJLQJ�7RROV��0DU\/RX1RKU��3UHQWLFH�+DOO�������&KDSWHU����,17(5583767KH�IHWFK�H[HFXWH�F\FOH�LV�D�SURJUDP�GULYHQ�PRGHO�RI�FRPSXWDWLRQ��%XW�FRPSXWHUV�DUH�QRW�WRWDOO\�SURJUDP�GULYHQ��7R�VRPH�H[WHQW�WKH\�DUH�KDUGZDUH�GULYHQ��&38V�DUH�HTXLSSHG�ZLWK�LQSXW�VLJQDO�SLQV�ZKLFK�DOORZ�WKH�IHWFK�H[HFXWH�F\FOH�WR�EH�LQWHUUXSWHG��7KH�RULJLQDO�SXUSRVH�RI�WKHVH�SLQV�ZDV�WR�LQFUHDVH�SURFHVVRU�HIILFLHQF\�E\�UHGXFLQJ�WKH�DPRXQW�RI�WLPH�VSHQW�LQ�FRPPXQLFDWLRQ�ZLWK�,�2�GHYLFHV�,Q�FKDSWHU���ZH�VDZ�KRZ�D�GHYLFH�WR�LQFUHDVH�PHPRU\�HIILFLHQF\�ZDV�DGRSWHG�DV�D�GHYLFH�IRU�FRQWUROOLQJ�PHPRU\�DFFHVV��,QWHUUXSWV�KDYH�XQGHUJRQH�D�VLPLODU�WUDQVLWLRQ��7KLV�FKDSWHU�EHJLQV�E\�GHVFULELQJ�KRZ�LQWHUUXSWV�HFRQRPL]H�RQ�SURFHVVRU�WLPH��7KHQ��VWDUWLQJ�ZLWK�VHFWLRQ������ZH�ZLOO�VHH�KRZ�LQWHUUXSWV�DUH�XVHG�WR�FRQWURO�SURFHVVRU�DFFHVV�����3ROOLQJ

7DEOH������6HFWLRQ�+HDGHU�7DEOH�IRU�3URJUDP�����OEF������6HFWLRQ�+HDGHU�7DEOH1DPH 7\SH )OJV 9LUWXDO�$GGUHVV 2IIVHW 6L]H /LQN ,QIR $OJQ�0RG (QWU\�6L]H��� ���� ���� ���� �������� ���� ���� ���� ���� ���� ������� ���E ���� ���� �������� ���� ���� ���� ���� ���� ������� ���� ���� ���� �������� ���� ��D� ���� ���� ���� ������� ���E ���� ���� �������� ��F� ���� ���� ���� ���� ������� ���� ���� ���� �������� ��G� ���� ���� ���� ���� ������� ���� ���� ���� �������� ��G� ���� ���� ���� ���� ������� ���F ���� ���� �������� ��HF ���� ���� ���� ���� ������� ���� ���� ���� �������� ���F ���� ���� ���� ���� ������� ���� ���� ���� �������� ���H ���G ���� ���� ���� ������� ���� ���� ���� �������� ���� ��I� ���D ���� ���� �����D� ���� ���� ���� �������� ���� ���E ���� ���� ���� ����1DPH��LQGH[�LQWR�WKH�6HFWLRQ�+HDGHU�6WULQJ�7DEOH���VKVWUDE�7\SH���� �3URJUDP�%LWV���� �6\PERO�7DEOH���� �6WULQJ�7DEOH��� �5HORFDWLRQ�7DEOH���� �+DVK�7DEOH���� �'\QDPLF�,QIR��� �1RWH���� �1R�%LWV���� �5HORFDWLRQ�7DEOH

Page 118: Linux assembly language programming

:LWKRXW�LQWHUUXSW�SLQV��,�2�FRPPXQLFDWLRQ�ZRXOG�KDYH�WR�UHO\�RQ�SURFHVVRU�LQVWUXFWLRQV�VXFK�DV�WKH�,1�DQG�287�FRPPDQGV�������'DWD�3RUWV6XSSRVH�WKDW�D�SURFHVVRU�LV�VHQGLQJ�FKDUDFWHUV�IURP�D�EXIIHU�ORFDWHG�DW�$%&�WR�D�SULQWHU�ORFDWHG�DW�SRUW����+��DQG�WKDW�WR�GR�WKLV�LW�LVVXHV�RQH�E\WH�287�FRPPDQGV�IURP�D�ORRS��DV�VKRZQ�LQ�3URJUDP������7KHQ�DVVXPLQJ�RQH�LQVWUXFWLRQ�SHU�PDFKLQH�F\FOH��HDFK�H[HFXWLRQ�RI�WKH�ORRS�ZRXOG�WDNH�ILYH�PDFKLQH�F\FOHV��$W�D�FORFN�UDWH�RI�����0+]��DOO���������FKDUDFWHUV�ZRXOG�EH�VHQW�WR�WKH�SULQWHU�LQ������VHFRQGV��7KLV�LV�HQRXJK�WLPH�IRU�WKH�SULQWHU�WR�SULQW�RQH�RU�WZR�RI�WKHP��7KH�SULQWHU�ZRXOG�EH�VZDPSHG��DQG�PRVW�RI�WKH�RXWSXW�WR�WKH�SULQWHU�ZRXOG�EH�ORVW�3ULQWHUV�DUH�VORZ�LQ�FRPSDULVRQ�WR�SURFHVVRUV��6R�DUH�PRVW�RWKHU�,�2�GHYLFHV�������6WDWXV�3RUWV7R�SUHYHQW�GDWD�ORVV��D�SULQWHU�PXVW�KDYH�D�VWDWXV�SRUW�DV�ZHOO�DV�D�GDWD�SRUW��7KH�SURFHVVRU�ZLOO�WKHQ�EH�UHTXLUHG�WR�LQTXLUH�RI�WKH�VWDWXV�SRUW�ZKHWKHU�RU�QRW�WKH�SULQWHU�LV�UHDG\�WR�UHFHLYH�DQRWKHU�FKDUDFWHU��7KH�SURFHVVRU�ZLOO�RQO\�RXWSXW�DQRWKHU�FKDUDFWHU�ZKHQ�WKH�SULQWHU�LV�UHDG\�3URJUDP������������029�(';�����+����3ULQWHU�'DWD�3RUW�������029�(&;����������8VH�(&;�DV�WKH�ORRS�FRXQWHU�;<=����029�$/��>$%&���(&;@������������������������$%&�LV�WKH�EHJLQQLQJ�RI�WKH�PHPRU\�DUHD������������������������WKDW�FKDUDFWHUV�DUH�EHLQJ�SULQWHG�IURP��������287�>';@��$/�����6HQG�D�FKDUDFWHU�WR�WKH�SULQWHU��������,1&�(&;�������&03�(&;����������3ULQW�WKLV�PDQ\�FKDUDFWHUV��������-/�;<=6XSSRVH�WKDW�WKH�SULQWHU�ZLWK�WKH�GDWD�SRUW�DW�SRUW����+�DOVR�KDV�D�VWDWXV�SRUW�DW�SRUW����+�DQG�UHVSRQGV�WR�DQ�LQTXLU\�WR�WKLV�SRUW�ZLWK�D���ZKHQ�LW�LV�UHDG\�DQG�ZLWK�D���ZKHQ�LWV�QRW��,Q�WKLV�FDVH�WKH�RXWSXW�ORRS�PLJKW�ORRN�OLNH�WKLV��$�ORRS3URJUDP������������029�(';�����+����3ULQWHU�VWDWXV�SRUW�������029�(&;���;<=����,1�$/��>';@������$VN�WKH�SULQWHU�LI�LWV�UHDG\�������&03�$/�������������PHDQV�LWV�UHDG\�������-1(�;<=����������,I�QRW�WU\�DJDLQ�������029�$/��>$%&���(&;@�������'(&�(';����������'DWD�SRUW�LV����+�������287�>';@��$/�����6HQG�RQH�E\WH��������,1&�(&;�������,1&�(';����������3XW�EDFN�WKH�VWDWXV�SRUW�������&03�(&;���������������-/�;<=OLNH�WKLV�VROYHV�WKH�SUREOHP�RI�ORVW�GDWD�E\�UHGXFLQJ�SURFHVVRU�WKURXJKSXW�GRZQ�WR�WKH�VSHHG�RI�WKH�SULQWHU��0RVW�RI�WKH�SURFHVVRUV�WLPH�LV�VSHQW�H[HFXWLQJ�WKH�WKUHH�LQVWUXFWLRQV�IROORZLQJ�WKH�;<=�ODEHO�6XFFHVVLYHO\�TXHU\LQJ�RQH�,�2�GHYLFH�DIWHU�DQRWKHU�DERXW�LWV�VWDWXV�LV�FDOOHG�SROOLQJ��3ROOLQJ�PDNHV�D�PRGHVW�LPSURYHPHQW�RQ�WKLV�VLWXDWLRQ�E\�SXWWLQJ�DQ�LQTXLU\�WR�DOO�SHQGLQJ�,�2�GHYLFHV�LQWR�RQH�VWDWXV�LQTXLU\�ORRS��%XW�LW�LV�VWLOO�FOHDUO\�D�ZDVWH�RI�SURFHVVRU�WLPH�����([WHUQDO�,QWHUUXSWV,Q�RUGHU�WR�DOORZ�SURJUDPPHUV�WR�DYRLG�UHO\LQJ�RQ�SROOLQJ��SURFHVVRUV�KDYH�DW�OHDVW�RQH�LQSXW�SLQ�ZKLFK�

Page 119: Linux assembly language programming

,Q�RUGHU�WR�DOORZ�SURJUDPPHUV�WR�DYRLG�UHO\LQJ�RQ�SROOLQJ��SURFHVVRUV�KDYH�DW�OHDVW�RQH�LQSXW�SLQ�ZKLFK�DOORZV�,�2�GHYLFHV�WR�VLJQDO�WKH�SURFHVVRU�ZKHQ�WKH\�QHHG�WKH�SURFHVVRU�WR�GR�VRPHWKLQJ��6XFK�D�SLQ�LV�FDOOHG�DQ�LQWHUUXSW�SLQ��$Q�LQWHUUXSW�SLQ�PDNHV�LW�SRVVLEOH�IRU�DQ�,�2�GHYLFH�WR�LQLWLDWH�FRPPXQLFDWLRQ�ZLWK�WKH�&38��$�&38�ZLWKRXW�DQ�LQWHUUXSW�SLQ�KDV�EHHQ�FRPSDUHG�WR�D�WHOHSKRQH�ZLWKRXW�D�EHOO�6XSSRVH�WKDW�D�SULQWHU�LV�FRQQHFWHG�WR�DQ�LQWHUUXSW�SLQ�RQ�WKH�&38��DV�VKRZQ�LQ�)LJXUH������:LWK�WKH�SULQWHU�KRRNHG�XS�WR�WKH�&38�LQ�WKLV�ZD\��WKH�&38�ZRXOG�EH�DEOH�WR�LJQRUH�WKH�SULQWHU�XQWLO�LW�UHFHLYHG�D�VLJQDO��,W�FRXOG�WKHQ�SURFHVV�D�SULQWHU�FKDUDFWHU�DQG�UHWXUQ�WR�LWV�PDLQ�MRE��7KHUH�ZRXOG�EH�UHODWLYHO\�OLWWOH�ZDVWHG�WLPH��7KLV�VHWXS�ZRXOG�ZRUN�ILQH�LI�WKH�SULQWHU�ZHUH�WKH�RQO\�,�2�GHYLFH�ZKLFK�HYHU�QHHGHG�DWWHQWLRQ��%XW�RI�FRXUVH�WKHUH�DUH�PDQ\�VXFK�GHYLFHV�

)LJXUH������$�&RPSXWHU�ZLWK�2QO\�2QH�,QWHUUXSW

7R�DOORZ�IRU�VHYHUDO�,�2�GHYLFHV��RQH�PLJKW�H[SHFW�WKHUH�WR�EH�VHYHUDO�LQWHUUXSW�SLQV�RQ�WKH�SURFHVVRU��7KH�[���DUFKLWHFWXUH�GRHV�QRW�GR�WKLQJV�WKLV�ZD\��,W�KDV�RQO\�RQH�JHQHUDO�SXUSRVH�LQWHUUXSW�SLQ��,W�GHOHJDWHV�WKH�DUELWUDWLRQ�RI�LQWHUUXSW�VLJQDOV�WR�DQ�H[WHUQDO�FLUFXLW�FDOOHG�WKH�LQWHUUXSW�FRQWUROOHU�FLUFXLW��DV�VKRZQ�LQ�)LJXUH�����7KLV�ILJXUH�DOVR�VKRZV�DQ�,54�EXV�IURP�WKH�,�2�V\VWHP�WR�WKH�LQWHUUXSW�FRQWUROOHU�FLUFXLW��$Q�,54�EXV�FRQVLVWV�RI�ZLUHV�IURP�YDULRXV�,�2�GHYLFHV��(DFK�GHYLFH�WKDW�QHHGV�LQWHUUXSW�VHUYLFH�LV�JLYHQ�RQH�RI�WKH�ZLUHV�RQ�WKLV�EXV��DVVXPLQJ�WKDW�WKHUH�DUH�HQRXJK�RI�WKHP�WR�JR�DURXQG��WKDW�LV��7KH�,54�EXV�ZLUHV�DUH�QXPEHUHG�,54���,54���HWF��,54�VWDQGV�IRU�LQWHUUXSW�UHTXHVW�OLQH��7KH�QXPEHUV�������HWF���HQFRXQWHUHG�LQ�WKLV�FRQWH[W�DUH�FDOOHG�,54�QXPEHUV�)LJXUH������$�&RPSXWHU�ZLWK�DQ�,QWHUUXSW�&RQWUROOHU

7KH�LQWHUUXSW�FRQWUROOHU�DOORZV�VHYHUDO�,�2�GHYLFHV�WR�KDYH�D�VLJQDO�SDWK�WR�WKH�&38�HYHQ�WKRXJK�WKH�[���KDV�RQO\�RQH�JHQHUDO�SXUSRVH�LQWHUUXSW�SLQ�������[���,QWHUUXSW�+DQGOLQJ:KHQ�DQ�[���SURFHVVRU�UHFHLYHV�DQ�LQWHUUXSW�VLJQDO��LW�ILUVW�FRPSOHWHV�WKH�LQVWUXFWLRQ�LW�LV�FXUUHQWO\�ZRUNLQJ�RQ��7KHQ��SURYLGHG�D�VSHFLDO�IODJ�KDV�QRW�EHHQ�FOHDUHG��LW�KDQGOHV�WKH�LQWHUUXSW�LQ�WKUHH�VWHSV�

6WHS����,W�UHDGV�WKH�QXPEHU�RI�WKH�LQWHUUXSW�UHVSRQVLEOH�IRU�WKH�LQWHUUXSW�VLJQDO�IURP�WKH�LQWHUUXSW�FRQWUROOHU�

Page 120: Linux assembly language programming

6WHS����,W�IHWFKHV�WKH�DGGUHVV�RI�WKH�FRUUHFW�LQWHUUXSW�VHUYLFH�URXWLQH�IURP�WKH�LQWHUUXSW�WDEOH�LQ�PHPRU\�6WHS����,W�WUDQVIHUV�FRQWURO�WR�WKH�LQWHUUXSW�VHUYLFH�URXWLQH�

2QFH�WKH�LQWHUUXSW�KDV�EHHQ�KDQGOHG��LW�UHVXPHV�SURFHVVLQJ�ZKHUH�LW�OHIW�RII��,QWHUUXSW�VHUYLFH�URXWLQHV�DUH�VRPHZKDW�OLNH�RUGLQDU\�VXEURXWLQHV��2QH�LPSRUWDQW�GLIIHUHQFH�LV�WKDW�WKH\�DUH�FDOOHG�RQ�VLJQDO�IURP�WKH�KDUGZDUH�7KH�,QWHUUXSW�$FNQRZOHGJH�%XV�&\FOH6LQFH�WKH�[���UHFHLYHV�LWV�JHQHUDO�LQWHUUXSWV�DOO�YLD�RQH�SLQ��LW�FDQQRW�WHOO�IURP�D�VLQJOH��NQRFN�RQ�WKH�GRRU��ZKLFK�,�2�GHYLFH�LV�VLJQDOLQJ�IRU�DWWHQWLRQ��$V�VKRZQ�LQ�)LJXUH������WKH�LQWHUUXSW�FRQWUROOHU�FLUFXLW�LV�FRQQHFWHG�WR�WKH�GDWD�EXV�MXVW�OLNH�PHPRU\�DQG�,�2��7R�JHW�WKH�UHTXLUHG�LGHQWLILFDWLRQ�IURP�WKH�LQWHUUXSW�FRQWUROOHU��WKH�SURFHVVRU�SHUIRUPV�D�UHDG��ZKLFK�LV�DQDORJRXV�WR�D�PHPRU\�RU�DQ�,�2�UHDG��,W�LV�FDOOHG�WKH�LQWHUUXSW�DFNQRZOHGJH�EXV�F\FOH��-XVW�DV�WKH�SURFHVVRU�XVHV�WKH�0�,2��SLQ�WR�LQGLFDWH�ZKHWKHU�LW�LV�FRPPDQGLQJ�D�PHPRU\�RU�DQ�,�2�UHDG��LW�XVHV�WKH�'�&��SLQ�WR�GLVWLQJXLVK�DQ�,�2�FRQWUROOHU�UHDG�IURP�WKH�PHPRU\�DQG�,�2�UHDG�F\FOHV��'�LV�IRU�GDWD�DQG�&�LV�IRU�FRGH��7KH�FRPSOHWH�OLVW�RI�WKH�EXV�F\FOHV�GHILQHG�E\�WKH�'�&���0�,2���DQG�:�5��SLQV�LV�JLYHQ�LQ�7DEOH�����:KHQ�WKH�SURFHVVRU�UHFHLYHV�DQ�LQWHUUXSW��LW�LQLWLDWHV�DQ�LQWHUUXSW�DFNQRZOHGJH�EXV�F\FOH��2QO\�WKH�LQWHUUXSW�FRQWUROOHU�PD\�UHVSRQG�WR�DQ�LQWHUUXSW�DFNQRZOHGJH�EXV�F\FOH��,W�UHVSRQGV�E\�GHSRVLWLQJ�D�RQH�E\WH�QXPEHU�RQ�WKH�ERWWRP�HLJKW�ELWV�RI�WKH�GDWD�EXV��7KLV�QXPEHU�LV�FDOOHG�WKH�LQWHUUXSW�QXPEHU��,W�LV�QRW�WKH�VDPH�DV�DQ�,54�QXPEHU��7KH�SURFHVVRU�UHDGV�WKH�LQWHUUXSW�QXPEHU�RII�WKH�GDWD�EXV�

,65�$GGUHVV�)HWFKLQJ7KH�SURFHVVRU�WKHQ�WDNHV�WKLV�QXPEHU�DQG�XVHV�LW�DV�DQ�LQGH[�LQWR�D�WDEOH�FDOOHG�WKH�,QWHUUXSW�'HVFULSWRU�7DEOH��7KLV�WDEOH�FRQWDLQV�WKH�DGGUHVVHV�RI�WKH�,QWHUUXSW�6HUYLFH�5RXWLQHV��6HH�)LJXUH������6LQFH�WKH�LQWHUUXSW�QXPEHU�LV�DQ�HLJKW�ELW�QXPEHU��WKH�YDOLG�LQWHUUXSW�QXPEHUV�UDQJH�IURP���WR�����

)LJXUH������,QWHUUXSW�'HVFULSWRU�7DEOH��E� �,'7�UHJLVWHU

7DEOH����������%XV�&\FOH�'HILQLWLRQ�3LQV'�&� 0�,2� :�5�,QWHUUXSW�$FNQRZOHGJH � � �+DOW��6SHFLDO�&\FOH � � �&RGH�5HDG � � �UHVHUYHG � � �,�2�5HDG � � �,�2�:ULWH � � �0HPRU\�5HDG � � �0HPRU\�:ULWH � � �

Page 121: Linux assembly language programming

,W�LV�WKH�UHVSRQVLELOLW\�RI�WKH�RSHUDWLQJ�V\VWHP�WR�FUHDWH�WKLV�WDEOH��,W�LV�DOVR�UHVSRQVLEOH�IRU�ORDGLQJ�LQWR�PHPRU\�WKH�LQWHUUXSW�VHUYLFH�URXWLQHV�ZKRVH�DGGUHVVHV�DUH�OLVWHG�LQ�WKLV�WDEOH��7KHVH�WZR�MREV�DUH�GRQH�DV�D�SDUW�RI�WKH�V\VWHP�ERRW��,I�WKH\�KDYH�QRW�EHHQ�GRQH��WKH�V\VWHP�ZLOO�EH�XQDEOH�WR�UHVSRQG�WR�LQWHUUXSWV��:KHQ�(GOLQDV�GLVSOD\V�D��3URFHVVRU�KDOWHG��PHVVDJH��LW�LV�XVXDOO\�EHFDXVH�LW�LV�WU\LQJ�WR�UHVSRQG�WR�DQ�LQWHUUXSW�DQG�QR�LQWHUUXSW�WDEOH�KDV�EHHQ�EXLOW�7KH�,QWHUUXSW�'HVFULSWRU�7DEOH7KH�[���KDV�D�GHGLFDWHG�UHJLVWHU�ZKLFK�VWRUHV�WKH�DGGUHVV�RI�WKH�LQWHUUXSW�GHVFULSWRU�WDEOH��RU�,'7��,W�LV�FDOOHG�WKH�,'7�UHJLVWHU��7KHUH�DUH�VSHFLDO�FRPPDQGV�IRU�DFFHVVLQJ�WKLV�UHJLVWHU��7KH�FRPPDQG����/,'7�PHPORDGV�WKH�UHJLVWHU��7KH�FRPPDQG����6,'7�PHPVWRUHV�WKH�FRQWHQWV�RI�WKLV�UHJLVWHU��7KH�/,'7�FRPPDQG�LV�XVHG�LQ�VHWWLQJ�XS�WKH�RSHUDWLQJ�V\VWHP�DW�ERRW�WLPH��2QFH�DQ�LQWHUUXSW�GHVFULSWRU�WDEOH�KDV�EHHQ�FUHDWHG��WKH�/,'7�FRPPDQG�FDQ�SRLQW�WKH�SURFHVVRU�WR�LW�,Q�UHVSRQGLQJ�WR�DQ�LQWHUUXSW��WKH�[���XVHV�WKH�IDFW�WKDW�HDFK�WDEOH�HQWU\�RFFXSLHV�HLJKW�E\WHV�RI�VSDFH��&RQVHTXHQWO\��LI�E�LV�WKH�DGGUHVV�VWRUHG�LQ�WKH�,'7�UHJLVWHU��WKHQ�LQ�UHVSRQVH�WR�WKH�LQWHUUXSW�QXPEHUHG�Q��WKH�[���IHWFKHV�WKH�HLJKW�E\WHV�VWDUWLQJ�DW�WKH�DGGUHVV�E�����î�Q��7KHVH�HLJKW�E\WH�HQWULHV�DUH�FDOOHG�JDWHV�,65�([HFXWLRQ2QFH�WKH�DGGUHVV�RI�WKH�LQWHUUXSW�VHUYLFH�URXWLQH�LV�REWDLQHG��LW�LV�WUHDWHG�DOPRVW�OLNH�D�&$//�LQVWUXFWLRQ�WUHDWV�DQ�DGGUHVV��%HIRUH�MXPSLQJ�WR�D�WDUJHW�DGGUHVV�D�&$//�LQVWUXFWLRQ�SXVKHV�WKH�QH[W�DGGUHVV�DIWHU�LWV�RZQ�DGGUHVV�RQWR�WKH�VWDFN��7KLV�PHDQV�WKDW�WKH�FDOOHG�URXWLQH�PD\�UHWXUQ�WR�WKH�LQVWUXFWLRQ�IROORZLQJ�WKH�&$//�E\�UHDGLQJ�LWV�DGGUHVV�RII�WKH�VWDFN��6LQFH�DQ�LQWHUUXSW�VHUYLFH�URXWLQH�DOVR�QHHGV�WR�H[HFXWH�D�UHWXUQ�WKH�DGGUHVV�RI�WKH�LQVWUXFWLRQ�ZKLFK�ZRXOG�RWKHUZLVH�KDYH�EHHQ�H[HFXWHG��KDG�WKH�LQWHUUXSW�QRW�DUULYHG��LV�SXVKHG�RQWR�WKH�VWDFN�EHIRUH�WKH�,65�LV�H[HFXWHG��%XW�LQ�WKH�FDVH�RI�DQ�LQWHUUXSW��WKH�IODJV�UHJLVWHU�LV�SXVKHG�DOVR��7KH�LQWHUUXSW�VHUYLFH�URXWLQH�GRHV�ZKDWHYHU�EXVLQHVV�LV�GHPDQGHG�E\�WKH�LQWHUUXSW��$Q�LQWHUUXSW�VHUYLFH�URXWLQH�VKRXOG�HQG�ZLWK�DQ�,5(7��LQVWUXFWLRQ�ZKLFK�LV�OLNH�D�5(7�LQVWUXFWLRQ�H[FHSW�WKDW�LW�SRSV�WKH�IODJV�UHJLVWHU�

Page 122: Linux assembly language programming

VKRXOG�HQG�ZLWK�DQ�,5(7��LQVWUXFWLRQ�ZKLFK�LV�OLNH�D�5(7�LQVWUXFWLRQ�H[FHSW�WKDW�LW�SRSV�WKH�IODJV�UHJLVWHU�7KH�IODJV�UHJLVWHU�LV�D����ELW�UHJLVWHU�QDPHG�()/$*6��ZKLFK�FRQWDLQV�DOO�WKH�IODJV��,W�LV�DQ�H[WHQVLRQ�RI�WKH����ELW�)/$*6�UHJLVWHU��7DEOH�����VKRZV�WKH�IODJV�LQ�WKH�()/$*6�UHJLVWHU�RQ�D�����7KH�UHDVRQ�IRU�WKH�[��V�VSHFLDO�IODJ�EHKDYLRU�ZKHQ�UHVSRQGLQJ�WR�LQWHUUXSWV�KDV�WR�GR�ZLWK�WKH�SUREOHP�RI�LQWHUUXSW�DUELWUDWLRQ�������,QWHUUXSWLQJ�DQ�,QWHUUXSW:KDW�KDSSHQV�ZKHQ�DQ�LQWHUUXSW�RFFXUV�ZKLOH�DQ�,65�LV�DOUHDG\�H[HFXWLQJ"�&DQ�RQH�GHYLFH�LQWHUUXSW�DQRWKHUV�,65"�,PDJLQH�WZR�GHYLFHV��HDFK�UHIXVLQJ�WR�EH�SUHHPSWHG�E\�WKH�RWKHUV�,65��7KH�SURFHVVRU�ZRXOG�JHW�ERXQFHG�EDFN�DQG�IRUWK�IURP�RQH�,65�WR�WKH�RWKHU�XQWLO�WKH�DFFXPXODWLRQ�RI�SHQGLQJ�UHWXUQ�DGGUHVVHV�RQ�WKH�VWDFN�RYHUIORZHG�DQG�FDXVHG�WKH�V\VWHP�WR�FUDVK�

7KH�,QWHUUXSW�(QDEOH�)ODJ7KH�GHVLJQ�RI�WKH������DOORZV�IRU�D�YHU\�VLPSOH�ZD\�WR�DYRLG�WKLV�VLWXDWLRQ��7KH�LGHD�ZRXOG�EH�WR�HQIRUFH�D�VWULFW��RQH�DW�D�WLPH��LQWHUUXSW�SROLF\��,W�ZRXOG�ZRUN�E\�DXWRPDWLFDOO\�EORFNLQJ�LQWHUUXSW�VLJQDOV�ZKLOH�DQ�,65�LV�UXQQLQJ��DQG�WKHQ�XQEORFNLQJ�WKHP�ZKHQ�LW�LV�ILQLVKHG��2QH�RI�WKH�IODJV�RQ�WKH�[���SURFHVVRU�LV�FDOOHG�WKH�LQWHUUXSW�HQDEOH�IODJ��:KHQ�WKLV�IODJ�LV�FOHDUHG��DOO�VLJQDOV�RQ�WKH�JHQHUDO�SXUSRVH�LQWHUUXSW�SLQ�DUH�LJQRUHG��:KHQ�DQ������HQWHUV�DQ�,65��WKLV�IODJ�LV�DXWRPDWLFDOO\�FOHDUHG��7KDW�LV�ZK\�WKH�SURFHVVRU�SXVKHV�WKH�IODJV�UHJLVWHU�RQWR�WKH�VWDFN�MXVW�EHIRUH�HQWHULQJ�DQ�,65��,W�DOORZV�WKH�LQWHUUXSW�HQDEOH�IODJ�WR�EH�UHVWRUHG�WR�LWV�RULJLQDO�VWDWH�ZKHQ�WKH�,65�LV�GRQH��:KHQ�WKH�LQWHUUXSW�HQDEOH�IODJ�LV�VHW��LQWHUUXSWV�DUH�KDQGOHG�QRUPDOO\�7KH�RQH�DW�D�WLPH�LQWHUUXSW�SROLF\�ZRXOG�PDNH�OLIH�HDV\�IRU�WKH�LQWHUUXSW�FRQWUROOHU��7KH�FRQWUROOHU�FRXOG�SURFHVV�DQ�LQFRPLQJ�LQWHUUXSW�E\�MXVW�SDVVLQJ�LW�DORQJ�WR�WKH�SURFHVVRU�XQWLO�LW�ZDV�DFNQRZOHGJHG��$V�VRRQ�DV�WKH�LQWHUUXSW�DFNQRZOHGJH�ZDV�UHFHLYHG��WKH�FRQWUROOHU�FRXOG�ZDVK�LWV�KDQGV�RI�WKDW�LQWHUUXSW�EHFDXVH�WKH�SURFHVVRU�FRXOG�EH�FRXQWHG�XSRQ�WR�ZRUN�RQ�LW�QRQVWRS�XQWLO�LW�ZDV�GRQH�$OWKRXJK�WKH�RQH�DW�D�WLPH�SROLF\�LV�YHU\�HDV\�WR�LPSOHPHQW�RQ�DQ�[���SURFHVVRU��VWDQGDUG�3&V�GR�QRW�XVH�LW��7KH�SUREOHP�ZLWK�LW�LV�WKDW�LQWHUUXSWV�WKDW�QHHG�D�TXLFN�UHVSRQVH�FDQ�EH�NHSW�ZDLWLQJ��,I�D�VHULDO�SRUW�LV�JHWWLQJ�UHDG\�WR�VWDUW�WUDVKLQJ�GDWD�EHFDXVH�LWV�EXIIHU�LV�IXOO��WKHQ�LW�VKRXOG�QRW�EH�PDGH�WR�ZDLW�ZKLOH�D�IORSS\�GULYH�ORRNV�IRU�D�JRRG�VHFWRU��$�SURFHVVRU�ZLWK�D�RQH�DW�D�WLPH�LQWHUUXSW�SROLF\�FDQ�EH�OLNH�D�KRXVHKROG�ZLWK�D�VLQJOH��RFFXSLHG�EDWKURRP��8QOLNH�WKH�VLWXDWLRQ�ZLWK�EDWKURRPV��KRZHYHU��LQWHUUXSWLQJ�DQ�,65�LV�QRW�QHFHVVDULO\�UXGH��,W�VRPHWLPHV�PDNHV�JRRG�VHQVH�WR�LQWHUUXSW�DQ�,65�1HVWHG�,QWHUUXSWV

7DEOH������()/$*6�5HJLVWHU%LWV /DEHO )XOO�1DPH�� $& $OLJQPHQW�&KHFN�� 90 9LUWXDO������0RGH�� 5) 5HVWDUW�)ODJ�� 17 1HVWHG�7DVN����� ,23/ ,�2�3ULYLOHJH�/HYHO�� 2) 2YHUIORZ�)ODJ�� ') 'LUHFWLRQ�)ODJ� ,) ,QWHUUXSW�(QDEOH�)ODJ� 7) 7UDS�)ODJ� 6) 6LJQ�)ODJ� =) =HUR�)ODJ� $) $6&,,�2YHUIORZ�)ODJ� 3) 3DULW\�)ODJ� &) &DUU\�)ODJ

Page 123: Linux assembly language programming

1HVWHG�,QWHUUXSWV0RVW�FRPSXWHUV�SULRULWL]H�LQWHUUXSWV�DQG�WKHQ�DOORZ�KLJKHU�SULRULW\�LQWHUUXSWV�WR�LQWHUUXSW�WKRVH�RI�ORZHU�SULRULW\��7KLV�NLQG�RI�SROLF\�LV�FDOOHG�D�QHVWHG�LQWHUUXSW�SROLF\��,PSOHPHQWLQJ�D�QHVWHG�LQWHUUXSW�SROLF\�RQ�DQ�[���UHTXLUHV�WKDW�ERWK�WKH�LQWHUUXSW�FRQWUROOHU�DQG�WKH�SURJUDPPHU�EH�JLYHQ�PRUH�UHVSRQVLELOLW\��2Q�WKH�[���WKH�SURJUDPPHU�KDV�FRQWURO�RYHU�WKH�LQWHUUXSW�HQDEOH�IODJ��7KH����67,FRPPDQG�VHWV�WKH�LQWHUUXSW�HQDEOH�IODJ��7KH���&/,FRPPDQG�FOHDUV�LW��%\�LQFOXGLQJ�DQ�67,�FRPPDQG�DW�WKH�EHJLQQLQJ�RI�DQ�,65��WKH�SURJUDPPHU�FDQ�RYHUULGH�WKH�GHIDXOW�RQH�DW�D�WLPH�SROLF\�DQG�PDNH�DQ�,65�LQWHUUXSWLEOH��,QWHUUXSWV�FDQQRW�EH�QHVWHG�LI�WKH\�H[HFXWH�ZLWK�WKH�LQWHUUXSW�HQDEOH�IODJ�FOHDUHG�7KHUH�LV�DOVR�PRUH�ZRUN�IRU�WKH�LQWHUUXSW�FRQWUROOHU��,I�WKH�[���H[HFXWHV�,65V�ZLWK�WKH�LQWHUUXSW�HQDEOH�IODJ�VHW��WKHQ�WKH�LQWHUUXSW�FRQWUROOHU�KDV�WR�DVVXPH�UHVSRQVLELOLW\�IRU�HQIRUFLQJ�WKH�SULRULW\�V\VWHP��6LQFH�WKH�SURFHVVRU�KDV�LWV�JXDUG�GRZQ��WKH�LQWHUUXSW�FRQWUROOHU�PXVW�QRW�OHW�HYHU\�LQFRPLQJ�LQWHUUXSW�SDVV�WKURXJK��2WKHUZLVH��DV�QRWHG�DERYH��WKH�,65V�FRXOG�SOD\�SLQJ�SRQJ�ZLWK�WKH�SURFHVVRU��,Q�SDUWLFXODU��WKH�FRQWUROOHU�LV�UHVSRQVLEOH�IRU�QRW�LQWHUUXSWLQJ�DQ�LQWHUUXSW�XQOHVV�WKH�,65�EHLQJ�LQWHUUXSWHG�KDV�D�ORZHU�SULRULW\�WKDQ�WKH�RQH�LW�LV�DOORZLQJ�WKURXJK��,I�WKH�,65�H[HFXWLQJ�KDV�HTXDO�RU�KLJKHU�SULRULW\��WKHQ�WKH�SHQGLQJ�LQWHUUXSW�PXVW�ZDLW�XQWLO�WKH�,65�LV�ILQLVKHG��%XW�LQ�RUGHU�IRU�WKH�FRQWUROOHU�WR�KROG�RII�WKH�SHQGLQJ�LQWHUUXSW�XQWLO�WKHQ��LW�QHHGV�WR�NQRZ�ZKHQ�WKH�,65�JHWV�GRQH��,W�QHHGV�D�VLJQDO��:LWKRXW�D�VLJQDO�LW�KDV�QR�ZD\�RI�NQRZLQJ��,I�LW�GRHVQW�NQRZ�ZKHWKHU�D�KLJK�SULRULW\�,65�LV�ILQLVKHG�H[HFXWLQJ��WKHQ�LW�FDQQRW�GHFLGH�ZKHWKHU�LW�LV�RND\�WR�LQWHUUXSW�WKH�&38�ZLWK�D�ORZ�SULRULW\�LQWHUUXSW�RU�QRW��6LQFH�WKH�LQWHUUXSW�FRQWUROOHU�KDV�LWV�RZQ�UHDG�F\FOH��RQH�PLJKW�H[SHFW�D�ZULWH�F\FOH�IRU�WKLV�SXUSRVH�7KH�(2,�&RPPDQG6LQFH�WKH�[���GRHV�QRW�KDYH�DQ�,�2�FRQWUROOHU�ZULWH�F\FOH��LW�IDOOV�WR�WKH�ORW�RI�WKH�SURJUDPPHU�WR�LQFOXGH�DQ��$OO�'RQH��PHVVDJH�WR�WKH�LQWHUUXSW�FRQWUROOHU�DW�WKH�HQG�RI�HDFK�,65��7KLV�PHVVDJH�LV�FDOOHG�DQ�(2,��RU�HQG�RI�LQWHUUXSW�FRPPDQG�6R�WKDW�WKH�LQWHUUXSW�FRQWUROOHU�FDQ�UHFHLYH�FRPPXQLFDWLRQV�IURP�WKH�SURFHVVRU��LW�KDV�DQ�,�2�DGGUHVV��7KH�SURJUDPPHU�FDQ�WKHQ�XVH�DQ�287�FRPPDQG�WR�LVVXH�WKH�(2,��7KH�,�2�DGGUHVV�LV�DOVR�XVHG�ZKHQ�WKH�LQWHUUXSW�FRQWUROOHU�JHWV�SURJUDPPHG��$V�QRWHG�DERYH��LW�QHHGV�WR�EH�SURJUDPPHG�VR�WKDW�LW�NQRZV�ZKDW�LQWHUUXSW�QXPEHUV�WR�UHSRUW�$V�D�GHYLFH�ZLWK�DQ�,�2�DGGUHVV��WKH�LQWHUUXSW�FRQWUROOHU�ORRNV�OLNH�MXVW�DQ\�RWKHU�,�2�GHYLFH��%XW�LW�LV�VSHFLDO�LQ�WKDW�LW�LV�WKH�RQO\�,�2�GHYLFH�WKDW�FDQ�VLJQDO�WKH�SURFHVVRU�GLUHFWO\��$OO�WKH�RWKHUV�PXVW�JR�WKURXJK�WKH�LQWHUUXSW�FRQWUROOHU�������7KH�10,�DQG�5(6(7�,QWHUUXSWV%HVLGHV�WKH�JHQHUDO�SXUSRVH�LQWHUUXSW�SLQ�RQ�WKH�[����WKHUH�DUH�WZR�RWKHU�LQWHUUXSW�SLQV��7KH\�DUH�WKH�10,�DQG�5(6(7�SLQV�$�VLJQDO�RQ�WKH�10,��RU�QRQPDVNDEOH�LQWHUUXSW�SLQ��LV�QRW�EORFNHG�E\�FOHDULQJ�WKH�LQWHUUXSW�HQDEOH�IODJ��,W�GRHV�QRW�WULJJHU�DQ�LQWHUUXSW�DFNQRZOHGJH�EXV�F\FOH��,W�LV�VHUYLFHG�E\�LQWHUUXSW�VHUYLFH�URXWLQH�QXPEHU����,W�LV�XVHG�WR�VLJQDO�SDULW\�HUURUV�LQ�PHPRU\�RU�SRZHU�VXSSO\�SUREOHPV�7KH�5(6(7�SLQ�LV�LQWHQGHG�IRU�XVH�LQ�VLWXDWLRQV�ZKHUH�WKHUH�PD\�EH�QR�LQWHUUXSW�GHVFULSWRU�WDEOH�LQ�PHPRU\��)RU�H[DPSOH��ZKHQ�WKH�FRPSXWHU�LV�EHLQJ�WXUQHG�RQ��&RQVHTXHQWO\��WKHUH�LV�QR�SRLQW�LQ�VWRULQJ�DQ�DGGUHVV�IRU�LW�LQ�WKH�LQWHUUXSW�WDEOH��,QVWHDG�WKH�DGGUHVV�LV�EXLOW�LQWR�WKH�SURFHVVRU��7KDW�DGGUHVV�LV�)))))))�+��RU�))))�+�RQ�WKH��������,W�LV�HDVLO\�UHPHPEHUHG�DV�±���LQ�WZRV�FRPSOHPHQW��7KH�UHDG�RQO\�PHPRU\�DW�WKLV�DGGUHVV�PXVW�FRQWDLQ�D�MXPS�LQVWUXFWLRQ�ZKRVH�WDUJHW�LV�WKH�3267��RU�3RZHU�2Q�6HOI�7HVW��SURJUDP��7KLV�

Page 124: Linux assembly language programming

DGGUHVV�PXVW�FRQWDLQ�D�MXPS�LQVWUXFWLRQ�ZKRVH�WDUJHW�LV�WKH�3267��RU�3RZHU�2Q�6HOI�7HVW��SURJUDP��7KLV�SURJUDP�LV�ORFDWHG�RQ�WKH�520�FKLS�FDOOHG�WKH�%,26��5HDG�RQO\�%,26�FKLSV�DUH�VRPHWLPHV�PDGH�E\�WKH�FRPSXWHU�PDQXIDFWXUHU��EXW�DUH�PRUH�RIWHQ�ERXJKW�IURP�D�WKLUG�SDUW\�VXFK�DV�$PHULFDQ�0HJDWUHQGV�RU�3KRHQL[��7KH�3267�FDQ�EH�WKRXJKW�RI�DV�WKH�,65�IRU�WKH�5(6(7�LQWHUUXSW��7KH�ILQDO�DFW�RI�WKH�3267�LV�WR�LQLWLDWH�WKH�ERRW�VHTXHQFH��7KH�5(6(7�SLQ�LV�FRQQHFWHG�WR�WKH�SRZHU�VXSSO\�DQG�RIWHQ�WR�D�EXWWRQ�RQ�WKH�IURQW�RI�WKH�FRPSXWHU�����,6$�$UFKLWHFWXUH7KH�,6$�DUFKLWHFWXUH�LV�HVVHQWLDOO\�WKH�DUFKLWHFWXUH�RI�WKH�,%0�$7�FRPSXWHU��7KH�$7�LV�DQ�������EDVHG�FRPSXWHU�LQWURGXFHG�LQ�������7KH�QDPH�,6$��RU�,QGXVWU\�6WDQGDUG�$UFKLWHFWXUH��DURVH�LQ�UHDFWLRQ�WR�WKH�LQWURGXFWLRQ�E\�,%0�RI�D�QHZ�DUFKLWHFWXUH�FDOOHG�0LFUR&KDQQHO�LQ�WKHLU�36���FRPSXWHUV��0LFUR&KDQQHO�ZDV�LQWHQGHG�WR�UHSODFH�WKH�YHU\�SRSXODU�DUFKLWHFWXUH�RI�WKH�$7��0DQ\�WKLUG�SDUWLHV�PDQXIDFWXUHG�FDUGV�ZKLFK�FRXOG�EH�LQVHUWHG�LQWR�WKH�H[SDQVLRQ�VORWV�RI�DQ�$7��RU�DQ�$7�FORQH��7KH�UHDFWLRQ�RI�WKHVH�WKLUG�SDUWLHV�WR�,%0V�QHZ�DUFKLWHFWXUH��ZKLFK�ZRXOG�KDYH�PDGH�DOO�WKHLU�$7�FDUGV�REVROHWH��ZDV�WR�EDQG�WRJHWKHU�DQG�UHQDPH�WKH�$7�DUFKLWHFWXUH�WKH�,QGXVWU\�6WDQGDUG�$UFKLWHFWXUH��$V�D�UHVXOW��WKH�OLIHVSDQ�RI�WKH�$7�DUFKLWHFWXUH�ZDV�JLYHQ�D�FRQVLGHUDEOH�H[WHQVLRQ��0DQ\�LPSRUWDQW�DUFKLWHFWXUDO�IHDWXUHV�ZHUH�VWDQGDUGL]HG�LQ�WKH�,6$��LQFOXGLQJ

z WKH�LQWHUUXSW�FRQWUROOHU�FLUFXLWz PDQ\�,54�DVVLJQPHQWVz PDQ\�,�2�SRUW�DVVLJQPHQWVz WKH�VLJQDOV�DQG�FRQQHFWLRQV�PDGH�DYDLODEOH�WR�H[SDQVLRQ�FDUGVz WKH�SK\VLFDO�FRQQHFWRUV�XVHG�RQ�H[SDQVLRQ�FDUGV

0DQ\�RI�WKHVH�IHDWXUHV�KDYH�EHHQ�UHWDLQHG�LQ�DOO�VXEVHTXHQW�[���FRPSXWHUV�������7KH������,QWHUUXSW�&RQWUROOHU7KH�,6$�LQWHUUXSW�FRQWUROOHU�FLUFXLW�LV�EDVHG�RQ�WKH�,QWHO������3,&��RU�SURJUDPPDEOH�LQWHUUXSW�FRQWUROOHU�7KH������LV�WKH�LQWHUUXSW�FRQWUROOHU�FLUFXLW�XVHG�LQ�WKH�RULJLQDO�,%0�3&������V�PD\�EH�XVHG�HLWKHU�VLQJO\�DV�LQ�WKH�3&�RU�FRPELQHG�LQWR�D�WZR�WLHUHG�VWUXFWXUH�ZLWK�RQH�PDVWHU�DQG�DQ\ZKHUH�IURP�RQH�WR�HLJKW�VODYHV��DV�VKRZQ�LQ�)LJXUH������,Q�WKH�RULJLQDO�3&�WKHUH�ZDV�D�VLQJOH�������$�RQH�PDVWHU�RQH�VODYH�FRQILJXUDWLRQ�EHFDPH�IL[HG�DV�D�SDUW�RI�WKH�,6$�DUFKLWHFWXUH��7KH�,6$�LQWHUUXSW�FRQWUROOHU�FLUFXLW�LV�VKRZQ�LQ�)LJXUH������,Q�WKLV�FRQILJXUDWLRQ�WKHUH�DUH����,54�OLQHV�ZKLFK�IHHG�LQWR�WKH�WZR������FLUFXLWV�

)LJXUH������*HQHUDO������&RQILJXUDWLRQ

Page 125: Linux assembly language programming

)LJXUH������,6$�,QWHUUXSW�&RQWUROOHU�&LUFXLW

,I�WKH�LQWHUUXSW�QXPEHUV�UHSRUWHG�E\�WKH������ZHUH�EXLOW�LQ��WKHQ�WKH�GLIIHUHQW�FRQWUROOHUV�LQ�WKLV�FRQILJXUDWLRQ��VKRZQ�LQ�)LJXUH������ZRXOG�DOO�UHSRUW�WKH�VDPH�VHW�RI�QXPEHUV��7KLV�ZRXOG�FOHDUO\�QRW�EH�VDWLVIDFWRU\��7KH�UHDVRQ�IRU�KDYLQJ�D�FRQWUROOHU�FLUFXLW�LV�VR�WKDW�GLIIHUHQW�ZLUHV�RQ�WKH�,54�EXV�FDQ�JHQHUDWH�GLIIHUHQW�LQWHUUXSW�QXPEHUV��&RQVHTXHQWO\��GLIIHUHQW�����V�QHHG�WR�UHSRUW�GLIIHUHQW�LQWHUUXSW�QXPEHUV��7KH�RQO\�UHDVRQDEO\�HDV\�ZD\�WR�GR�WKLV�ZDV�WR�PDNH�WKH������SURJUDPPDEOH��$Q������FDQ�EH�SURJUDPPHG�WR�UHSRUW�DQ\�HLJKW�FRQVHFXWLYH�QXPEHUV�VWDUWLQJ�DW�DQ\�PXOWLSOH�RI���OHVV�WKDQ������3URJUDPPLQJ�RI�WKH������LV�GRQH�DW�ERRW�WLPH�XVLQJ�287�FRPPDQGV��7KH�(2,�FRPPDQG�LQ������ODQJXDJH�LV���+��,Q�WKH�,6$�DUFKLWHFWXUH�WKH�PDVWHU������LV�DVVLJQHG�WKH�GDWD�SRUW���+��&RXOG�WKLV�EH�JHHN�KXPRU�DW�ZRUN"��DV�ZHOO�DV���+��7KH�VODYH�LV�DVVLJQHG�WKH�SRUWV��$�+�DQG��$�+�$Q�(2,�FRPPDQG�LQ�UHVSRQVH�WR�DQ�LQWHUUXSW�IURP�WKH�VODYH�FRQWUROOHU�LV�VHQW�WR�ERWK�$�+�DQG���+�������,54V0RVW�RI�WKHVH�,54�OLQHV�KDYH�VSHFLILHG�SXUSRVHV�LQ�WKH�,6$�DUFKLWHFWXUH��$OO�RI�WKHP�KDYH�IL[HG�LQWHUUXSW�QXPEHUV��:KLOH�RQH�LQWHUUXSW�LV�EHLQJ�VHUYLFHG�RU�ZKLOH�WKH�LQWHUUXSW�IODJ�LV�FOHDUHG��XQVHUYLFHG�LQWHUUXSWV�PD\�SLOH�XS��7KH�LQWHUUXSW�FRQWUROOHU�FLUFXLW�SULRULWL]HV�WKHVH�LQWHUUXSWV�LQ�WKH�RUGHU�,54���,54���,54��«��,54����,54���,54���«��,54���,54��KDV�WKH�KLJKHVW�SULRULW\��,54��KDV�WKH�ORZHVW��7KH�IDFW�WKDW�WKHUH�DUH�RQO\�D�IHZ�,54�OLQHV�DYDLODEOH�KDV�OHDG�WR�,54�FRQIOLFWV��,54�VKDULQJ��DV�ZHOO�DV�VZLWFKHV�RQ�FDUGV�ZKLFK�

Page 126: Linux assembly language programming

RQO\�D�IHZ�,54�OLQHV�DYDLODEOH�KDV�OHDG�WR�,54�FRQIOLFWV��,54�VKDULQJ��DV�ZHOO�DV�VZLWFKHV�RQ�FDUGV�ZKLFK�DOORZ�DQ�,54�OLQH�WR�EH�FKDQJHG�/LQX[�PDLQWDLQV�D�FRXQW�RI�WKH�LQWHUUXSW�UHTXHVWV�ZKLFK�FRPH�LQ�RQ�WKH�,54�OLQHV��7R�VHH�WKLV�FRXQW��\RX�PD\�XVH�WKH�FRPPDQG����OLQX[ER[��FDW��SURF�LQWHUUXSWV7KH�RXWSXW�RI�WKLV�FRPPDQG�VKRXOG�EH�FRPSDUHG�ZLWK�7DEOH���������,QWHUQDO�DQG�6RIWZDUH�,QWHUUXSWV,QWHUUXSWV�ZKLFK�GR�QRW�DULVH�DV�WKH�UHVXOW�RI�DQ�H[WHUQDO�VLJQDO�RQ�DQ�LQWHUUXSW�SLQ�DOVR�H[LVW�������([FHSWLRQV6XSSRVH�WKDW�WKH�IHWFK�H[HFXWH�F\FOH�HQFRXQWHUV�WKH�PDFKLQH�FRGH�)�)+��7KLV�PDFKLQH�FRGH�LV�QRW�GHILQHG��6XSSRVH�D�029�LQVWUXFWLRQ�DWWHPSWV�WR�DFFHVV�D�PHPRU\�DGGUHVV�WR�ZKLFK�WKH�RSHUDWLQJ�V\VWHP�KDV�QRW�JLYHQ�SHUPLVVLRQ��6XSSRVH�WKDW�WKH�',9�FRPPDQG�SURGXFHV�D�TXRWLHQW�ZKLFK�LV�WRR�ELJ�IRU�WKH�GHVWLQDWLRQ�UHJLVWHU��6XSSRVH�WKDW�WKH�VWDFN�RYHUIORZV��7KHVH�DUH�VLWXDWLRQV�ZKHUH�WKH�GHVLJQHUV�RI�WKH�[���SUHIHUUHG�WR�GHOHJDWH�WR�WKH�RSHUDWLQJ�V\VWHP�WKH�GHFLVLRQ�DV�WR�ZKDW�DFWLRQ�VKRXOG�EH�WDNHQ��,Q�IDFW��WKH\�IRUFHG�WKH�RSHUDWLQJ�V\VWHP�WR�WDNH�RYHU�DW�WKHVH�SRLQWV�E\�DVVLJQLQJ�LQWHUUXSW�QXPEHUV�WR�WKHVH�H[FHSWLRQV��7KHVH�LQWHUUXSW�QXPEHUV�DUH�EXLOW�LQWR�WKH�[���SURFHVVRUV��([FHSWLRQV�GR�QRW�XVH�LQWHUUXSW�DFNQRZOHGJH�EXV�F\FOHV��%XW�WKH\�PXVW�EH�KDQGOHG�E\�QXPEHUHG�,65V��MXVW�DV�H[WHUQDO�LQWHUUXSWV�DUH�

7DEOH�����OLVWV�WKH�H[FHSWLRQV�ZKLFK�DUH�EXLOW�LQWR�WKH�[���SURFHVVRUV��1RWH�WKDW�VRPH�RI�WKHVH�LQWHUUXSW�QXPEHUV�DUH�WKH�VDPH�DV�WKH�LQWHUUXSW�QXPEHUV�UHSRUWHG�E\�DQ�,6$�LQWHUUXSW�FRQWUROOHU��:KHQ�LQWHUUXSWV�DUH�VKDUHG�OLNH�WKLV��WKH�,65�LV�VWXFN�ZLWK�WKH�UHVSRQVLELOLW\�IRU�GLVWLQJXLVKLQJ�ZKLFK�VLWXDWLRQ�KDV�FDXVHG�WKH�LQWHUUXSW�������6RIWZDUH�,QWHUUXSWV,Q�RUGHU�WR�PDNH�WKH�LQWHUUXSW�VHUYLFH�URXWLQHV�DFFHVVLEOH�WR�SURJUDPPHUV��WKH�,17�LQVWUXFWLRQ�ZDV�DGGHG�WR�WKH�LQVWUXFWLRQ�VHW��7KH�V\QWD[�LV�VLPSO\����,17�LPP

7DEOH������,6$�,QWHUUXSW�5RXWLQJV,54 $OORFDWLRQ ,QWHUUXSW�1XPEHU,54� 6\VWHP�7LPHU ��+,54� .H\ERDUG ��+,54� 6HULDO�3RUW��� �%+,54� 6HULDO�3RUW��� �&+,54� 3DUDOOHO�3RUW��� �'+,54� )ORSS\�&RQWUROOHU �(+,54� 3DUDOOHO�3RUW��� �)+,54� 5HDO�7LPH�&ORFN ��+,54� DYDLODEOH ��+,54�� DYDLODEOH ��+,54��� DYDLODEOH ��+,54��� 0RXVH ��+,54�� ���(5525�OLQH ��+,54��� +DUG�'ULYH�&RQWUROOHU ��+,54�� DYDLODEOH ��+

Page 127: Linux assembly language programming

ZKHUH�WKH�LPPHGLDWH�YDOXH�LV�DQ\�RQH�E\WH�QXPEHU��7KLV�LQVWUXFWLRQ�FDQ�EH�XVHG�WR�H[HFXWH�DQ\�LQWHUUXSW�VHUYLFH�URXWLQH��,W�LV�VLPLODU�WR�D�&$//�LQVWUXFWLRQ�

������)DXOWV�DQG�7UDSV:KHQ�WKH�VHUYLFH�URXWLQH�IRU�DQ�H[WHUQDO�LQWHUUXSW�RU�D�VRIWZDUH�LQWHUUXSW�ILQLVKHV��FRQWURO�LV�WUDQVIHUUHG�WR�WKH�QH[W�LQVWUXFWLRQ�IROORZLQJ�WKH�LQWHUUXSW�MXVW�DV�LW�ZRXOG�EH�IROORZLQJ�WKH�FRPSOHWLRQ�RI�D�VXEURXWLQH�FDOO��7KLV�LV�XVXDOO\�QRW�WKH�FDVH�ZLWK�KDUGZDUH�H[FHSWLRQV��:KHQ�WKH�VHUYLFH�URXWLQHV�IRU�PRVW�H[FHSWLRQV�DUH�FRPSOHWHG��WKH�LQVWUXFWLRQ�JLYLQJ�ULVH�WR�WKHP�LV�UHWULHG��+DUGZDUH�H[FHSWLRQV�IRU�ZKLFK�WKLV�LV�WUXH�DUH�FDOOHG�IDXOWV��$�JRRG�H[DPSOH�RI�D�IDXOW�LV�D�SDJH�IDXOW��$�SDJH�IDXOW�RFFXUV�ZKHQ�D�IDLOXUH�WR�DFFHVV�PHPRU\�KDV�RFFXUUHG�EHFDXVH�LW�KDV�EHHQ�SDJHG�RXW�WR�WKH�GLVN��7KH�LQWHUUXSW�VHUYLFH�URXWLQH�SDJHV�LW�EDFN�LQ�DJDLQ��DQG�WKHQ�WKH�RULJLQDO�LQVWUXFWLRQ�LV�UHWULHG�$�IHZ�KDUGZDUH�H[FHSWLRQV�DUH�OLNH�RUGLQDU\�LQWHUUXSWV��DQG�SDVV�FRQWURO�WR�WKH�QH[W�LQVWUXFWLRQ�ZKHQ�WKH\�ILQLVK��7KHVH�DUH�FDOOHG�WUDSV��$Q�H[DPSOH�RI�D�WUDS�LV�GLYLVLRQ�RYHUIORZ�RQ�DQ����������6\VWHP�&DOOV2QH�RI�WKH�EDVLF�IXQFWLRQV�RI�DQ�RSHUDWLQJ�V\VWHP�LV�WR�SURYLGH�DFFHVV�WR�KDUGZDUH�GHYLFHV��DV�LOOXVWUDWHG�LQ�)LJXUH������,Q�8QL[�DOO�DFFHVV�WR�KDUGZDUH�GHYLFHV�LV�SURYLGHG�E\�ZD\�RI�ZKDW�DUH�FDOOHG�V\VWHP�FDOOV��8VHUV�RUGLQDULO\�JHW�DFFHVV�E\�XVLQJ�HLWKHU�VWDQGDUG�8QL[�FRPPDQGV��VXFK�DV�FDW��RU�OV��RU�E\�XVLQJ�&�OLEUDU\�IXQFWLRQV��VXFK�DV�SULQWI����RU�VFDQI����%XW�ERWK�8QL[�FRPPDQGV�DQG�&�OLEUDU\�IXQFWLRQV�UHO\�RQ�V\VWHP�FDOOV�WR�JDLQ�KDUGZDUH�DFFHVV��6HH�)LJXUH������UHDG���DQG�ZULWH���DUH�H[DPSOHV�RI�V\VWHP�FDOOV��7KH�ZULWH���V\VWHP�FDOO�WDNHV�WKUHH�SDUDPHWHUV��D�ILOH�WR�EH�ZULWWHQ�WR��D�PHPRU\�EXIIHU�WR�EH�ZULWWHQ�IURP��DQG�WKH�QXPEHU�RI�E\WHV�WR�EH�ZULWWHQ��,W�DSSHDUV�WR�EH�DQ�RUGLQDU\�&�IXQFWLRQ�DQG�FDQ�EH�XVHG�DV�WKRXJK�LW�ZHUH��3URJUDP�����LOOXVWUDWHV�D��+HOOR�ZRUOG��SURJUDP�XVLQJ�WKH�ZULWH���V\VWHP�FDOO�

)LJXUH������6\VWHP�&DOOV�DUH�-XVW�6RIWZDUH�,QWHUUXSWV

7DEOH������%XLOW�LQ�+DUGZDUH�([FHSWLRQV$OORFDWLRQ ,QWHUUXSW�1XPEHU'LYLVLRQ�2YHUIORZ ��+6LQJOH�6WHS ��+10, ��+%UHDNSRLQW ��+,QWHUUXSW�RQ�2YHUIORZ ��+%281'�RXW�RI�UDQJH� ��+,QYDOLG�0DFKLQH�&RGH ��+���1RW�$YDLODEOH ��+'RXEOH�)DXOW ��+���6HJPHQW�2YHUUXQ ��+,QYDOLG�7DVN�6WDWH�6HJPHQW �$+6HJPHQW�1RW�3UHVHQW �%+6WDFN�2YHUIORZ �&+*HQHUDO�3URWHFWLRQ�(UURU �'+3DJH�)DXOW �(+UHVHUYHG �)+���(UURU ��+

7DEOH������$Q�,QWHUUXSW�LV�/LNH�D�6XEURXWLQH2UGLQDU\�6XEURXWLQH ,QWHUUXSW�6HUYLFH�5RXWLQH,QYRNH &$// ,177HUPLQDWH 5(7 ,5(7

Page 128: Linux assembly language programming

3URJUDP�����PDLQ���̂���FKDU�V>@� ��+HOOR�ZRUOG�?Q������ZULWH���V�����`%XW�GHVSLWH�DSSHDUDQFHV��WKH�ZULWH���V\VWHP�FDOO�LV�QRW�DQ�RUGLQDU\�&�IXQFWLRQ��/LNH�DOO�V\VWHP�FDOOV�LQ�/LQX[��LW�XVHV�,17���+�WR�WUDQVIHU�FRQWURO�WR�WKH�NHUQHO��(DFK�V\VWHP�FDOO�LQ�/LQX[�KDV�D�QXPEHU��$�OLVW�RI�WKHVH�FDOOV�DQG�WKHLU�QXPEHUV�FDQ�EH�IRXQG�LQ��XVU�VUF�OLQX[�DUFK�L�����XQLVWG�K��,Q�/LQX[������ZULWH���LV�V\VWHP�FDOO�QXPEHU����7R�FDUU\�RXW�WKLV�V\VWHP�FDOO��WKH�QXPEHU���PXVW�EH�VWRUHG�LQ�WKH�($;�UHJLVWHU�EHIRUH�,17���+�LV�FDOOHG�,Q�'26��PDQ\�V\VWHP�FDOOV�DUH�PDGH�XVLQJ�,17���+��7KH�QXPEHU�VWRUHG�LQ�WKH�$+�UHJLVWHU�GHWHUPLQHV�ZKLFK�V\VWHP�FDOO�LV�EHLQJ�PDGH��$�OLVW�RI�PRVW�RI�WKHVH�FDOOV�FDQ�EH�IRXQG�LQ�VWDQGDUG�ERRNV�RQ�'26��7KH�ERRN�8QGRFXPHQWHG�'26�E\�$QGUHZ�6FKXOPDQ��HW��DO���DWWHPSWV�WR�OLVW�DOO�RI�WKHP��7KH�H[LVWHQFH�RI�XQGRFXPHQWHG�'26�V\VWHP�FDOOV�JDYH�ULVH�WR�FRQVLGHUDEOH�ELWWHUQHVV�RQ�WKH�SDUW�RI�GHYHORSHUV�ZKR�FRXOG�KDYH�SXW�VXFK�IXQFWLRQV�WR�JRRG�XVH�KDG�WKH\�EXW�NQRZQ�RI�WKHP��1HHGOHVV�WR�VD\��SURJUDPPHUV�DW�0LFURVRIW�GLG�QRW�HQFRXQWHU�WKLV�REVWDFOH�7R�XVH�D�V\VWHP�FDOO�IURP�DVVHPEOHU��LW�LV�QHFHVVDU\�WR�NQRZ�WKH�SDUDPHWHU�SDVVLQJ�FRQYHQWLRQV��7KHVH�FRQYHQWLRQV�DUH�HVWDEOLVKHG�E\�PDFURV�DOVR�ORFDWHG�LQ�XQLVWG�K��$FFRUGLQJ�WR�WKH�FRQYHQWLRQV�XVHG�LQ�/LQX[������WKH�SDUDPHWHUV�DUH�VWRUHG�LQ�OHIW�WR�ULJKW�RUGHU�LQ�WKH�UHJLVWHUV�(%;��(&;��(';��(',��DQG�(6,�UHVSHFWLYHO\��XVLQJ�DV�PDQ\�RI�WKHVH�UHJLVWHUV�DV�DUH�QHHGHG�WR�VWRUH�WKH�SDUDPHWHUV�7KH�V\VWHP�FDOO��ZULWH�����V�������IRU�H[DPSOH��FDQ�EH�FRPSOHWHG�LI����LV�VWRUHG�LQ�(%;��WKH�VWULQJ�SRLQWHU�LV�VWRUHG�LQ�(&;��DQG���LV�VWRUHG�LQ�(';��3URJUDP�����LOOXVWUDWHV�WKLV��,Q�GHEXJJLQJ�V\VWHP�FDOOV��WKH�VWUDFH�XWLOLW\�LV�LQYDOXDEOH��)RU�H[DPSOH��DIWHU�JHWWLQJ�DQ�D�RXW�IURP�JFF�IURP�IRU�3URJUDP�����ZH�FRXOG�XVH����OLQX[ER[��VWUDFH�D�RXWWR�FKHFN�RQ�WKLQJV�LQ�WKH�HYHQW�RI�GLIILFXOW\�3URJUDP��������������7KLV�SURJUDP�PDNHV�D�V\VWHP�FDOO����������������JOREDO�PDLQPDLQ��������029�($;���������:ULWH�LV�V\VWHP�FDOO������������029�(%;�����������LV�QXPEHU�IRU�VWDQGDUG�RXWSXW��������029�(&;��$%&����$%&�LV�WKH�VWULQJ�SRLQWHU��������029�(';���������:ULWLQJ����E\WHV��������,17���+���������6\VWHP�FDOO�LQWHUUXSW��������5(7$%&����GE��+HOOR�ZRUOG����$+��

Page 129: Linux assembly language programming

$%&����GE��+HOOR�ZRUOG����$+��7KH�UHVRXUFHV�RIIHUHG�E\�/LQX[�WR�WKH�SURJUDPPHU�DUH�HVVHQWLDOO\�GHILQHG�E\�WKH�FDSDELOLWLHV�RI�WKH�V\VWHP�FDOOV��2QH�UHDVRQ�IRU�WKH�VXFFHVV�RI�/LQX[�HDUO\�RQ�ZDV�WKDW�LW�ZDV�GHVLJQHG�WR�DGKHUH�WR�WKH�326,;�VWDQGDUG�IRU�WKH�SURJUDPPHUV�V\VWHP�LQWHUIDFH��/LQX[�ZDV�RQH�RI�WKH�ILUVW�RSHUDWLQJ�V\VWHPV�WR�DFKLHYH�326,;�FRPSOLDQFH��:LQGRZV�17�LV�DOVR�326,;�FRPSOLDQW�����3ULYLOHJH�/HYHOV:KHQ�D�V\VWHP�FDOO�WDNHV�RYHU�WKH�SURFHVVRU��LW�GRHV�VR�EHFDXVH�D�SURJUDP�QHHGV�WKH�NHUQHO�WR�GR�VRPHWKLQJ�ZKLFK�LW�LV�XQDEOH�WR�GR�IRU�LWVHOI��OLNH�UHDG�D�ILOH�RU�ZULWH�WR�WKH�PRQLWRU��7KH�SURJUDP�LV�LQFDSDEOH�RI�WKHVH�WKLQJV�EHFDXVH�WKH�SURFHVVRU�LWVHOI�LV�EORFNHG�IURP�GRLQJ�WKHP�ZKLOH�XVHU�FRGH�LV�H[HFXWLQJ��7KH�GLIIHUHQFH�EHWZHHQ�NHUQHO�FRGH�DQG�XVHU�FRGH�LV�D�GLIIHUHQFH�LQ�SULYLOHJH�OHYHO��6LQFH�WKH������D�SURWHFWLRQ�V\VWHP�EDVHG�RQ�D�V\VWHP�RI�IRXU�GLIIHUHQW�SULYLOHJH�OHYHOV�KDV�EHHQ�LQ�SODFH��7KH�IRXU�OHYHOV�DUH

z ��6\VWHP�OHYHO�SULYLOHJH��XVHG�E\�WKH�/LQX[�NHUQHO�z ��8QXVHG�LQ�/LQX[�z ��8QXVHG�LQ�/LQX[�z ��8VHU�OHYHO�SULYLOHJH��XVHG�E\�/LQX[�XVHU�SURJUDPV�

7KH�SULYLOHJH�OHYHO�RI�WKH�FXUUHQWO\�H[HFXWLQJ�FRGH�LV�FDOOHG�WKH�FXUUHQW�SULYLOHJH�OHYHO��,W�LV�VWRUHG�LQ�D�WZR�ELW�UHJLVWHU�FDOOHG�WKH�&3/�UHJLVWHU�������7KH�&3/�5HJLVWHU7KH�&3/�UHJLVWHU�LV�RQH�RI�WKH�PRVW�LPSRUWDQW�UHJLVWHUV�RQ�WKH�PDFKLQH��/HYHO���KDV�WKH�PRVW�SULYLOHJH��&KDQJLQJ�WKH�&3/�YDOXH�WR���LV�OLNH�GLVHQJDJLQJ�WKH�VDIHW\�FDWFK�RQ�WKH�SURFHVVRU��,W�WDNHV�SODFH�HYHU\�WLPH�D�V\VWHP�FDOO�LV�H[HFXWHG��,W�LV�D�PRUH�GUDVWLF�VWHS�WKDQ�EHFRPLQJ�VXSHUXVHU��3URP�WKH�VWDQGSRLQW�RI�&3/�EDVHG�SULYLOHJH��WKH�VXSHUXVHU�LV�MXVW�DQRWKHU�XVHU��%XW�ZKHQ�WKH�&3/�LV����WKH�SURFHVVRU�FDQ�GR�WKLQJV�WKDW�QR�XVHU�FDQ�GR��)RU�H[DPSOH��LW�FDQ�PRGLI\�WKH�SDJH�WDEOHV�RU�FKDQJH�WKH�LQWHUUXSW�GHVFULSWRU�WDEOH�2I�FRXUVH��JLYHQ�WKDW�URRW�LV�WKH�RZQHU�RI�WKH�GLVN�LPDJH�RI�WKH�NHUQHO��WKH�ILOH�YPOLQX]�LQ�WKH�URRW�GLUHFWRU\��URRW�FDQ�GR�ZKDWHYHU�LW�ZDQWV�LQGLUHFWO\�E\�FKDQJLQJ�WKLV�ILOH��URRW�FDQ�DOVR�PRGLI\�NHUQHO�FRGH�ZKLFK�LV�VWRUHG�LQ�PRGXOHV��%XW�WKHVH�FKDQJHV�ZLOO�RQO\�WDNH�HIIHFW�WKH�QH[W�WLPH�WKH�V\VWHP�LV�ERRWHG�RU�D�NHUQHO�PRGXOH�LV�ORDGHG�������3ULYLOHJHG�,QVWUXFWLRQV7KH�/,'7�LQVWUXFWLRQ�FKDQJHV�WKH�DGGUHVV�VWRUHG�LQ�WKH�,'7�UHJLVWHU��7KLV�LV�WKH�DGGUHVV�WKDW�WKH�SURFHVVRU�JRHV�WR�ZKHQ�LW�UHFHLYHV�DQ�LQWHUUXSW��7KLV�LQVWUXFWLRQ�KDV�WKH�HIIHFW�RI�FKDQJLQJ�IURP�RQH�LQWHUUXSW�WDEOH�WR�DQRWKHU�RQH��,I�XVHG�E\�D�XVHU��LW�FRXOG�EH�XVHG�WR�WDNH�FRQWURO�RI�DOO�LQWHUUXSWV�E\�VHQGLQJ�WKH�SURFHVVRU�WR�D�SULYDWH�WDEOH�IRU�WKH�KDQGOLQJ�RI�DOO�LQWHUXSWV��,W�LV�D�JRRG�H[DPSOH�RI�ZKDW�LV�FDOOHG�D�SULYLOHJHG�LQVWUXFWLRQ�7KH�SURFHVVRU�ZLOO�QRW�H[HFXWH�D�SULYLOHJHG�LQVWUXFWLRQ�XQOHVV�WKH�&3/� ����,I�WKLV�LQVWUXFWLRQ�LV�LQFOXGHG�LQ�FRGH�ZKLFK�LV�H[HFXWLQJ�ZKLOH�WKH�&3/�!����IRU�H[DPSOH��LQ�XVHU�FRGH�ZKHUH�WKH�&3/� ����LW�FDXVHV�DQ�H[FHSWLRQ�FDOOHG�D�JHQHUDO�SURWHFWLRQ�HUURU��6HH�7DEOH�����7KH�029�PQHPRQLF�QDPHV�DQ�LQVWUXFWLRQ�WKDW�FDQ�EH�XVHG�WR�DFFHVV�WKH�FRQWURO�UHJLVWHUV��7KH�FRPPDQG����029�UHJ��UHJZKHUH�RQH�UHJ�LV�D�FRQWURO�UHJLVWHU�DQG�WKH�RWKHU�LV�D����ELW�JHQHUDO�UHJLVWHU��FDQ�EH�XVHG�WR�ORDG�D�YDOXH�LQWR�&5���IRU�H[DPSOH��&5��KROGV�WKH�DGGUHVV�RI�WKH�SDJH�WDEOH�WDEOH�ZKHUH�DGGUHVV�WUDQVODWLRQ�EHJLQV��/RDGLQJ�D�QHZ�YDOXH�LQWR�&5��KDV�WKH�HIIHFW�RI�FKDQJLQJ�IURP�RQH�VHW�RI�SDJH�WDEOHV�WR�DQRWKHU��,I�WKLV�FRXOG�EH�GRQH�E\�D�XVHU��WKH�XVHU�FRXOG�WDNH�FRQWURO�RI�SK\VLFDO�PHPRU\��029�XVHG�ZLWK�FRQWURO�UHJLVWHUV�LV�DQRWKHU�JRRG�

Page 130: Linux assembly language programming

E\�D�XVHU��WKH�XVHU�FRXOG�WDNH�FRQWURO�RI�SK\VLFDO�PHPRU\��029�XVHG�ZLWK�FRQWURO�UHJLVWHUV�LV�DQRWKHU�JRRG�H[DPSOH�RI�D�SULYLOHJHG�LQVWUXFWLRQ�������6WDFN�3UREOHPV6LQFH�WKH�,65�FRGH�WKDW�WKH�LQWHUUXSW�LV�MXPSLQJ�WR�PD\�ZHOO�XVH�WKH�VWDFN��LW�LV�LPSRUWDQW�WKDW�WKH�VWDFN�QRW�EH�VXEMHFW�WR�ZULWH�DFFHVV�E\�WKH�XVHU��(YHQ�WKRXJK�XVHU�FRGH�ZLOO�QRW�IXQFWLRQ�DJDLQ�XQWLO�WKH�,65�H[LWV��WKHUH�FDQ�VWLOO�EH�WURXEOH��)RU�H[DPSOH��VXSSRVH�WKDW�WKH�V\VWHP�FDOO�UHDG���LV�EHLQJ�H[HFXWHG��UHDG��WUDQVIHUV�GDWD�IURP�D�ILOH�WR�XVHU�PHPRU\��2QH�RI�WKH�SDUDPHWHUV�WR�WKLV�FDOO�LV�WKH�DGGUHVV�RI�VRPH�PHPRU\�WKDW�WKH�XVHU�KDV�SHUPLVVLRQ�WR�ZULWH�RQ��,Q�H[HFXWLQJ�WKH�FDOO��WKH�V\VWHP�ZLOO�VWRUH�ILOH�GDWD�DW�WKDW�DGGUHVV��,I�WKH�VWDFN�EHLQJ�XVHG�E\�WKH�V\VWHP�LV�WKH�XVHUV�VWDFN��WKHQ�WKH�XVHU�KDV�SHUPLVVLRQ�WR�ZULWH�RQ�LW��7KH�XVHU�PD\�WKHQ�VXSSO\�WKH�VWDFN�DGGUHVV�DV�SDUDPHWHU�WR�UHDG���DQG�WKH�V\VWHP�ZLOO�WKHQ�PHVV�XS�WKH�VWDFN�LW�LV�XVLQJ�DW�WKH�YHU\�WLPH�LW�LV�XVLQJ�LW��7KLV�ZRXOG�FDXVH�D�FUDVK�8VHU�FRGH�ZULWHV�ZKHUH�LW�VKRXOGQW��XVXDOO\�E\�PLVWDNH�DQG�QRW�RXW�RI�PDOLFH��%XW�LW�KDSSHQV�D�ORW��7KDWV�ZK\�WKH�6HJPHQWDWLRQ�)DXOW�HUURU�PHVVDJH�LV�VR�JDOOLQJO\�IDPLOLDU��&RGH�IRU�V\VWHP�FDOOV�OLNH�UHDG���QHHGV�WR�XVH�LWV�RZQ�VWDFN��7KHUH�LV�D�GLIIHUHQW�VWDFN�IRU�HDFK�YDOXH�RI�WKH�&3/��&KDQJLQJ�VWDFNV�LV�WDNHQ�FDUH�RI�E\�WKH�KDUGZDUH��(DFK�VWDFN�KDV�LWV�RZQ�VWDFN�SRLQWHU��7KHVH�IRXU�VWDFN�SRLQWHUV�DUH�VWRUHG�LQ�D�PHPRU\�DUHD�FDOOHG�WKH�7DVN�6WDWH�6HJPHQW�7KH�OD\RXW�RI�D�JDWH�LV�EXLOW�LQWR�WKH�[���SURFHVVRU��)LJXUH�����VKRZV�WKH�PRVW�LPSRUWDQW�ILHOGV�LQ�D�JDWH��7KHVH�ILHOGV�FRQWDLQ�WZR�LWHPV�WKDW�SHUWDLQ�WR�WKLV

)LJXUH������*DWH�/D\RXW

GLVFXVVLRQ��7KH\�DUHz $�IRXU�ELW�W\SH�YDOXH�ZKLFK�LV�VWRUHG�LQ�ELWV���±���z 7KH�DGGUHVV�RI�WKH�,65��7KLV����ELW�DGGUHVV�LV�ORFDWHG�LQ�ELWV���±���DQG�ELWV��±���RI�WKH�WDEOH�HQWU\�

,QWHUUXSW�JDWHV�DUH�XVHG�IRU�KDUGZDUH�LQWHUUXSWV��$�WUDS�JDWH�LV�XVHG�IRU�WKH�,17���+�V\VWHP�FDOO�LQWHUUXSW�����&RQWURO�7UDQVIHU%DVHG�RQ�WKH�WZR�LWHPV�RI�LQIRUPDWLRQ�JOHDQHG�IURP�WKH�JDWH��WKH�DFWLRQV�GLVFXVVHG�LQ�VHFWLRQV�������WKURXJK�������DUH�WDNHQ�������&OHDU�WKH�,QWHUUXSW�(QDEOH�)ODJ":KHQ�WKH�[���ORDGV�D�GHVFULSWRU�WDEOH�HQWU\�LQ�UHVSRQVH�WR�DQ�LQWHUUXSW��WKH�IRXU�ELW�W\SH�YDOXH�LV�FKHFNHG�WR�VHH�LI�WKH�LQWHUUXSW�HQDEOH�IODJ�VKRXOG�EH�FOHDUHG��,I�WKH�W\SH�YDOXH�LV�����WKH�LQWHUUXSW�HQDEOH�IODJ�LV�FOHDUHG�MXVW�DV�LW�LV�RQ�WKH�������7ZHOYH�RI�WKH����SRVVLEOH�IRXU�ELW�YDOXHV�DUH�GHILQHG�

������6WRUH���LQWR�WKH�&3/7KH�QH[W�VWHS�LQ�WKH�SURFHVVLQJ�RI�DQ�LQWHUUXSW�LV�WKDW���LV�ORDGHG�LQWR�WKH�&3/��&RQILGHQFH�LQ�WKH�VDIHW\�RI�

7DEOH������,QWHUUXSW�*DWHV�YV��7UDS�*DWHV7\SH�9DOXH *DWH�7\SH &OHDU�,(�)ODJ�� ,QWHUUXSW�*DWH <HV�� 7UDS�*DWH 1R

Page 131: Linux assembly language programming

7KH�QH[W�VWHS�LQ�WKH�SURFHVVLQJ�RI�DQ�LQWHUUXSW�LV�WKDW���LV�ORDGHG�LQWR�WKH�&3/��&RQILGHQFH�LQ�WKH�VDIHW\�RI�WKLV�VWHS�PXVW�EH�EDVHG�RQ�FRQILGHQFH�LQ�WKH�FRGH�WKDW�LV�EHLQJ�MXPSHG�WR�7KH�RULJLQDO�YDOXH�RI�WKH�&3/�LV�UHVWRUHG�ZKHQ�WKH�,5(7�LQVWUXFWLRQ�H[HFXWHV�7KH�PHFKDQLVP�EHKLQG�WKH�&3/�VWRUH�DQG�UHVWRUH�LV�GLVFXVVHG�LQ�FKDSWHU����������&KDQJH�6WDFNV7KH�(63�XVHG�E\�WKH�NHUQHO�LV�ZDLWLQJ�LQ�WKH�WDVN�VWDWH�VHJPHQW��7KH�(63�FRUUHVSRQGLQJ�WR�&3/� ���LV�ORDGHG�IURP�WKHUH�LQWR�(63�ZKHQ���LV�ORDGHG�LQWR�WKH�&3/��7KH�FXUUHQW�(63�LV�QRW�VWRUHG�LQ�WKH�WDVN�VWDWH�VHJPHQW��,W�LV�SXVKHG�RQWR�WKH�QHZ�VWDFN�7KH�IDFW�WKDW�WKH�WDVN�VWDWH�VHJPHQW�LV�QRW�FKDQJHG�ZKHQ���LV�VWRUHG�LQWR�WKH�&3/�LV�VRPHWLPHV�ZKDW�LV�PHDQW�E\�VD\LQJ�WKDW�WKH�NHUQHO�LV�H[HFXWLQJ��ZLWKLQ��D�WDVN�RU��LQ�EHKDOI�RI��D�WDVN��,Q�RWKHU�ZRUGV��WKHUH�LV�QR�WDVN�VZLWFK�LQYROYHG��7KH�VDPH�WDVN�LV�VWLOO�UXQQLQJ�������-XPS�WR�WKH�,657R�GR�WKH�MXPS��WKH�UHWXUQ�DGGUHVV�RI�WKH�QH[W�LQVWUXFWLRQ�LV�SXVKHG�RQWR�WKH�QHZ�VWDFN��7KH�QHZ�(,3�LV�WKHQ�ORDGHG�ZLWK�WKH����ELW�DGGUHVV�IURP�WKH�JDWH�:KHQ�WKHVH�IRXU�VWHSV�KDYH�EHHQ�FRPSOHWHG��FRQWURO�KDV�EHHQ�WUDQVIHUUHG�WR�NHUQHO�FRGH��ZKLFK�UXQV�DW�&3/� ����7KH�UHVRXUFHV�RI�WKH�SURFHVVRU��ZKLFK�DUH�DFFHVVLEOH�IURP�WKLV�OHYHO�RI�SULYLOHJH��LQFOXGH�DOO�WKH�GDWD�VWUXFWXUHV�YLWDO�WR�WKH�IXQFWLRQLQJ�RI�WKH�RSHUDWLQJ�V\VWHP�DV�ZHOO�DV�WKH�KDUGZDUH�DQG�WKH�PHPRU\�:KHQ�WKH�,65�LV�FRQFOXGHG��WKHQ�ZLWK�RQH�H[FHSWLRQ��FRQWURO�LV�UHWXUQHG�WR�WKH�XVHU�FRGH��%RWK�WKH�ROG�VWDFN�DQG�WKH�&3/�DUH�UHVWRUHG��7KH�H[FHSWLRQ�LV�LQ�WKH�FDVH�RI�WKH�WLPHU�LQWHUUXSW�����6FKHGXOLQJ,Q�7DEOH�����ZH�VHH�WKDW�WKH�PDVNDEOH�LQWHUUXSW�ZLWK�WKH�KLJKHVW�SULRULW\�LV�WKH�WLPHU�LQWHUUXSW��7KH�,65�IRU�WKLV�LQWHUUXSW�NHHSV�WUDFN�RI�WLPH�XVHG�E\�DOO�SURFHVVHV��,Q�SDUWLFXODU��LW�VHWV�D�IODJ�FDOOHG�QHHGBUHVFKHGZKHQ�D�SURFHVV�LV�RXW�RI�WLPH��:KHQ�/LQX[�GRHV�D�UHWXUQ�IURP�DQ\�LQWHUUXSW��WKH�WLPHU�LQWHUUXSW�LQFOXGHG��LW�FKHFNV�WKLV�IODJ��DQG�FDOOV�WKH�VFKHGXOH���LI�QHHGBUHVFKHG�LV�VHW��7KH�VFKHGXOH���V\VWHP�FDOO�LV�WKH�VFKHGXOHU��,W�LV�WKH�FHQWUDO�SURJUDP�LQ�WKH�RSHUDWLQJ�V\VWHP��,W�GHWHUPLQHV�ZKLFK�SURFHVV�JHWV�WR�UXQ�QH[W��:KHQ�QHFHVVDU\��LW�LQLWLDWHV�D�WDVN�VZLWFK�6R�WKH�XOWLPDWH�FRPSXWLQJ�UHVRXUFH��SURFHVVRU�WLPH��DOVR�IDOOV�XQGHU�WKH�FRQWURO�RI�WKH�&3/�EDVHG�SURWHFWLRQ�V\VWHP�)XUWKHU�5HDGLQJ,6$�6\VWHP�$UFKLWHFWXUH��7RP6KDQOH\�DQG�'RQ$QGHUVRQ��$GGLVRQ�:HVOH\�������,QWHUUXSW�'ULYHQ�3&�6\VWHP�'HVLJQ��-RVHSK0F*LYHUQ��$QQDERRNV�������&KDSWHU�����%,7�0$1,38/$7,216

�����%LWZLVH�/RJLF�2SHUDWLRQV�����7KH�$1'��25��127��DQG�;25�&RPPDQGV�����%LW�6HWWLQJ�DQG�7HVWLQJ�����6KLIW�,QVWUXFWLRQV

Page 132: Linux assembly language programming

�����%LWZLVH�/RJLF�2SHUDWLRQV,Q�FKDSWHU����VHFWLRQ������FLUFXLWV�DQG�WUXWK�WDEOHV�IRU�WKH�%RROHDQ�RSHUDWLRQV�$1'��25��127��DQG�;25�ZHUH�GLVFXVVHG��7KH�WUXWK�WDEOH�IRU�$1'�LV

DQG�LV�LPSOHPHQWHG�XVLQJ�WKH�%RROHDQ�FLUFXLW

,I�HLJKW�RI�WKHVH�%RROHDQ�FLUFXLWV�DUH�XVHG�LQ�SDUDOOHO��WKHQ�WZR�HLJKW�ELW�QXPEHUV���������������������������ZKHQ�IHG�LQWR�WKH�HLJKW�$1'�JDWHV��UHVXOW�LQ�RQH�HLJKW�ELW�RXWSXW��������������7KH�RSHUDWLRQ�LV�FDUULHG�RXW�DV�VKRZQ�LQ�)LJXUH�������,Q�KH[�QRWDWLRQ��WKH�E\WHV�)�+�DQG�&�+�XVHG�DV�LQSXWV�WR�D�RQH�E\WH�$1'�RSHUDWLRQ�KDYH�SURGXFHG�WKH�RXWSXW�&�+��7KLV�RSHUDWLRQ�FDQ�EH�DSSOLHG�WR�DQ\�QXPEHU�RI�ELWV��7KH�%RROHDQ�RSHUDWLRQV�25��;25��DQG�127�FDQ�DOVR�EH�DSSOLHG�LQ�ELWZLVH�SDUDOOHO�IDVKLRQ�

)LJXUH�������%LWZLVH�$1'�2SHUDWLRQ

�����7KH�$1'��25��127��DQG�;25�&RPPDQGV+LJK�OHYHO�SURJUDPPLQJ�ODQJXDJHV�LQFOXGH�VXSSRUW�IRU�%RROHDQ�RSHUDWLRQV�VXFK�DV�$1'��25��DQG�127��7KH\�UHO\�RQ�DVVHPEOHU�DQG�PDFKLQH�OHYHO�LPSOHPHQWDWLRQ�RI�WKHVH�RSHUDWLRQV�7KH�$1'�LQVWUXFWLRQ�DSSOLHV�WKH�$1'�RSHUDWLRQ�WR�WZR�RSHUDQGV�LQ�PXFK�WKH�VDPH�ZD\�WKDW�WKH�$''LQVWUXFWLRQ�DGGV�WZR�RSHUDQGV��7KH�IROORZLQJ�IRUPV�DUH�DOO�YDOLG�IRU�WKH�$1'�FRPPDQG�����$1'�UHJ�LPP����$1'�UHJ�UHJ

S T �S�$1'�T�� � �� � �� � �� � �

Page 133: Linux assembly language programming

$V�ZLWK�WKH�$''�FRPPDQGV��D�PHPRU\�RSHUDQG�FDQ�WDNH�WKH�SODFH�RI�RQH�UHJLVWHU�RSHUDQG��$OVR�OLNH�WKH�$''FRPPDQG��WKH�WZR�RSHUDQGV�PXVW�KDYH�WKH�VDPH�VL]H��)RU�H[DPSOH��VXSSRVH�WKDW�WKH�$/�UHJLVWHU�FRQWDLQV��)�+�DQG�%/�FRQWDLQV��&�+��7KHQ�WKH�FRPPDQG����$1'�$/��%/ZRXOG�VWRUH�WKH�UHVXOW��&�+�LQWR�$/�DQG�OHDYH�%/�XQFKDQJHG�([FHSW�IRU�WKH�IDFW�WKDW�WKH\�DSSO\�GLIIHUHQW�RSHUDWLRQV��WKH�25�DQG�;25�FRPPDQGV�DUH�WKH�VDPH�DV�WKH�$1'FRPPDQG��7KH�127�LQVWUXFWLRQ�WDNHV�RQO\�RQH�RSHUDQG��UHJLVWHU�RU�PHPRU\�(GOLQDV�FDQ�EH�XVHG�WR�FKHFN�WKH�UHVXOWV�RI�DSSO\LQJ�WKHVH�FRPPDQGV��)RU�H[DPSOH�����029�($;���)�+����029�(%;���&�+����$1'�$/��%/VKRXOG�UHVXOW�LQ�WKH�VWRUDJH�RI��&�+�LQ�$/�$OO�WKHVH�ORJLF�FRPPDQGV�FOHDU�WKH�RYHUIORZ�DQG�FDUU\�IODJV��7KH\�VHW�WKH�VLJQ�IODJ�LI�WKH�PRVW�VLJQLILFDQW�ELW�RI�WKH�UHVXOW�LV����DQG�FOHDU�LW�RWKHUZLVH��7KH\�VHW�WKH�]HUR�IODJ�LI�WKH�UHVXOW�LV���DQG�FOHDU�LW�RWKHUZLVH��7KH�]HUR�IODJ�LV�RIWHQ�XVHG�WR�GHWHUPLQH�FRQGLWLRQDO�MXPSV�IROORZLQJ�ORJLF�FRPPDQGV�)RU�H[DPSOH��ZH�FDQ�XVH�WKH�$1'�FRPPDQG�WR�GHWHUPLQH�ZKHWKHU�D�QXPEHU�VWRUHG�LQ�D�UHJLVWHU�LV�HYHQ�RU�RGG��$�QXPEHU�UHSUHVHQWHG�LQ�ELQDU\�LV�HYHQ�ZKHQ�LWV�OHDVW�VLJQLILFDQW�ELW�LV�]HUR��,I�ZH�KDYH�D�RQH�E\H�UHJLVWHU��WKHQ�WKH�$1'�LQVWUXFWLRQ�FDQ�EH�DSSOLHG�WR�LW��XVLQJ�WKH�ELQDU\�QXPEHU�����������DV�WKH�VRXUFH�RSHUDQG�7KHQ�DOO�WKH�ELWV�RI�WKH�UHVXOW�ZLOO�EH����H[FHSW�SRVVLEO\�WKH�OHDVW�VLJQLILFDQW�ELW��7KLV�ELW�ZLOO�EH���LI�WKH�QXPEHU�EHLQJ�WHVWHG�LV�HYHQ�����029�%/��$/����3UHSDUH�WR�WHVW�$/�IRU�HYHQQHVV����$1'�%/��������7KH�]HUR�IODJ�LV�VHW�LI�%/� ������-=�(91��������-XPS�LI�$/�LV�HYHQ�7KH�7(67�LQVWUXFWLRQ�LV�OLNH�WKH�&03�LQVWUXFWLRQ�LQ�WKDW�LW�VHWV�IODJV�ZLWKRXW�VWRULQJ�WKH�UHVXOW��&03�LV�DQ�XQVWRUHG�68%�LQVWUXFWLRQ��7(67�LV�DQ�XQVWRUHG�$1'�LQVWUXFWLRQ��8VLQJ�7(67��WKH�WKUHH�LQVWUXFWLRQV�XVHG�WR�WHVW�WKH�HYHQQHVV�RI�$/�FDQ�EH�VKRUWHQHG�WR�MXVW�WZR�����7(67�$/�������-=�(91���������-XPS�LI�$/�LV�HYHQ������%LW�6HWWLQJ�DQG�7HVWLQJ2QH�YLUWXH�RI�ORJLF�RSHUDWLRQV�LV�WKDW�WKH\�JLYH�WKH�SURJUDPPHU�FRQWURO�RYHU�LQGLYLGXDO�ELWV�RI�PHPRU\�RU�,�2�UHJLVWHUV��������7XUQLQJ�WKH�6SHDNHU�2Q�DQG�2II7KH�V\VWHP�ERDUG�VSHDNHU�LV�DQRWKHU�UHODWLYHO\�IL[HG�IHDWXUH�RI�WKH�VWDQGDUG�3&��,WV�DXGLR�VLJQDO�FRPHV�IURP�D���������0+]�VTXDUH�ZDYH��7R�JHW�FRQWURO�RYHU�WKH�VSHDNHUV�SLWFK��WKLV�VLJQDO�LV�GLYLGHG�E\�WKH�QXPEHU�VWRUHG�LQ�WKH�WZR�E\WH�UHJLVWHU�ORFDWHG�DW�,�2�DGGUHVV���+��7KLV�UHJLVWHU�PXVW�EH�ZULWWHQ�WR�XVLQJ�WZR�VXFFHVVLYH�RQH�E\WH�ZULWHV��PRVW�VLJQLILFDQW�E\WH�ILUVW��:KHWKHU�WKH�VSHDNHU�LV�WXUQHG�RQ�RU�QRW�LV�FRQWUROOHG�E\�WKH�ERWWRP�WZR�ELWV�RI�D�YHU\�LPSRUWDQW�RQH�E\WH�UHJLVWHU�ORFDWHG�DW�,�2�DGGUHVV���+��6RPH�RI�WKH�ELWV�RI�WKLV�UHJLVWHU�LQGLFDWH�SDULW\�HUURUV�LQ�PHPRU\��5HSRUWV�RI�WKHVH�HUURUV�FDXVH�WKH�V\VWHP�WR�KDOW��&RQVHTXHQWO\��ZH�GRQW�ZDQW�WR�IOLS�RQH�RI�WKHP�LGO\�RU�DFFLGHQWDOO\��7KH�$1'�DQG�25�LQVWUXFWLRQV�DUH�SHUIHFWO\�VXLWHG�IRU�FKDQJLQJ�VRPH�ELWV�DQG�OHDYLQJ�WKH�RWKHUV�DORQH��)RU�H[DPSOH��WR�WXUQ�WKH�VSHDNHU�RQ��WKH�IROORZLQJ�WKUHH�FRPPDQGV�DUH�QHHGHG�

Page 134: Linux assembly language programming

FRPPDQGV�DUH�QHHGHG�����,1�$/��>��+@����25�$/�������287�>��+@��$/7R�WXUQ�WKHP�RII�����,1�$/��>��+@����$1'�$/��2)&+����287�>��+@��$/ZLOO�GR�,W�VKRXOG�EH�QRWHG�WKDW�LQ�/LQX[��DFFHVV�WR�,�2�SRUWV�E\�XVHUV�LV��E\�GHIDXOW�DW�OHDVW��SURKLELWHG��,�2�SHUPLVVLRQV�FDQ�EH�JLYHQ�WR�D�SURFHVV��KRZHYHU��E\�WKH�V\VWHP�FDOOV�LRSHUP���DQG�LRSO����ZKLFK�DUH�VSHFLDOO\�DGDSWHG�WR�WKH�[���DUFKLWHFWXUH��������(GJH�YV��/HYHO�7ULJJHUHG�,54�%LWV7KH������SURJUDPPDEOH�LQWHUUXSW�FRQWUROOHU�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ�����KDV�D�UHJLVWHU�ZKLFK�GHWHUPLQHV�ZKHWKHU�WKH�LQWHUUXSWV�LW�UHFHLYHV�ZLOO�EH�SURFHVVHG�DV�HGJH�WULJJHUHG�RU�OHYHO�WULJJHUHG��7KHUH�LV�RQH�ELW�IRU�HDFK�RI�WKH�HLJKW�,54�OLQHV�WKDW�LW�KDQGOHV��7KH�GLIIHUHQFH�EHWZHHQ�WKH�WZR�WULJJHULQJ�PRGHV�LV�LPSRUWDQW��,I�DQ�,�2�GHYLFH�XVHV�OHYHO�WULJJHUHG�VLJQDOLQJ�DQG�WKH������WUHDWV�LWV�,54�DV�HGJH�WULJJHUHG��WKHQ�LQWHUUXSW�VLJQDOV�IURP�WKH�,�2�GHYLFH�FRXOG�EH�LJQRUHG��%\�XVLQJ�ELW�PDQLSXODWLRQ�FRPPDQGV��LW�LV�SRVVLEOH�WR�VLQJOH�RXW�RQH�ELW�RQ�WKLV�UHJLVWHU�DQG�FKDQJH�LW�)RU�H[DPSOH��VXSSRVH�WKDW�ZH�DUH�LQVWDOOLQJ�D�FDUG�ZKLFK�VHQGV�RXW�HGJH�WULJJHUHG�LQWHUUXSW�UHTXHVWV�RQ�,54����,54��LV�WKH�UHTXHVW�OLQH�FRQYHQWLRQDOO\�DVVRFLDWHG�ZLWK�&20����2Q�DQ�(,6$�PDFKLQH�WKH�UHJLVWHU�ZKLFK�FRQWUROV�WKLV�WULJJHULQJ�LV�ORFDWHG�DW�,�2�SRUW��'�+��,W�LV�FDOOHG�DQ�(/&5��(GJH�/HYHO�&RQWURO�5HJLVWHU���(DFK���ELW�PDNHV�WKH�FRUUHVSRQGLQJ�,54�OLQH�HGJH�WULJJHUHG��HDFK���ELW�FDXVHV�OHYHO�WULJJHULQJ��7KH�VLPSOHVW�ZD\�WR�PDNH�,54��HGJH�WULJJHUHG�ZRXOG�EH�WR�ZULWH�D���WR�WKLV�SRUW�����029�$/������029�(';���'�+��(/&5V�DGGUHVV�LV��'�+�����287�>';@��$/���6WRUH�D�]HUR�LQ�WKH�(/&5�%XW�WKLV�ZRXOG�EH�D�EDG�LGHD��,W�ZRXOG�PDNH�DOO�HLJKW�ELWV�LQ�WKH�(/&5����$Q\�RI�WKH�,54V�ZKLFK�KDSSHQHG�WR�XVH�OHYHO�WULJJHULQJ�ZRXOG�JHW�IRXOHG�XS��7R�VHW�WKHP�DOO�FRUUHFWO\��ZH�PXVW�NQRZ�ZKDW�DOO�WKH�WULJJHULQJV�DUH�IRU�DOO�HLJKW�LQSXWV��RU�ZH�FDQ�MXVW�OHDYH�WKHP�DV�WKH\�DUH�H[FHSW�IRU�WKH�IRXUWK�ELW��7R�PDNH�ELW���]HUR��ZH�FDQ�25�WKH�FRQWHQWV�RI�WKH�(/&5�ZLWK�WKH�ELQDU\�QXPEHU����������� �()+��7R�GR�WKDW�ZH�QHHG�WR�UHDG�IURP�WKH�(/&5��GR�WKH�PDVNLQJ��DQG�WKHQ�ZULWH�EDFN�WR�LW�3URJUDP����������029�(';���'�+�����(/&5V�DGGUHVV�LV��'�+�����,1�$/��>';@�������5HDG�WKH�(/&5�UHJLVWHU�����$1'�$/���()+������0DVN�RXW�ELW�������287�>';@��$/������:ULWH�DOWHUHG�E\WH�EDFN�RXW�WR�WKH�(/&5��������'LVDOORZLQJ�1RQ²PDVNDEOH�,QWHUUXSWV2Q�,6$�PDFKLQHV��QRQ²PDVNDEOH�LQWHUUXSWV�FDQ�EH�VWRSSHG�EHIRUH�WKH\�JHW�WR�WKH�SURFHVVRU��7KH\�UXQ�WKURXJK�D�JDWH�ZKLFK�LV�FRQWUROOHG�E\�ELW���RI�DQ�,�2�UHJLVWHU�ORFDWHG�DW�SRUW���+��,I�WKLV�ELW�LV����10,V�DUH�DOORZHG��0HPRU\�SUREOHPV�FDQ�FDXVH�D�QRQPDVNDEOH�LQWHUUXSW�WR�RFFXU��6XSSRVH�WKDW�ZH�ZDQW�WR�FLUFXPYHQW�WKLV�VDIHJXDUG�E\�VKXWWLQJ�RII�10,V��7R�PDNH�ELW���HTXDO�WR���ZH�FDQ�25�WKH�FRQWHQWV�RI�WKH�,�2�UHJLVWHU�ZLWK����������� ���+�3URJUDP����������,1�$/��>��+@������5HDG�WKH�E\WH�����25�$/����+��������0DVN�RXW�ELW���

Page 135: Linux assembly language programming

����25�$/����+��������0DVN�RXW�ELW�������287�>��+@��$/�����:ULWH�DOWHUHG�E\WH�EDFN�RXW������6KLIW�,QVWUXFWLRQV5HJLVWHUV�ZKLFK�FDQ�VKLIW�ELWV�ULJKW�RU�OHIW�DUH�FDOOHG�VKLIW�UHJLVWHUV��6XSSRVH�WKDW�D����ELW�VKLIW�UHJLVWHU�FRQWDLQV�WKH�ELQDU\�QXPEHU�����������������������6KLIWLQJ�WKLV�QXPEHU�WR�WKH�ULJKW�E\�RQH�ELW�\LHOGV�����������������������DQG�VHWV�WKH�FDUU\�IODJ��VLQFH�WKH�ULJKWPRVW�ELW�ZDV����6KLIW�UHJLVWHUV�DUH�SDUW�RI�WKH�VWDQGDUG�UHSHUWRLUH�RI�PLFURSURFHVVRUV��,Q�WKH�[����WKH�ELW�ZKLFK�LV��ORVW��LV�JHQHUDOO\�VWRUHG�LQ�WKH�FDUU\�IODJ��+HQFH�IROORZLQJ�WKH�VKLIW�MXVW�VKRZQ��WKH�FDUU\�IODJ�ZRXOG�EH�VHW��:KHUH�WKH��QHZ��ELW�FRPHV�IURP�GHSHQGV�RQ�ZKLFK�VKLIW�FRPPDQG�LV�XVHG��:KHQ�WKH�QHZ�ELW�LV����WKH�VKLIW�LV�UHIHUUHG�WR�DV�D�ORJLFDO�VKLIW��1RWLFH�WKDW�VKLIWLQJ�WKH�QXPEHU����������WR�WKH�ULJKW�E\�RQH�ELW�LQ�WKLV�PDQQHU��������\LHOGV����$�ULJKWZDUG�VKLIW�PD\�WKXV�EH�XVHG�WR�DFFRPSOLVK�GLYLVLRQ�E\�WZR��7KH�ORJLFDO�VKLIW��KRZHYHU��IDLOV�WR�GR�WKLV�FRUUHFWO\�RQ�VLJQHG�QXPEHUV��$Q�HLJKW�ELW�WZRV�FRPSOHPHQW�YDOXH�VXFK�DV����������������ZKHQ�VKLIWHG�WR�WKH�ULJKW�E\�RQH�XVLQJ�D�ORJLFDO�VKLIW�������������\LHOGV������QRW�����,I�ZKDW�ZH�UHDOO\�ZDQW�LV�WR�GLYLGH�E\�WZR��WKHQ�WKH�QHZ�OHIWPRVW�ELW�VKRXOG�EH�FRSLHG�IURP�WKH�ROG�RQH��,Q�WKLV�FDVH�ZH�ZRXOG�JHW�������������LQVWHDG��ZKLFK�DFWXDOO\�LV�±���7KLV�NLQG�RI�D�VKLIW�LV�UHIHUUHG�WR�DV�DQ�DULWKPHWLF�VKLIW��RU�VRPHWLPHV�DOVR�DV�D�VLJQ�H[WHQGHG�VKLIW��6LQFH�DQ�DULWKPHWLF�VKLIW�SURGXFHV�DQ�HUURQHRXV�GLYLVLRQ�ZKHQ�D�ODUJH�XQVLJQHG�YDOXH�LV�XVHG��WKH�ODWWHU�WHUP�LV�D�SUREDEO\�EHWWHU�RQH��7KH�SUREOHP�GRHV�QRW�RFFXU�ZLWK�OHIWZDUG�VKLIWV��7KH�FRPPDQGV�IRU�ULJKWZDUG�ORJLFDO�DQG�DULWKPHWLF�VKLIWV�DUH����6+5�UHJ��LPP����6+5�UHJ��&/����6$5�UHJ��LPP����6$5�UHJ��&/ZKHUH�WKH�LPPHGLDWH�YDOXH�PXVW�EH�D�RQH�E\WH�QXPEHU��/HIWZDUG�VKLIWV�XVH�WKH�PQHPRQLFV�6+/�DQG�6$/�7KHVH�WZR�PQHPRQLFV�DFWXDOO\�UHIHU�WR�WKH�VDPH�RSFRGHV��7KH\�KDYH�WKH�VDPH�YDOLG�IRUPV�DV�6+5�DQG�6$5�,Q�DOO�WKHVH�FDVHV��D�PHPRU\�RSHUDQG�PD\�UHSODFH�WKH�UHJLVWHU�RSHUDQG�:KHQ�WKH��ORVW��ELW�LV�UHF\FOHG�DV�WKH��QHZ��ELW��WKH�VKLIW�LV�UHIHUUHG�WR�DV�D�URWDWH� 52/�DQG�525�DUH�PQHPRQLFV�IRU�URWDWH�OHIW�DQG�URWDWH�ULJKW��-XVW�DV�LQ�WKH�ORJLFDO�DQG�DULWKPHWLF�VKLIWV��WKH�FDUU\�IODJ�WDNHV�RQ�WKH�YDOXH�RI�WKH�URWDWHG�ELW��%XW�LW�GRHV�QRW�SDUWLFLSDWH�LQ�WKH�URWDWLRQ��7R�LQFOXGH�WKH�FDUU\�ELW�LQWR�WKH�F\FOH��XVH�WKH�5&5�DQG�5&/�FRPPDQGV��5&/�DQG�5&5�UHIHU�WR�URWDWH�WKURXJK�FDUU\�OHIW�DQG�URWDWH�WKURXJK�FDUU\�ULJKW��7DEOH������LOOXVWUDWHV�WKH�HIIHFW�RI�HDFK�RI�WKHVH�URWDWH�LQVWUXFWLRQV��DVVXPLQJ�WKDW�EHIRUH�WKH�URWDWH�

Page 136: Linux assembly language programming

�LOOXVWUDWHV�WKH�HIIHFW�RI�HDFK�RI�WKHVH�URWDWH�LQVWUXFWLRQV��DVVXPLQJ�WKDW�EHIRUH�WKH�URWDWH�LQVWUXFWLRQ�LV�H[HFXWHG�$/�LV�����������DQG�&)� ���

6KLIW�UHJLVWHUV�DUH�XVHG�E\�WKH�SURFHVVRU�WR�SHUIRUP�PXOWLSOLFDWLRQ��7KH������SURFHVVRU�GRHV�QRW�KDYH�D�PXOWLSOLFDWLRQ�FRPPDQG��%XW�LW�GRHV�KDYH�VKLIW�FRPPDQGV��$�SURJUDP�OLNH�WKH�IROORZLQJ�FDQ�EH�XVHG�WR�GR�PXOWLSOLFDWLRQ�XVLQJ�VKLIW�FRPPDQGV�3URJUDP�������������,1�($;��>�@�������029�(&;��($;�����PXOWLSOLHU�������,1�($;��>�@�������029�(%;��($;�����PXOWLSOLFDQG�������;25�($;����������,QLWLDOL]H�WKH�WRWDO$*1����&03�(&;����������,V�PXOWLSOLHU���\HW"�������-(�'81�������7(67�(&;���������,V�ERWWRP�ELW�RI�PXOWLSOLHU���������-=�6.3�����������,I�VR�DGG�WKH�PXOWLSOLFDQG�������$''�($;��(%;�����$GG�VKLIWHG�PXOWLSOLFDQG�WR�WKH�WRWDO�������-&�%$'�����������$�FDUU\�KHUH�LV�DQ�RYHUIORZ6.3����6+/�(%;����������0XOWLSOLFDQG�JRHV�OHIW�������-&�%$'�����������%HWWHU�QRW�RYHUIORZ�KHUH�HLWKHU�������6+5�(&;����������6KLIW�WKH�PXOWLSOLHU�WR�WKH�ULJKW�������-03�$*1'81����287�>�@��($;����%$'����5(7��������������1R�RXWSXW�LI�PXOWLSOLFDWLRQ�RYHUIORZV&KDSWHU�����'(9,&(�'5,9(56,Q�FKDSWHU����WKH�XVH�RI�PHPRU\�FRPPDQGV�ZDV�GLVFXVVHG�DVVXPLQJ�WKDW�WKH�SURJUDPPHU�KDV�XQUHVWULFWHG�DFFHVV�WR�PHPRU\��,Q�FKDSWHU����WKH�XVH�RI�PHPRU\�FRPPDQGV�LQ�XVHU�SURJUDPV�ZKHUH�/LQX[�UHVWULFWV�PHPRU\�DFFHVV�LV�GLVFXVVHG��,Q�FKDSWHU����VHFWLRQ������WKH�XVH�RI�,�2�FRPPDQGV�LV�GLVFXVVHG��DJDLQ�DVVXPLQJ�WKDW�WKH�SURJUDPPHU�KDV�XQUHVWULFWHG�,�2�DFFHVV��$OWKRXJK�WKHUH�DUH�V\VWHP�FRPPDQGV�ZKRVH�SXUSRVH�LV�WR�JUDQW�,�2�DFFHVV�WR�D�XVHU��WKH�GHIDXOW�VLWXDWLRQ�LQ�/LQX[�GLVDOORZV�WKH�XVH�RI�,1�DQG�287�LQVWUXFWLRQV�LQ�XVHU�SURJUDPV��8VHU�DFFHVV�WR�SHULSKHUDOV�WDNHV�SODFH�RQO\�E\�ZD\�RI�V\WHP�FDOOV��6\VWHP�FDOOV�WUDQVODWH�XVHU�VHUYLFH�UHTXHVWV�LQWR�,1�DQG�287�LQVWUXFWLRQV��%HFDXVH�V\VWHP�FDOOV�H[HFXWH�DW�SULYLOHJH�OHYHO�]HUR��WKHVH�,�2�LQVWUXFWLRQV�FDQ�EH�H[HFXWHG�$�GHYLFH�GULYHU�FRQVLVWV�RI�DOO�WKH�SURJUDPV�QHHGHG�WR�WUDQVODWH�V\VWHP�FDOOV�WR�D�SDUWLFXODU�GHYLFH�LQWR�,�2�LQVWUXFWLRQV�WR�WKDW�GHYLFH��SOXV�D�SURJUDP�WR�KDQGOH�LQWHUUXSW�VHUYLFH�UHTXHVWV�LVVXHG�E\�WKH�GHYLFH��$OO�WKH�SURJUDPV�LQ�WKH�GHYLFH�GULYHU�DUH�LQFRUSRUDWHG�LQWR�WKH�/LQX[�NHUQHO��2YHU�KDOI�WKH�FRGH�LQ�/LQX[�LV�GHYLFH�GULYHU�FRGH�7KHUH�LV�D�ORW�RI�FRGH�LQYROYHG�EHFDXVH�WKHUH�LV�D�ORW�RI�YDULHW\�LQ�WKH�KDUGZDUH�GHYLFHV�EHLQJ�DFFHVVHG��,W�LV�D�QRWDEOH�DFKLHYHPHQW�RI�8QL[�WKDW�WKLV�JUHDW�PXOWLSOLFLW\�RI�KDUGZDUH�LV�EURXJKW�XQGHU�WKH�FRQWURO�RI�D�VPDOO�UHSHUWRLUH�RI�VLPSOH�FRPPDQGV��$Q�LPSRUWDQW�VWDJH�LQ�WKH�GHYHORSPHQW�RI�WKLV�UHSHUWRLUH�ZDV�WKH�FRQFHSW�RI�D�GHYLFH�LQGHSHQGHQW�ILOH������'HYLFH�,QGHSHQGHQW�)LOHV7R�XQGHUVWDQG�ZKDW�GHYLFH�LQGHSHQGHQFH�PHDQV��LW�LV�XVHIXO�WR�FRQVLGHU�KRZ�ZH�PLJKW�QDLYHO\�EHJLQ�WR�

7DEOH�������5RWDWH�,QVWUXFWLRQV�RQ�$/� ������������&)� ��%HIRUH 6KLIW $IWHU$/�5HJLVWHU &) &RPPDQG $/�5HJLVWHU &)��������� � 525�$/�� ��������� ���������� � 52/�$/�� ��������� ���������� � 5&5�$/�� ��������� ���������� � 5&/�$/�� ��������� �

Page 137: Linux assembly language programming

7R�XQGHUVWDQG�ZKDW�GHYLFH�LQGHSHQGHQFH�PHDQV��LW�LV�XVHIXO�WR�FRQVLGHU�KRZ�ZH�PLJKW�QDLYHO\�EHJLQ�WR�SURJUDP�DFFHVV�WR�DQ�RUGLQDU\�����0HJ�IORSS\�GULYH��ZLWKRXW�WKH�DLG�RI�WKLV�XVHIXO�FRQFHSW��������)ORSS\�'ULYH�&RQWUROOHU$�IORSS\�GULYH�LQFOXGHV�D�PRWRU�DQG�D�VHQVLQJ�DUP�DQG�LV�FRQWUROOHG�E\�D�SURFHVVRU�FDOOHG�D�IORSS\�GULYH�FRQWUROOHU��6HH�)LJXUH�������0DQ\�IORSS\�GULYH�FRQWUROOHUV�DUH�FRPSDWLEOH�ZLWK�WKH������FRQWUROOHU��,Q�WKH�,6$�DUFKLWHFWXUH��WKH������FRPSDWLEOH�FRQWUROOHU�LV�DVVLJQHG�,�2�SRUWV��)2+�WKURXJK��)�+��$FFHVV�WR�WKH�IORSS\�LV�E\�ZD\�RI�WKHVH�SRUWV�

)LJXUH�������7KH�)ORSS\�'ULYH�DV�DQ�,�2�'HYLFH

$�����0HJ�IORSS\�LV�FDUYHG�XS�LQWR�VPDOO�SRUWLRQV�E\�WKH�IORSS\�GULYH��(DFK�VLGH�RI�WKH�IORSS\�KDV����FRQFHQWULF�FLUFOHV��OLNH�WKH�ULQJV�RI�D�WDUJHW��7KHVH�ULQJV�DUH�FDOOHG�WUDFNV��(DFK�VLGH�LV�DOVR�GLYLGHG�E\�UDGLL�LQWR����SLHFHV�ZKLFK�DUH�VKDSHG�OLNH�SL]]D�VOLFHV��(DFK�WUDFN�PRYHV�WKURXJK�DOO����RI�WKHVH�SL]]D�VOLFHV��(DFK�SRUWLRQ�RI�RQH�WUDFN�RQ�RQH�SL]]D�VOLFH�LV�FDOOHG�D�VHFWRU��(DFK�VHFWRU�FRQWDLQV�����E\WHV�RI�GDWD��7KH�WRWDO�FDSDFLW\�RI�WKH�GLVN�LV�

7R�JHW�UHDG�RU�ZULWH�DFFHVV�WR�WKH�GLVN��D�FRPPDQG�PXVW�EH�LVVXHG�WR�WKH�������7KH�FRPPDQG�SRUW�LV�DW�WKH�,6$�DGGUHVV��)�+����+�LV�D�5($'�FRPPDQG�LQ�WKH������ODQJXDJH��,W�PXVW�EH�IROORZHG�E\�HLJKW�E\WHV�ZKLFK�VSHFLI\��DPRQJ�RWKHU�WKLQJV��ZKLFK�WUDFN��ZKLFK�VHFWRU��DQG�ZKLFK�VLGH�RI�WKH�GLVN�ZLOO�EH�UHDG��$OO�UHDG�FRPPDQGV�UHDG�DW�OHDVW�RQH�IXOO�VHFWRU��7R�UHDG�VHFWRU�QXPEHU�ILYH�RQ�F\OLQGHU�QXPEHU�VL[�RQ�VLGH�QXPEHU�RQH��IRU�H[DPSOH��WKH�IROORZLQJ�287�LQVWUXFWLRQV�ZRXOG�QHHG�WR�EH�LVVXHG�$OWKRXJK�WKLV�FRGH�DFFHVVHV�����E\WHV��D�OLWWOH�DULWKPHWLF�VKRZV�WKDW�IURP�D�SURFHVVRUV�SRLQW�RI�YLHZ��LW�LV�QRW�DFFHVVHG�DOO�DW�RQFH��6SLQQLQJ�DW�����USP��RU�ILYH�UHYROXWLRQV�SHU�VHFRQG��D�IORSS\�GULYH�GULYH�FDQ�FROOHFW

7KLV�PHDQV�E\WHV�DUH�FROOHFWHG�HYHU\���������VHFRQGV��RU������PLFURVHFRQGV��2Q�D����0+]�PDFKLQH��WKLV�LV�D�ZDLW�RI�������PDFKLQH�F\FOHV��FOHDUO\�WRR�PXFK�WLPH�WR�NHHS�WKH�SURFHVVRU�LGOLQJ��7KLV�LV�D�JRRG�H[DPSOH�RI�D�VLWXDWLRQ�ZKHUH�DQ�LQWHUUXSW�FDQ�VDYH�WLPH��(DFK�WLPH�WKH������KDV�DFFXPXODWHG�RQH�E\WH�RI�LQIRUPDWLRQ�IURP3URJUDP������������029�$/����+�������'DWD�5HDG�FRPPDQG������287�>�)�+@��$/

Page 138: Linux assembly language programming

������287�>�)�+@��$/������029�$/�����������6LGH����'ULYH�$�������287�>�)�+@��$/������029�$/�����������7KH�&\OLQGHU�QXPEHU������287�>�)�+@��$/������029�$/�����������6LGH�����DJDLQ�������287�>�)�+@��$/������029�$/�����������7KH�6HFWRU�QXPEHU������287�>�)�+@��$/������029�$/�����������6HFWRU�VL]H�FRGH�IRU�����E\WHV������287�>�)�+@��$/������029�$/�����������/DVW�6HFWRU�QXPEHU������287�>�)�+@��$/������029�$/�����������*DS�VL]H������287�>�)�+@��$/������029�$/��2))+�����8QXVHG�VSHFLDO�6HFWRU�VL]H�FRGH������287�>�)�+@��$/WKH�IORSS\�GULYH��LW�VLJQDOV�WKH�V\VWHP�WR�WDNH�WKH�LQIRUPDWLRQ��,W�PD\�XVH�,54���WR�GR�WKLV��,Q�VHFWLRQ�������ZH�ZLOO�ILQG�WKDW�DQRWKHU�ZD\�RI�KDQGOLQJ�WKH�LQSXW�KDV�EHHQ�GHYHORSHG�ZKLFK�LV�HYHQ�OHVV�ZDVWHIXO�RI�SURFHVVRU�WLPH��������%DG�2OG�)LOHV7KH�IDFW�WKDW�LQIRUPDWLRQ�LV�KDQGOHG�XVLQJ�DEVROXWH�DGGUHVVHV��RQH�VHFWRU�DW�D�WLPH��VWDQGV�RXW�LQ�RXU�SURJUDPPLQJ�RI�WKH�IORSS\�GULYH��6SDFH�RQ�WKH�GLVN�LV�XVHG�LQ�FKXQNV�RI�����E\WHV��,W�ZRXOG�EH�YHU\�QDWXUDO�WKHQ�LI�DOO�����0HJ�IORSS\�GLVN�ILOHV�KDG�OHQJWKV�ZKLFK�ZHUH�PXOWLSOHV�RI�����E\WHV�DQG�ZHUH�UHIHUHQFHG�XVLQJ�WKH�DEVROXWH�DGGUHVVHV�RI�WKH�VHFWRUV�ZKLFK�WKH\�RFFXSLHG��,W�ZRXOG�DOVR�EH�QDWXUDO�WR�VWRUH�WKH�LQIRUPDWLRQ�DERXW�ZKLFK�VHFWRUV�ZHUH�RFFXSLHG�LQWR�WKH��ILOH���DORQJ�ZLWK�WKH�UHVW�RI�WKH�LQIRUPDWLRQ��7KLV�NLQG�RI�LQIRUPDWLRQ�FRQVWLWXWHG�ZKDW�ZDV�FDOOHG�D�ILOH�FRQWURO�EORFN��,Q�8QL[�WKLV�NLQG�RI�LQIRUPDWLRQ�LV�KHOG�E\�WKH�V\VWHP�LQ�VSHFLDO�V\VWHP�PHPRU\�DUHDV�FDOOHG�LQRGHV�DQG�LV�QRW�LQWHJUDWHG�ZLWK�WKH�GDWD�LQ�WKH�ILOH��:KHQ�WKLV�NLQG�RI�LQIRUPDWLRQ�LV�LQFOXGHG�DV�D�SDUW�RI�WKH�GDWD��HOHPHQWDU\�RSHUDWLRQV�VXFK�DV�FRS\LQJ�D�ILOH�IURP�RQH�GHYLFH�WR�DQRWKHU�EHFRPH�SUREOHPDWLF��)LOH�FRS\LQJ�SURJUDPV�EHFRPH�GHYLFH�VSHFLILF�MXVW�DV�SURJUDPV�WR�FRQYHUW�ZRUGSURFHVVRU�GRFXPHQWV�DUH�VRIWZDUH�SDFNDJH�VSHFLILF��&RS\LQJ�D�ILOH�FDQ�HDVLO\�FKDQJH�LWV�OHQJWK��IRU�H[DPSOH��5HVLGXDO�SUREOHPV�RI�H[DFWO\�WKLV�QDWXUH�H[LVW�LQ�FRQQHFWLRQ�ZLWK�WH[W�ILOHV�LQ�&��ZKHUH�OLQH�ERXQGDULHV�PD\�EH�PDUNHG�HLWKHU�E\�V\VWHP�LQIRUPDWLRQ²WKH�GHYLFH�KROGLQJ�WKH�ILOH�PD\�KDYH�DQ�LQWULQVLF�OLQH�VWUXFWXUH²RU�E\�HQG�RI�OLQH�FKDUDFWHUV��?Q��ZKLFK�DUH�LQWHUQDO�WR�WKH�GDWD�ILOH��&RS\LQJ�WH[W�ILOHV�LQ�&�LV�QRW�JXDUDQWHHG�WR�SUHVHUYH�OHQJWK��2QH�UHDVRQ�WKDW�WKH�&�SUHSURFHVVRU�FRQFDWHQDWHV�VWULQJV�LV�VR�WKDW�LQWULQVLF�HQG�RI�OLQH�ERXQGDULHV�FDQ�EH�RYHUFRPH��7KH�6WDQGDUG�&�/LEUDU\�E\�-LP�3ODXJHU��LWV�WLWOH�QRWZLWKVWDQGLQJ��FRQWDLQV�VRPH�IDVFLQDWLQJ�KLVWRULFDO�DVLGHV�RQ�WKHVH�LVVXHV�7KH�SRLQW�KHUH�LV�WKDW�WKHVH��EDG�ROG�ILOHV��DUH�VKDSHG�E\�WKH�GHYLFHV�RQ�ZKLFK�WKH\�DUH�VWRUHG��$�GHYLFH�LQGHSHQGHQW�ILOH��RQ�WKH�RWKHU�KDQG�EHDUV��QR�LPSULQW�RI�WKH�GHYLFH�RQ�ZKLFK�LW�LV�VWRUHG��$�GHYLFH�LQGHSHQGHQW�ILOH�FDQ�EH�FRSLHG�IURP�RQH�GHYLFH�WR�DQRWKHU�ZLWKRXW�XQGHUJRLQJ�FKDQJH��'HYLFH�LQGHSHQGHQW�ILOHV�RULJLQDWHG�LQ�WKH�0XOWLFV�RSHUDWLQJ�V\VWHP��WKH�LPPHGLDWH�SUHGHFHVVRU�RI�8QL[�������� �'LUHFW�0HPRU\�$FFHVV7KH�UHDGHU�LQWHUHVWHG�LQ�JHWWLQJ�RQ�WR�GHYLFH�GULYHUV�PD\�VNLS�DKHDG�WR�VHFWLRQ�������7KH�UHDGHU�FXULRXV�DERXW�ZKDW�NHHSV�WKH�IORSS\�GULYH��RU�RWKHU�SHULSKHUDOV�IRU�WKDW�PDWWHU��IURP�LQWHUUXSWLQJ�WKH�SURFHVVRU�DIWHU�HYHU\�IHWFKHG�E\WH�VKRXOG�UHDG�WKH�QH[W�WZR�SDUDJUDSKV�,Q�DGGLWLRQ�WR�WKH�,54�OLQH��WKH������DOVR�KDV�DQ�RXWSXW�OLQH�FDOOHG�'0$54��IRU�'0$�UHTXHVW��'0$�VWDQGV�IRU�GLUHFW�PHPRU\�DFFHVV��,QVWHDG�RI�XVLQJ�WKH�,54�OLQH��WKH������PD\�EH�SURJUDPPHG�WR�XVH�WKH�'0$54�OLQH�LQVWHDG��7KH�'0$54�OLQH�UXQV�IURP�WKH������WR�D�SURFHVVRU�FDOOHG�D�'0$�FRQWUROOHU�ZKLFK�LV�HTXLSSHG�WR�LVVXH��EXV�FRQWURO�VLJQDOV�DQG�WKXV�LQLWLDWH�0HPRU\�:ULWH�EXV�F\FOHV��,W�FDQ�WKHUHIRUH�UHOLHYH�WKH�&38�RI�WKH�WDVN�RI�WUDQVIHUULQJ�E\WHV�RQH�DW�D�WLPH�IURP�WKH�IORSS\�GULYH�LQWR�PHPRU\��,Q�RUGHU�WKDW�WKH�XVH�RI�WKH�EXV�F\FOH�PDFKLQHU\�E\�WKH�'0$�FRQWUROOHU�QRW�LQWHUIHUH�ZLWK�WKH�&38��ZKLFK�LV�FRQVWDQWO\�XVLQJ�WKH�EXVHV�WR�IHWFK�LQVWUXFWLRQV��WKHUH�LV�D�+2/'�OLQH�UXQQLQJ�IURP�WKH�'0$�FRQWUROOHU�WR�WKH�&38�DQG�D�+2/'$��KROG�DFNQRZOHGJH��OLQH�UXQQLQJ�IURP�WKH�&38�WR�WKH�'0$�FRQWUROOHU��7R�XVH�WKH�EXVHV��WKH�'0$�FRQWUROOHU�PXVW�DVN�IRU�SHUPLVVLRQ�XVLQJ�WKH�+2/'�OLQH�DQG�UHFHLYH�LW�RQ�WKH�+2/'$�OLQH��,QFLGHQWDOO\��WKH�SURJUDPPHU�PD\�LQVWUXFW�WKH�&38�WR�ZLWKKROG�SHUPLVVLRQ�E\�XVLQJ�WKH�/2&.�SUHIL[�

Page 139: Linux assembly language programming

SURJUDPPHU�PD\�LQVWUXFW�WKH�&38�WR�ZLWKKROG�SHUPLVVLRQ�E\�XVLQJ�WKH�/2&.�SUHIL[�6HWWLQJ�XS�D�'0$�WUDQVIHU�UHTXLUHV�PRUH�ZRUN�RQ�WKH�SDUW�RI�WKH�SURJUDPPHU�WKDQ�VHWWLQJ�XS�D�����E\WH�UHDG��&RPPDQGV�PXVW�EH�LVVXHG�WR�ERWK�WKH�'0$�FRQWUROOHU�DQG�WKH�IORSS\�FRQWUROOHU��EXW�LW�UHVXOWV�LQ�VDYLQJ�D�JUHDW�GHDO�RI�&38�WLPH�6LQFH�DQ\�GHYLFH�ZKLFK�WUDQVIHUV�EORFNV�RI�GDWD�WR�DQG�IURP�PHPRU\�FDQ�WDNH�DGYDQWDJH�RI�'0$�VHUYLFH�WR�DYRLG�SODFLQJ�XQQHFHVVDU\�GHPDQGV�RQ�WKH�SURFHVVRU��D�'0$�KDQGOLQJ�FLUFXLW��YHU\�VLPLODU�WR�WKH�LQWHUUXSW�KDQGOLQJ�FLUFXLW�VKRZQ�LQ�)LJXUH������ZLWK�D�0DVWHU�DQG�D�6ODYH�'0$�FRQWUROOHU�H[LVWV�LQ�WKH�,6$�DUFKLWHFWXUH��7KHUH�LV�D�'0$54�OLQH�IRU�HDFK�GHYLFH�ZKLFK�JHWV�'0$�VHUYLFH��7KHVH�'0$�OLQHV�DUH�FDOOHG�'0$�FKDQQHOV�

)LJXUH�������)ORSS\�&RQWUROOHU�8VLQJ�'0$�LQVWHDG�RI�DQ�,QWHUUXSW

�����'HYLFHV�DV�)LOHV$�GHYLFH�LQGHSHQGHQW�ILOH�LV�D�OLVW�RI�E\WHV�ZLWK�D�QDPH��DQG�WKDWV�DOO�LW�LV��$V�VXFK��LW�LV�DQ�DEVWUDFWLRQ��,W�VRRQ�SURYHG�WR�EH�D�YHU\�XVHIXO�DEVWUDFWLRQ��,PPHGLDWHO\�LQ�WKH�ZDNH�RI�WKH�GHYLFH�LQGHSHQGHQW�ILOH�FRQFHSW�IROORZHG�DQRWKHU�LQQRYDWLRQ�RI�WKH�0XOWLFV�RSHUDWLQJ�V\VWHP��7KLV�ZDV�WKH�LGHD�WKDW�LW�VKRXOG�EH�SRVVLEOH�IRU�D�SURJUDPPHU�WR�WUHDW�,�2�GHYLFHV��SULQWHUV��WHUPLQDOV��HWF���DV�GHYLFH�LQGHSHQGHQW�ILOHV��7KLV�LGHD�LV�WKH�EDVLV�RI�WKH�8QL[�GHYLFH�GULYHU��,QSXWWLQJ�GDWD�IURP�D�GHYLFH�FDQ�WKHQ�EH�GRQH�MXVW�DV�\RX�ZRXOG��UHDG��IURP�D�ILOH��2XWSXWLQJ�GDWD�WR�D�GHYLFH�FDQ�EH�GRQH�MXVW�DV�\RX�ZRXOG��ZULWH��WR�D�ILOH��7XUQLQJ�ILOH�RSHUDWLRQV�LQWR�JHQHULF�GHYLFH�RSHUDWLRQV�PDNHV�XVLQJ�GHYLFHV�HDV\�IRU�WKH�DSSOLFDWLRQV�SURJUDPPHU�DQG�DOVR�FODULILHV�WKH�UROH�RI�WKH�GHYLFH�GULYHU��,WV�UROH�LV�WR�SURYLGH�WKH�NHUQHO�ZLWK�GHYLFH�VSHFLILF�YHUVLRQV�RI�UHDG����ZULWH����RSHQ����HWF���WKDW�FDQ�EH�DFFHVVHG�ZKHQ�LW�LV�SURFHVVLQJ�WKRVH�JHQHULF�V\VWHP�FDOOV�ZKLFK�FRPH�IURP�XVHU�SURJUDPV�)RU�H[DPSOH��LQ�VHFWLRQ������ZKHUH�D�0RUVH�FRGH�VSHDNHU�GHYLFH�LV�GHILQHG��WKH�IXQFWLRQ�FTBZULWH���LV�GHILQHG��7KLV�IXQFWLRQ�LV�FDOOHG�E\�WKH�NHUQHO�ZKHQ�WKH�V\VWHP�FDOO�ZULWH���LV�XVHG�WR�DFFHVV�WKH�0RUVH�&RGH�VSHDNHU��7KLV�PLJKW�KDSSHQ��IRU�H[DPSOH��ZKHQ�D�XVHU�VHQGV�D�VWULQJ�RI�WH[W�WR�WKH�VSHDNHU������OLQX[ER[��HFKR��+HOOR�ZRUOG��!��GHY�FT%HFDXVH�PRVW�GHYLFHV�DUH�LGLRV\QFUDWLF�LQ�DW�OHDVW�VRPH�UHVSHFW�RU�RWKHU��WKHUH�PXVW�EH�URRP�OHIW�RYHU�IRU�IHDWXUHV�WKDW�GR�QRW�ILW�LQWR�WKH�JHQHULF�UHDG�DQG�ZULWH�W\SH�V\VWHP�FDOOV��7KH�V\VWHP�FDOO�LRFWO���LV�GHVLJQHG�WR�WDNH�FDUH�RI�WKHVH�OHIWRYHUV��(DFK�LGLRV\QFUDWLF�IHDWXUH�LV�DVVLJQHG�D�XQLTXH�QXPEHU�FDOOHG�D�PDJLF�QXPEHU��$Q�LGLRV\QFUDWLF�IHDWXUH�RI�WKH�VSHDNHU��IRU�H[DPSOH��LV�LWV�SLWFK��:KHQ�LRFWO���FDOOV�WKH�VSHDNHU�IXQFWLRQ�FTBLRFWO���XVLQJ�WKH�FRUUHFW�PDJLF�QXPEHU��WKH�SLWFK�VHWWLQJ�IXQFWLRQ�LV�FDOOHG�7KH�FRQQRWDWLRQV�RI�WKH�WHUP�PDJLF�QXPEHU�DUH�XQIRUWXQDWH��SXWWLQJ�DV�WKH\�GR�DQ�DXUD�RI�P\VWHU\�DURXQG�D�PHUH�GHWDLO�DQG�YDOXH�RQ�SULYLOHJHG�LQIRUPDWLRQ�ZKHUH�D�YDOXH�RQ�RSHQQHVV�ZRXOG�EH�PRUH�VRFLDOO\�UHVSRQVLEOH��6WXSLG�QXPEHU�ZRXOG�EH�EHWWHU��%XW��EH�WKDW�DV�LW�PD\��PDJLF�QXPEHUV�DUH�DW�OHDVW�QRW�KDUG�WR�ILQG��7KH\�DUH��E\�FRQYHQWLRQ��JLYHQ�LQ��GHILQH�VWDWHPHQWV�ZKHUH�WKHLU�XVDJH�LV�H[SODLQHG��326,;�FRQYHQWLRQV�UHTXLUH�WKDW�PDJLF�QXPEHUV�EH�QRW�RQO\�XQLTXH�IRU�D�GHYLFH��EXW�V\VWHPZLGH�XQLTXH�

Page 140: Linux assembly language programming

,Q�WKH�IROORZLQJ�VHFWLRQV��WZR�H[DPSOHV�RI�GHYLFH�GULYHUV�DUH�SUHVHQWHG��7KH�SXUSRVH�RI�WKHVH�H[DPSOHV�LV�WR�VKRZ�ZKDW�LV�LQYROYHG�LQ�ZULWLQJ�D�GHYLFH�GULYHU�ZKLFK�LQFRUSRUDWHV�VRPH�DVVHPEO\�FRGH��7KH�ILUVW�GULYHU�LV�D�WR\��,WV�UHDVRQ�IRU�H[LVWHQFH�LV�WR�VHUYH�DV�DQ�H[DPSOH�RI�D�GHYLFH�GULYHU��7KH�VHFRQG�GULYHU�ZDV�ZULWWHQ�LQ�UHVSRQVH�WR�D�UHTXHVW�IURP�D�IULHQG�ZKR�QHHGHG�WR�LQSXW�GDWD�IURP�DQ�H[WHUQDO�GHYLFH�DV�SDUW�RI�D�UHVHDUFK�SURMHFW�LQYROYLQJ�WKH�PHDVXUHPHQW�RI�OL]DUG�PHWDEROLF�UDWHV��7KH�JRDO�RI�WKH�UHVHDUFK�LV�D�EHWWHU�XQGHUVWDQGLQJ�WKH�PHFKDQLVP�E\�ZKLFK�HQYLURQPHQWDO�YDULDWLRQV�EULQJ�DERXW�OL]DUG�VSHFLDWLRQ��DQG�DOVR�H[WLQFWLRQV���6R��DOWKRXJK�LW�LV�QRW�D�ELJ�SURJUDP��LW�LV�QRW�MXVW�D�WR\��7KH�PDLQ�IHDWXUH�WKH�VHFRQG�GULYHU�KDV�WKDW�WKH�ILUVW�RQH�GRHV�QRW�KDYH�LV�WKDW�LW�LQVWDOOV�LWV�RZQ�LQWHUUXSW�KDQGOHU��7KH�0RUVH�&RGH�GULYHU�PHUHO\�DGGV�VRPH�FKRUHV�WR�WKRVH�RI�DQ�DOUHDG\�LQVWDOOHG�KDQGOHU������0RUVH�&RGH�6SHDNHU�'ULYHU7KH�EDVLF�VWUXFWXUH�ZKLFK�LV�XVHG�WR�FRQQHFW�GHYLFH�VSHFLILF�IXQFWLRQV��VXFK�DV�FTBZULWH����ZLWK�WKHLU�JHQHULF�FRXQWHUSDUWV��VXFK�DV�ZULWH���LV�WKH�ILOH�RSHUDWLRQV�VWUXFWXUH��������7KH�ILOHBRSHUDWLRQV�6WUXFWXUH7KH�GHILQLWLRQ�RI�WKLV�VWUXFWXUH�LV�LQ��XVU�VUF�OLQX[�LQFOXGH�OLQX[�IV�K��$�VLPSOLILHG�YHUVLRQ�RI�LW�LV�JLYHQ�KHUH�VWUXFW�ILOHBRSHUDWLRQV�̂���ORQJ�ORQJ� �OOVHHN�������LQW� �UHDG�������LQW� �ZULWH�������LQW� �UHDGGLU�������LQW� �SROO�������LQW� �LRFWO�������LQW� �PPDS�������LQW� �RSHQ�������LQW� �IOXVK�������LQW� �UHOHDVH�������LQW� �IV\QF�������LQW� �IDV\QF�������LQW� �FKHFNBPHGLDBFKDQJH�������LQW� �UHYDOLGDWH�������LQW� �ORFN���`�$OO�WKH�FRPSRQHQWV�RI�WKLV�VWUXFWXUH�DUH�SRLQWHUV�WR�IXQFWLRQV��7KH�IXQFWLRQ�QDPHV�DUH�JLYHQ�H[DFWO\��EXW�WKHLU�SDUDPHWHU�GHFODUDWLRQV�DUH�RPLWWHG�DQG�WKH�UHWXUQ�W\SHV�DUH�JLYHQ�XVLQJ�D�IDPLOLDU�EXW�QRQSRUWDEOH�[���YHUVLRQ��H�J��LQW�LQVWHDG�RI�WKH�PRUH�SRUWDEOH�VVL]HBW��7KH�XVH�RI�W\SHV�VXFK�DV�VVL]HBW��KRZHYHU�YDOXDEOH�IRU�WKH�VDNH�RI�JHWWLQJ�WKH�VDPH�FRGH�WR�FRPSLOH�DQG�UXQ�RQ�GLIIHUHQW�DUFKLWHFWXUHV��KDV�D�VHULRXV�GRZQVLGH�ZKHQ�LW�FRPHV�WR�UHDGLQJ�WKH�FRGH��)RU�H[DPSOH�WR�FKDVH�GRZQ�WKH�GHILQLWLRQ�RI�VVL]HBW��ZH�QHHG�WR�ILQG�����W\SHGHI�BBNHUQHOBVVL]HBW�VVL]HBW�LQ��XVU�VUF�OLQX[�LQFOXGH�OLQX[�W\SHV�K�DQG�WKHQ�����W\SHGHI�LQW�BBNHUQHOBVVL]HBW�LQ��XVU�VUF�OLQX[�LQFOXGH�DVP�L����SRVL[BW\SHV�K��/HDUQLQJ�DQ�RSHUDWLQJ�V\VWHP�VKRXOG�QRW�WXUQ�LQWR�DQ�H[HUFLVH�LQ�XVLQJ�WKH�JUHS�FRPPDQG�7KH�FUHDWLRQ�RI�DQ�LQVWDQFH�RI�VWUXFW�ILOH�RSHUDWLRQV�IRU�D�SDUWLFXODU�GHYLFH�LV�WKH�NH\�WR�ZULWLQJ�D�GHYLFH�GULYHU��7KH�ELJJHVW�SDUW�RI�ZULWLQJ�WKH�GULYHU�LV�GHILQLQJ�WKH�IXQFWLRQV�LQ�WKLV�VWUXFWXUH��7KHVH�IXQFWLRQV�KDQGOH�WKH�V\VWHP�FDOOV�ZKLFK�UHVXOW�LQ�FDOOV�IURP�WKH�V\VWHP�WR�WKH�GHYLFH��+DQGOLQJ�FDOOV�IURP�WKH�GHYLFH�WR�WKH�V\VWHP�UHTXLUHV�VHWWLQJ�XS�DQ�LQWHUUXSW�KDQGOHU��RU�DV�LQ�WKH�FDVH�RI�WKH�0RUVH�&RGH�VSHDNHU�GULYHU��SLJJ\�EDFNLQJ�RII�RI�DQ�H[LVWLQJ�LQWHUUXSW�KDQGOHU��1RW�DOO�RI�WKH�IXQFWLRQV�QDPHG�LQ�WKH�VWUXFW�ILOHBRSHUDWLRQV�VWUXFWXUH�DUH�QHHGHG�LQ�HYHU\�GHYLFH��8QQHHGHG�FRPSRQHQWV�PD\�VLPSO\�EH�GHILQHG�DV�

Page 141: Linux assembly language programming

ILOHBRSHUDWLRQV�VWUXFWXUH�DUH�QHHGHG�LQ�HYHU\�GHYLFH��8QQHHGHG�FRPSRQHQWV�PD\�VLPSO\�EH�GHILQHG�DV�18//��)RU�WKH�0RUVH�&RGH�GULYHU��WKH�IROORZLQJ�GHFODUDWLRQ�VHWV�XS�WKH�QHHGHG�ILOH�RSHUDWLRQV�VWUXFWXUH�VWDWLF�VWUXFW�ILOHBRSHUDWLRQV�FTBIRSV� �̂���FTBOVHHN�����18//����� �FTBUHDG� �����FTBZULWH�����18//����� �FTBUHDGGLU� �����18//����� �FT�SROO� �����FTBLRFWO�����18//����� �FTBPPDS� �����FTBRSHQ�����18//����� �FT�IOXVK� �����FTBUHOHDVH`�7KH�FRGLQJ�IRU�WKHVH�FRPSRQHQW�IXQFWLRQV�LV�JLYHQ�LQ�VHFWLRQ����������7KH�RPLWWHG�FRPSRQHQWV�IROORZLQJ�FTBUHOHDVH�PD\�EH�VDIHO\�OHIW�WR�JFF�ZKLFK�ILOOV�WKHP�LQ�ZLWK�WKH�YDOXH�18//�3URJUDP������YRLG�GHOD\�LQW�L��̂���� �9(5<�URXJKO\���GHOD\�E\�L�KXQGUHGWKV�RI�D�VHFRQG��� �����L� �L� ����������� �0XOWLSO\�E\�D�PLOOLRQ��� �����ZKLOH�L�!����L� �L������� �&RXOG�EH�MXVW�RQH�LQVWUXFWLRQ��� �� �0DQ\�LQVWUXFWLRQV�WDNH�MXVW�RQH�FORFN�F\FOH��� �� �2Q�D�����0+]�PDFKLQH�RQH�PLOOLRQ�FORFN�F\FOHV�WDNH�����VHF��� �`�������7LPLQJ�8VLQJ�'HOD\�/RRSV%HIRUH�JHWWLQJ�LQWR�WKH�GHWDLOV�RI�WKH�LQGLYLGXDO�IXQFWLRQV��KRZHYHU��LW�ZRXOG�EH�ZRUWK�ZKLOH�WR�WDNH�DQ�RYHUYLHZ�RI�KRZ�WKH�ZKROH�WKLQJ�ZRUNV��,Q�DQ�XQSURWHFWHG�VLQJOH�XVHU�V\VWHP�VXFK�DV�LQ�'26��IRU�H[DPSOH��ZH�FRXOG�WXUQ�WKH�VSHDNHU�RQ�DQG�RII�DW�ZLOO�XVLQJ�,1�DQG�287�LQVWUXFWLRQV��7KH�WLPLQJ�RI�WKH�RQV�DQG�RIIV�FRXOG�EH�PDQDJHG�XVLQJ�GHOD\�ORRSV�DV�VKRZQ�LQ�3URJUDP�������7KH�WLPH�VSHQW�LQ�WKHVH�GHOD\�ORRSV�ZRXOG�QRW�EH�D�ELJ�SUREOHP�VLQFH��DV�D�VLQJOH�XVHU�V\VWHP��WKH�PDFKLQH�ZRXOG�SUREDEO\�QRW�EH�GRLQJ�DQ\WKLQJ�HOVH�DQ\ZD\�:H�FRXOG�DOVR�XVH�WKLV�WHFKQLTXH�LQ�D�/LQX[�GHYLFH�GULYHU��7KHUH�LV�QRWKLQJ�WR�VWRS�XV��3URJUDP������VKRZV�WKH�UHVXOW��+RZHYHU��LQ�D�/LQX[�GHYLFH�GULYHU�WKLV�FRGH�ZRXOG�EH�WHUULEOH��/LQX[�GRHV�QRW�LQWHUUXSW�NHUQHO�FRGH��6LQFH�GHYLFH�GULYHUV�DUH�SDUW�RI�WKH�NHUQHO��WKLV�FRGH�ZRXOG�QHYHU�JHW�WLPHG�RXW��,W�ZRXOG�PRQRSROL]H�WKH�V\VWHP�,QVWHDG�RI�VWUDQJOLQJ�WKH�FRPSXWHU��WKH�GULYHU�QHHGV�WR�OHW�JR�RI�WKH�&38�DQG�UHVFKHGXOH�LWVHOI�IRU�H[HFXWLRQ�DW�D�ODWHU�WLPH��7KH�GULYHU�FDQ�GR�WKLV�E\�WDNLQJ�DGYDQWDJH�RI�H[LVWLQJ�/LQX[�V\VWHP�UHVRXUFHV��LQ�WKLV�FDVH�WKH�V\VWHP�WLPHU��7KH�V\VWHP�WLPHU�LV�D�FORFN�ZKLFK�LQWHUUXSWV�WKH�SURFHVVRU�HYHU\�����VHFRQG��,W�XVHV�,54�����,Q�/LQX[��DOO�LQWHUUXSWV�DUH�FRXQWHG�DQG�WKH�FRXQWV�DUH�GLVSOD\HG�LQ�WKH��SURF�LQWHUUXSWV�GLUHFWRU\��7KH�FRXQWHU�IRU�WKH�WLPHU�LQWHUUXSW�LV�FDOOHG�MLIILHV�DQG�LWV�YDOXH�LV�GLVSOD\HG�DORQJ�ZLWK�WKH�RWKHU�LQWHUUXSW�FRXQWV��:KHQ�WKH�,65�IRU�WKLV�LQWHUUXSW�H[HFXWHV��LW�FKHFNV�D�TXHXH�RI�MREV�ZKLFK�KDYH�D�VFKHGXOHG�H[HFXWLRQ�WLPH��7KLV�TXHXH�LV�FDOOHG�WKH�WLPHU�TXHXH��������7KH�7LPHU�4XHXH8VLQJ�WKH�WLPHU�TXHXH�LV�QRW�GLIILFXOW��(DFK�WLPHU�TXHXH�HQWU\�LV�OLNH�D�KDQG\�OLWWOH�RUGHU�IRUP��,W�KDV�VWUXFWXUH�VKRZQ�LQ�)LJXUH�������:KHQ�VXEPLWWLQJ�DQ�RUGHU��\RX�ILOO�LQ�WKH�ODVW�WKUHH�LWHPV�DQG�OHDYH�WKH�ILUVW�WZR�EODQN�

)LJXUH�������'HILQLWLRQ�RI�WKH�7LPHU�4XHXH

Page 142: Linux assembly language programming

)LJXUH�������'HILQLWLRQ�RI�WKH�7LPHU�4XHXH

3URJUDP������ZKLOH��&RGH�QRW�GRQH!��̂���LI��'RW�VWDUWV!�����^���������VSHDNHUBRQ������������GWLPH� ��������`����HOVH�LI��'DVK�VWDUWV!�����^��������VSHDNHUBRQ�����������GWLPH� ��������`����HOVH�LI��'RW�RU�'DVK�VWRSV!�����^��������VSHDNHUBRII�����������GWLPH� ��������`����GHOD\�GWLPH����������� �GWLPH�LV�KRZ�ORQJ�WR�UXQ�WKH�GHOD\�ORRS��� �`

z QH[W�DQG�SUHY�DUH�W\SLFDO�GRXEO\�OLQNHG�OLVW�SRLQWHUV��2Q�D�VXEPLWWHG�MRE��WKH\�VKRXOG�EH�VHW�WR�18//�7KH\�DUH�UHVHW�ODWHU�E\�/LQX[�ZKHQ�WKH�HQWU\�LV�OLQNHG�LQWR�WKH�WLPHU�TXHXH�z H[SLUHV�LV�WKH�WLPH�LQ�MLIILHV�ZKHQ�WKH�MRE�LV�VXSSRVHG�WR�EHJLQ�H[HFXWLQJ�z 7KH�IXQFWLRQ�FRPSRQHQW�LV�WKH�MRE�WR�EH�GRQH��$V�LWV�QDPH�LPSOLHV��LW�LV�MXVW�D�SRLQWHU�WR�D�IXQFWLRQ��:KHQ�WKH�WLPH�VSHFLILHG�LQ�H[SLUHV�DUULYHV��WKH�IXQFWLRQ�SRLQWHG�DW�E\�IXQFWLRQ�JHWV�FDOOHG�z 7KH�GDWD�FRPSRQHQW�LV�WKH�DUJXPHQW�SDVVHG�WR�WKH�IXQFWLRQ�SRLQWHG�DW�E\�IXQFWLRQ�

7R�VXEPLW�RQH�RI�WKHVH�RUGHU�IRUPV�WR�/LQX[��\RX�FDOO�WKH�DGGBWLPHU���IXQFWLRQ�RQ�D�SRLQWHU�WR�LW��7KDWV�DOO�WKHUH�LV�WR�XVLQJ�WKH�WLPHU�TXHXH�3URJUDP������YRLG�FTBWLPHUBKDQGOHU�XQVLJQHG�ORQJ�[��̂���XQVLJQHG�ORQJ�GWLPH�

Page 143: Linux assembly language programming

����XQVLJQHG�ORQJ�GWLPH�������������� �GWLPH�LV�KRZ�ORQJ�WR�ZDLW�RQ�WKH�WLPHU�TXHXH�����LI��&RGH�QRW�GRQH!�����^��������LI��'RW�VWDUWV!���������^������������VSHDNHUBRQ���������������GWLPH� ������������`��������HOVH�LI��'DVK�VWDUWV!���������^������������VSHDNHUBRQ���������������GWLPH� ������������`��������HOVH�LI��'RW�RU�'DVK�VWRSV!���������^������������VSHDNHUBRII���������������GWLPH� ������������`���������FTBWLPHU��!�H[SLUHV�� �MLIILHV���GWLPH����������FTBWLPHU��!�IXQFWLRQ�� �FTBWLPHU�KDQGOHU������������������ �+HUH�FTBWLPHUBKDQGOHU�LV�DGGLQJ�LWV���������������������RZQ�QDPH�WR�WKH�WLPHU�TXHXH�HQWU\�IRUP��� ���������DGGBWLPHU�FTBWLPHU������������������� �1RZ�VXEPLW�WKH�TXHXH�HQWU\��� �����``,I�ZH�XVH�WKH�WLPHU�TXHXH�WR�IL[�3URJUDP�������3URJUDP������UHVXOWV��,W�LV�HVVHQWLDOO\�WKH�VDPH�DV�3URJUDP������H[FHSW�WKDW�LW�H[LWV�SURPSWO\�DIWHU�LW�WXUQV�WKH�VSHDNHU�RQ�RU�RII�LQVWHDG�RI�KRJJLQJ�WKH�&38��,W�UHOLHV�RQ�WKH�WLPHU�LQWHUUXSW�WR�JHW�LWVHOI�FDOOHG�DJDLQ�ODWHU��7KH�GDWD�FRPSRQHQW�RI�WKH�VWUXFW�WLPHUBOLVW�VWUXFWXUH�LV�QRW�XVHG��2QFH�WKLV�FRGH�LV�FDOOHG��LW�XVHV�WKH�WLPHU�WR�FDOO�LWVHOI�EDFN�DJDLQ��,W�LV�D�OLWWOH�OLNH�UHFXUVLRQ��H[FHSW�WKDW�LW�GRHV�QRW�FDOO�LWVHOI�GLUHFWO\��EXW�LQGLUHFWO\��E\�VHQGLQJ�LWV�QDPH�WR�WKH�WLPHU�TXHXH��6LQFH�DQ\�IXQFWLRQ�FDQ�DGG�WKLV�HQWU\�WR�WKH�WLPHU�TXHXH��WKHUH�LV�QR�SUREOHP�JHWWLQJ�LW�VWDUWHG��,Q�IDFW��WKLV�LV�GRQH�E\�FTBZULWH����������'HYLFH�0HPRU\7KH�QH[W�SUREOHP�ZH�IDFH�LQ�ZULWLQJ�WKLV�GULYHU�LV�PHPRU\�DFFHVV��7KH�PHPRU\�ODEHOV��YDULDEOH�QDPHV�DQG�IXQFWLRQ�QDPHV��XVHG�LQ�3URJUDP������DUH�UHIHUHQFHG�ZKHQ�WKH�,65�IRU�LQWHUUXSW����LV�H[HFXWHG��7KLV�LQWHUUXSW�PD\�RFFXU�GXULQJ�WKH�UXQQLQJ�RI�DQ\�SURFHVV��7KH�SDJH�WDEOHV�LQ�HIIHFW�DW�WKDW�WLPH�DUH�WKRVH�EHORQJLQJ�WR�ZKDWHYHU�SURFHVV�KDSSHQV�WR�EH�UXQQLQJ�DW�WKDW�WLPH��,W�QHHG�QRW�EH�WKH�SURFHVV�WKDW�LV�VHQGLQJ�WH[W�WR�WKH�VSHDNHU�1RWH�WKDW�LQ�WKH�XQFRGHG�SRUWLRQV�RI�3URJUDP�������VXFK�DV��'RW�VWDUWV!�RU��&RGH�QRW�GRQH!��WKHUH�PXVW�EH�UHIHUHQFHV�WR�WKH�WH[W�EHLQJ�VHQW�WR�WKH�VSHDNHU��7KLV�WH[W�LV�ORFDWHG�LQ�PHPRU\�EHORQJLQJ�WR�WKH�SURFHVV�ZKLFK�RULJLQDOO\�FDOOHG�WKH�GHYLFH�GULYHU��+RZHYHU��JHWWLQJ�DFFHVV�WR�WKLV�PHPRU\�LV�D�SUREOHP��7KH�SUREOHP�LV�QRW�DFFHVV�ULJKWV��LW�LV�ILQGLQJ�D�XVDEOH�DGGUHVV��7KH�RQO\�DGGUHVV�ZH�KDYH�IRU�WKLV�WH[W�LV�GHILQHG�UHODWLYH�WR�D�VHW�RI�SDJH�WDEOHV�WKDW�DUH�SRLQWHG�DW�E\�D�&5��YDOXH�WKDW�LV�QRW�ORDGHG�LQWR�&5���.HUQHO�SULYLOHJHV�GR�QRW�VROYH�WKLV�SUREOHP��'RLQJ�D�WDVN�VZLWFK�EDFN�WR�WKH�FDOOLQJ�SURFHVV�ZRXOG�UHVWRUH�WKH�&5��YDOXH�QHHGHG�WR�DFFHVV�WKH�SDJH�WDEOHV��EXW�LI�DOO�ZH�QHHG�WR�GR�LV�WR�WXUQ�WKH�VSHDNHU�RQ�RU�RII��WKHQ�WKLV�ZRXOG�EH�D�ULGLFXORXV�ZDVWH�RI�WLPH�$�JRRG�VROXWLRQ�WR�WKLV�SUREOHP�LV�WR�VHW�DVLGH�VRPH�NHUQHO�PHPRU\�IRU�WKH�GHYLFH�DQG�KDYH�FTBZULWH��FRS\�IURP�WKH�XVHUV�PHPRU\�LQWR�WKH�GHYLFHV�PHPRU\��8QOLNH�FTBWLPHUBKDQGOHU����FTBZULWH���LV�FDOOHG�LQ�UHVSRQVH�WR�D�XVHUV�V\VWHP�FDOO�DQG�H[HFXWHV�ZKLOH�WKH�XVHUV�SDJH�WDEOHV�DUH�VWLOO�LQ�HIIHFW��$W�WKDW�WLPH��ORFDWLQJ�WKH�WH[W�LV�QRW�D�SUREOHP��%XW�OLNH�FTBWLPHUBKDQGOHU����LW�H[HFXWHV�ZLWK�NHUQHO�SULYLOHJH�VR�LW�KDV�WKH�ULJKWV�QHHGHG�WR�DFFHVV�NHUQHO�PHPRU\�6LQFH�NHUQHO�DGGUHVVHV�DUH�VKDUHG�V\VWHPZLGH��WKH\�DUH�YDOLG�QR�PDWWHU�ZKDW�SURFHVV�LV�UXQQLQJ��)RU�H[DPSOH��ZH�FDQ�ORRN�XS�WKH�DGGUHVV�RI�MLIILHV�RU�DGGBWLPHU�DQ\�WLPH�ZH�ZDQW�E\�GRLQJ�D�JUHS�VXFK�DV

Page 144: Linux assembly language programming

�����OLQX[ER[��JUHS�MLIILHV��6\VWHP�PDS(VVHQWLDOO\��DOO�GHYLFHV�QHHG�VRPH�PHPRU\�RI�WKHLU�RZQ�LQ�RUGHU�WR�IXQFWLRQ��7KH�VWUXFWXUH�ZKRVH�GHILQLWLRQ�LV�VKRZQ�LQ�)LJXUH������VHWV�DVLGH�GHYLFH�PHPRU\�QHHGHG�IRU�WKH�VSHDNHU�GULYHU��7KH�FRPSRQHQWV�RI�WKLV�VWUXFWXUH�DUH

)LJXUH�������'HYLFH�0HPRU\�IRU�6SHDNHU

z IODJV��7KH�ELWV�RI�WKH�IODJV�FDUU\�LQIRUPDWLRQ�DERXW�WKH�VWDWH�RI�WKH�GHYLFH�������GHILQH�&4B(;,67���[����������GHILQH�&4B%86<����[����������GHILQH�&4B2))�����[����7KH�&4B(;,67�ELW�PHUHO\�LQGLFDWHV�WKDW�WKH�GHYLFH�GULYHU�LV�LQVWDOOHG��7KH�&4B%86<�ELW�LV�XVHG�WR�NHHS�PRUH�WKDQ�RQH�SURFHVV�IURP�XVLQJ�WKH�GHYLFH�DW�WKH�VDPH�WLPH��7KLV�ELW�LV�FKHFNHG�ZKHQ�RSHQ���LV�FDOOHG�RQ�WKH�GHYLFH��%ORFNLQJ�RWKHU�SURFHVVHV�IURP�XVLQJ��GHY�FT�GRHV�QRW�EORFN�WKHP�IURP�XVLQJ�WKH�VSHDNHU��$�FWUO�*��D�EHHS��VHQW�WR�WKH�WHUPLQDO�ZLOO�VWLOO�JHW�WKURXJK��$�WUXH�VSHDNHU�GHYLFH�GULYHU�ZRXOG�QRW�OHW�WKLV�KDSSHQ��$OO�NHUQHO�FRGH�DFFHVVLQJ�WKH�VSHDNHU�ZRXOG�EH�UHURXWHG�WKURXJK�WKH�VSHDNHU�GULYHU��%XW�VLQFH�HPHUJHQF\�FRGH�QHHGV�GLUHFW�DFFHVV�WR�WKH�VSHDNHU��WKLV�ZRXOG�QRW�EH�GHVLUDEOH��7KH�&4B2))�ELW�LQGLFDWHV�WKDW�WKH�GHYLFH�GULYHU�KDV�WKH�VSHDNHU�WXUQHG�RII�DW�WKH�PRPHQW��7KLV�ELW�LV�FKHFNHG�HYHU\�WLPH�FTBWLPHUBKDQGOHU���LV�FDOOHG��7KHVH�GHILQLWLRQV�DUH�DOZD\V�LQVHUWHG�LQWR�D�KHDGHU�ILOH�DVVRFLDWHG�ZLWK�WKH�GHYLFH��,Q�WKLV�FDVH��WKH�ILOH�QDPH�FT�K�LV�PRUH�RU�OHVV�LQHYLWDEOH�

z WLPHUGLY��7KH�WLPHUGLY�FRPSRQHQW�KROGV�WKH�YDOXH�RI�WKH�WLPHU�GLYLVRU�ZKLFK�GHWHUPLQHV�WKH�SLWFK�RI�WKH�VSHDNHU��3XWWLQJ�WKLV�QXPEHU�LQWR�GHYLFH�PHPRU\�DOORZV�WKH�SLWFK�WR�EH�UHVHW�HYHU\�WLPH�WKH�0RUVH�VSHDNHU�LV�XVHG��WKXV�SURWHFWLQJ�LW�IURP�EHLQJ�FKDQJHG�E\�D�FWUO�*�IURP�VRPH�RWKHU�SURFHVV��DQG�VWLOO�EH�PRGLILDEOH�XVLQJ�LRFWO���z ZKROHQRWH��6LPLODUO\��WKH�ZKROHQRWH�FRPSRQHQW�KROGV�D�XQLW�WLPH�YDOXH�WKDW�LV�XVHG�DV�WKH�EDVLV�IRU�FDOFXODWLQJ�DOO�WKH�RWKHU�WLPH�YDOXHV�LQ�WKH�SURJUDP��$OWHULQJ�WKLV�YDOXH�FKDQJHV�WKH�RYHUDOO�UDWH�DW�ZKLFK�WKH�0RUVH�&RGH�FRPHV�RXW�RI�WKH�VSHDNHU��,W�LV�JLYHQ�LQ�WHUPV�RI�WKH�GXUDWLRQ�RI�RQH�PXVLFDO��ZKROH�QRWH��z EXIIHU>&4B%8))(5B6,=(@��7KH�EXIIHU��EXIIHU�>&4B%8))(5B6,=(@��KROGV�WKH�WH[W�IURP�WKH�FDOOLQJ�SURFHVV��7KLV�LV�WKH�WH[W�ZKLFK�LV�LQ�WKH�SURFHVV�RI�EHLQJ�VHQW�WR�WKH�VSHDNHU��7KH�IDFW�WKDW�WH[W�LV�VWRUHG�KHUH�LQ�NHUQHO�PHPRU\�LV�ZKDW�PDNHV�LW�XQQHFHVVDU\�WR�GR�D�WDVN�VZLWFK�HYHU\�WLPH�WKH�VSHDNHU�LV�UHDG\�IRU�DQRWKHU�OHWWHU�z PFRGH��7KH�SRLQWHU��PFRGH��NHHSV�WUDFN�RI�ZKHUH�LQ�WKH�VWULQJ�RI�GRWV�DQG�GDVKHV�IRU�WKH�FXUUHQW�FKDUDFWHU�ZH�DUH�z EXIIHUBRIIVHW��7KH�EXIIHUBRIIVHW�FRPSRQHQW�SLFNV�RXW�ZKLFK�FKDUDFWHU�LQ�WKH�EXIIHU�WKH�VSHDNHU�LV�FXUUHQWO\�ZRUNLQJ�RQ�z EXIIHUBHQG��7KH�EXIIHUBHQG�PDUNV�WKH�HQG�RI�WKH�FXUUHQW�EXIIHU�ORDG��,W�LV�XVXDOO\�MXVW�WKH�VDPH�DV�

Page 145: Linux assembly language programming

z EXIIHUBHQG��7KH�EXIIHUBHQG�PDUNV�WKH�HQG�RI�WKH�FXUUHQW�EXIIHU�ORDG��,W�LV�XVXDOO\�MXVW�WKH�VDPH�DV�&4B%8))(5B6,=(��%XW�LQ�FDVH�WKH�EXIIHU�LV�JLYHQ�RQO\�D�SDUWLDO�ORDG��EXIIHUBHQG�DOORZV�WKH�GULYHU�WR�TXLW�RQ�WLPH�ZLWKRXW�UXQQLQJ�DOO�WKH�ZD\�WR�WKH�HQG�RI�WKH�EXIIHU�z FTBZDLWBT��7KH�ODVW�FRPSRQHQW��FTBZDLWBT��LV�WKHUH�EHFDXVH�DOWKRXJK�WKH�WH[W�EXIIHU��EXIIHU>&4B%8))(5B6,=(@��LV�D�JRRG�LGHD��LW�GRHV�QRW�FRPSOHWHO\�VROYH�WKH�SUREOHP�RI�DFFHVVLQJ�WKH�XVHUV�WH[W��:KHQ�DOO�WKH�WH[W�LQ�WKH�EXIIHU�KDV�EHHQ�VHQW�WR�WKH�VSHDNHU�DQG�WKHUH�LV�PRUH�WR�JR��WKHQ�ZHUH�EDFN�ZKHUH�ZH�ZHUH�EHIRUH�ZKHQ�ZH�KDG�QR�EXIIHU��WU\LQJ�WR�JHW�DKROG�RI�XVHUV�WH[W�ZKHQ�WKH�XVHUV�SURFHVV�LV�QRW�UXQQLQJ��DQG�KHQFH�WKH�XVHUV�DGGUHVV�VSDFH�LV�QRW�IXQFWLRQDO��

7KH�EXIIHU�LQ�GHYLFH�PHPRU\�GRHV�QRW�HOLPLQDWH�WKH�QHHG�WR�GR�WDVN�VZLWFKHV��,W�FDQ�RQO\�UHGXFH�WKH�QXPEHU�RI�WKH�WKHP��,W�FDQ�GR�WKLV�E\�PDNLQJ�WKH�EXIIHU�ODUJHU��7KH�ELJJHU�WKH�EXIIHU��WKH�OHVV�RIWHQ�D�WDVN�VZLWFK�LV�QHHGHG��%XW�D�ELJJHU�EXIIHU�LQFUHDVHV�WKH�VL]H�RI�NHUQHO�PHPRU\��:H�KDYH�KHUH�D�W\SLFDO�WLPH�YV��VSDFH�WUDGH�RII�7KH�XVHU�FDOOHG�SURFHVV��ZKLFK�ILOOV�WKH�EXIIHU��DQG�WKH�WLPHU�KDQGOHU��ZKLFK�HPSWLHV�WKH�EXIIHU��DUH�DQ�H[DPSOH�RI�ZKDW�LV�FDOOHG�D�SURGXFHU�FRQVXPHU�SDLU��������:DLW�4XHXHV:DLW�TXHXHV�ZHUH�GHVLJQHG�WR�DOORZ�SURFHVVHV�WR�VXVSHQG�RSHUDWLRQ�LV�VXFK�D�ZD\�WKDW�WKH\�FDQ�EH�HDVLO\�UHDFWLYDWHG�ZKHQ�QHHGHG��)RU�H[DPSOH��D�SURGXFHU�FDQ�VXVSHQG�RSHUDWLRQ�ZKHQ�LW�KDV�SURGXFHG�D�VXUSOXV�DQG�EH�UHDFWLYDWHG�E\�D�FRQVXPHU�ZKHQ�WKH�VXSSO\�LV�H[KDXVWHG�$�SURFHVV�PD\�VXVSHQG�LWV�RZQ�RSHUDWLRQ�E\�FDOOLQJ�VOHHSBRQ����,W�FDQ�EH�UHDFWLYDWHG�XVLQJ�ZDNHBRQ���,Q�WKH�FDVH�RI�RXU�VSHDNHU�GULYHU��WKH�SURGXFHU�FTBZULWH���ILOOV�FTBDUHD�EXIIHU��WKH�VSHDNHUV�WH[W�EXIIHU��DQG�FRXOG�FDOO�VOHHSBRQ���DV�VRRQ�DV�LW�ZDV�GRQH��:KHQ�WKH�WLPHU�KDQGOHU�FTBWLPHUBKDQGOHU���KDV�XVHG�XS�D�EXIIHU�ORDG�E\�VHQGLQJ�LW�RII�WR�WKH�VSHDNHU��LW�FRXOG�FDOO�WKH�IXQFWLRQ�ZDNHBXS���WR�JHW�FTBZULWH���WR�ILOO�WKH�EXIIHU�EDFN�XS�DJDLQ�)URP�WKH�QDPH�ZDNHBXS���ZH�PLJKW�JHW�WKH�LGHD�WKDW�DQ�LPPHGLDWH�WDVN�VZLWFK�ZRXOG�EH�LQLWLDWHG��,Q�IDFW�ZKDW�KDSSHQV�LV�WKDW�WKH�SURFHVV�UXQQLQJ�FTBZULWH���JHWV�SXW�EDFN�RQ�D�TXHXH�FDOOHG�WKH�UXQ�TXHXH��ZKLFK�FRQVLVWV�RI�DOO�SURFHVVHV�ZKLFK3URJUDP������FTBZULWH��)LOH!��X��Q��̂ �7KLV�SURJUDP�SXWV�LWVHOI�WR�VOHHS�������������DIWHU�LW�ILOOV�GHYLFH�PHPRU\��� �����LQW�N��WRWDO� �������ZKLOH�WRWDO���Q�����^��������N� �&4B%8))(5B6,=(���������FRS\BIURPBXVHU�FTBDUHD�EXIIHU��N��X����������DGGBWLPHU�FTBWLPHU��� �6WDUW�WLPHU�KDQGOHU� ���������WRWDO� �WRWDO���N���������VOHHSBRQ��FTBDUHD�ZDLWBT�������`F̀TBWLPHUBKDQGOH�XQVLJQHG�LQW�[��̂ �7KLV�SURJUDP�ZDNHV�XS�WKH�XVHU�������������SURFHVV�ZKHQ�GHYLFH�PHPRU\�LV�HPSW\�� ������7XUQ�VSHDNHU�RQ�RU�RII!����LI��&KDUDFWHU�GRQH!������^��������FTBDUHD�EXIIHUBRIIVHW� �FTBDUHD�EXIIHUBRIIVHW�������������LI�FTBDUHD�EXIIHUBRIIVHW� �FT�DUHD�EXIIHUBHQG�

Page 146: Linux assembly language programming

��������LI�FTBDUHD�EXIIHUBRIIVHW� �FT�DUHD�EXIIHUBHQG���������^������������FTBDUHD�EXIIHUBRIIVHW� ���������������ZDNHBXS��FTBDUHD�ZDLWBT���������������UHWXUQ��� �1R�IXWXUH�VFKHGXOLQJ�GRQH�KHUH��� ���������`��������DGGBWLPHU�FTBWLPHU��� �&RQWLQXH�FDOOLQJ�WLPHU�KDQGOHU� �����``DUH�FXUUHQWO\�WDNLQJ�WXUQV�XVLQJ�WKH�SURFHVVRU��(DFK�WLPH�DQRWKHU�SURFHVV�RQ�WKH�UXQ�TXHXH�WDNHV�LWV�WXUQ�RQ�WKH�SURFHVVRU��WKHUH�KDV�WR�EH�D�WDVN�VZLWFK��RI�FRXUVH�%RWK�VOHHSBRQ���DQG�ZDNHBXS���PXVW�EH�FDOOHG�RQ�DQ�DUJXPHQW�ZKRVH�W\SH�LV��VWUXFW�ZDLWBTXHXH� ��D�SRLQWHU�WR�WR�D�SRLQWHU�WR�D�ZDLW�TXHXH�VWUXFWXUH��$OWKRXJK�WKLV�VRXQGV�KRUULEOH��LW�LV�UHDOO\�QR�SUREOHP�WR�VHW�XS�RQH�RI�WKHVH�WKLQJV��7KH�GHILQLWLRQ�RI�D�VWUXFW�ZDLWBTXHXH�LV�LQ��XVU�VUF�OLQX[�LQFOXGH�OLQX[�ZDLW�K�%XW��DFWXDOO\��WR�XVH�D�ZDLW�TXHXH��ZH�GRQW�QHHG�WR�NQRZ�DQ\WKLQJ�DERXW�LWV�LQWHUQDOV��$V�ORQJ�DV�ZH�FDOO�ZDNHBXS���RQ�WKH�VDPH�SRLQWHU�WKDW�ZH�JLYH�WR�VOHHSBRQ����ZHUH�DOO�VHW��7KH�ZDLWBT�FRPSRQHQW�RI�RXU�VWUXFW�FTBVWUXFW�JLYHV�XV�D��VLQJOH��SRLQWHU�WR�D�ZDLW�TXHXH�VWUXFWXUH��6LQFH�FTBZULWH���XVHV�VOHHSBRQ���DQG�FTBWLPHUBKDQGOHU���XVHV�ZDNHBXS����WKHQ�WKH�ZDLW�TXHXH�GRXEOH�SRLQWHU�PXVW�EH�ORFDWHG�LQ�D�SODFH�ZKHUH�ERWK�IXQFWLRQV�FDQ�DGGUHVV�LW��7KLV�LV�DQRWKHU�H[DPSOH�ZKHUH�GHYLFH�PHPRU\�FRPHV�LQ�KDQG\��7KDW�LV�ZK\�WKH�ZDLW�TXHXH�SRLQWHU�LV�ORFDWHG�WKHUH��$�SRLQWHU�WR�WKLV�SRLQWHU�WKHQ�JLYHV�XV�WKH�DUJXPHQW�WKDW�ZH�QHHG���FTBDUHD�ZDLWBT��3URJUDP������VKRZV�KRZ�WKH�VOHHSBRQ���DQG�ZDNHBXS���FDOOV�ZRUN�WRJHWKHU��,Q�3URJUDP�������FTBZULWH���FDOOV�VOHHSBRQ���DV�VRRQ�DV�LW�KDV�ILOOHG�WKH�GHYLFH�EXIIHU�LQ�NHUQHO�PHPRU\��FTBWLPHUBKDQGOH���ZDNHV�XS�WKH�VOHHSLQJ�FTBZULWH���SURFHVV�ZKHQ�LW�KDV�HPSWLHG�WKH�GHYLFH�EXIIHU�1RZ�WKDW�ZH�FDQ�SURJUDP�WKH�QHFHVVDU\�WDVN�VZLWFKHV��ZH�DUH�LQ�D�SRVLWLRQ�WR�ZULWH�D�ZRUNDEOH�GULYHU��8QIRUWXQDWHO\��WKH�GULYHU�DV�RXWOLQHG�VR�IDU�ZRXOG�KDYH�D�VHULRXV�IDLOLQJ��,W�ZRXOG�QRW�UHVSRQG�WR�ZKDW�DUH�FDOOHG�VLJQDOV��������6LJQDOV3URFHVVHV�LQ�8QL[�KDYH�D�KDQGIXO�RI�GLIIHUHQW�PHFKDQLVPV�DYDLODEOH�WR�FRPPXQLFDWH�ZLWK�HDFK�RWKHU��2QH�RI�WKHVH�LV�WKH�VHQGLQJ�RI�VLJQDOV��:KHQ�D�SURFHVV�LV�NLOOHG�ZLWK�D�FWUO�&�RU�D�NLOO�FRPPDQG��WKH�SURFHVV�KDV�UHFHLYHG�D�VLJQDO��7R�H[SODLQ�ZKDW�D�VLJQDO�LV��ZH�QHHG�WR�H[SDQG�D�OLWWOH�RQ�WKH�QRWLRQ�RI�D�WDVN��:H�KDYH�GHVFULEHG�WKH�WDVN�VWDWH�VHJPHQW�DV�D�UHJLRQ�RI�PHPRU\�ZKHUH�UHJLVWHUV�JHW�VDYHG�ZKHQ�D�WDVN�VZLWFK�RFFXUV��7KH�WDVN�VWDWH�VHJPHQW�LV�PDLQWDLQHG�E\�WKH�KDUGZDUH��%XW�LW�LV�RQO\�D�SDUW�RI�WKH�FRQWH[WXDO�LQIRUPDWLRQ�WKDW�LV�PDLQWDLQHG�E\�/LQX[�IRU�HDFK�SURFHVV��7KHUH�LV�D�VWUXFWXUH�FDOOHG�D�VWUXFW�WDVNBVWUXFW�GHILQHG�LQ��XVU�VUF�OLQX[�LQFOXGH�OLQX[�VFKHG�K�ZKLFK�NHHSV�DOO�WKH�LQIRUPDWLRQ�/LQX[�QHHGV�RQ�D�SURFHVV��7KLV�LQIRUPDWLRQ�LV�DYDLODEOH�WR�WKH�GHYLFH�GULYHU�ZKHQ�LW�LV�H[HFXWLQJ�LQ�EHKDOI�RI�D�SURFHVV�EHFDXVH�WKHUH�LV�D�JOREDO�YDULDEOH�LQ�NHUQHO�PHPRU\�FDOOHG�FXUUHQW�ZKRVH�YDOXH�LV�DOZD\V�WKH�WDVN�VWUXFWXUH�IRU�WKH�FXUUHQW�SURFHVV��,Q�WKH�GULYHU�IRU��GHY�FT��IRU�H[DPSOH��LW�PDNHV�VHQVH�WR�DFFHVV�WKLV�YDULDEOH�IURP�FTBZULWH���EXW�QRW�IURP�FTBWLPHUBKDQGOH����2QH�RI�WKH�FRPSRQHQWV�RI�VWUXFW�WDVNBVWUXFW�LV�WVV��WKH�KDUGZDUHV�WDVN�VWDWH�VHJPHQW��7KH�SLG�FRPSRQHQW�LV�WKH�3URFHVV�,'�QXPEHU�ZKLFK�VKRZV�XS�ZKHQ�SV�LV�UXQ��,W�LV�QHHGHG�ZKHQ�NLOOLQJ�MREV�IURP�WKH�FRPPDQG�OLQH��$QRWKHU�FRPSRQHQW�RI�VWUXFW�WDVNBVWUXFW�LV�VLJQDO�7KLV�FRPSRQHQW�LV�FXUUHQWO\�W\SHG�DV�DQ�DUUD\�RI�LQWHJHUV��(DFK�ELW�RQ�HDFK�LQWHJHU�LQ�WKH�DUUD\�FDQ�FDUU\�D�VLJQDO��:LWK�WZR����ELW�LQWHJHUV�LQ�WKH�DUUD\��/LQX[�LV�FRQILJXUHG�IRU�D�PD[LPXP�RI����VLJQDOV��:KDWHYHU�WKH�VXEWOH�GLVWLQFWLRQV�DUH�EHWZHHQ�DOO�RI�WKHVH�GLIIHUHQW�VLJQDOV��UHFHLYLQJ�D�VLJQDO�PHDQV�MXVW�RQH�WKLQJ�WR�D�GHYLFH�GULYHU��LWV�WLPH�WR�TXLW�'ULYHUV�WKDW�&DQW�%H�.LOOHG7KH�VLJQDOBSHQGLQJ���FDOO�FKHFNV�WKH�VLJQDO�FRPSRQHQW�RI�WKH�SURFHVV�IRU�QRQ�]HUR�ELWV��,W�LV�WKH�UHVSRQVLELOLW\�RI�WKH�ZULWHU�RI�WKH�GHYLFH�GULYHU�WR�PDNH�VXUH�WKLV�LV�GRQH�DQG�WR�JR�DKHDG�DQG�TXLW�LI�VXFK�ELWV�DUH�IRXQG��)DLOXUH�WR�GR�VR�UHVXOWV�LQ�D�GHYLFH�GULYHU�WKDW�FDQW�EH�NLOOHG��7KLV�LV�DQ�HDV\�PLVWDNH�WR�PDNH�DQG�D�VHULRXV�RQH��0XOWLWDVNLQJ�LQ�/LQX[�LV�VRPHWLPHV�FDOOHG�FRRSHUDWLYH�PXOWLWDVNLQJ��8VHU�WDVNV�ZKLFK�H[HFXWH�

Page 147: Linux assembly language programming

D�VHULRXV�RQH��0XOWLWDVNLQJ�LQ�/LQX[�LV�VRPHWLPHV�FDOOHG�FRRSHUDWLYH�PXOWLWDVNLQJ��8VHU�WDVNV�ZKLFK�H[HFXWH�ZLWK�NHUQHO�SULYLOHJH��VXFK�DV�FTBZULWH����DUH�H[SHFWHG�WR�\LHOG�WR�WKH�SURFHVVRU�YROXQWDULO\��,I�WKH\�GRQW��WKH�VFKHGXOHU�ZRQW�IRUFH�WKHP�WR�GR�VR��,Q�RUGHU�WR�IXOILOO�WKLV�UHVSRQVLELOLW\��WKH�GULYHU�PXVW�LQFOXGH�FRGH�VXFK�DV����LI�VLJQDOBSHQGLQJ�FXUUHQW�����������UHWXUQ�YDOXH�DW�SRLQWV�LQ�WKH�FRGH�ZKLFK�ZLOO�EH�HQFRXQWHUHG�IUHTXHQWO\�HQRXJK�VR�WKDW�ZDLWLQJ�IRU�WKH�GHYLFH�GULYHU�WR�DUULYH�DW�WKHVH�SRLQWV�DV�LW�H[HFXWHV�ZLOO�QRW�FDXVH�XQGXH�GHOD\�2QH�PRUH�GHWDLO�QHHGV�IL[LQJ�LQ�RUGHU�WR�PDNH�VXUH�WKH�GULYHU�UHVSRQGV�WR�VLJQDOV��������6WDWHV�RI�D�3URFHVV$�YHU\�LPSRUWDQW�FRPSRQHQW�RI�VWUXFW�WDVNBVWUXFW�LV�VWDWH��,WV�PRVW�LPSRUWDQW�YDOXHV�DUH�DVVLJQHG�LQ��XVU�VUF�OLQX[�LQFOXGH�OLQX[�VFKHG�K������GHILQH�7$6.B5811,1*�������GHILQH�7$6.B,17(55837,%/(�������GHILQH�7$6.B81,17(55837,%/(�������GHILQH�7$6.B=20%,(�������GHILQH�7$6.B67233('��7DVNV�ZKLFK�DUH�RQ�WKH�UXQ�TXHXH��L�H��WKRVH�ZKLFK�DUH�QRZ�WDNLQJ�WXUQV�XVLQJ�WKH�SURFHVVRU��KDYH�7$6.B5811,1*�DV�WKH�YDOXH�RI�WKHLU�VWDWH�FRPSRQHQW��:KHQ�D�WDVN�SXWV�LWVHOI�RQWR�D�ZDLW�TXHXH��VWDWH�PD\�WDNH�HLWKHU�7$6.B,17(55837,%/(�RU�7$6.B81,17(55837,%/(�DV�YDOXHV��$QG�LW�PDNHV�D�ELJ�GLIIHUHQFH��$OWKRXJK�ZH�PLJKW�UHDVRQDEO\�VXSSRVH�WKDW�WKH�GLIIHUHQFH�KDV�WR�GR�ZLWK�LQWHUUXSWV��LW�GRHVQW��,W�KDV�WR�GR�ZLWK�VLJQDOV�,I�VWDWH�KDV�WKH�YDOXH�7$6.B81,17(55837,%/(��WKHQ�LWV�VLJQDO�FRPSRQHQW�ZLOO�QRW�EH�DOWHUHG�E\�D�&WUO�&�RU�D�NLOO��8QIRUWXQDWHO\��WKLV�LV�WKH�YDOXH�DVVLJQHG�WR�VWDWH�E\�WKH�VOHHSBRQ���IXQFWLRQ��)RUWXQDWHO\��WKHUH�LV�D�FORVHO\�UHODWHG�IXQFWLRQ�FDOOHG�VOHHSBRQBLQWHUUXSWLEOH���ZKLFK�DVVLJQV�WKH�YDOXH�7$6.B,17(55837,%/(�WR�VWDWH��+HQFH�LQ�3URJUDP�������WKH�FDOOV�WR�VOHHSBRQ���DQG�ZDNHBXS���QHHG�WR�EH�UHSODFHG�E\�WKHLU�LQWHUUXSWLEOH�FRXQWHUSDUWV��2WKHUZLVH�ZH�ZRXOG�KDYH�WKH�VDPH�SUREOHP�WKDW�ZH�ZRXOG�JHW�LI�ZH�RPLWWHG�WKH�VLJQDOBSHQGLQJ���FKHFN��7KH�GHILQLWLRQV�RI�WZR�VOHHSBRQ�IXQFWLRQV�DUH�GHILQHG�LQ��XVU�VUF�OLQX[�NHUQHO�VFKHG�F�DV�ZHOO�DV�WKH�PDLQ�SDUW�RI�ZDNHBXS����7KH�WZR�ZDNHBXS�PDFURV�DUH�GHILQHG�LQ��XVU�VUF�OLQX[�LQFOXGH�OLQX[�VFKHG�K�,Q�WKH�GLJLWL]HU�GULYHU�LQ�VHFWLRQ�������ZDNHBXSBLQWHUUXSWLEOH���PDFUR�GHILQLWLRQ�PXVW�EH�FRQVXOWHG�WR�ILQG�RXW�WKH�DFWXDO�IXQFWLRQ�FDOO�VLQFH�WKH�JFF�SUHSURFHVVRU�LVQW�XVHG�E\�1$60�7KH�PDLQ�IHDWXUHV�RI�WKH�0RUVH�&RGH�VSHDNHU�GULYHU�DUH�QRZ�LQ�SODFH��VR�ZH�FDQ�GR�WKH�IXQ�SDUW�QH[W��������7LPLQJ�WKH�0RUVH�&RGH7KH�WLPLQJ�RI�GRWV�DQG�GDVKHV�LV�DQ�DUW��QRW�D�VFLHQFH��$�0RUVH�&RGH�GULYHU�KDV�JRRG�WLPLQJ�LI�LW�VRXQGV�ULJKW�WR�D�0RUVH�&RGH�SUDFWLWLRQHU��7LPH�YDOXHV�LQ�WKLV�GULYHU�DUH�EDVHG�RQ�WKH�IROORZLQJ�UXOHV�

z $OO�WLPH�YDOXHV�DUH�EDVHG�RQ�WKH�GXUDWLRQ�RI�WKH�ZKROHQRWH�FRPSRQHQW�RI�FTBDUHD��ZKLFK�LV�JLYHQ�LQ�KXQGUHGWKV�RI�D�VHFRQG��RU�MLIILHV�z $�GDVK�LV�RQH�IRXUWK�RI�D�ZKROHQRWH�z $�GRW�LV�RQH�VL[WHHQWK�RI�D�ZKROHQRWH�z 4XLHW�LQWHUYDOV�EHWZHHQ�GRWV�DQG�GDVKHV�RI�D�OHWWWHU�DUH�RQH�HLJKWK�RI�D�ZKROHQRWH�4XLHW�LQWHUYDOV�EHWZHHQ�OHWWHUV�DUH�WKUHH�HLJKWKV�RI�D�

Page 148: Linux assembly language programming

z 4XLHW�LQWHUYDOV�EHWZHHQ�OHWWHUV�DUH�WKUHH�HLJKWKV�RI�D�ZKROHQRWH�z $�FKDUDFWHU�QRW�LQFOXGHG�LQ�WKH�0RUVH�&RGH�JHW�D�VLOHQW�LQWHUYDO�RI�RQH�TXDUWHU�RI�D�ZKROHQRWH�

�������$VVHPEO\�/DQJXDJH�6SHDNHU�&RGH7R�WXUQ�WKH�VSHDNHU�RQ�DQG�RII��WKH�WZR�OLWWOH�DVVHPEOHU�URXWLQHV�VKRZQ�LQ�3URJUDP������DUH�XVHG��$OWKRXJK�WKH�EXON�RI�WKH�GHYLFH�GULYHU�LV�ZULWWHQ�LQ�&��WKLV�LV�RIWHQ�WKH�FDVH��0DQ\�WLPHV��VPDOO�URXWLQHV�DUH�FRGHG�LQ�DVVHPEO\�ODQJXDJH�DQG�WKH�UHVW�LV�FRGHG�LQ�D�KLJKHU�OHYHO�ODQJXDJH�,I�WKH�ILOH�FRQWDLQLQJ�3URJUDP������LV�FDOOHG�VSHDN�DVP��LW�FDQ�WKHQ�E\�DVVHPEOHG�XVLQJ�1$60������OLQX[ER[��QDVP��I�HOI�VSHDN�DVP7KH��I�HOI�VZLWFK�GHWHUPLQHV�WKH�IRUPDW�RI�WKH�UHVXOWLQJ�REMHFW�FRGH�ILOH�FDOOHG�VSHDN�R��,W�VKRXOG�EH�VWRUHG�LQ��XVU�VUF�OLQX[�GULYHUV�FKDU�3URJUDP��������������JOREDO�VSHDNHU�RQ��������JOREDO�VSHDNHUBRII��������H[WHUQ�FTBDUHD6<63����HTX���+���6\VWHP�SRUW�IRU�FRQWUROOLQJ�VSHDNHU�IHHG',95(*��HTX���+���3RUW�IRU�WLPHU�GLYLVRUVSHDNHUBRII���������,1�$/�>6<63@��������$1'�$/���)&+��������287�>6<63@��$/��������029�($;��>FTBDUHD@��������25�($;�����������029�>FTBDUHD@�($;��������5(7VSHDNHUBRQ���������029�($;�>FTBDUHD����@��WLPHUGLY�LV�RIIVHW�E\����������287�>',95(*@��$/��������6+5�($;�����������287�>',95(*@��$/��������,1�$/�>6<63@��������25�$/����������287�>6<63@��$/��������029�($;��>FTBDUHD@��������$1'�($;���)))))))%+��������029�>FTBDUHD@��($;��������5(7��������&�/DQJXDJH�'ULYHU�&RGH3URJUDP�������LQFOXGH��OLQX[�HUUQR�K!���� �1HHG�WKLV�IRU�(12'(9��HWF��� ��LQFOXGH��OLQX[�NHUQHO�K!��� �1HHG�WKLV�IRU�SULQWN��� ��LQFOXGH��OLQX[�PDMRU�K!���� �1HHG�WKLV�IRU�&4B0$-25� ��LQFOXGH��OLQX[�VFKHG�K!���� �1HHG�WKLV�IRU�VOHHSLQJ�DQG�ZDNLQJ� ��LQFOXGH��DVP�XDFFHVV�K!���� �1HHG�WKLV�IRU�FRS\BIURPBXVHU��� ��LQFOXGH��OLQX[�FT�K!������� �1RWH�WKH�FT�ILOH��� �YRLG�FTBWLPHUBKDQGOHU�XQVLJQHG�ORQJ��VWDWLF�YRLG�FTBVHWBSLWFK�XQVLJQHG�ORQJ��VWDWLF�YRLG�FTBVHWBWHPSR�XQVLJQHG�ORQJ��YRLG�VSHDNHUBRQ�YRLG��YRLG�VSHDNHUBRII�YRLG��

Page 149: Linux assembly language programming

YRLG�VSHDNHUBRII�YRLG��FKDU� �PRUVHBFRGH>��@� ^���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`�� �7KH�HPSW\�VWULQJ��IROORZHG�E\�WKH����OHWWHU�FRGHV�IROORZHG�E\�WKH����QXPHUDO�FRGHV��IROORZHG�E\�WKH�FRPPD�SHULRG��DQG�TXHVWLRQ�PDUN��� �VWUXFW�FTBVWUXFW�FT�DUHD� �^���������^�`������������18//`�VWUXFW�WLPHUBOLVW�FTBWLPHU� �^18//��18//��������FTBWLPHUBKDQGOHU`�LQOLQH�FKDU� �PFRGHVWULQJ�LQW�DVFLLFRGH��̂���FKDU� �PF������ �7KLV�LV�WKH�PDSSLQJ�IURP�WKH�$6&,,�FRGH��������LQWR�WKH�PFRGH�DUUD\�RI�VWULQJV��� �����LI�DVFLLFRGH�!������� �3DVW�]� ���������PF� �PRUVHBFRGH>&4B'()$8/7@�����HOVH�LI�DVFLLFRGH�!������ �8SSHU�FDVH� ���������PF� �PRUVHBFRGH>DVFLLFRGH�����@�����HOVH�LI�DVFLLFRGH�!������ �8QFRGHG�SXQFWXDWLRQ� ���������PF� �PRUVHBFRGH>&4B'()$8/7@�����HOVH�LI��DVFLLFRGH�!������ �/RZHU�FDVH� ���������PF� �PRUVHBFRGH>DVFLLFRGH�����@�����HOVH�LI��DVFLLFRGH� ������ �4XHVWLRQ�0DUN� ���������PF �PRUVH�FRGH>��@��� �������� �����HOVH�LI�DVFLLFRGH�!������ �8QFRGHG�SXQFWXDWLRQ� ���������PF� �PRUVHBFRGH>&4B'()$8/7@�����HOVH�LI��DVFLLFRGH�!������ �1XPHUDOV� ���������PF� �PRUVHBFRGH>DVFLLFRGH�����@��� �������DVFLLFRGH������� �����HOVH�LI��DVFLLFRGH� ������ �3HULRG� ���������PF� �PRUVHBFRGH>��@��� �������� �����HOVH�LI��DVFLLFRGH� ������ �&RPPD� ���������PF� �PRUVHBFRGH>��@��� �������� �����HOVH��������PF� �PRUVHBFRGH>&4B'()$8/7@�����UHWXUQ�PF�`VWDWLF�LQW�FTBUHVHW�YRLG��̂���VSHDNHUBRII�������FTBVHWBSLWFK�&4B'()B3,7&+���� �3LWFK�LQ�+]� �����FTBVHWBWHPSR�&4�'()�7(032���� �4XDUWHU�QRWH�HTXDOV�WKLV� �����UHWXUQ���`YRLG�FTBWLPHUBKDQGOHU�XQVLJQHG�ORQJ�[��̂���� �7KLV�LV�WKH�IXQFWLRQ�ZKLFK�LV�FDOOHG�EHFDXVH��������LWV�QDPH�LV�VXEPLWWHG�WR�WKH�WLPHU�TXHXH��� �����LQW�VWDWXV�����XQVLJQHG�LQW�WLPHBYDOXH�����WLPHBYDOXH� �MLIILHV������� �0ROOLI\�JFF� �����VWDWXV� �FTBDUHD�IODJV������LI��� �FTBDUHD�PFRGH�� ������VWDWXV��&4B2))�����������FT�DUHD�EXIIHUBRIIVHW����� �FTBDUHD�EXIIHUBHQG����������� �7KLV�EXIIHU�ORDG�LV�GRQH� �

Page 150: Linux assembly language programming

����^��������ZDNHBXSBLQWHUUXSWLEOH��FTBDUHD�FTBZDLWBT�����������UHWXUQ�����`����LI��� �FTBDUHD�PFRGH�� ������VWDWXV��&4B2))����������� �7KLV�FKDUDFWHU�LV�GRQH���5HVHW�PFRGH��� �����^��������FTBDUHD�EXIIHUBRIIVHW� �FTBDUHD�EXIIHU�RIIVHW�������������[� �FTBDUHD�EXIIHU>FTBDUHD��EXIIHUBRIIVHW@���������FTBDUHD�PFRGH� �PFRGHVWULQJ�[������`����LI��� �FTBDUHD�PFRGH�� ������VWDWXV��&4B2))����������� �3UHFHGLQJ�LI�EORFN�SXW�LQ�WKH�HPSW\�VWULQJ��� ���������� �(PSW\�VWULQJ�JHWV�D�TXDUWHU�QRWH��� �����^��������WLPHBYDOXH� �FTBDUHD�ZKROHQRWH�!!�������`����HOVH�LI��VWDWXV��&4B2))���������� �6SHDNHU�LV�RII���%HJLQ�DQRWKHU�GRW�RU�GDVK� �����^��������LI� �FTBDUHD�PFRGH�� �B�������������WLPHBYDOXH� �FTBDUHD�ZKROHQRWH�!!�����������HOVH�LI�� �FTBDUHD�PFRGH�� ���������������WLPHBYDOXH� �FTBDUHD�ZKROHQRWH�!!������������FTBDUHD�PFRGH�� ��FTBDUHD�PFRGH���������������VSHDNHUBRQ�������`����HOVH�LI� �FTBDUHD�PFRGH�� ������������ �6SHDNHU�LV�RQ���(QG�RI�FKDUDFWHU��� �����^��������WLPHBYDOXH� �������������FTBDUHD�ZKROHQRWH�!!�������FTBDUHD�ZKROHQRWH�!!����������������� �LQWHU�OHWWHU�UHVW� ���������VSHDNHUBRII�������`����HOVH�� �6SHDNHU�LV�RQ���,Q�WKH�PLGVW�RI�D�FKDUDFWHU��� �����^��������WLPHBYDOXH� ��FTBDUHD�ZKROHQRWH�!!����������������� �6KRUW�LQWUD�OHWWHU�UHVW� ���������VSHDNHUBRII�������`����FT�WLPHU�H[SLUHV� �MLIILHV���WLPHBYDOXH�� ����FTBWLPHU�H[SLUHV� �MLIILHV�������������,Q�FDVH�\RX�KDYH�VHHQ�WKLV�HOVHZKHUH�������������LW�GRHV�1RW�:RUN� �����DGGBWLPHU�FTBWLPHU������UHWXUQ�`VWDWLF�VVL]HBW�FTBZULWH�VWUXFW�ILOH� �ILOH��FRQVW�FKDU� �EXI��������������������������VL]HBW�FRXQW��ORIIBW� SSRV���̂���� �7KLV�IXQFWLRQ�ILOOV�WKH�EXIIHU�DQG�WKHQ�JRHV�WR�VOHHS��� �����XQVLJQHG�ORQJ�FRS\BVL]H�����XQVLJQHG�LQW�WLPHBYDOXH�����VVL]HBW�WRWDOBE\WHVBZULWWHQ� �������WLPHBYDOXH� �������WRWDOBE\WHVBZULWWHQ� �������GR����^��������LI��VLJQDOBSHQGLQJ�FXUUHQW���������������UHWXUQ�WRWDOBE\WHVBZULWWHQ���������FRS\BVL]H� ��FRXQW�� �&4B%8))(5B6,=(�"�FRXQW����&4B%8))(5B6,=(����������FTBDUHD�EXIIHUBRIIVHW� �����������FTBDUHD�EXIIHUBHQG� �FRS\BVL]H���������FRS\BIURPBXVHU�FTBDUHD�EXIIHU��EXI��FRS\BVL]H��

Page 151: Linux assembly language programming

��������FRS\BIURPBXVHU�FTBDUHD�EXIIHU��EXI��FRS\BVL]H����������FTBDUHD�PFRGH� �PFRGHVWULQJ�FTBDUHD�EXIIHU>�@����������WLPHBYDOXH� �FTBDUHD�ZKROHQRWH!!�����������FTBWLPHU�H[SLUHV� �MLIILHV���WLPHBYDOXH���������DGGBWLPHU�FTBWLPHU����������VSHDNHUBRII�����������LQWHUUXSWLEOHBVOHHSBRQ��FTBDUHD�FTBZDLWBT�����������WRWDOBE\WHVBZULWWHQ� �WRWDOBE\WHVBZULWWHQ���FRS\BVL]H���������FRXQW� �FRXQW���FRS\BVL]H���������EXI� �EXI���FRS\BVL]H�����`�ZKLOH��FRXQW�!��������GHOBWLPHU�FTBWLPHU������UHWXUQ�WRWDOBE\WHVBZULWWHQ�`VWDWLF�ORQJ�ORQJ�FTBOVHHN�VWUXFW�ILOH� �ILOH�����������������ORQJ�ORQJ�RIIVHW��LQW�RULJLQ��̂���UHWXUQ��(63,3(�`VWDWLF�LQW�FTBRSHQ�VWUXFW�LQRGH� �LQRGH��VWUXFW�ILOH� �ILOH��̂���XQVLJQHG�LQW�PLQRU� �0,125�LQRGH�!LBUGHY������LI��PLQRU�!������ �6WHUHR�1R� ��������UHWXUQ��(1;,2�����LI���FTBDUHD�IODJV��&4B(;,67�� ����������UHWXUQ��(1;,2�����LI��FTBDUHD�IODJV��&4B%86<��������UHWXUQ��(%86<�����FTBDUHD�IODJV� ��FTBDUHD�IODJV�_�&4B%86<���������UHWXUQ���`VWDWLF�LQW�FTBUHOHDVH�VWUXFW�LQRGH� �LQRGH��VWUXFW�ILOH� �ILOH��̂���FTBDUHD�IODJV� ��FTBDUHD�IODJV�a�&4B%86<������UHWXUQ���`VWDWLF�YRLG�FTBVHWBSLWFK�XQVLJQHG�ORQJ�FSV��̂���FTBDUHD�WLPHUGLY� �����������FSV���������� �)UHTXHQF\�RI�WKH�26&�VLJQDO�RQ�WKH�$7�EXV� �`VWDWLF�YRLG�FTBVHWBWHPSR�XQVLJQHG�ORQJ�EHDWVBSHUB0LQXWH��̂�������� �4XDUWHU�QRWH� ���EHDW��WLPHU�ZRUNV�LQ�FHQWLVHFRQGV� �����FTBDUHD�ZKROHQRWH� ���������EHDWVBSHUBPLQXWH�`VWDWLF�LQW�FTBLRFWO�VWUXFW�LQRGH� LQRGH��VWUXFW�ILOH� ILOH�����������������XQVLJQHG�LQW�FPG��XQVLJQHG�ORQJ�DUJ��̂���XQVLJQHG�LQW�PLQRU� �0,125�LQRGH�!LBUGHY������LQW�UHWYDO� ���LI��PLQRU�!�������UHWXUQ��(12'(9�LI����FTBDUHD�IODJV���&4B(;,67�� �������UHWXUQ��(12'(9�����VZLWFK���FPG������^

Page 152: Linux assembly language programming

����FDVH�&4$%257���������LI��DUJ�������������FTBDUHD�IODJV� ��FTBDUHD�IODJV�_�&4B$%257����������HOVH������������FTBDUHD�IODJV� ��FTBDUHD�IODJV��a�&4B$%257����������EUHDN�����FDVH�&46(73,7&+���������LI��DUJ�������������FTBVHWBSLWFK�DUJ����������HOVH������������UHWYDO� ��(,19$/���������EUHDN�����FDVH�&46(77(032���������LI��DUJ�������������FTBVHWBWHPSR�DUJ����������HOVH������������UHWYDO� ��(,19$/���������EUHDN�����FDVH�&45(6(7���������FTBUHVHW�����������EUHDN�����FDVH�&4*(7)/$*6���������UHWYDO� �YHULI\BDUHD�9(5,)<B:5,7(������������������������������YRLG� ��DUJ��VL]HRI�LQW�����������LI��UHWYDO�������������UHWXUQ�UHWYDO���������HOVH��������^������������LQW�VWDWXV� �FTBDUHD�IODJV�������������FRS\BWRBXVHU��LQW� ��DUJ��VWDWXV��VL]HRI�LQW�����������`��������EUHDN�����GHIDXOW���������UHWYDO� ��(,19$/�����`����UHWXUQ�UHWYDO�`LQW�FTBLQLW�YRLG��̂���� �,QLWLDOL]DWLRQ�FRGH�OLNH�WKLV�FDQ�EH�FDOOHG��������LI�D�FDOO�WR�LW�LV�SODFHG�LQ�PHP�F� �����LI��UHJLVWHUBFKUGHY�&4B0$-25���FT���FTBIRSV������^���������SULQWN�.(51B,1)2��FT���XQDEOH�WR�JHW�PDMRU��G?Q���&4B0$-25�����������UHWXUQ��(,2�����`����FTBDUHD�IODJV� ��&4B2))�_�&4B(;,67������FTBUHVHW�������UHWXUQ���`,W�LV�FXVWRPDU\�WR�LQFOXGH�GHILQLWLRQV�RI�SDUDPHWHUV�XVHG�LQ�WKH�&�SURJUDP�LQ�DQ�LQFOXGH�ILOH��$Q�LQFOXGH�ILOH�IRU�WKH�0RUVH�&RGH�GULYHU�IROORZV��GHILQH�&4B(;,67�����[�����GHILQH�&4B%86<������[�����GHILQH�&4B2))�������[�����GHILQH�&4B$%257�����[����� �,2&7/�QXPEHUV� ��GHILQH�&4$%257������[�����GHILQH�&46(77(032���[������� �6WRUH�ZKROH�QRWH�LQW�FTBDUHD��� ��GHILQH�&46(73,7&+���[������� �6WRUH�D�WLPHU�GLYLVRU�LQWR�FTBDUHD��� ��GHILQH�&45(6(7������[���F��� �UHVHW�VSHDNHU� ��GHILQH�&4*(7)/$*6���[���H��� �JHW�VWDWXV�IODJV� ��GHILQH�&4B%8))(5B6,=(

Page 153: Linux assembly language programming

�GHILQH�&4B%8))(5B6,=(�GHILQH�&4B'()B&+$5�������������� �'HIDXOW�FKDUDFWHU� ��GHILQH�&4B'()B3,7&+������������� �'HIDXOW�SLWFK� ��GHILQH�&4B'()B7(032������������� �'HIDXOW�WHPSR� �� IXQFWLRQ�SURWRW\SHV �H[WHUQ�LQW�FTBLQLW�YRLG��7KH�IXQFWLRQV�GHILQHG�LQ�VWUXFW�FTBVWUXFW�WDNH�FDUH�RI�WKH�UHVSRQVH�E\�WKH�GULYHU�WR�UHTXHVWV�WKDW�WKH�NHUQHO�PDNHV�LQ�H[HFXWLQJ�D�V\VWHP�FDOO�ZKLFK�LV�DVNLQJ�IRU�VHUYLFH�IURP�WKH�GULYHU��7KH�FTBWLPHUBKDQGOHU���IXQFWLRQ�WDNHV�FDUH�RI�WKH�GULYHUV�UHVSRQVH�WR�D�WLPHU�LQWHUUXSW��7KHVH�DUH�WKH�PDLQ�WKLQJV�WKDW�QHHG�WR�EH�GRQH��%XW�ZKHQ�WKH�GHYLFH�GULYHU�ZRUNV��FRPPDQGV�VXFK�DV�����OLQX[ER[��FDW�ILOH�!��GHY�FTZLOO�VWDUW�WKH�VSHDNHU�EHHSLQJ��,Q�RUGHU�IRU�WKLV�WR�KDSSHQ��WKHUH�KDV�WR�EH�DQ�HQWU\�QDPHG�FT�LQ�WKH��GHYGLUHFWRU\��ZKLFK�KDV�D�FRQQHFWLRQ�ZLWK�WKH�SURJUDPV�VXFK�DV�FTBZULWH�����������/RRVH�(QGV7R�ILQLVK�WKH�GHYLFH�GULYHU��LW�LV�RQO\�QHFHVVDU\�WR

z $GG�D�PDMRU�QXPEHU�IRU�WKH�GHYLFH�WR�WKH��XVU�LQFOXGH�OLQX[�PDMRU�K�ILOH�z &UHDWH�DQ�HQWU\�IRU�WKH�GHYLFH�LQ�WKH��GHY�GLUHFWRU\�XVLQJ�WKH�PNQRG�FRPPDQG�z :ULWH�D�FTBLQLW���IXQFWLRQ�DQG�LQFOXGH�D�FDOO�WR�LW�LQ�WKH�PHP�F�ILOH�z 0RGLI\�WKH�0DNHILOH�IRU�WKH�GLUHFWRU\�FRQWDLQLQJ�WKH�GULYHU��LQ�WKLV�FDVH��XVU�VUF�OLQX[�GULYHUV�FKDU��DQG�UHFRPSLOH�WKH�NHUQHO�

7KH��GHY�GLUHFWRU\�FRQWDLQV�D�OLVW�RI�D�JUHDW�PDQ\�ILOHV��PRVW�RI�ZKLFK�DUH�QRW�DFWXDOO\�ILOHV��7KH�OV�±OFRPPDQG�GLVWLQJXLVKHV�GLIIHUHQW�W\SHV�RI�ILOHV�LQ�WKH�YHU\�ILUVW�FKDUDFWHU�RI�HDFK�OLQH��)LOHV�ZKLFK�UHDOO\�DUH�ILOHV�DUH�OLVWHG�EHJLQQLQJ�ZLWK�D����GLUHFWRULHV�DUH�OLVWHG�ZLWK�D�G��KDUG�OLQNV�ZLWK�DQ�O��HWF��'HYLFHV�DUH�OLVWHG�ZLWK�HLWKHU�D�E�RU�D�F��GHSHQGLQJ�RQ�ZKHWKHU�WKH\�DUH�EORFN�GHYLFHV�RU�FKDUDFWHU�GHYLFHV��%ORFN�GHYLFHV�WUDQVIHU�GDWD�LQ�EORFNV��L�H���ELJ�XQLIRUPO\�VL]HG�FKXQNV��7R�GR�WKLV��WKH\�LQWHUDFW�ZLWK�WKH�NHUQHOV�EXIIHU�FDFKH��%ORFN�GHYLFHV�FDQ�EH�PRXQWHG��L�H���LQFRUSRUDWHG�LQWR�8QL[V�WUHH�VWUXFWXUHG�ILOH�KHLUDUFK\��$�KDUG�GULYH�LV�D�JRRG�H[DPSOH�RI�D�EORFN�GHYLFH��&KDUDFWHU�GHYLFHV�GRQW�XVH�EORFNV�DQG�WKH\�GRQW�JHW�PRXQWHG��2XU�OLWWOH�VSHDNHU�GULYHU�LV�D�FKDUDFWHU�GHYLFH��(DFK�GHYLFH�OLVWLQJ��ZKHWKHU�IRU�D�EORFN�RU�D�FKDUDFWHU�GHYLFH��DOVR�OLVWV�D�PDMRU�QXPEHU�DQG�D�PLQRU�QXPEHU��7KH�PDMRU�QXPEHU�LV�XVHG�DV�DQ�LQGH[�LQWR�FKUGHYV��D�NHUQHO�DUUD\�RI�FKDUDFWHU�GHYLFH�GULYHUV������VWUXFW�GHYLFHBVWUXFW�FKUGHYV>0$;B&+5'(9@(DFK�GHYLFH�GULYHU�LV�MXVW�DVWUXFW�GHYLFHBVWUXFW�̂�������FRQVW�FKDU� �QDPH���������FRQVW�VWUXFW�ILOHBRSHUDWLRQV� �IRSV�`�7KH�GHYLFH�LV�HQWHUHG�LQWR�WKH�DUUD\�E\�WKH�IXQFWLRQ�UHJLVWHUBFKUGHY���ZKLFK�LV�GHILQHG�LQ��XVU�VUF�OLQX[�IV�GHYLFHV�F��7KH�PRVW�LPSRUWDQW�OLQHV�RI�WKLV�GHILQLWLRQ�DUH�DV�IROORZV�3URJUDP������LQW�UHJLVWHUBFKUGHY�XQVLJQHG�LQW�PDMRU���������������������FRQVW�FKDU� �QDPH�

Page 154: Linux assembly language programming

��������������������FRQVW�FKDU� �QDPH���������������������VWUXFW�ILOHBRSHUDWLRQV� IRSV��̂�������FKUGHYV>PDMRU@�QDPH� �QDPH���������FKUGHYV>PDMRU@�IRSV� �IRSV���������UHWXUQ���`:KHQ�WKLV�IXQFWLRQ�LV�FDOOHG��WKH�PDMRU�QXPEHU�LV�FRQQHFWHG�WR�WKH�ILOH�RSHUDWLRQV�VWUXFWXUH�VHW�XS�E\�WKH�GHYLFH�GULYHU��7KH�FDOO�LV�PDGH�E\�WKH�GHYLFH�GULYHU�LQ�WKH�FTBLQLW���IXQFWLRQ��7KH�RQO\�RWKHU�WDVN�SHUIRUPHG�E\�FTBLQLW���LV�WKH�LQLWLDOL]DWLRQ�RI�VRPH�RI�WKH�YDOXHV�LQ�FTBDUHD��,Q�RUGHU�WR�JHW�WKH�FDOO�SHUIRUPHG�GXULQJ�ERRW�WLPH��D�FDOO�WR�LW�PD\�EH�SODFHG�LQ�WKH�PHP�F�SURJUDP�QHDU�WKH�HQG�QHDU�WKH�FDOO�WR�OSBLQLW����7KH�FRPPDQG�����OLQX[ER[��PNQRG��GHY�FT�F������FUHDWHV�DQ�HQWU\�LQ�ILOH�V\VWHP�IRU�WKH�FT�GHYLFH��JLYLQJ�LW�D�PDMRU�QXPEHU�RI�����DQG�D�PLQRU�QXPEHU�RI����7KLV�HQWU\�LQ�WKH��GHY�GLUHFWRU\�LV�WKHQ�XVHG�WR�WUDQVODWH�UHIHUHQFHV�WR��GHY�FT�LQWR�FDOOV�WR�WKH�IXQFWLRQV�OLVWHG�LQ�WKH�ILOH�RSHUDWLRQV�VWUXFWXUH������6HULDO�3RUW�'LJLWL]HU�'ULYHU7KH�6FDOH[�GHYLFH�LV�D�KDQG�KHOG�PHDVXULQJ�GHYLFH�IRU�UHDGLQJ�GLVWDQFHV�RII�RI�D�IODW�VXUIDFH��,W�LQSXWV�GDWD�DW�D�UDWH�RI�����EDXG�WKURXJK�WKH�VHULDO�SRUW��6LQFH�LW�KDV�QR�KDQGVKDNLQJ�KDUGZDUH�LW�GRHV�QRW�UHVSRQG�WR�VRIWZDUH�ZKLFK�WUHDWV�LW�DV�D�PRGHP�RU�D�WHUPLQDO��,W�DOVR�KDQGOHV�GDWD�LQ�D�VSHFLDO�IRUPDW�ZKLFK�SDFNV�WZR�IRXU�ELW�FKDUDFWHUV�LQWR�HDFK�E\WH�VHQW�RU�UHFHLYHG��)RU�ERWK�RI�WKHVH�UHDVRQV�LW�LV�XVHIXO�WR�ZULWH�D�VSHFLDO�GULYHU�IRU�LW�2QH�LPSRUWDQW�HOHPHQW�RI�D�W\SLFDO�GHYLFH�GULYHU��ZKLFK�ZDV�QRW�QHHGHG�LQ�WKH�0RUVH�&RGH�GHYLFH�GULYHU��ZDV�WKH�LQVWDOODWLRQ�RI�DQ�LQWHUUXSW�KDQGOHU��7KH�0RUVH�&RGH�GULYHU�VLPSO\�WRRN�DGYDQWDJH�RI�WKH�VHUYLFHV�RI�WKH�H[LVWLQJ�LQWHUUXSW�KDQGOHU�IRU�WKH�WLPHU�LQWHUUXSW��������6HWWLQJ�8S�D�1HZ�,QWHUUXSW�+DQGOHU0RVW�GHYLFH�GULYHUV�QHHG�DQ�,65�WR�KDQGOH�LQWHUUXSWV�ZKLFK�FRPH�IURP�WKH�GHYLFH��7KH�/LQX[�IXQFWLRQ�UHTXHVWBLUT���WDNHV�FDUH�RI�WKH�LQVWDOODWLRQ�RI�D�QHZ�KDQGOHU��,WV�GHILQLWLRQ�LV�ORFDWHG�LQ��XVU�VUF�OLQX[�DUFK�L����NHUQHO�LUT�F�LQW�UHTXHVWBLUT�XQVLJQHG�LQW�LUT�

7DEOH�������$6&,,�&RGH�&KDUW� &WUO�# �� �63&! �� # �� � &WUO�$ �� � �� $ �� D� &WUO�% �� � �� % �� E� &WUO�& �� � �� & �� F� &WUO�' �� � �� ' ��� G� &WUO�( �� � �� ( ��� H� &WUO�) �� �� ) ��� I� &WUO�* �� �� * ��� J� &WUO�+ �� � �� + ��� K� &WUO�, �� � �� , ��� L�� &WUO�- �� �� - ��� -�� &WUO�. �� � �� . ��� N�� &WUO�/ �� � �� / ��� O�� &WUO�0 �� � �� 0 ��� P�� &WUO�1 �� � �� 1 ��� Q�� &WUO�2 �� ? �� 2 ��� R�� &WUO�3 �� � �� 3 ��� 3

Page 155: Linux assembly language programming

YRLG�� KDQGOHU��LQW��YRLG� ��VWUXFW�SWBUHJV� ��XQVLJQHG�ORQJ�LUTIODJV�FRQVW�FKDU� �GHYQDPH�YRLG� GHYBLG���������6FDOH[�,QWHUUXSW�+DQGOHU2QH�YLWDO�OLQN�EHWZHHQ�WKH�LQWHUUXSW�KDQGOHU��ZKLFK�LV�ZULWWHQ�LQ�DVVHPEOHU��DQG�WKH�UHVW�RI�WKH�SURJUDP�LV�WKH�GHILQLWLRQ�RI�WKH�VFDOH[�GHYLFH�PHPRU\�DUHD��6LQFH�WKH�DVVHPEO\�FRGH�GRHV�QRW�KDYH�DFFHVV�WR�WKH�ODEHOV�XVHG�LQ�WKH�&�FRPSLOHU��LW�LV�LPSRUWDQW�WR�FRXQW�RII�WKH�RIIVHW�E\WHV�IURP�WKH�EHJLQQLQJ�RI�WKH�VWUXFWXUH��7KHVH�DUH�XVHG�WR�DFFHVV�WKH�GHYLFH�PHPRU\��+HQFH�VFDOH[BDUHD�����LV�XVHG�LQVWHDG�RI�VFDOH[BDUHD�UHDGLQ�6LQFH�DOO�WKH�FRPSRQHQWV�RI�WKLV�VWUXFWXUH�DUH�IRXU�E\WHV�LQ�VL]H��WKHUH�DUH�QR�WULFNV�LQ�WKH�FRXQWLQJ�3URJUDP������VWUXFW�FTBVWUXFW�̂���XQVLJQHG�ORQJ�IODJV��� ��� �����XQVLJQHG�LQW�UHDGLQ��� ��� �����XQVLJQHG�LQW�UHDGRXW��� ��� �����XQVLJQHG�LQW�ZULWHLQ��� ���� �����XQVLJQHG�LQW�ZULWHRXW��� ���� �����FKDU� UHDGBEXIIHU��� ���� �����FKDU� ZULWHBEXIIHU��� ���� �����VWUXFW�ZDLWBTXHXH� UGZDLWBT��� ���� �����VWUXFW�ZDLWBTXHXH� ZUZDLWBT��� ���� �`��JOREDO�VFDOH[BLQWHUUXSW5%6�HTX������7KLV�PXVW�EH�D�SRZHU�RI���&20��HTX��)�+��&20��%DVH�,�2�$GGUHVV�DQG�'DWD�3RUWH[WHUQ�VFDOH[BDUHDH[WHUQ�SULQWNH[WHUQ�BBZDNHBXS�VFDOH[BLQWHUUXSW���3XVK�DOO�WKH�UHJLVWHUV�WKDW�JHW�XVHG��H[FHSW�($;��������386+�(&;��������386+�(';��������386+�(%;��������386+�(6,��������386+�(',��������029�(';��&20�������/LQH�6WDWXV�5HJLVWHU��������,1�$/��';��������������7(67�$/���������6HH�LI�'DWD�+DV�$UULYHG��������-=�1($5�:5'�����1R"�7KHQ�1HHG�WR�:ULWH�'DWD"

�� &WUO�3 �� � �� 3 ��� 3�� &WUO�4 �� � �� 4 ��� T�� &WUO�5 �� � �� 5 ��� U�� &WUO�6 �� � �� 6 ��� V�� &WUO�7 �� � �� 7 ��� W�� &WUO�8 �� � �� 8 ��� X�� &WUO�9 �� � �� 9 ��� 9�� &WUO�: �� � �� : ��� :�� &WUO�; �� � �� ; ��� ;�� &WUO�< �� � �� < ��� \�� &WUO�= �� � �� = ��� =�� &WUO��> �� � �� > ��� ^�� &WUO��? �� � �� ? ��� _�� &WUO��@ �� �� @ ��� `�� &WUO��A �� ! �� A ��� a�� &WUO��B �� " �� � ��� �'(/!

Page 156: Linux assembly language programming

���3URFHVV�,QFRPLQJ�'DWD���������029�(6,��>VFDOH[BDUHD����@���UHDGLQ�FRPSRQHQW�RI�VWUXFWXUH��������$''�(6,��5%6������5HDG�%XIIHU�6L]H������������68%�(6,��>VFDOH[BDUHD����@��UHDGRXW�FRPSRQHQW�RI�VWUXFWXUH��������$1'�(6,��5%6�������5HDG�%XIIHU�6L]H������������-=�1($5�5%)��������5HDG�%XIIHU�)XOO���7KHVH�OLQHV�WHVW�WKH�FRQGLWLRQ���UHDGLQ����� �UHDGRXW�25�UHDGLQ����� �UHDGRXW��PRG��Q���,I�LW�LV�WUXH�WKHQ�WKH�FLUFXODU�EXIIHU�KDV�RYHUIORZHG��1RWH�5%6� ��Q����������029�(';��&20����'DWD�3RUW�KDV�]HUR�RIIVHW���������,1�$/��';�������7KLV�LV�WKH�GDWD�E\WH�ULJKW�KHUH���������029�&/��$/������.HHS�ZKROH�E\WH�LQ�$/��������$1'�(&;���������&OHDU�(&;�DQG�ORRN�DW�KDOYHV�LQ�&/��������029�'/��>2.&���(&;@��7UDQVODWH�LQFRPLQJ�KDOI�E\WH��������029�(%;��>VFDOH[BDUHD�����@��*HW�DGGUHVV�RI�5HDG�%XIIHU��������029�(6,��>VFDOH[BDUHD����@��UHDGLQ�FRPSRQHQW�RI�VWUXFWXUH��������029�>(%;���(6,@��'/��6WRUH�WUDQVODWHG�E\WH�LQ�5HDG�%XIIHU��������,1&�(6,�����������,QFUHPHQW�UHDGLQ��������$1'�(6,��5%6������PRG��Q�RI�FRXUVH��������029�>VFDOH[BDUHD����@��(6,��������&03�'/������������:DV�WKDW�D�WHUPLQDO�VLJQDO"��������-=�1($5�54:�������,I�VR�ZDNH�XS�WKH�UHDGLQJ�SURFHVV���������029�&/��$/��������1RZ�GR�WKH�RWKHU�KDOI�E\WH��������6+5�&/�����������029�'/��>2.&���(&;@��7UDQVODWH�LQFRPLQJ�KDOI�E\WH��������029�>(%;���(6,@��'/��6WRUH�WUDQVODWHG�E\WH�LQ�5HDG�%XIIHU��������,1&�(6,������������,QFUHPHQW�UHDGLQ��������$1'�(6,��5%6�������PRG��Q�RI�FRXUVH��������029�>VFDOH[BDUHD����@��(6,���������&03�'/�������������:DV�WKDW�D�WHUPLQDO�VLJQDO"��������-=�1($5�54:��������,I�VR�ZDNH�XS�WKH�UHDGLQJ�SURFHVV����3URFHVV�2XWJRLQJ�'DWD:5'���������029�(';��&20�������,QWHUUXSW�,GHQWLILFDWLRQ�5HJLVWHU��������,1�$/��';��������7(67�$/���������&KHFN�WKH�'DWD�+DV�%HHQ�6HQW�%LW��������-=�1($5�/(9�����1R"�7KHQ�TXLW����6HH�LI�WKH�HQG�RI�WKH�ZULWH�EXIIHU�KDV�EHHQ�UHDFKHG���������029�(',��>VFDOH[�DUHD�����@��ZULWHRXW�FRPSRQHQW�RI�VWUXFWXUH��������&03�(',��>VFDOH[BDUHD�����@��ZULWHLQ�FRPSRQHQW�RI�VWUXFWXUH��������-=�:4:����������,I�GRQH�WKHQ�ZDNH�XS�ZULWLQJ�SURFHVV�32/���������029�(';��&20�������/LQH�6WDWXV�5HJLVWHU��������,1�$/��';��������������7(67�$/���������'DWD�+DV�%HHQ�6HQW�%LW��������-=�32/����������6KRXOG�EH�MXVW�D�VKRUW�ZDLW��������029�(%;��>VFDOH[BDUHD�����@��*HW�DGGUHVV�RI�:ULWH�%XIIHU��������029�$/��>(%;���(�6,@��������029�(';��&20����'DWD�3RUW��������287�';��$/������+HUH�LV�WKH�RXWJRLQJ�E\WH���������,1&�(6,��������029�>VFDOH[BDUHD�����@��(6,��ZULWHRXW��������-03�/(9:4:���:ULWH�4XHXH�:DNH�XS��6LQFH�BBZDNHBXS���ORRNV�OLNH�D�IXQFWLRQ�ZH�VKRXOG�H[SHFW��WR�SXVK�WKH�DUJXPHQWV�DV�VKRZQ�RQ�WKH�QH[W�WZR�OLQHV���������386+�GZRUG���7$6.B,17(55837,%/(��������386+�GZRUG�VFDOH[BDUHD�������:DNH�XS������������������������7KLV�LV�WKH�GRXEOH�SRLQWHU���+RZHYHU�BBZDNHBXS���DFWXDOO\�ZDQWV�LWV�DUJXPHQWV�SDVVHG

Page 157: Linux assembly language programming

��+RZHYHU�BBZDNHBXS���DFWXDOO\�ZDQWV�LWV�DUJXPHQWV�SDVVHG��LQ�UHJLVWHUV�(';�DQG�($;���������029�(';����7$6.B,17(55837,%/(��������029�($;��VFDOH[BDUHD�������:ULWH�ZDLW�TXHXH��������&$//�BBZDNHBXS��������-03�/(954:���5HDG�4XHXH�:DNH�XS��7HVW�IODJV�FRPSRQHQW�IRU�WKH�5HDG�3HQGLQJ�%LW��������7(67�GZRUG�>VFDOH[BDUHD@�����������-=�1($5�/(9�������1R"�)DOVH�DODUP��MXVW�TXLW���������029�(';����7$6.B,17(55837,%/(��������029�($;��VFDOH[BDUHD�������5HDG�ZDLW�TXHXH��������&$//�BBZDNHBXS��������-03�/(95%)����5HDG�%XIIHU�)XOO��������386+�GZRUG�295���2YHUIORZ��������&$//�SULQWN��������$''�(63�����������-03�/(9��(UURU�PHVVDJH�295��GE��5HDG�EXIIHU�RYHUIORZ����$+�����+DOI�E\WH�WR�%\WH�7UDQVODWLRQ�WDEOH�2.&��GE������������$%����$+���)�/(9����������323�(',���������323�(6,���������323�(%;���������323�(';���������323�(&;���������5(7�������6FDOH[�6\VWHP�&DOO�+DQGOHUV+HUH�DUH�WKH�IXQFWLRQV�ZKLFK�DUH�SRLQWHG�DW�LQ�WKH�ILOH�RSHUDWLRQV�VWUXFWXUH�3URJUDP��������LQFOXGH��OLQX[�HUUQR�K!�LQFOXGH��OLQX[�NHUQHO�K!�LQFOXGH��OLQX[�PDMRU�K!�LQFOXGH��OLQX[�VFKHG�K!�LQFOXGH��OLPL[�PDOORF�K!�LQFOXGH��OLQX[�GHOD\�K!�LQFOXGH��OLQX[�VFDOH[�K!�LQFOXGH��DVP�LR�K!�LQFOXGH��DVP�LUT�K!�LQFOXGH��DVP�XDFFHVV�K!VWUXFW�VFDOH[BVWUXFW�VFDOH[�DUHD� ����������������^���������������18//��18//��18//��18//`�VWDWLF�LQW�VFDOH[BUHVHW�YRLG��̂���LQW�UHWYDO� �������VFDOH[BDUHD�IODJV� �6&$/(;B(;,67�����VFDOH[BDUHD�UHDGLQ� �������VFDOH[BDUHD�UHDGRXW� �������VFDOH[BDUHD�ZULWHLQ� �������VFDOH[BDUHD�ZULWHRXW� �������UHWXUQ�UHWYDO�`VWDWLF�LQOLQH�FKDU�FXW�FKDU�[�^

Page 158: Linux assembly language programming

�̂���FKDU�\�����LI��[� ���\� ��������HOVH�LI��[� ����\� ��������HOVH�LI��[�! �$��[�� �)��\� ��[���$�����������HOVH�LI��[�! �D��[�� �I��\� ��[���D�����������HOVH�LI��[�! ����[�� ����\� �[���������HOVH�LI��[� ����\� ��������HOVH�LI��[� �����\� ��������HOVH�LI��[� �����\� ��������HOVH�\� ��������UHWXUQ�\�V̀WDWLF�LQOLQH�FKDU�FKDUBILOO��FKDU�[��̂ �&RQYHUW�IRXU�ELW�FRGH�LQWR�D�&�FKDUDFWHU� �����FKDU�\�����LI��[� �����\� �)�����HOVH�LI��[� �����\� �������HOVH�LI��[� �����\� ����� �7HUPLQDWLRQ�IODJ���� �����HOVH�LI��[� �����\� �������HOVH�LI��[� �����\� �%�����HOVH�LI��[� �����\� �$��� �1RW�XVHG��� �����HOVH�LI��[�������\� �[���������HOVH�\� ����� �.HHS�WKH�FRPSLOHU�KDSS\��� �����UHWXUQ�\�`VWDWLF�LQOLQH�LQW�RNBDVFLLBFKDU��FKDU�[��̂���� �-XVW�D�YDOLGLW\�FKHFN�RQ�WKH�WR�VHH�LI�[LV�RQH�RI�WKH�FKDUDFWHUV�FRGHDEOH�LQ�WKH�IRXU�ELW�VFDOH[�FRGH� �����UHWXUQ��[�! �$��[�� �)��__���������[�! �D��[�� �I��__���������[�! ����[�� ����__���������[� �����__��[� ���__�[� �?Q��__��[� �����V̀WDWLF�LQOLQH�YRLG�ZULWHBE\WH�FKDU�[��̂���ZKLOH���LQEBS�6&$/(;B&20B%$6(�������6&$/(;B/65B'$7$B287B(037<����������XGHOD\�O������ �&KHFN�/LQH�6WDWXV�5HJVLWHU�XQWLO�LWV�RND\� �����RXWEBS�[�6&$/(;B&20B%$6(��`VWDWLF�VVL]HBW�VFDOH[BZULWH�VWUXFW�ILOH� �ILOH��FRQVW�FKDU� �EXI�������������VL]HBW�FRXQW��ORIIBW� SSRV��̂���VVL]HBW�UHWY�����XQVLJQHG�ORQJ�FRS\BVL]H�����LQW�M��N��OVUBUHJ�����FKDU�F��G�����VWUXFW�VFDOH[BVWUXFW� VFDOH[� �VFDOH[BDUHD������ �6FDOH[�WDNHV�VKRUW�FRPPDQG�VWULQJV���������&KDUDFWHUV�IROORZLQJ�WHUPLQDWLRQ�ZLOO�EH�GLVFDUGHG���������7HUPLQDWLRQ�ZLOO�EH�DGGHG�WR�DOO�VWULQJV����� �����N� �������ZKLOH��EXI�>N@�� ����N���6&$/(;B:5,7(B6,=(�������������N���FRXQW��N� �N�����

Page 159: Linux assembly language programming

����LI���N� �6&$/(;B:5,7(B6,=(���������UHWXUQ��(,19$/�����LI��N� ����UHWXUQ�FRXQW������ �6LQFH�FRXQW�� �6&$/(;B:5,7(B%8)6,=(� �����FRS\BVL]H� �N�����IRU�N� ����N���FRS\�VL]H��N� �N���������^��������F� �EXI>N@���������LI���RNBDVFLLBFKDU�F���������������UHWXUQ��()$8/7�����`����LI��FRS\BIURPBXVHU�VFDOH[�!ZULWHBEXIIHU��EXI��FRS\BVL]H������^��������UHWXUQ��()$8/7�����`����N� �FRS\BVL]H�� �3DFN�HDFK�WZR�E\WHV�IURP�WKH�XVHUV�EXIIHU�LQWR�RQH�E\WHRI�WKH�VFDOH[�EXIIHU��� �����IRU�N� ����M� ����N�� �FRS\BVL]H��N� �N�����M� �M�������������LI��N� �FRS\BVL]H���������^������������VFDOH[�!ZULWHBEXIIHU>M@� ��[IG���������`��������HOVH�LI��N����� �FRS\�VL]H���������^������������F� �FXW��EXI�>N@��������������VFDOH[�!ZULWHBEXIIHU>M@� ���[G��_�F����������`��������HOVH��������^������������F� �FXW�EXI>N@��������������G� �FXW�EXI>N��@�������������������VFDOH[�!ZULWHBEXIIHU>M@� ��G_F����������`VFDOH[�!ZULWHLQ� �M��� �1XPEHU�RI�E\WHV�LQWR�VFDOH[�EXIIHU� �ZKLOH���LQEBS�6&$/(;B&20B%$6(�������6&$/(;B/65B'$7$B287B(037<���VFDOH[�!ZULWHRXW� ����� �1H[W�E\WH�WR�EH�WUDQVPLWWHG� �OVUBUHJ� �LQEBS�6&$/(;B&20B%$6(������LI�OVUBUHJ�����̂ �5HDG�WKLV�GDPQ�E\WH��,W�VKRXOGQW�EH�KHUH�EXW�LW�LV��� �����F� �LQEBS�6&$/(;B&20B%$6(������G� �FKDUBILOO�F��2[I��LI���VFDOH[��!�UHDGRXW� �� �&LUFXODU�EXIIHU�LV�IXOO��� �������VFDOH[��!�UHDGLQ��������6&$/(;B5($'B%8))(5B6,=(��__�����VFDOH[��!�UHDGRXW� ������VFDOH[��!�UHDGLQ��������6&$/(;B5($'B%8))(5B6,=(����̂���VFDOH[��!�IODJV� �����VFDOH[��!�IODJV�_�6&$/(;B(55�_�6&$/(;B5)8//������SULQWN��7KH�UHDG�EXIIHU�RYHUIORZHG�?Q�������UHWXUQ��()$8/7�L̀I��G� ����� �2WKHU�KDOI�E\WH�VKRXOG�EH�MXVW�ILOOHU��� ��̂ �'RQW�VWRUH�WKLV���,W�PLJKW�JHW�WKH�UHDG�VWXFN��� �����`����HOVH����^��������VFDOH[��!�UHDGBEXIIHU>VFDOH[��!�UHDGLQ@� �G���������VFDOH[��!�UHDGLQ� ��������������VFDOH[��!�UHDGLQ��������6&$/(;B5($'B%8))(5B6,=(��

Page 160: Linux assembly language programming

��������G� �FKDUBILOO��F�!!������������LI��G� �����������^����� �'RQW�VWRUH�WKLV�HLWKHU�� ���������`��������HOVH��������^������������VFDOH[��!�UHDGBEXIIHU�>VFDOH[��!�UHDGLQ@� �G�������������VFDOH[��!�UHDGLQ� ��������������VFDOH[��!�UHDGLQ��������6&$/(;B5($'B%8))(5�6,=(����������`����`����`��������RXWEBS�VFDOH[�!ZULWHBEXIIHU>�@��6&$/(;B&20B%$6(�������LQWHUUXSWLEOHBVOHHSBRQ�VFDOH[�!ZUZDLWBT������LI��VLJQDOBSHQGLQJ�FXUUHQW��������������UHWXUQ��(,175���������UHWY� �FRXQW���������UHWXUQ�UHWY�`VWDWLF�ORQJ�ORQJ�VFDOH[BOVHHN�VWUXFW�ILOH� �ILOH�����������������ORQJ�ORQJ�RIIVHW��LQW�RULJLQ��̂���UHWXUQ��(63,3(�`VWDWLF�VVL]HBW�VFDOH[BUHDG�VWUXFW�ILOH� �ILOH��FKDU� �EXI�VL]HBW�OHQJWK��ORIIBW� SSRV��̂���VWUXFW�VFDOH[BVWUXFW� �VFDOH[� �VFDOH[BDUHD�����VVL]HBW�FRXQW������LQW�N� ���� ����5HDG�IURP�DVFLLBUHDG�EXIIHU�����0DNH�WKH�LQWHUUXSW�KDQGOHU�GR�WKH�WUDQVODWLQJ���������VHH�LI�FKDU�LV�ZDLWLQJ�LQ�EXIIHU��������LI�VR�UHDG�LW���������LI�QRW�VHW�5($'�3(1',1*�ELW�DQG�JR�WR�VOHHS�����VFDOH[�!IODJV� ��VFDOH[�!IODJV�_�6&$/(;B53(1'������FRXQW� �OHQJWK�����GR����^��������LI�VFDOH[�!UHDGLQ� �VFDOH[�!UHDGRXW�������������LQWHUUXSWLEOHBVOHHSBRQ�VFDOH[�!UGZDLWBT����������LI�VFDOH[�!UHDGLQ�� �VFDOH[�!UHDGRXW�����^��������EXI>N@� �VFDOH[�!UHDGBEXIIHU�>�VFDOH[�!UHDGRXW@���������VFDOH[�!UHDGRXW������������ ��VFDOH[�!UHDGRXW��������6&$/(;B5($'B%8))(5B6,=(�������������N� �N�������������LI��EXI�>N���@� �6&$/(;B5($'B675,1*B7(50,1$/���������UHWXUQ�N�� :KHWKHU�WKH�7(50,1$/�VWULQJ�LV�FRXQWHG�DV�RQH�RI�WKH�E\WHV�UHDGRU�QRW�KDV�D�GUDVWLF�HIIHFW���6FDQI�KDQJV�RQ�(2/V�LI�LW�LVEXW�RQ�RUGLQDU\�VWULQJV�LI�LW�LV�QRW�,W�LV�SUREDEO\�EHWWHU�WR�FRXQW�LW������`����FRXQW� �FRXQW������̀���ZKLOH�FRXQW�!��������FRXQW� �N�� �,QWHUUXSW�KDQGOHU�VKRXOG�FKHFN�5($'B3(1',1*�ELWDQG�LVVXH�D�ZDNH�XS�LI�LWV�VHW��� �

Page 161: Linux assembly language programming

����VFDOH[�!IODJV� ��VFDOH[�!IODJV����6&$/(;B53(1'������UHWXUQ�FRXQW�`VWDWLF�LQW�VFDOH[BRSHQ�VWUXFW�LQRGH� �LQRGH��VWUXFW�ILOH� �ILOH��̂���FKDU�F�����LI���VFDOH[BDUHD�IODJV��6&$/(;B(;,67�� �����������UHWXUQ��(1;,2�����LI��VFDOH[BDUHD��IODJV��6&$/(;B%86<���������UHWXUQ��(%86<�����VFDOH[BDUHD�UHDGBEXIIHU� ���������FKDU� ��NPDOORF�6&$/(;B5($'B%8))(5B6,=(��*)3B.(51(/������VFDOH[BDUHD�ZULWHBEXIIHU� ���������FKDU� ��NPDOORF�6&$/(;B:5,7(B%8))(5B6,=(��*)3B.(51(/������LI���VFDOH[BDUHD��UHDGBEXIIHU�__�VFDOH[BDUHD�ZULWHBEXIIHU�����^��������VFDOH[BDUHD�IODJV� ��VFDOH[BDUHD�IODJV���6&$/(;B%86<����������UHWXUQ��(120(0�����`� ,QLWLDOL]H�WKH�6FDOH[�$UHD�����VFDOH[BDUHD�UHDGLQ� �������VFDOH[BDUHD�UHDGRXW� �������VFDOH[BDUHD�ZULWHLQ� �������VFDOH[BDUHD�ZULWHRXW� ���� ����,QLWLDOL]H�WKH�&20�SRUW�����F� �LQEBS�6&$/(;B&20B%$6(�������� �/LQH�&RQWURO�5HJLVWHU��� �����F� �F�_��[����� �%LW���DOORZV�%DXG�5DWH�6HWWLQJ� �����RXWEBS�F��6&$/(;B&20B%$6(����������RXWEBS����6&$/(;B&20B%$6(�������� �%DXG�5DWH�'LYLVRU�8SSHU�%\WH� �����RXWEBS��[F���6&$/(;B&20B%$6(����� �����%DXG��%5'��/RZHU�%\WH� �����RXWEBS����6&$/(;B&20B%$6(������������������� �3XW�EDFN�ELW���DQG�PDNH�SDULW\���1��� �����F� �LQEBS�6&$/(;B&20B%$6(�������� �0RGHP�&RQWURO�5HJLVWHU� ������RXWEBS����6&$/(;B&20B%$6(�������� �,QWHUUXSW�(QDEOH�5HJLVWHU� �� �7UDQVPLW�DQG�5HFHLYH�5HDG\�2QO\� �����F� ��F�_��������RXWEBS�F��6&$/(;B&20B%$6(�������� �(QDEOH�LQWHUUXSWV� �����UHWXUQ���`VWDWLF�LQW�VFDOH[BUHOHDVH�VWUXFW�LQRGH� �LQRGH��VWUXFW�ILOH� �ILOH��̂���XQVLJQHG�LQW�PLQRU� �0,125�LQRGH�!LBUGHY������FKDU�F�����LI��PLQRU�!�����������UHWXUQ��(12'(9�����NIUHHBV�VFDOH[BDUHD�UHDGBEXIIHU��6&$/(;B5($'B%8))(5B6,=(������NIUHHBV�VFDOH[BDUHD�ZULWHBEXIIHU��6&$/(;B:5,7(B%8))(5B6,=(������VFDOH[BDUHD�UHDGBEXIIHU� �18//�����VFDOH[BDUHD�ZULWHBEXIIHU� �18//�����VFDOH[BDUHD�IODJV� ��VFDOH[BDUHD�IODJV��6&$/(;B%86<������F� �LQEBS�6&$/(;B&20B%$6(�������� �'LVDEOH�LQWHUUXSWV� �����F� ��F���[I�������RXWEBS�F��6&$/(;B&20B%$6(����������UHWXUQ���

Page 162: Linux assembly language programming

`VWDWLF�LQW�VFDOH[BLRFWO�VWUXFW�LQRGH� LQRGH��VWUXFW�ILOH� ILOH���������XQVLJQHG�LQW�FPG��XQVLJQHG�ORQJ�DUJ��̂���XQVLJQHG�LQW�PLQRU� �0,125�LQRGH�!LBUGHY������LQW�VWDWXV�����LQW�UHWYDO� �������LI��PLQRU�!�����������UHWXUQ��(12'(9�����LI���VFDOH[BDUHD�IODJV��6&$/(;B(;,67�� �����������UHWXUQ��(12'(9�����VZLWFK���FPG���^��������FDVH�6&$/(;5(6(7�������������VFDOH[BUHVHW���������������EUHDN���������FDVH�6&$/(;*(7)/$*6�������������VWDWXV� �VFDOH[BDUHD�IODJV��������������LI��FRS\BWRBXVHU��LQW� ��DUJ��VWDWXV��VL]HRI�LQW���������������UHWXUQ��()$8/7�������������EUHDN���������GHIDXOW�������������UHWYDO� ��(,19$/�����`����UHWXUQ�UHWYDO�`VWDWLF�VWUXFW�ILOHBRSHUDWLRQV�VFDOH[BIRSV� ^����VFDOH[BOVHHN�����VFDOH[BUHDG�����VFDOH[�ZULWH�����18//��� �VFDOH[BUHDGGLU� �����18//��� �VFDOH[BSROO� �����VFDOH[BLRFWO�����18//��� �VFDOH[BPPDS� �����VFDOH[BRSHQ�����18//��� �IOXVK� �����VFDOH[BUHOHDVH`�LQW�VFDOH[BLQLW�YRLG�^����LI��UHJLVWHUBFKUGHY�6&$/(;B0$-25���VFDOH[���VFDOH[BIRSV������^��������SULQWN��VFDOH[��XQDEOH�WR�JHW�PDMRU��G?Q���6&$/(;B0$-25����������UHWXUQ��(,2�����`����LI��UHTXHVWBLUT����VFDOH[BLQWHUUXSW������VFDOH[���18//������^��������SULQWN��VFDOH[��XQDEOH�WR�JHW�LUT��G?Q��������������UHWXUQ��(,2�����`����VFDOH[BDUHD�IODJV� �6&$/(;B(;,67�����UHWXUQ���`3URJUDP��������GHILQH�6&$/(;B(;,67������[�����GHILQH�6&$/(;B%86<�������[�����GHILQH�6&$/(;B53(1'������[�����GHILQH�6&$/(;B5)8//������[�����GHILQH�6&$/(;B5(55�������[�����GHILQH�6&$/(;B&20B%$6(���[�)�

Page 163: Linux assembly language programming

�GHILQH�6&$/(;B&20B%$6(���[�)��GHILQH�6&$/(;B,,5B'$7$B,1B)8//��������GHILQH�6&$/(;B,,5B'$7$B287B(037<������GHILQH�6&$/(;B/65B'$7$B,1B)8//��������GHILQH�6&$/(;B/65B'$7$B287B(037<�������GHILQH�6&$/(;B:5,7(B6,=(���������������GHILQH�6&$/(;B:5,7(B%8))(5B6,=(���������GHILQH�6&$/(;B5($'B%8))(5B6,=(�����������GHILQH�6&$/(;B5($'B675,1*B7(50,1$/����� �,2&7/�QXPEHUV� ��GHILQH�6&$/(;5(6(7��[���F�� �UHVHW�VFDOH[� ��GHILQH�6&$/(;*(7)/$*6��[���H�� �JHW�VWDWXV�IODJV� ��GHILQH�6&$/(;B:5,7(B%8))(5B6,=(�����GHILQH�6&$/(;B5($'B%8))(5B6,=(������ IXQFWLRQ�SURWRW\SHV� H[WHUQ�LQW�VFDOH[BLQLW�YRLG��)XUWKHU�5HDGLQJ:ULWLQJ�8QL[�'HYLFH�'ULYHUV��*HRUJH3DMDUL��$GGLVRQ�:HVOH\�������/LQX[�'HYLFH�'ULYHUV��$OHVVDQGUR5XELQL��25HLOO\�������&KDSWHU�����'26�352*5$06/LQX[�ZDV�ZULWWHQ�IRU�WKH������7KH�����UHWDLQV�PDQ\�RI�WKH�IHDWXUHV�RI�WKH�������6LQFH�'26�ZDV�ZULWWHQ�IRU�WKH�������WKHUH�LV�PXFK�WR�EH�OHDUQHG�DERXW�WKH�����IURP�WKH�VWXG\�RI�'26�SURJUDPV�7KH�HQYLURQPHQW�LQ�ZKLFK�D�'26�SURJUDP�RSHUDWHV�LV�YHU\�GLIIHUHQW�IURP�WKH�HQYLURQPHQW�RI�D�8QL[�XVHU�SURJUDP��,W�LV�UHPDUNDEOH�WKDW�RQH�DQG�WKH�VDPH�SURFHVVRU�FDQ�VXVWDLQ�ERWK�RI�WKHVH�HQYLURQPHQWV��7KUHH�PDLQ�GLIIHUHQFHV�EHWZHHQ�WKH�'26�HQYLURQPHQW�DQG�WKH�8QL[�XVHU�SURJUDP�HQYLURQPHQW�DUH�� 0HPRU\�UHIHUHQFLQJ��,Q�8QL[��PHPRU\�DFFHVV�LV�FRQWUROOHG�XVLQJ�D�YLUWXDO�PHPRU\�V\VWHP��,Q�/LQX[��YLUWXDO�PHPRU\�LV�EDVHG�RQ�SDJLQJ��7KH�DSSOLFDWLRQV�SURJUDPPHU�KDV�QR�GLUHFW�DFFHVV�WR�SK\VLFDO�PHPRU\��,Q�'26��WKHUH�LV�QR�SDJLQJ��.QRZLQJ�WKH�SK\VLFDO�DGGUHVV�RI�D�PHPRU\�ORFDWLRQ�HQDEOHV�WKH�SURJUDPPHU�WR�ZULWH�GLUHFWO\�WR�WKDW�ORFDWLRQ��,W�UHTXLUHV�PDQLSXODWLRQ�RI�WKH�VHJPHQWDWLRQ�SURFHVV��DV�LV�H[SODLQHG�LQ�FKDSWHU�����VHFWLRQ�������,Q�8QL[��WKH�DSSOLFDWLRQV�SURJUDPPHU�PD\�LJQRUH�WKH�VHJPHQWDWLRQ�SURFHVV�VLQFH��IRU�XVHUV��WKHUH�LV�MXVW�RQH�ELJ�VHJPHQW�DQG�LW�LV�DOZD\V�WKH�VDPH��� 3ULYLOHJH�OHYHO��,Q�8QL[��RQO\�V\VWHP�SURJUDPV�KDYH�V\VWHP�OHYHO�SULYLOHJH��8VHU�SURJUDPV�GR�QRW��6WULFWO\�VSHDNLQJ��'26�KDV�QR�SULYLOHJH�OHYHOV��%XW�DFWXDOO\��ZKHQ�'26�LV�UXQQLQJ��DOO�SURJUDPV�H[HFXWH�DW�HIIHFWLYHO\�V\VWHP�OHYHO�SULYLOHJH��/LQX[�XVHU�SURJUDPV�GR�QRW�FDUU\�V\VWHP�OHYHO�SULYLOHJH��2QH�FRQVHTXHQFH�RI�WKLV�LV�WKDW�WKH\�GR�QRW�KDYH�GLUHFW�,�2�DFFHVV��7KDW�LV��WKH\�DUH�QRW�DOORZHG�WR�XVH�HLWKHU�WKH�,1�RU�WKH�287�LQVWUXFWLRQV��3ULYLOHJH�OHYHOV�DUH�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ������� &RGLQJ�GHIDXOW��[���/LQX[�SURJUDPV�H[HFXWH�ZLWK�D����ELW�FRGLQJ�GHIDXOW��'26�SURJUDPV�H[HFXWH�ZLWK�D����ELW�FRGLQJ�GHIDXOW��&RGLQJ�GHIDXOWV�DUH�GLVFXVVHG�LQ�FKDSWHU����VHFWLRQ�����

:KHQ�[���SURFHVVRUV��VWDUWLQJ�ZLWK�WKH��������FUHDWH�D�'26�HQYLURQPHQW��WKH\�DUH�VDLG�WR�EH�RSHUDWLQJ�LQ�UHDO�PRGH��:KHQ�QRW�LQ�UHDO�PRGH��WKH\�DUH�VDLG�WR�EH�LQ�SURWHFWHG�PRGH��,Q�/LQX[��XVHU�SURJUDPV�DQG�PRVW�NHUQHO�SURJUDPV�UXQ�LQ�SURWHFWHG�PRGH��/LQX[�RQO\�XVHV�UHDO�PRGH�IRU�ERRWLQJ�DQG�WKLV�LV�QHFHVVDU\�VLQFH�WKH�RQO\�ZD\�DQ�[���SURFHVVRU�FDQ�ERRW�LV�LQ�UHDO�PRGH�3ULYLOHJH�OHYHOV�DQG�FRGLQJ�GHIDXOWV�KDYH�DOUHDG\�EHHQ�GLVFXVVHG��EXW�VHJPHQWDWLRQ�KDV�EHHQ�WRWDOO\�LJQRUHG�WR�WKLV�SRLQW��+RZHYHU��'26�SURJUDPV�UHTXLUH�LW��:H�EHJLQ�RXU�GLVFXVVLRQ�RI�VHJPHQWDWLRQ�ZLWK�UHDO�PRGH�

Page 164: Linux assembly language programming

WR�WKLV�SRLQW��+RZHYHU��'26�SURJUDPV�UHTXLUH�LW��:H�EHJLQ�RXU�GLVFXVVLRQ�RI�VHJPHQWDWLRQ�ZLWK�UHDO�PRGH�VHJPHQWDWLRQ��6HJPHQWDWLRQ�LQ�SURWHFWHG�PRGH�LV�GLVFXVVHG�LQ�FKDSWHU�����VHFWLRQ�����������5HDO�0RGH�6HJPHQWDWLRQ7KH�WHUPV�VHJPHQW�DQG�VHJPHQWDWLRQ�DUH�XVHG�LQ�PDQ\�RYHUODSSLQJ�DQG�FRQIOLFWLQJ�ZD\V��&RQVHTXHQWO\��LW�ZRXOG�EH�ZHOO�WR�PDNH�D�SUHOLPLQDU\�DWWHPSW�DW�FODULI\LQJ�WHUPLQRORJ\��,Q�'26��FRGH�DQG�GDWD�VHJPHQWV�RI�D�SURJUDP�PD\�EH�VWRUHG�LQ�FRGH�DQG�GDWD�VHJPHQWV�RI�PHPRU\��EXW�DUHQW�QHFHVVDULO\��,Q�/LQX[��WKH\�QHYHU�DUH��7H[W�DQG�GDWD�VHJPHQWV�RI�D�SURJUDP�DUH�VWRUHG�RQ�VHSDUDWH�SDJHV�RI�PHPRU\��QRW�VHSDUDWH�VHJPHQWV�RI�PHPRU\��,Q�[���/LQX[��WKH�HUURU�PHVVDJH��6HJPHQWDWLRQ�)DXOW��GRHV�QRW�UHIHU�WR�D�VHJPHQWDWLRQ�IDXOW��LW�UHIHUV�D�SDJH�SURWHFWLRQ�IDXOW��:RUVW�RI�DOO�LV�WKH�WHUP�ORJLFDO�VHJPHQW�ZKLFK�DFFXUDWHO\�VSHFLILHV�QRWKLQJ�DW�DOO�7R�DYRLG�ZDQWRQO\�PXGG\LQJ�WKLQJV�IXUWKHU��WKLV�ERRN�ZLOO�GRJJHGO\�DGKHUH�WR�WKH�IROORZLQJ�GLVWLQFWLRQV�EHWZHHQ�SURJUDP�VHJPHQWV��PHPRU\�VHJPHQWV��DQG�VHJPHQWDWLRQ�6HJPHQWV�DQG�6HJPHQWDWLRQ

z 3URJUDP�VHJPHQW��6LQFH�FKDSWHU����ZH�KDYH�DSSOLHG�WKH�WHUP�VHJPHQW�WR�D�FKXQN�RI�DQ�H[HFXWDEOH�ILOH��7KLV�LV�VWDQGDUG�XVDJH��3URJUDPV�W\SLFDOO\�KDYH�WH[W�DQG�GDWD�VHJPHQWV�z 6HJPHQWDWLRQ�SURFHVV��,Q�WKLV�ERRN��WKH�WHUP�VHJPHQWDWLRQ�LV�DSSOLHG�RQO\�WR�DQ�DGGUHVV�SURFHVVLQJ�PHFKDQLVP�ZKLFK�KDV�WKH�HIIHFW�RI�GLYLGLQJ�PHPRU\�LQWR�FKXQNV�z 0HPRU\�VHJPHQW��,W�LV�FXVWRPDU\�WR�DSSO\�WKH�WHUP�VHJPHQW�WR�WKH�FKXQNV�RI�PHPRU\�SURGXFHG�E\�WKH�VHJPHQWDWLRQ�SURFHVV��,Q�WKLV�ERRN��PHPRU\�VHJPHQWV�ZLOO�DOZD\V�EH�UHIHUUHG�WR�LQ�FRQQHFWLRQ�ZLWK�D�VSHFLDO�NLQG�RI�UHJLVWHU�FDOOHG�VHJPHQW�UHJLVWHU�

2Q�DQ�[���SURFHVVRU��VHJPHQWDWLRQ�LV�FRQWUROOHG�E\�VHJPHQW�UHJLVWHUV��������6HJPHQW�5HJLVWHUV2Q�WKH�������IRXU�RI�WKH�JHQHUDO�UHJLVWHUV�FDQ�EH�XVHG�IRU�DGGUHVVHV��%;��%3��6,��DQG�',��7KDW�LV��WKH\�FDQ�EH�XVHG�LQ�EUDFNHWV�WR�UHIHU�WR�PHPRU\��)RU�H[DPSOH��WKH�FRPPDQGV����029�%;������+����029�$/��>%;@ZRXOG�FRS\�WKH�FRQWHQWV�RI�RQH�PHPRU\�ORFDWLRQ�LQWR�WKH�$/�UHJLVWHU��%XW�%;��%3��6,��DQG�',�DUH����ELW�UHJLVWHUV�DQG�WKH������KDV�D����ELW�DGGUHVV�EXV��6R�DQ�DGGUHVV�UHJLVWHU�FDQ�RQO\�DGGUHVV���.�RI�WKH�DYDLODEOH���0HJ�RI�PHPRU\��7R�JHW�DURXQG�WKLV�SUREOHP��WKH�GHVLJQHUV�RI�WKH������FUHDWHG�VSHFLDO����ELW�UHJLVWHUV�FDOOHG�VHJPHQW�UHJLVWHUV�ZKLFK��RQ�WKH�������VSHFLI\�WKH�ILUVW�DGGUHVV��RU�EDVH�DGGUHVV��RI�D���.�FKXQN�RI�PHPRU\��2Q�WKH�������D���.�FKXQN�RI�PHPRU\�VSHFLILHG�E\�D�VHJPHQW�UHJLVWHU�LV�FDOOHG�D�PHPRU\�VHJPHQW�$Q������PHPRU\�VHJPHQW�PD\�EHJLQ�RQ�DQ\�ILYH�GLJLW�KH[�DGGUHVV�ZKLFK�HQGV�LQ�D�]HUR��7KH�ILUVW�IRXU�GLJLWV�RI�WKLV�DGGUHVV�DUH�VWRUHG�LQ�WKH�DVVRFLDWHG�VHJPHQW�UHJLVWHU��7KH������VHJPHQW�UHJLVWHUV�DUH�&6��'6��(6��DQG�66��7KH�PHPRU\�VHJPHQW�VSHFLILHG�E\�WKH�&6�UHJLVWHU��IRU�H[DPSOH��LV�FDOOHG�WKH�&6�VHJPHQW��FRGH�VHJPHQW���2Q�DQ�[���SURFHVVRU��FRGH�LV�DOZD\V�IHWFKHG�IURP�WKH�&6�VHJPHQW��/LNHZLVH�WKH�VWDFN�LV�DOZD\V�ORFDWHG�LQ�WKH�66�VHJPHQW��VWDFN�VHJPHQW���7KH�������DQG�VXEVHTXHQW�[���SURFHVVRUV�KDYH�WZR�DGGLWLRQDO�VHJPHQW�UHJLVWHUV��)6�DQG�*6�6HJPHQW�UHJLVWHUV�PD\�EH�DFFHVVHG�XVLQJ�WKH�FRPPDQG����029�UHJ�UHJZKHUH�RQH�UHJLVWHU�LV�DQ\����ELW�JHQHUDO�UHJLVWHU��DQG�WKH�RWKHU�PD\�EH�DQ\�VHJPHQW�UHJLVWHU��$Q�H[FHSWLRQ�LV�WKDW�&6�PD\�QRW�EH�XVHG�DV�WKH�GHVWLQDWLRQ�UHJLVWHU��6LQFH�LQVWUXFWLRQV�DUH�IHWFKHG�IURP�WKH�&6�VHJPHQW��VWRULQJ�D�QHZ�YDOXH�LQ�&6�ZRXOG�KDYH�WKH�GUDVWLF�HIIHFW�RI�FKDQJLQJ�WKH�VHJPHQW�WKDW�FRGH�LV�EHLQJ�IHWFKHG�IURP��$�MXPS�WR�D�GLIIHUHQW�VHJPHQW�LV�FDOOHG�D�IDU�MXPS��&DUU\LQJ�RXW�D�IDU�MXPS�UHTXLUHV�D�VSHFLDO�FRPPDQG��,QWUDVHJPHQW�MXPSV�DUH�FDOOHG�QHDU�MXPSV�

Page 165: Linux assembly language programming

FRPPDQG��,QWUDVHJPHQW�MXPSV�DUH�FDOOHG�QHDU�MXPSV�7KHUH�LV�QR�ORDG�LPPHGLDWH�FRPPDQG�IRU�VHJPHQW�UHJLVWHUV��7KH�IROORZLQJ�FRPPDQG��IRU�H[DPSOH��LV�LOOHJDO�����029�'6������+6XSSRVH�WKDW�'6��(6��DQG�66�KDYH�YDOXHV�VWRUHG�LQ�WKHP�YLD�WKH�IROORZLQJ�FRPPDQGV�����029�$;������+����029�'6��$;����029�$;������+����029�(6��$;����029�$;���&���+����029�66��$;6R�WKHQ�'6�KROGV�����+��(6�KROGV�����+��DQG�66�KROGV�&���+��)LJXUH������VKRZV�WKH�WKUHH�VHJPHQWV�ZKLFK�DUH�HQDEOHG�E\�WKHVH�WKUHH�UHJLVWHU�ORDGV��7KH�HQWLUH�PHPRU\�FRQVLVWV�RI�WKH�DGGUHVVHV�IURP���WKURXJK�)))))+��7KH�'6�VHJPHQW�FRQVLVWV�RI�WKH�DGGUHVVHV�IURP������+�WKURXJK��))))+��7KH�(6�VHJPHQW�UDQJHV�IURP������+�WKURXJK��))))+��7KH�66�VHJPHQW�JRHV�IURP�&����+�WKURXJK�'�)))+�

)LJXUH������������0HPRU\�ZLWK�7KUHH�'LVWLQJXLVKHG�6HJPHQWV

Page 166: Linux assembly language programming

�������6HJPHQW�2IIVHW�1RWDWLRQ6XSSRVH�QRZ�WKDW�ZH�ZRXOG�OLNH�WR�UHIHU�WR�WKH�PHPRU\�ZKRVH�DGGUHVV�LV������+�LQ�DQ�DVVHPEOHU�FRPPDQG��7KLV�DGGUHVV�OLHV�LQ�WKH�'6�VHJPHQW���7KLV�LV�EHFDXVH�����+�ZDV�MXVW�VWRUHG�LQ�WKH�'6�UHJLVWHU���,W�LV�����+�E\WHV�IURP�WKH�EDVH�DGGUHVV��7KLV�GLIIHUHQFH��WKH�DGGUHVV�PLQXV�WKH�EDVH�DGGUHVV��LV�FDOOHG�WKH�RIIVHW��7KH�VHJPHQW�RIIVHW�SDLU�LV�RIWHQ�XVHG�LQ�WKH�DVVHPEO\�ODQJXDJH�DV�IROORZV�����029�%/��'6�>����+@,Q�1$60�WKH�V\QWD[�LV����029�%/��>'6�����+@7KLV�FRPPDQG�ORDGV�WKH�FRQWHQWV�RI�PHPRU\�ORFDWLRQ������+�LQWR�%/�������+� ������+�������+��1RWH�WKDW�WKH�EDVH�DGGUHVV�LWVHOI�LV�D�ILYH�GLJLW�KH[�QXPEHU��HYHQ�WKRXJK�'6�RQO\�KROGV�IRXU�GLJLWV��LQ�WKLV�FDVH�����+�7KH�DGGUHVV������+�LV�D�SK\VLFDO�DGGUHVV��QRW�D�YLUWXDO�DGGUHVV��7KH�ELWV�ZKLFK�WKH�SURFHVVRU�SXPSV�RXW�RQWR�WKH�DGGUHVV�EXV�PD\�EH�UHDG�RII�WKH�ELQDU\�QXPEHU����������������������������7KH�VDPH�PHPRU\�UHDG�FRXOG�EH�DFFRPSOLVKHG�XVLQJ�D����ELW�DGGUHVV�UHJLVWHU�DV�IROORZV�����029�%;������+����029�%/��>'6�%;@%;��%3��6,��DQG�',�PD\�EH�XVHG�IRU�DGGUHVVLQJ�LQ�WKLV�ZD\��EXW�63��$;��&;��DQG�';�PD\�QRW��������'HIDXOW�6HJPHQWV6HJPHQW�GHVLJQDWLRQV�PD\�EH�RPLWWHG��7KHUH�LV�DOZD\V�D�GHIDXOW�VHJPHQW��5HIHUULQJ�WR�7DEOH�������ZH�VHH�WKDW�WKH�GHIDXOW�VHJPHQW�IRU�DQ�LPPHGLDWH�DGGUHVV�LV�WKH�'6�VHJPHQW��+HQFH�WKH�FRPPDQG����029�%/��>����+@DOVR�DFFRPSOLVKHV�WKH�VDPH�ORDG�DV�WKH�029�%/��>'6�%;@�LQVWUXFWLRQ��6R�GR�WKH�FRPPDQGV����029�%;������+����029�%/��>%;@

7DEOH�������'HIDXOW�6HJPHQWV���ELW�DGGUHVV ���ELW�DGGUHVV>LPP@ '6 >LPP@ '6>($;@ '6 >$;@ LOOHJDO�

Page 167: Linux assembly language programming

>�@�(6�ZLWK�VWULQJ�LQVWUXFWLRQV7KH�GHIDXOW�VHJPHQW�IRU�ERWK�LPPHGLDWH�DGGUHVVHV�DQG�IRU�DGGUHVVHV�VWRUHG�LQ�WKH�%;�UHJLVWHU�LV�WKH�'6�VHJPHQW�'HIDXOW�VHJPHQWV�H[LVW�LQ����ELW�FRGH�DV�ZHOO��,Q�IDFW��WKDW�LV�ZKDW�PDNHV�LW�SRVVLEOH�WR�GR�SURJUDPPLQJ�ZLWKRXW�UHIHUHQFH�WR�VHJPHQWV��DV�LV�GRQH�LQ�FKDSWHU����7KH�/LQX[�SURJUDPV�WKHUH�DOO�PDNH�XVH�RI�D�GHIDXOW�VHJPHQW��,W�LV�DFWXDOO\�D���*LJ�VHJPHQW��6HWWLQJ�XS�ELJ�VHJPHQWV�OLNH�WKLV�LV�GLVFXVVHG�LQ�FKDSWHU�����,Q�[���/LQX[��WKH�&6��'6��(6��DQG�66�VHJPHQWV�DOO�UHIHU�WR�WKH�VDPH���*LJ�VHJPHQW��6R�WKH�SURJUDPPHU�KDV�QR�RSWLRQV��DQG�WKH�GHIDXOW�VHJPHQW�LV�DOZD\V�RND\������(GOLQDV�(QYLURQPHQW�9DULDEOHV0DQ\�DVVHPEOHUV�KDYH�GLUHFWLYHV�ZKLFK�DOORZ�YDULDEOHV�WR�EH�GHILQHG�DQG�WKHQ�XVHG�LQ�VXEVHTXHQW�H[SUHVVLRQV��,Q�1$60��WKH�V\QWD[�IRU�VXFK�D�GLUHFWLYH�LV,Q�(GOLQDV��LW�LV,Q�(GOLQDV��WKHUH�DUH�EXLOW�LQ�YDULDEOHV�ZKRVH�YDOXHV�FRQWURO�WKH�EHKDYLRU�RI�WKH�DVVHPEOHU�DQG�WKH�VLPXODWRU��2QH�RI�WKHVH�LV�86(��ZKLFK�GHWHUPLQHV�ZKHWKHU�WKH�DVVHPEOHU�XVHV����ELW�RU����ELW�FRGLQJ��7KH�GHIDXOW�LV�����'26�SURJUDPV�UHTXLUH����1$60�XVHV�D�GLUHFWLYH�FDOOHG�%,76��)RU�H[DPSOH��WR�VSHFLI\����ELW�FRGH�LQ�1$60��WKH�OLQH����%,76���GRHV�WKH�WULFN��$QRWKHU�HQYLURQPHQW�YDULDEOH�LV�'272��,W�GHWHUPLQHV�WKH�IRUPDW�RI��R�ILOHV�VDYHG�E\�(GOLQDV��7KH�GHIDXOW�LV�(/)��'26�QHHGV�WKH�&20�IRUPDW�1$60�JRYHUQV�WKH�IRUPDW�RI�WKH�RXWSXW�ILOH�XVLQJ�D�FRPPDQG�OLQH�VZLWFK��7R�JHW�D�&20�IRUPDW�LQ�1$60��WKH��I�ELQ�VZLWFK�ZRUNV��,W�LV�DOVR�WKH�GHIDXOW�VR�WKDW�QR�VZLWFK�DW�DOO�ZLOO�GR�WKH�VDPH�WKLQJ��$�ILOH�ZLWK�WKLV�IRUPDW�KDV�HVVHQWLDOO\�QR�H[WUD�FRGH�DW�DOO��,W�LV�MXVW�D�SODLQ�ELQDU\�ILOH�(GOLQDV�HQYLURQPHQW�YDULDEOHV�PD\�DOVR�EH�GHILQHG�LQ�DQ�('/�,1,�ILOH�RU�IURP�WKH�!�SURPSW������)L[HG�0HPRU\�$UHDV

>($;@ '6 >$;@ LOOHJDO�>(%;@ '6 >%;@ '6>(&;@ '6 >&;@ LOOHJDO�>(';@ '6 >';@ LOOHJDO�>(6,@ '6 >6,@ '6>(',@ '6>�@ >',@ '6>�@>(63@ 66 >63@ 66>(%3@ 66 >%3@ 66

Page 168: Linux assembly language programming

�����)L[HG�0HPRU\�$UHDV5HDO�PRGH�DOORZV�WKH�SURJUDPPHU�WR�XVH�SK\VLFDO�PHPRU\�DGGUHVVHV��0HPRU\�DGGUHVVHV�VSHFLILHG�LQ�UHDO�PRGH�DUH�XVHG�RQ�WKH�DGGUHVV�EXV��MXVW�OLNH�,�2�DGGUHVVHV��7KLV�JLYHV�WKH�SURJUDPPHU�XQLPSHGHG�DFFHVV�WR�PHPRU\��,Q�WKLV�VHFWLRQ��DV�DQ�H[HUFLVH�LQ�WKH�XVH�RI�UHDO�PRGH�DGGUHVVHV��ZH�FRQVLGHU�WZR�DUHDV�RI�PHPRU\�ZKLFK�DUH�GHILQHG�E\�IL[HG�SK\VLFDO�DGGUHVVHV��WKH�YLGHR�EXIIHU�DQG�WKH�NH\ERDUG�EXIIHU��7KH�ORFDWLRQ�RI�WKH�YLGHR�EXIIHU�LV�IL[HG�LQ�WKH�KDUGZDUH��%XW�WKH�NH\ERDUG�EXIIHU�LV�RQO\�IL[HG�E\�'26��DQG�KHQFH�LW�FDQ�EH�PRYHG��5HIHUULQJ�WR�)LJXUH�������SURJUDPV�ZKLFK�DFFHVV�WKHVH�SK\VLFDO�PHPRU\�DUHDV�GLUHFWO\�DUH�GHILQLWHO\��UXGH��SURJUDPV�DV�RSSRVHG�WR��SROLWH��SURJUDPV�

)LJXUH�������8QSURWHFWHG�2SHUDWLQJ�6\VWHP�VXFK�DV�'26

�������9LGHR�%XIIHU2Q�VWDQGDUG�3&V��WKHUH�LV�D�UHJLRQ�RI�PHPRU\�VWDUWLQJ�DW�WKH�DGGUHVV�%����+�FDOOHG�WKH�YLGHR�EXIIHU��,Q�WKH�PRVW�FRPPRQO\�XVHG�YLGHR�WH[W�PRGH��WKH�YLGHR�EXIIHU�KROGV�WKH�WH[W�LQIRUPDWLRQ�ZKLFK�LV�GLVSOD\HG�RQ�WKH�VFUHHQ��$�YHU\�VLPSOH��EXW�VRPHZKDW�WHGLRXV��ZD\�WR�RXWSXW�LQIRUPDWLRQ�RQ�D�3&�LV�WR�VWRUH�$6&,,�FRGHV�LQ�WKLV�EXIIHU���6HH�7DEOH�������7KH�DGGUHVV�%����+�LV�WKH�DFWXDOO\�DGGUHVV�RI�WKH�$6&,,�FRGH�IRU�WKH�FKDUDFWHU�LQ�WKH�XSSHU�OHIW�KDQG�FRUQHU�RI�WKH�VFUHHQ��6HH�)LJXUH�������7KH�QH[W�E\WH��ZKLFK�LV�DW�%����+��FRQWDLQV�WKH�DWWULEXWH�LQIRUPDWLRQ�IRU�WKLV�VDPH�FKDUDFWHU��7DEOH������VKRZV�KRZ�WKH�HLJKW�ELWV�RI�DQ�DWWULEXWH�E\WH�DUH�XVHG��%����+�LV�WKH�$6&,,�FRGH�RI�WKH�VHFRQG�FKDUDFWHU�LQ�WKH�ILUVW�URZ��%����+�LV�LWV�DWWULEXWH�E\WH��DQG�VR�RQ��7KH�WRS�URZ�FRQVLVWV�RI����FKDUDFWHUV��RU�����E\WHV��VLQFH�HDFK�FKDUDFWHU�WDNHV�WZR�E\WHV�RI�VWRUDJH��2QH�VFUHHQIXO�LV����URZV����FROXPQV���E\WHV�SHU�FKDUDFWHU� ������E\WHV��7KH�EXIIHU�DFWXDOO\�FRQWDLQV������E\WHV� �����+�

)LJXUH�������8SSHU�/HIW�DW�%�����WKURXJK�/RZHU�5LJKW�DW�%�)�(

Page 169: Linux assembly language programming

3URJUDP������SULQWV��+HOOR��RQ�WKH�VFUHHQ�E\�VWRULQJ�ILYH�$6&,,�FRGHV�LQWR�WKH�YLGHR�EXIIHU��)LJXULQJ�WKH�DGGUHVV�RI�WKH�WKLUW\�VHYHQWK�FKDUDFWHU�RQ�OLQH����LQ�KH[�3URJUDP������LV�D�OLWWOH����E\WH�SURJUDP�ZKLFK�FRORUV�WKH�VFUHHQ�\HOORZ�RQ�EOXH�E\�ZULWLQJ�WR�DOO�WKH�DWWULEXWH�E\WHV�LQ�WKH�YLGHR�EXIIHU��,W�EHJLQV�DW�)))+�DQG�FRXQWV�GRZQ�E\�WZRV��������.H\ERDUG�%XIIHU:KHQ�D�NH\�LV�HLWKHU�SUHVVHG�RU�UHOHDVHG��DQ�LQWHUUXSW�LV�JHQHUDWHG��2Q�DQ�,6$�PDFKLQH�WKLV�LQWHUUXSW�LV�DOORWWHG��,54�����ZKLFK�LQ�WXUQ�LV�UHSRUWHG�E\�WKH�LQWHUUXSW�FRQWUROOHU�DV�LQWHUUXSW�QXPEHU�����6HH�7DEOH������7KH�'26�LQWHUUXSW�VHUYLFH�URXWLQH���LQWHUURJDWHV�WKH�NH\ERDUG�DW�,�2�SRUW���+�DQG�GHSRVLWV�FKDUDFWHUV�LW�UHFHLYHV�IURP�WKHUH�LQ�D�WLQ\�EXIIHU�ORFDWHG�DW���(+��7KHFKDUDFWHUV�FRPH�LQ�IURP�WKH�NH\ERDUG�DV�VFDQ�FRGHV��7KH�,65�FRQYHUWV�HDFK�VFDQ�FRGH�WR�DQ�$6&,,�FKDUDFWHU�DQG�VWRUHV�ERWK�D�VFDQ�FRGH�DQG�DQ�$6&,,�FRGH�LQ�WKH3URJUDP������86(���� ���'272��� �&20���:ULWH�+HOOR�E\�VWRULQJ�$6&,,�FRGHV�LQWR�WKH�YLGHR�EXIIHU���������029�$;��2%���+���)LUVW���GLJLWV�RI�%����+�������029�'6��$;�������029�',�����������/DVW�GLJLW�RI�%����+�������029�$+�����������$6&,,�IRU�+�������029�>',@��$+�����6WRUH�WKH�FKDUDFWHU��������$''�',�����������1H[W�RGG�DGGUHVV�������029�$+�����������$6&,,�IRU�H�������029�>',@��$+�����6WRUH�WKH�FKDUDFWHU��������$''�',�����������������029�$+�����������$6&,,�IRU���������029�>',@��$+�����6WRUH�WKH�FKDUDFWHU��������$''�',�����������������029�$+�����������$6&,,�IRU���������029�>',@��$+�����6WRUH�WKH�FKDUDFWHU��������$''�',�����������������029�$+�����������$6&,,�IRU�R�������029�>',@��$+�����6WRUH�WKH�FKDUDFWHU��������5(7��������������5HWXUQ�WR�'26EXIIHU��)URP�WKLV�EXIIHU��WKH�NH\V�DUH�SLFNHG�XS�E\�WKH�DSSOLFDWLRQ�SURJUDP�RU�WKH�FRPPDQG�OLQH�LQWHUSUHWHU��7KH�WZR�E\WHV�VWRUHG�DW���$�SRLQW�WR�WKH�QH[W�GHSDUWLQJ�E\WHV��,Q�)LJXUH�������WKHUH�LV�RQH�NH\�ZDLWLQJ�WR�EH�SLFNHG�XS��,W�LV�WKH�OHWWHU�&��ZKRVH�$6&,,�FRGH�LV���+���(�LV�LWV�VFDQ�FRGH��7KH�WZR�E\WHV�VWRUHG�DW���&�SRLQW�WR�WKH�ORFDWLRQ�ZKHUH�WKH�QH[W�DUULYLQJ�E\WHV�ZLOO�EH�VWRUHG��6LQFH�WKH�GHSDUWLQJ�SRLQWHU�LV�RQO\�WZR�E\WHV�EHKLQG�WKH�DUULYDO�SRLQWHU��WKLV�PHDQV�WKHUH�LV�RQO\�RQH�FKDUDFWHU�LQ�WKH�EXIIHU��&�LQ�WKLV�FDVH��%RWK�SRLQWHUV�ZUDS�DURXQG�ZKHQ�WKH\�UHDFK���(��)RU�WKLV�UHDVRQ��WKH�EXIIHU�LV�FDOOHG�D�FLUFXODU�EXIIHU�

)LJXUH�������'26�.H\ERDUG�%XIIHU

Page 170: Linux assembly language programming

3URJUDP������VWRUHV�WKH�VWULQJ�',5�LQWR�WKH�NH\ERDUG�EXIIHU������5HDO�0RGH�,QWHUUXSWV:KHQ��SROLWH��XVHU�SURJUDPV�ZDQW�DFFHVV�WR�SHULSKHUDOV��WKH\�FDOO�WKH�RSHUDWLQJ�V\VWHP��,Q�D�SURWHFWHG�RSHUDWLQJ�V\VWHP��WKHUH�LV�QR�FKRLFH�DERXW�WKLV��,Q�DQ�XQSURWHFWHG�RSHUDWLQJ�V\VWHP�OLNH�'26��WKH�FDOO�WR�WKH�RSHUDWLQJ�V\VWHP�LV�RSWLRQDO���6HH�)LJXUH��������-XVW�DV�WKH�SURJUDPV�LQ�VHFWLRQ������DFFHVVHG�SHULSKHUDOV�E\�EDUJLQJ3URJUDP������86(���� ���'272��� �&20������029�$;��2%���+���9LGHR�EXIIHU�EHJLQV�DW�%����+������029�'6��$;������029�%;��2)))+����2GG�DGGUHVV�HQGLQJ�WKH��.�EXIIHU�������029�$+���(+������<HOORZ�RQ�EOXH�$*1���029�>%;@��$+�����$WWULEXWH�JRHV�LQWR�RGG�DGGUHVV������'(&�%;�����������*HW�QH[W������'(&�%;�����������RGG�DGGUHVV������-16�$*1����������&RQWLQXH�WLOO�WKH�EHJLQQLQJ�RI�WKH�EXIIHU������5(7��������������5HWXUQ�WR�'26

LQ�RQ�WKHLU�SULYDWH�PHPRU\�VSDFH���UXGH��SURJUDPV�FDQ�DOVR�DFFHVV�SHULSKHUDOV�E\�XVLQJ�XVLQJ�,1�DQG�287LQVWUXFWLRQV�/LNH�/LQX[��WKH�'26�RSHUDWLQJ�V\VWHP�LV�DFFHVVHG�XVLQJ�VRIWZDUH�LQWHUUXSWV��7KH�LQWHUUXSW�PRVW�XVHG�IRU�DFFHVV�WR�'26�LV�,17���+��7R�FDOO�RQH�RI�WKH�IXQFWLRQV�DYDLODEOH�XQGHU�,17���+��LWV�QXPEHU�LV�VWRUHG�LQ�WKH�$+�UHJLVWHU�EHIRUH�WKH�LQWHUUXSW�LV�FDOOHG��������'26�,QWHUUXSWV7R�FDOO�WKH�'26�IXQFWLRQ�ZKLFK�RXWSXWV�D�FKDUDFWHU�WR�WKH�FXUVRU�ORFDWLRQ�RQ�WKH�VFUHHQ��WKH�IXQFWLRQ�QXPEHU���LV�VWRUHG�LQ�WKH�$+�UHJLVWHU�DQG�WKH�$6&,,�FRGH�RI�WKH�FKDUDFWHU�WR�EH�SULQWHG�LV�VWRUHG�LQ�WKH�'/�UHJLVWHU���7DEOH������VKRZV�WKH�$6&,,�FRGH���)RU�H[DPSOH��WKH�IROORZLQJ�FRGH�ZRXOG�SULQW�WKH�OHWWHU�+�3URJUDP�������������029�$+����������029�'/�����$6&,,�FRGH�IRU�+��������,17���+86(���� ���'272��� �&20�������029�$;����+�����0DNH����+�WKH�EDVH�DGGUHVV�������029�'6��$;������RI�WKH�'6�VHJPHQW��������029�'/����K�����$6&,,�FRGH�IRU�'

7DEOH�������$WWULEXWH�%\WH��<HOORZ�RQ�%OXH�LV��(+%LW 8VDJH ([DPSOH� %OLQNLQJ �� %DFNJURXQG�5HG �� %DFNJURXQG�*UHHQ �� %DFNJURXQG�%OXH �� )RUHJURXQG�,QWHQVLW\ �� )RUHJURXQG�5HG �� )RUHJURXQG�*UHHQ �� )RUHJURXQG�%OXH �

Page 171: Linux assembly language programming

�������029�'/����K�����$6&,,�FRGH�IRU�'�������&$//�&67��������������029�'/����+�����$6&,,�FRGH�IRU�,�������&$//�&67��������������029�'/����+�����$6&,,�FRGH�IRU�5�������&$//�&67��������������5(7&67����029�6,�>�&+@����3RLQWHU�WR�HQG�RI�NH\ERDUG�EXIIHU�������029�>6,@��'/����6WRUH�WKH�FKDUDFWHU�LQWR�WKH�EXIIHU��������68%�6,���&+�������$1'�6,����������$GG����PRG�����WR�6,����(+�������$''�6,���(+�����������029�>�&+@��6,���6WRUH�WKH�UHYLVHG�SRLQWHU��������5(7$�UHODWHG�'26�IXQFWLRQ�ZKLFK�RXWSXWV�D�VWULQJ�RI�FKDUDFWHUV�FDQ�EH�FDOOHG�XVLQJ�$+� ����7KH�VHJPHQW�RIIVHW�DGGUHVV�RI�WKH�VWULQJ�LV�VWRUHG�LQ�'6�';��7KH�VWULQJ�PXVW�EH�WHUPLQDWHG�E\�D�GROODU�VLJQ�FKDUDFWHU��$6&,,���+�0DQ\�RI�WKHVH�'26�IXQFWLRQV�FDOO�SURJUDPV�VWRUHG�LQ�520��7KH\�DUH�RIWHQ�FDOOHG�%,26�SURJUDPV��0DQ\�%,26�LQWHUUXSWV�DUH�DFFHVVHG�XVLQJ�,17���+�RU�,17���+��������%,26�,QWHUUXSWV7R�FDOO�WKH�%,26�IXQFWLRQ�WR�RXWSXW�D�FKDUDFWHU�WR�WKH�FXUVRU�ORFDWLRQ�RQ�WKH�VFUHHQ��WKH�IXQFWLRQ�QXPEHU��$+�LV�VWRUHG�LQ�WKH�$+�UHJLVWHU��DQG�WKH�$6&,,�FRGH�RI�WKH�FKDUDFWHU�WR�EH�SULQWHG�LV�VWRUHG�LQ�'/��7KH�QXPEHU�RI�WLPHV�WKH�FKDUDFWHU�LV�WR�EH�ZULWWHQ�LV�VWRUHG�LQ�&;�����029�$+��������029�'/�����$6&,,�FRGH�IRU�+����029�&;�����1XPEHU�RI�WLPHV�+�LV�SULQWHG����029�%+�����&XUUHQW�SDJH����,17���+7KH�%+�UHJLVWHU�QHHGV�D���LQ�RUGHU�WR�VHQG�WKH�RXWSXW�WR�WKH�YLGHR�EXIIHU�GHVFULEHG�LQ�VHFWLRQ�������7KHUH�LV�XVXDOO\�DQRWKHU��.�YLGHR�EXIIHU�VWDUWLQJ�DW�%����+��7R�DFFHVV�WKLV�EXIIHU��D���VKRXOG�EH�VWRUHG�LQ�%+��(DFK�RI�WKHVH�EXIIHUV�LV�FDOOHG�D�SDJH�7KHVH�SDJHV�PDNH�LW�SRVVLEOH�WR�IOLS�IURP�RQH�VFUHHQ�WR�DQRWKHU�ZLWKRXW�FRS\LQJ��.�RI�PHPRU\��7KH�'26�IXQFWLRQ�FDOO�WDNHV�UHVSRQVLELOLW\�IRU�DFFHVVLQJ�WKH�FXUUHQW�SDJH��WKH�%,26�FDOO�GRHV�QRW�)LJXUH������LOOXVWUDWHV�WKH�W\SLFDO�VHTXHQFH�RI�IXQFWLRQ�FDOOV��7KH�IDFW�WKDW�'26�SURJUDPV�FDOO�%,26�SURJUDPV�DQG�QRW�GLUHFWO\�WR�WKH�KDUGZDUH�OHDYHV�KDUGZDUH�GHVLJQHUV�IUHH�WR�PDNH�DW�OHDVW�PLQRU�FKDQJHV�LQ�WKHLU�KDUGZDUH�ZLWKRXW�WKH�QHFHVVLW\�IRU�FKDQJHV�LQ�'26��%\�UHYLVLQJ�WKH�%,26�SURJUDPV�VR�DV�WR�PDLQWDLQ�WKH�VDPH�IXQFWLRQDOLW\�RI�%,26�LQWHUUXSWV��FKDQJHV�LQ�'26�EHFRPH�XQQHFHVVDU\��6LPLODUO\��FKDQJHV�LQ�'26�FDQ�EH�DFFRPSOLVKHG�ZLWKRXW�GLVUXSWLQJ�DSSOLFDWLRQV�SURJUDPV��SURYLGHG�WKDW�WKH�'26�LQWHUUXSW�LV�UHZULWWHQ�VR�WKDW�LW�DIIRUGV�WKH�VDPH�IXQFWLRQDOLW\�WR�WKH�DSSOLFDWLRQV�SURJUDP��7KHVH�OD\HUV�DIIRUG�DSSOLFDWLRQV�SURJUDPPHUV��V\VWHPV�SURJUDPPHUV��DQG�KDUGZDUH�GHVLJQHUV�D�PRGHVW�GHJUHH�RI�LQGHSHQGHQFH�IURP�RQH�DQRWKHU�

)LJXUH�������'26�0HPRU\�DQG�3HULSKHUDO�$FFHVV

Page 172: Linux assembly language programming

8VHU�SURJUDPV�ZKLFK�E\SDVV�RQH�RU�PRUH�RI�WKHVH�OD\HUV�ULVN�D�ORVV�LQ�SRUWDELOLW\��$�SURJUDP�ZKLFK�FDOOV�GLUHFWO\�WR�WKH�KDUGZDUH�PD\�QRW�UXQ�RQ�D�PDFKLQH�ZLWK�GLIIHUHQW�KDUGZDUH��7KH�VWURQJHVW�UHDVRQ�D�VRIWZDUH�GHYHORSHU�KDV�IRU�VDFULILFLQJ�SRUWDELOLW\�LV�WKDW�E\SDVVLQJ�VRIWZDUH�OD\HUV�UHGXFHV�H[HFXWLRQ�WLPH��([HFXWLRQ�WLPH�LV�VWLOO�D�SUREOHP�LQ�FRQQHFWLRQ�ZLWK�YLGHR�SURFHVVLQJ��7KDW�LV�RQH�UHDVRQ�WKDW�WKH�YLGHR�EXIIHU�EHFDPH�VWDQGDUGL]HG��6R�PXFK�VRIWZDUH�ZURWH�WR�LW�GLUHFWO\�WKDW�PRYLQJ�LW�ZRXOG�KDYH�PDGH�WKH�JUDSKLFV�KDUGZDUH�ZLWK�WKH�ROG�YLGHR�EXIIHU�PLVVLQJ�GLIILFXOW�WR�VHOO��������7KH�5HDO�0RGH�,QWHUUXSW�7DEOH:KHQ�DQ�LQWHUUXSW�RFFXUV��WKH�LQWHUUXSW�QXPEHU�LV�XVHG�DV�DQ�LQGH[�LQWR�WKH�LQWHUUXSW�WDEOH��7KH�LQWHUUXSW�WDEOH�FRQWDLQV�WKH�ORFDWLRQV�RI�DOO�WKH�VHUYLFH�URXWLQHV��7KH�ILUVW�HQWU\�LQ�WKH�WDEOH�LV�IRU�LQWHUUXSW�QXPEHU����WKH�VHFRQG�LV�IRU�LQWHUUXSW�QXPEHU����HWF��7KH�/LQX[�LQWHUUXSW�WDEOH�LV�GHVFULEHG�EULHIO\�LQ�FKDSWHU����VHFWLRQ�������7KH�UHDO�PRGH�LQWHUUXSW�WDEOH�GLIIHUV�IURP�WKH�SURWHFWHG�PRGH�LQWHUUXSW�WDEOH�XVHG�E\�/LQX[�LQ�VHYHUDO�UHVSHFWV�

)LJXUH�������5HDO�0RGH�,QWHUUXSW�7DEOH

(YHU\�HQWU\�LQ�WKH�UHDO�PRGH�LQWHUUXSW�WDEOH�RFFXSLHV�IRXU�E\WHV��7KH�ILUVW�WZR�E\WHV�DUH�D�OLWWOH�HQGLDQ�RIIVHW�YDOXH�DQG�WKH�QH[W�WZR�DUH�D�OLWWOH�HQGLDQ�VHJPHQW�YDOXH�GHVLJQDWLRQ�

Page 173: Linux assembly language programming

YDOXH�DQG�WKH�QH[W�WZR�DUH�D�OLWWOH�HQGLDQ�VHJPHQW�YDOXH�GHVLJQDWLRQ�,Q�UHDO�PRGH��WKH�WDEOH�LV�FXVWRPDULO\�ORFDWHG�VWDUWLQJ�DW�DGGUHVV�]HUR�LQ�PHPRU\��6R�WKH�DGGUHVV�RI�WKH�LQWHUUXSW�VHUYLFH�URXWLQH�IRU�LQWHUUXSW���LV�VWRUHG�LQ�E\WHV���WKURXJK����7KH�DGGUHVV�RI�WKH�URXWLQH�IRU�LQWHUUXSW���LV�VWRUHG�LQ�E\WHV���WKURXJK����,Q�JHQHUDO��LI�Q�LV�WKH�QXPEHU�RI�DQ�LQWHUUXSW��WKHQ�WKH�DGGUHVV�RI�WKH�HQWU\�QXPEHU�Q�LQ�WKH�LQWHUUXSW�WDEOH�LV��îQ��)RU�H[DPSOH��LI�WKH�LQWHUUXSW�QXPEHU�LV���+�WKHQ�WKH�DGGUHVV�RI�WKH�,65�����LV�WR�EH�IRXQG�LQ�E\WHV�&&+�WR�&)+��7KH�ODUJHVW�YDOLG�LQWHUUXSW�QXPEHU�LV������7KH�DGGUHVV�IRU�WKDW�URXWLQH�LV�VWRUHG�LQ�E\WHV������WKURXJK�������RU��)&+�WKURXJK��))+����î����� ������,QWHUUXSW�9HFWRUV7KH�WHUP�LQWHUUXSW�YHFWRU�LV�RIWHQ�XVHG�LQ�FRQQHFWLRQ�ZLWK�WKLV�WDEOH��8QIRUWXQDWHO\��PDQ\�FRQIOLFWLQJ�PHDQLQJV�RI�WKH�WHUP�DUH�LQ�XVH��7KH�WHUP�KDV�EHHQ�XVHG�WR�PHDQ

z WKH�LQWHUUXSW�WDEOH�LWVHOIz RQH�RI�WKH�����HQWULHV�FRQWDLQHG�LQ�WKH�WDEOHz D�PHPRU\�ORFDWLRQ�FRQWDLQLQJ�DQ�HQWU\�LQ�WKH�WDEOHz D�QXPEHU�LQ�WKH�UDQJH�������XVHG�DV�DQ�LQGH[�LQWR�WKH�WDEOH

7KH�WHUP�KDV�EHHQ�GDPDJHG�EH\RQG�UHSDLU�DQG�LW�LV�EHVW�WR�MXVW�QRW�XVH�LW�DQ\�PRUH�.QRZOHGJH�RI�WKLV�WDEOH�PDNHV�LW�SRVVLEOH�WR�ZULWH�D�SURJUDP�ZKLFK�VXSHUFHGHV�D�'26�RU�%,26�LQWHUUXSW��%\�FKDQJLQJ�WKH�VWRUHG�,65�DGGUHVV�IURP�WKDW�RI�WKH�'26�RU�%,26�LQWHUUXSW��WKH�QHZ�SURJUDP�FDQ�WDNH�WKH�SODFH�RI�WKH�ROG�RQH��$�QHZ�SURJUDP�FDQ�DOVR�LQVHUW�LWVHOI�DV�D�OD\HU�E\�FDOOLQJ�WKH�ROG�SURJUDP�DIWHU�LW�KDV�GRQH�ZKDWHYHU�LW�ZDQWV�ZLWK�WKH�RULJLQDO�IXQFWLRQ�FDOO������&KHFNLQJ�'26�0HPRU\2QH�VLPSOH�EXW�XVHIXO�DSSOLFDWLRQ�RI�WKH�VKLIW�FRPPDQGV�LV�WKH�FRQYHUVLRQ�RI�WKH�FRQWHQWV�RI�D�UHJLVWHU�LQWR�D�IRXU�GLJLW�VHTXHQFH�RI�KH[�FKDUDFWHUV��)RU�H[DPSOH��WR�SULQW�RXW�WKH�ILUVW�GLJLW�RI�WKH�QXPEHU�VWRUHG�LQ�%;��VD\��&�'+��ZH�FDQ�PDNH�D�FRS\�RI�%;�DQG�VKLIW�LW����ELWV�WR�WKH�ULJKW�DQG�JHW�����+��7KH�$6&,,�FRGH�IRU���LV���+����� ���+��:H�FDQ�WKHQ�VHQG�WKLV�FRGH�WR�WKH�VFUHHQ�HLWKHU�GLUHFWO\�XVLQJ�WKH�YLGHR�EXIIHU��DV�LQ�VHFWLRQ�������RU�DV�DQ�LQWHUUXSW��DV�LQ�VHFWLRQ�������7R�JHW�WKH�VHFRQG�GLJLW��ZH�FDQ�VKLIW�D�FRS\�RI�%;�HLJKW�ELWV�WR�WKH�ULJKW�DQG�JHW����&+��7R�PDVN�RXW�DOO�EXW�WKH�ERWWRP�IRXU�ELWV��ZH�FDQ�$1'�ZLWK����)+�3URJUDP������XVHV�WKLV�VLPSOH�UHJLVWHU�FRQYHUVLRQ�WR�GLVSOD\�WKH�UHJLRQV�RI�WKH���0HJ�'26�PHPRU\�ZKLFK�DUH�520��,W�ZRUNV�E\�FKHFNLQJ�HYHU\���WK�E\WH�LQ�PHPRU\��7KH�IDFW�WKDW�WKH�SURJUDP�VZHHSV�WKURXJK�WKH�HQWLUH�PHPRU\�PHDQV�WKDW�DW�VRPH�SRLQW�LW�EHFRPHV�VHOI�PRGLI\LQJ�FRGH��7KH�FULWLFDO�OLQHV�ZKHUH�FRGH�LV�PRGLILHG�LQ�3URJUDP������VSDQ�IURP�WKH�LQVWUXFWLRQV�029�>',@��'/�WR�WKH�'(&�%<7(�>',@�LQVWUXFWLRQ��7KH�YDOXH�VWRUHG�LQ�',�DW�WKH�EHJLQQLQJ�PXVW�EH�FKRVHQ�VR�WKDW�WKH�PRGLILHG�E\WHV�VNLS�RYHU�WKLV�FULWLFDO�VHFWLRQ�RI�FRGH��,W�VR�KDSSHQV�WKDW���ZRUNV�ZLWK�WKLV�FRGH��7R�VHH�ZK\�\RX�FDQ�FKHFN�WKH�KH[�FRGH�WR�ILQG�WKH�DGGUHVVHV�RI�WKLV�FULWLFDO�VHFWLRQ�RI�FRGH��<RX�FDQ�XVH�(GOLQDV�WR�GR�WKLV��RU�WKH�'26�SURJUDP�'(%8*��RU�D�KH[�HGLWRU��%RWK�(PDFV�DQG�WKH�WKH�HOYLV�FORQH�RI�YL�FDQ�EH�XVHG�DV�KH[�HGLWRUV��,Q�WKLV�FDVH�WKH�DGGUHVVHV�DUH�IURP���+�WR��%+��VR���ZRUNV�ILQH�3URJUDP������SULQWV�RXW�520�DQG�5$0�RQH�OHWWHU�DW�D�WLPH��7KH\�FDQ�DOVR�EH�SULQWHG�RXW�DV�VWULQJV��'26�LQWHUUXSW���+��XVLQJ�$+� ����ZLOO�SULQW�RXW�D�VWULQJ�ZKLFK�HQGV�LQ�D���FKDUDFWHU�DQG�ZKRVH�VWDUWLQJ�DGGUHVV�LV�VWRUHG�LQ�';��,QVWHDG�RI�XVLQJ����029�';��$%&�����������$%&��GE�5$0�WR�VWRUH�D�SRLQWHU�WR�WKH�VWULQJ��ZH�QHHG�WR�DGG�WKH�RIIVHW�RI�WKH�EHJLQQLQJ�RI�WKH�SURJUDP�WR�';��'26�ORDGV��&20�SURJUDPV�DW�DQ�RIIVHW�RI����+��6R�WKH�FRGH�VKRZQ�ZRUNV�LI�WKH�029�LQVWUXFWLRQ�LV�IROORZHG�E\����$''�';�����+

Page 174: Linux assembly language programming

����$''�';�����+$�VDPSOH�UXQ�RI�3URJUDP������SURGXFHV�DQ�RXWSXW�VXFK�DV3URJUDP����������5$0����������520�$��������5$0�%��������520�&������0DS�5$0�YV��520�LQ�'26V���0HJ��������%,76�������������'26�SURJUDPV�XVH�D����ELW�FRGLQJ�GHIDXOW�������029�$+�����������$+� ���IRU�'26�YLGHR�RXWSXW�LQWHUUXSW�������;25�%/��%/�������%/� �5$0�520�FKHFN���� �5$0���� �520�������029�',�����������',�LV�ZKLFK�E\WH�RXW�RI�HDFK����WR�FKHFN�������;25�6,��6,�������6,� ���6WDUW�DW�WKH�EHJLQQLQJ�RI�PHPRU\723����029�'6��6,�������029�%+��%/�������6DYH�SUHYLRXV�5$0�520�LQGLFDWLRQ�LQ�%+�������;25�%/��%/�������%/� ���XQOHVV�LQFUHPHQWHG�EHORZ�������029�'/��>',@�����*HW�PHPRU\�YDOXH�������,1&�'/�����������&KDQJH�LW�������029�>',@��'/�����7U\�VWRULQJ�WKH�FKDQJHG�YDOXH�������&03�>',@��'/�����6HH�LI�LW�ZRUNHG�������-1(�520����������,I�WKH\UH�QRW�HTXDO�LWV�520�������'(&�%<7(�>',@����4XLFN��3XW�EDFN�RULJLQDO�YDOXH�������,1&�%/������������� �5$0���� �520520����&03�%+��%/�������&RPSDUH�ROG�ZLWK�QHZ�YDOXH�������-*�352�����������&KDQJHG�IURP�5$0�WR�520��VR�SULQW�520�������-/�35$�����������&KDQJHG�IURP�520�WR�5$0��VR�SULQW�5$0�������,1&�6,�����������,QFUHPHQW�PDLQ�ORRS�FRXQWHU%27����-1=�723'81����5(7��������������$OO�GRQH�352����029�'/��5������5��3ULQW�VWDUW�RI�520�������,17���+�������029�'/��2������������,17���+�������-03�05*35$����029�'/��5������5��3ULQW�VWDUW�RI�5$0�������,17���+�������029�'/��$������$�������,17���+05*����029�'/��0������0�������,17���+�������029�'/������������VSDFH!�������,17���+�������029�&/�����������3UHSDUH�WR�SULQW�IRXU�GLJLWV35/����029�';��',�������������6+5�';��&/�������������$1'�';�����������0DVN�HYHU\WKLQJ�H[FHSW�KH[�RQHV�GLJLW�������&03�'/�����������'RHV�WKLV�SULQW�DV�D�QXPHUDO�RU�DV�D�OHWWHU"�������-/�10/�������$''�'/�����������/HWWHUV�QHHG�DQ�H[WUD�VHYHQ10/����$''�'/����+�������,17���+����������3ULQW�KH[�GLJLW�������68%�&/����������-*(�35/����������������029�'/���������)LIWK�GLJLW�LV���������,17���+�������029�'/�����������&DUULDJH�UHWXUQ�������,17���+�������029�'/�����������1HHG�DQ�(2/�WRR�������,17���+�������5(7

Page 175: Linux assembly language programming

)XUWKHU�5HDGLQJ$GYDQFHG�$VVHPEO\�/DQJXDJH�3URJUDPPLQJ��$OLHQ:\DWW��6U���4XH�������&KDSWHU�����/,18;�%227�7,0(�352*5$06,Q�FKDSWHU�����ZH�GLVFXVVHG�WKH�PDLQ�GLIIHUHQFHV�EHWZHHQ�WKH�HQYLURQPHQW�SURYLGHG�WR�XVHU�SURJUDPV�ZKLFK�UXQ�XQGHU�/LQX[�DQG�WKH�HQYLURQPHQW�XQGHU�ZKLFK�'26�SURJUDPV�UXQ��:H�VDZ�KRZ�YHU\�GLIIHUHQW�WKHVH�WZR�HQYLURQPHQWV�DUH��0XFK�RI�WKH�GLIIHUHQFH�EHWZHHQ�WKHVH�WZR�HQYLURQPHQWV�LV�GXH�WR�WKH�IDFW�WKDW�D�GLIIHUHQW�RSHUDWLQJ�V\VWHP�LV�UXQQLQJ�LQ�HDFK��%XW�WKHUH�LV�DOVR�D�GLIIHUHQFH�DW�WKH�KDUGZDUH�OHYHO��'26�ZDV�ZULWWHQ�IRU�WKH������SURFHVVRU��,Q�RUGHU�IRU�'26�WR�UXQ�RQ�D�PDFKLQH��WKDW�PDFKLQH�PXVW�DFW�OLNH�DQ�������/LQX[�LV�D�PXOWLWDVNLQJ�V\VWHP��,Q�RUGHU�IRU�LW�WR�UXQ�RQ�D�PDFKLQH��WKDW�PDFKLQH�PXVW�KDYH�KDUGZDUH�VXSSRUW�IRU�WKH�SURWHFWLRQ�RI�RQH�WDVN�IURP�DQRWKHU��7KH�[���SURFHVVRUV��IURP�WKH�������RQ��VXSSRUW�ERWK�RI�WKHVH�RSHUDWLQJ�V\VWHPV�E\�UXQQLQJ�LQ�WZR�GLVWLQFW�RSHUDWLQJ�PRGHV��UHDO�PRGH�ZKLFK�HPXODWHV�DQ������DQG�SURWHFWHG�PRGH�ZKLFK�KDV�PXOWLWDVNLQJ�VXSSRUW������&KDQJLQJ�WR�3URWHFWHG�0RGH:KHWKHU�DQ�[���SURFHVVRU�UXQV�LQ�UHDO�RU�SURWHFWHG�PRGH�LV�GHWHUPLQHG�E\�WKH�ERWWRP�ELW�RI�WKH�&5��UHJLVWHU��7KLV�UHJLVWHU�LV�D����ELW�H[WHQVLRQ�RI�WKH����ELW�0DFKLQH�6WDWXV�:RUG�UHJLVWHU�RQ�WKH��������7KH�OHDVW�VLJQLILFDQW�ELW�LQ�WKLV�UHJLVWHU�LV�DFWXDOO\�WKH�PRVW�VLJQLILFDQW�ELW�RQ�WKH�HQWLUH�SURFHVVRU��,I�LW�LV�FOHDUHG��WKH�SURFHVVRU�RSHUDWHV�LQ�UHDO�PRGH��,I�LW�LV�VHW��WKH�SURFHVVRU�RSHUDWHV�LQ�SURWHFWHG�PRGH�7DEOH������VKRZV�WKH�ELW�DOORFDWLRQV�RI�WKH�&5��UHJLVWHU�LQ�WKH�����7R�FKDQJH�WR�SURWHFWHG�PRGH�IURP�'26�LV�HDV\�3URJUDP����������029�($;��&5�����25�($;����������0DNH�WKH�OHDVW�VLJQLILFDQW�ELW�������029�&5���($;����+HUH�JRHV�%XW�FKDQJLQJ�WR�SURWHFWHG�PRGH�VKRXOG�QRW�EH�DWWHPSWHG�ZLWKRXW�SUHSDUDWLRQ��7KH

PDFKLQH�ZLOO�SURPSWO\�FUDVK�LI�3URJUDP������LV�UXQ�EHIRUH�WKH�IROORZLQJ�VWHSV�DUH�WDNHQ�6WHS����,Q�SURWHFWHG�PRGH��DOO�PHPRU\�UHIHUHQFHV�GHSHQG�RQ�PHPRU\�VHJPHQW�GHVFULSWRU�WDEOHV��SDUWLFXODUO\�RQ�WKH�JOREDO�GHVFULSWRU�WDEOH��0HPRU\�UHIHUHQFHV��LQFOXGLQJ�WKRVH�XVHG�LQ�FRGH�IHWFKLQJ��ZLOO�QRW�ZRUN�XQWLO�WKHVH�WDEOHV�DUH�VHW�XS��7KHVH�WDEOHV�DUH�GLVFXVVHG�LQ�VHFWLRQ�����

7DEOH�����������&5��5HJLVWHU%LWV /DEHO )XOO�1DPH�� 3* 3DJLQJ�(QDEOH�� &' &DFKH�'LVDEOH�� 1: 1R�:ULWH�7KURXJK�� $0 $OLJQPHQW�0DVN�� :3 :ULWH�3URWHFW� 1( 1XPHULF�(UURU�(QDEOH� (7 ([WHQVLRQ�7\SH������YV������� 76 7DVN�6ZLWFKHG� (0 (PXODWH�0DWK�&KLS� 03 0DWK�&KLS�3UHVHQW� 3( 3URWHFWHG�0RGH�(QDEOH

Page 176: Linux assembly language programming

ZRUN�XQWLO�WKHVH�WDEOHV�DUH�VHW�XS��7KHVH�WDEOHV�DUH�GLVFXVVHG�LQ�VHFWLRQ������6WHS����,Q�SURWHFWHG�PRGH��WKH�XVH�RI�D�UDGLFDOO\�GLIIHUHQW�DGGUHVVLQJ�V\VWHP�PHDQV�WKDW�LQVWUXFWLRQV�ZLOO�EH�IHWFKHG�IURP�D�GLIIHUHQW�&6�VHJPHQW��&RGH�PXVW�EH�VWRUHG�LQ�WKH�QHZ�&6�VHJPHQW�6WHS����,Q�SURWHFWHG�PRGH��HDFK�HQWU\�LQ�WKH�LQWHUUXSW�WDEOH�LV�D�VSHFLDOO\�IRUPDWWHG�HLJKW�E\WH�HQWU\��6R�WKH�'26�LQWHUUXSW�WDEOH�ZKHUH�HDFK�HQWU\�LV�MXVW�D�IRXU�E\WH�DGGUHVV�ZLOO�QRW�ZRUN��%HIRUH�JRLQJ�LQWR�SURWHFWHG�PRGH��D�QHZ�LQWHUUXSW�WDEOH�PXVW�EH�FUHDWHG�

7KLV�LV�ZK\�DOO�[���SURFHVVRUV�ERRW�LQ�UHDO�PRGH�1RWH�WKDW�VZLWFKLQJ�WR�SURWHFWHG�PRGH�GRHV�QRW�VWDUW�SDJLQJ��$V�FKHFNLQJ�7DEOH������VKRZV��SDJLQJ�LV�WXUQHG�RQ�XVLQJ�WKH�WRS�ELW�RI�&5�������3URWHFWHG�0RGH�6HJPHQWDWLRQ$Q�DVVHPEOHU�SURJUDPPHU�ZRUNLQJ�RQ�DQ������KDV�DFFHVV�WR�ZKDWHYHU�PHPRU\�WKH�PDFKLQH�KDV��$OO�DGGUHVVHV�DUH�DFFHVVLEOH��7R�JHW�DURXQG�SUREOHPV�FDXVHG�E\�WKH�PLVILW�RI�WKH����ELW�DGGUHVVHV�DQG����ELW�DGGUHVVV�UHJLVWHUV��DGGUHVVLQJ�RQ�WKH������XVHV���.�PHPRU\�VHJPHQWV��7KH�ORFDWLRQ�RI�WKHVH�PHPRU\�VHJPHQWV�LV�VSHFLILHG�E\�WKH�VHJPHQW�UHJLVWHUV��2QFH�D�VHJPHQW�UHJLVWHU�LV�ORDGHG��RQH�FDQ�UHDG�WR�RU�ZULWH�IURP�WKH�VSHFLILHG�PHPRU\�VHJPHQW��6LQFH�RQ�DQ������WKH�SURJUDPPHU�FDQ�ZULWH�WR�DQ\�VHJPHQW�UHJLVWHU�DW�ZLOO��D�SURJUDPPHU�FDQ�UHDG�IURP�RU�ZULWH�WR�DQ\�ORFDWLRQ�LQ�PHPRU\���H[FHSW�IRU�SK\VLFDOO\�UHDG�RQO\�PHPRU\���7KLV�PHDQV�WKDW�PHPRU\�SURWHFWLRQ�RQ�DQ������LV�LPSRVVLEOH�%HJLQQLQJ�ZLWK�WKH��������WKH�VHJPHQWDWLRQ�PHFKDQLVP�ZDV�FRPSOHWHO\�UHGHVLJQHG�IRU�WKH�SXUSRVH�RI�WXUQLQJ�LW�LQWR�D�PHPRU\�SURWHFWLRQ�PHFKDQLVP��0HPRU\�VHJPHQWV�RQ�D�����KDYH�DFFHVV�SHUPLVVLRQV�VRPHZKDW�OLNH�8QL[�ILOH�SHUPLVVLRQV��7KH\�DOVR�KDYH�DQ�DFFHVV�SULYLOHJH�OHYHO��0HPRU\�VHJPHQWV�DUH�QR�ORQJHU�UHTXLUHG�WR�EH���.�LQ�OHQJWK��EXW�FDQ�EH�ZKDWHYHU�OHQJWK�WKH�RSHUDWLQJ�V\VWHPV�SURJUDPPHU�GHFLGHV�XSRQ��0HPRU\�VHJPHQWV�DUH�GHILQHG�E\�HLJKW�E\WH�GDWD�VWUXFWXUHV�FDOOHG�D�VHJPHQW�GHVFULSWRUV�RU�VRPHWLPHV�MXVW�D�GHVFULSWRUV��7KHVH�GHVFULSWRUV�DUH�VWRUHG�LQ�WDEOHV�FDOOHG�GHVFULSWRU�WDEOHV��'HVFULSWRU�WDEOHV�DUH�ORFDWHG�LQ�PHPRU\�MXVW�OLNH�WKH�LQWHUUXSW�WDEOH���6HH�FKDSWHU����VHFWLRQ������6HJPHQW�UHJLVWHUV�DUH�XVHG�WR�VWRUH�SRLQWHUV�LQWR�WKHVH�GHVFULSWRU�WDEOHV��7KHVH�SRLQWHUV�DUH�FDOOHG�VHOHFWRUV�7KH\�VHOHFW�VHJPHQW�GHVFULSWRUV�IURP�WKH�GHVFULSWRU�WDEOHV��6HH�)LJXUH������

)LJXUH�������6HOHFWRU�3LFNV�6HJPHQW�'HVFULSWRU�IURP�WKH�'HVFULSWRU�7DEOH

Page 177: Linux assembly language programming

�������3URWHFWHG�0RGH�0HPRU\�6HJPHQWV7KH�PRVW�LPSRUWDQW�FKDUDFWHULVWLFV�RI�D�SURWHFWHG�PRGH�PHPRU\�VHJPHQW�DUH�LWV�EDVH�DGGUHVV�DQG�LWV�OLPLW�6HH�)LJXUH������IRU�DQ�H[DPSOH�RI�D���0HJ�VHJPHQW�VLWXDWHG�DW�WKH�KDOIZD\�SRLQW�RI�D����0HJ�PHPRU\��6XSSRVH�WKDW�WKH�'6�UHJLVWHU�FRQWDLQV�D�VHOHFWRU�VHOHFWLQJ�D�GHVFULSWRU�IRU�WKLV�PHPRU\�VHJPHQW��7KHQ�WKH�FRPPDQG

)LJXUH�������$�3URWHFWHG�0RGH�0HPRU\�6HJPHQW

����029�($;��>'6������+@ZRXOG�DFFHVV�WKH�IRXU�E\WHV�ORFDWHG�DW�WKH�DGGUHVVHV��������+�WKURXJK��������+��2Q�WKH�RWKHU�KDQG��WKH�FRPPDQG����029�($;��>'6�������+@ZRXOG�FDXVH�D�JHQHUDO�SURWHFWLRQ�IDXOW��D�KDUGZDUH�H[FHSWLRQ�ZKLFK�JHQHUDWHV�LQWHUUXSW�QXPEHU�����6HH�FKDSWHU����VHFWLRQ������7KLV�LV�EHFDXVH�WKH�DOO�IRXU�RIIVHW�DGGUHVVHV�UHIHUHQFHG�E\�WKH�FRPPDQG�H[FHHG�WKH�OLPLW��)RU�H[DPSOH�

������+�!�)))))+7KH�FRPPDQG�LV�WU\LQJ�WR�UHDG�IURP�D�ORFDWLRQ�����0HJ�IURP�WKH�EHJLQQLQJ�RI�D�VHJPHQW�ZKLFK�LV�RQO\���0HJ�LQ�OHQJWK��%HFDXVH�WKH�KDUGZDUH�HQIRUFHV�WKHVH�VHJPHQW�ERXQGDULHV��WKH�VHJPHQWDWLRQ�V\VWHP�FDQ�EH�XVHG�WR�SURWHFW�RQH�WDVNV�PHPRU\�IURP�DQRWKHUV��,W�ZDV�XVHG�WR�SURWHFW�NHUQHO�PHPRU\�IURP�XVHU�SURFHVVHV�LQ�YHUVLRQV�RI�/LQX[�EHIRUH�YHUVLRQ���������EXW�LV�QR�ORQJHU�XVHG�IRU�PHPRU\�SURWHFWLRQ�LQ�/LQX[��6HJPHQWV�LQ�/LQX[�QRZ�XVH�D�EDVH�DGGUHVV�RI���DQG�D�OLPLW�RI�))))))))+��L�H��DOO���*LJ�$�PRUH�FRPSOHWH�OLVW�RI�WKH�FKDUDFWHULVWLFV�RI�D�SURWHFWHG�PRGH�PHPRU\�VHJPHQW�LV�DV�IROORZV��� %DVH��7KLV�LV�WKH�DGGUHVV�RI�WKH�ILUVW�E\WH�RI�WKH�VHJPHQW��,W�LV�WKH�DGGUHVV�FRUUHVSRQGLQJ�WR�WKH�RIIVHW�RI�]HUR��>�@��,Q�UHDO�PRGH��WKH�EDVH�DGGUHVV�LV�REWDLQHG�E\�MXVW�DSSHQGLQJ�D�]HUR�WR�WKH�IRXU�KH[�GLJLWV�VWRUHG�LQ�WKH�VHJPHQW�UHJLVWHU��� /LPLW��7KLV�LV�WKH�ODVW�YDOLG�RIIVHW�DGGUHVV��,W�LV�RQH�OHVV�WKDQ�WKH�QXPEHU�RI�E\WHV�LQ�WKH�VHJPHQW��,W�LV�WKDQNV�WR�WKLV�SDUDPHWHU�WKDW�VHJPHQWV�DUH�QRW�QHFHVVDULO\���.�DQ\�PRUH��7KH�OLPLW�QHHGHG�WR�VSHFLI\�D���0HJ�VHJPHQW��IRU�H[DPSOH��LV�)))))+�

Page 178: Linux assembly language programming

D���0HJ�VHJPHQW��IRU�H[DPSOH��LV�)))))+��� $FFHVV�3HUPLVVLRQV��3HUPLVVLRQV�WR�UHDG��ZULWH��DQG�H[HFXWH�FDQ�EH�VSHFLILHG��� $FFHVV�3ULYLOHJH�/HYHO��7KLV�SULYLOHJH�OHYHO�LV�WKH�OHDVW�SULYLOHJHG�YDOXH�WKH�&3/�PD\�KDYH�LQ�RUGHU�IRU�DFFHVV�WR�EH�JUDQWHG��� 0LVFHOODQHRXV��7KHUH�DUH�IRXU�RU�ILYH�IXQFWLRQDO�ELWV�LQ�WKH�GHVFULSWRU�XQXVHG�E\�LWHPV���WKURXJK����,Q�WKH�FDVH�RI�H[HFXWDEOH�VHJPHQWV��RQH�RI�WKHVH�ELWV�GHWHUPLQHV�ZKHWKHU�WKH�FRGH�VWRUHG�LQ�WKH�VHJPHQW�ZLOO�EH�H[HFXWHG�XVLQJ�D����ELW�RU�D����ELW�GHIDXOW���VHH�VHFWLRQ������

,Q�RUGHU�WR�FDUU\�RXW�EDVH�SOXV�RIIVHW�FRPSXWDWLRQV�DQG�RIIVHW�YHUVXV�OLPLW�FRPSDULVRQV�ZLWKRXW�WKH�GHOD\�ZKLFK�ZRXOG�EH�FDXVHG�E\�D�PHPRU\�DFFHVV��HDFK�VHJPHQW�UHJLVWHU�KDV�DVVRFLDWHG�ZLWK�LW�EDVH�DQG�OLPLW�UHJLVWHUV�ZKLFK�DUH�UHORDGHG�HYHU\�WLPH�WKH�VHJPHQW�UHJLVWHU�LV�FKDQJHG�WR�UHIHUHQFH�D�GLIIHUHQW�VHJPHQW��)LJXUH������VKRZV�WKHVH�UHJLVWHUV��$OWKRXJK�)LJXUH������VKRZV�RQO\�EDVH�DGGUHVV�DQG�OLPLW�UHJLVWHUV��WKHUH�DUH�DOVR�UHJLVWHUV�IRU�DOO�WKH�RWKHU�SHUPLVVLRQ�DQG�SULYLOHJH�ELWV�GHILQHG�E\�WKH�VHJPHQW�GHVFULSWRU�)LJXUH�������6HOHFWRU��%DVH��DQG�/LPLW�5HJLVWHUV

�������6SHFLDO�0HPRU\�6HJPHQWV��WKH�*'7�DQG�WKH�,'76KRZQ�LQ�)LJXUH������DUH�UHJLVWHUV�IRU�WKH�WDVN�VWDWH�VHJPHQW��WKH�ORFDO�DQG�JOREDO�GHVFULSWRU�WDEOHV��DQG�WKH�LQWHUUUXSW�GHVFULSWRU�WDEOH��WKH�766��/'76��*'7��DQG�,'7��1RQH�RI�WKHVH�DUH�PHPRU\�VHJPHQWV�LQ�WKH�VHQVH�WKDW�WKH\�FDQ�EH�XVHG�LQ�DQ�RUGLQDU\�PHPRU\�DFFHVV�FRPPDQG��)RU�H[DPSOH�����029�($;��>766���+@LV�QRW�YDOLG�FRGH��%XW�WKH\�DUH�FKXQNV�RI�PHPRU\�WKDW�KDYH�EDVH�DGGUHVVHV�DQG�OLPLWV��6LQFH�WKH�*'7�DQG�WKH�,'7�DUH�QRW�DFFHVVHG�YLD�VHOHFWRUV��WKH\�DUH�QRW�FDOOHG�PHPRU\�VHJPHQWV��7KH�766�DQG�WKH�/'7�DUH�UHIHUUHG�WR�DV�VSHFLDO�PHPRU\�VHJPHQWV�7KH�WDVN�VWDWH�VHJPHQW�LV�XVHG�LQ�WDVN�VZLWFKHV��7KH�WDVN�EHLQJ�H[LWHG�VDYHV�LWV�UHJLVWHUV�LQ�LWV�WDVN�VWDWH�VHJPHQW��7KH�EDVH�DGGUHVV�DQG�OLPLW�RI�WKH�766�LV�GHILQHG�E\�D�VHJPHQW�GHVFULSWRU��MXVW�OLNH�RWKHU�PHPRU\�VHJPHQWV�7KH�ORFDO�GHVFULSWRU�WDEOH��VHJPHQW���/'76��LV�XVHG�WR�VWRUH�GHVFULSWRUV�RI�VHJPHQWV�ZKLFK�DUH�QRW�VKDUHG�ZLWK�DOO�RWKHU�WDVNV�RQ�WKH�V\VWHP�

Page 179: Linux assembly language programming

ZLWK�DOO�RWKHU�WDVNV�RQ�WKH�V\VWHP�7KH�JOREDO�GHVFULSWRU�WDEOH�LV�XVHG�IRU�VWRULQJ�GHVFULSWRUV�RI�PHPRU\�VHJPHQWV�ZKLFK�DUH�DFFHVVHG�E\�DOO�WDVNV�RQ�WKH�V\VWHP��DV�ZHOO�DV�DOO�/'76�DQG�766�GHVFULSWRUV�$V�ZH�FDQ�VHH�IURP�)LJXUH�������WKHUH�FDQ�EH�RQO\�RQH�JOREDO�DQG�RQH�ORFDO�GHVFULSWRU�WDEOH�LQ�HIIHFW�DW�DQ\�JLYHQ�WLPH��:KHQ�D�WDVN�VZLWFK�RFFXUV��WKH�ORFDO�GHVFULSWRU�WDEOH�LV�FKDQJHG��MXVW�OLNH�WKH�SDJH�WDEOHV�DUH�FKDQJHG��%XW�WKH�JOREDO�GHVFULSWRU�WDEOH�VWD\V�WKH�VDPH�7KH�,'7��WKH�LQWHUUXSW�GHVFULSWRU�WDEOH��DQG�LWV�HQWULHV�DUH�GHVFULEHG�LQ�FKDSWHU���7KH�JOREDO�GHVFULSWRU�WDEOH�DQG�LQWHUUXSW�GHVFULSWRU�WDEOH�DOVR�KDYH�EDVH�DGGUHVVHV�DQG�OLPLWV��DQG�KHQFH��WKHUH�DUH�UHJLVWHUV�IRU�WKHP��%XW�WKHVH�DGGUHVVHV�DUH�QHYHU�FRGHG�LQWR�GHVFULSWRUV��VR�WKHUH�LV�QR�SRLQW�LQ�KDYLQJ�VHOHFWRUV�IRU�WKHP��,QWHO�GRHV�QRW�FRQVLGHU�WKH�JOREDO�GHVFULSWRU�WDEOH�RU�WKH�LQWHUUXSW�GHVFULSWRU�WDEOH�WR�EH�VHJPHQWV�EHFDXVH�WKH\�DUH�QRW�DFFHVVHG�XVLQJ�VHOHFWRUV��������6HOHFWRUV,Q�UHDO�PRGH��VHJPHQW�UHJLVWHUV�VXFK�DV�'6�VSHFLI\�VHJPHQWV�E\�KROGLQJ�WKH�ILUVW�IRXU�KH[�GLJLWV�RI�WKH�EDVH�DGGUHVV�RI�WKH�VHJPHQW��,Q�SURWHFWHG�PRGH�VHJPHQW��UHJLVWHUV�VSHFLI\�VHJPHQWV�E\�KROGLQJ�SRLQWHUV�WR�WKHLU�GHVFULSWRUV��(DFK�GHVFULSWRU�FRQVLVWV�RI�D�FRPSOHWH�GHILQLWLRQ�RI�WKH�VHJPHQW��7KH�SRLQWHU�SRLQWV�LQWR�D�GHVFULSWRU�WDEOH��7KH�WDEOH�PD\�HLWKHU�EH�WKH�JOREDO�GHVFULSWRU�WDEOH�RU�WKH�ORFDO�GHVFULSWRU�WDEOH�$�YHU\�VLPSOH�ZD\�WR�LPSOHPHQW�D�SRLQWHU�OLNH�WKLV�ZRXOG�EH�WR�XVH�WKH�RIIVHW�IURP�WKH�EHJLQQLQJ�RI�WKH�GHVFULSWRU�WDEOH��7KLV�LV�ZKDW�LV�VKRZQ�LQ�)LJXUH�������$OWKRXJK�WKH�YDOXH����VKRZQ�LQ�WKH�ILJXUH�ZRXOG�ZRUN�MXVW�DV�LOOXVWUDWHG��LW�LV�QRW�WKH�FDVH�WKDW�WKH�VHOHFWRU�LV�VLPSO\�DQ�RIIVHW�6XSSRVH�WKDW�D�GHVFULSWRU�ZH�ZDQW�WR�SRLQW�WR�ZHUH�ORFDWHG����E\WHV�IURP�WKH�EHJLQQLQJ�RI�D�GHVFULSWRU�WDEOH��,Q�WKDW�FDVH��WKH�RIIVHW����ZRXOG�PDNH�D�YHU\�JRRG�SRLQWHU�WR�WKDW�GHVFULSWRU��DVVXPLQJ�ZH�NQRZ�ZKLFK�WDEOH�WKH�GHVFULSWRU�LV�ORFDWHG�LQ��6LQFH�HDFK�GHVFULSWRU�RFFXSLHV�HLJKW�E\WHV�RI�VWRUDJH��DOO�VXFK�RIIVHWV�DUH�PXOWLSOHV�RI����+HQFH�LQ�ELQDU\��WKH�WKUHH�OHDVW�VLJQLILFDQW�ELWV�RI�HDFK�RIIVHW�DUH�]HUR��7KH�[���WDNHV�DGYDQWDJH�RI�WKLV�IDFW�DQG�SXWV�WKRVH�WKUHH�ELWV�RI�WKH�VHOHFWRU�WR�ZRUN�FDUU\LQJ�RWKHU�LQIRUPDWLRQ��%LWV���DQG���FDUU\�D�SULYLOHJH�OHYHO��%LW���LV�WKH�WDEOH�LQGLFDWRU�ELW�ZKLFK�GHWHUPLQHV�ZKHWKHU�WKH�VHOHFWRU�LV�D�SRLQWHU�LQWR�WKH�JOREDO�WDEOH�RU�WKH�ORFDO�WDEOH���� �ORFDO���� �JOREDO��7R�UHFRYHU�WKH�RIIVHW�IURP�WKH�VHOHFWRU��WKH�ERWWRP�WKUHH�ELWV�PXVW�EH�]HURHG�EDFN�RXW�DJDLQ��)LJXUH������LOOXVWUDWHV�WKH�H[DPSOH�ZKHUH�'6�FRQWDLQV�����RU���+��$V�D����ELW�ELQDU\�QXPEHU��LW�LV�7KH�SRLQWHU�LQWR�WKH�GHVFULSWRU�WDEOH�LV�WKH�WDEOH�RIIVHW�����LQ�WKLV�FDVH��RU���+�

)LJXUH�������6HOHFWRU�(QFRGLQJ

7KH�WKUHH�OHDVW�VLJQLILFDQW�ELWV�DUH�]HURHG�RXW��7R�ORFDWH�WKH�GHVFULSWRU�IRU�WKH�'6�VHJPHQW��ZH�ZRXOG�JHW�WKH�DGGUHVV�RI�WKH�JOREDO�GHVFULSWRU�WDEOH�IURP�WKH�*'7�EDVH�DGGUHVV�UHJLVWHU�DQG�DGG���+�7KHUH�LV�RQH�VHOHFWRU�ZKLFK�GRHV�QRW�XVH�WKH�IRUPDW�MXVW�GHVFULEHG�,W�LV�GHVLUDEOH�WKDW�RQH�VHOHFWRU�YDOXH�EH�D�QXOO�YDOXH��7KDW�PDNHV�LW�SRVVLEOH�WR�VKXW�GRZQ�XQXVHG�VHJPHQWV��$�VHOHFWRU�ZKLFK�SRLQWV�WR�RIIVHW�]HUR�LQ�WKH�JOREDO�WDEOH�LV�E\�GHILQLWLRQ�D�QXOO�VHOHFWRU��6WRULQJ�D�QXOO�VHOHFWRU�LQ�D�VHJPHQW�UHJLVWHU�GLVDOORZV�WKH�XVH�RI�WKDW�VHJPHQW��$OO�DWWHPSWV�WR�DFFHVV�D�VHJPHQW�PDUNHG�ZLWK�D�QXOO�VHOHFWRU�FDXVH�D�JHQHUDO�SURWHFWLRQ�IDXOW��7KLV��LQFLGHQWDOO\��PDNHV�LW�LPSRVVLEOH�IRU�DQ\�VHOHFWRU�WR�DFWXDOO\�SRLQW�WR�WKH�ILUVW�HQWU\�LQ�WKH�JOREDO�WDEOH���6R�LW�GRHVQW�PDWWHU�ZKDW�WKLV�HQWU\�FRQWDLQV��

Page 180: Linux assembly language programming

WR�DFWXDOO\�SRLQW�WR�WKH�ILUVW�HQWU\�LQ�WKH�JOREDO�WDEOH���6R�LW�GRHVQW�PDWWHU�ZKDW�WKLV�HQWU\�FRQWDLQV���������6HJPHQW�2SHUDWLRQV7KH�*'7�KDV�WR�EH�WKHUH�IRU�PHPRU\�UHIHUHQFHV�WR�ZRUN�LQ�SURWHFWHG�PRGH�DQG�WKH�,'7�KDV�WR�EH�WKHUH�IRU�LQWHUUXSWV�WR�ZRUN��7KH�ORDG�FRPPDQGV�IRU�WKHVH�WDEOHV�DUH����/*'7�PHPDQG����/,'7�PHPZKHUH�PHP�SRLQWV�WR�VL[�E\WHV�RI�PHPRU\�FRQWDLQLQJ�D�WZR�E\WH�OLPLW��IROORZHG�E\�D�IRXU�E\WH�EDVH�DGGUHVV��7KHVH�FRPPDQGV�ZRXOG�RUGLQDULO\�EH�H[HFXWHG�MXVW�RQFH�ZKLOH�WKH�V\VWHP�ZDV�ERRWLQJ�LQ�UHDO�PRGH�2WKHU�VHJPHQW�UHJLVWHUV�DUH�ORDGHG�XVLQJ�VHOHFWRUV��)LJXUH������VKRZV�WKH�FRPPDQGV�IRU�ORDGLQJ�DQG�VDYLQJ�VHJPHQW�UHJLVWHUV��DV�ZHOO�DV�WKH�FRPPDQGV�IRU�ORDGLQJ�DQG�VDYLQJ�WKH�*'7�DQG�,'7�EDVH�DQG�OLPLW�UHJLVWHUV��:KHQ�VHJPHQW�UHJLVWHUV�DUH�ORDGHG��DOO�WKH�RWKHU�UHJLVWHUV�DVVRFLDWHG�ZLWK�WKHP�DUH�ORDGHG�DV�ZHOO��XQOHVV�WKH�QXOO�VHOHFWRU�LV�XVHG�RU�XQOHVV�VRPH�DFFHVV�YLRODWLRQ�RFFXUV�

)LJXUH�������6HJPHQW�/RDG�DQG�6WRUH�&RPPDQGV

7KHVH�HLJKW�E\WHV�ZRXOG�LQFOXGH�WKH�EDVH�DGGUHVV�DQG�VL]H�RI�WKH�'6�VHJPHQW��7KHVH�HLJKW�E\WHV�ZRXOG�DOVR�LQFOXGH�D�SULYLOHJH�OHYHO��6LQFH�WKH�SULYLOHJH�FDUULHG�LQ�'6�LV�RQO\�D����WKH�SULYLOHJH�OHYHO�LQ�WKH�VHJPHQW�GHVFULSWRU�ZRXOG�QHHG�WR�EH�D����RU�WKH�SURFHVVRU�ZRXOG�QDLO�XV�ZLWK�DQ�HUURU��,Q�SURWHFWHG�PRGH��D�FRPPDQG�VXFK�DV����029�'6��$;

Page 181: Linux assembly language programming

ZLOO�FDXVH�D�SURWHFWLRQ�IDXOW�ZKHQHYHU�WKH�SULYLOHJH�OHYHO�FDUULHG�E\�WKH�WZR�OHDVW�VLJQLILFDQW�ELWV�RI�WKH�VHOHFWRU�LQ�$;�LV�LQIHULRU�WR�WKH�SULYLOHJH�OHYHO�ZULWWHQ�LQWR�WKH�GHVFULSWRU�RI�WKH�VHJPHQW��%HFDXVH�WKH�ORFDO�GHVFULSWRU�WDEOH�LV�LPSOHPHQWHG�DV�D�VHJPHQW��DFFHVV�WR�LW�UHTXLUHV�WKDW�D�VHOHFWRU�IRU�LW�EH�ORDGHG�LQWR�D�VHJPHQW�UHJLVWHU��6LQFH�WKH�ORFDO�GHVFULSWRU�WDEOH�LV�D�VSHFLDO�VHJPHQW��QRW�MXVW�DQ\�VHJPHQW�UHJLVWHU�ZLOO�GR��7KHUH�LV�D�VHJPHQW�UHJLVWHU�GHGLFDWHG�WR�WKH�ORFDO�GHVFULSWRU�WDEOH��WKH�/'7�UHJLVWHU��7R�ORDG�WKH�/'7�UHJLVWHU��WKH�IROORZLQJ�FRPPDQG�LV�XVHG�����//'7�UP�ZKHUH�UP��PXVW�EH�D�WZR�E\WH�UHJLVWHU�RU�PHPRU\�ORFDWLRQ�FRQWDLQLQJ�D�VHOHFWRU�UHIHUHQFLQJ�DQ�HQWU\�LQ�WKH�JOREDO�GHVFULSWRU�WDEOH��7KLV�HQWU\�VKRXOG�EH�D�GHVFULSWRU�IRU�D�ORFDO�GHVFULSWRU�WDEOH��%HFDXVH�WKH�FRPPDQG�XVHV�WKH�JOREDO�WDEOH��LW�RQO\�ZRUNV�LQ�SURWHFWHG�PRGH��)RU�H[DPSOH��LI�$;�FRQWDLQV�D�VHOHFWRU�ZKLFK�SRLQWV�DW�D�GHVFULSWRU�ORFDWHG�LQ�WKH�JOREDO�GHVFULSWRU�WDEOH�DQG�WKLV�GHVFULSWRU�GHVFULEHV�D�ORFDO�WDEOH��WKHQ����//'7�$;6XSSRVH�ZH�KDYH�D�FRPSXWHU�ZLWK����0HJ�RI�PHPRU\�DQG�ZH�ZDQW�D���0HJ�VHJPHQW�VWDUWLQJ�DW�WKH�EHJLQQLQJ�DW�WKH�KDOIZD\�SRLQW��L�H���DW�WKH�DGGUHVV����0HJ�

%DVH����������+��6WDUW�DW����0HJ�/LPLW�����)))))+����0HJ�6HJPHQW�3HUPLVVLRQV��5HDG�DQG�:ULWH3ULYLOHJH�/HYHO��8VHU

7KLV�LQIRUPDWLRQ�FDQ�EH�FRGHG�LQWR�DQ�HLJKW�E\WH�GHVFULSWRU��7KLV�GHVFULSWRU�FDQ�WKHQ�EH�DGGHG�WR�D�GHVFULSWRU�WDEOH��)RU�D�XVHU�SURJUDP�WR�DFFHVV�WKLV�VHJPHQW��LW�PXVW�KDYH�WKH�LQGH[�RU�VHOHFWRU�RI�WKLV�GHVFULSWRU�VWRUHG�LQ�D�VHJPHQW�UHJLVWHU�VXFK�DV�'6��7KH�RIIVHW�DGGUHVV�XVHG�LQ�DFFHVVLQJ�WKH�VHJPHQW�PXVW�EH�OHVV�WKDQ�WKH�OLPLW�GHILQHG�LQ�WKH�GHVFULSWRU��������'HVFULSWRU�(QFRGLQJ

)LJXUH�������6HJPHQW�'HVFULSWRU�/D\RXW

7KH�WZR�PDLQ�LWHPV�WKDW�QHHG�WR�EH�HQFRGHG�LQWR�WKH�PHPRU\�VHJPHQW�GHVFULSWRU�DUH�WKH�EDVH�DQG�WKH�OLPLW��6LQFH�WKHVH�DUH�ERWK�IRXU�E\WH�QXPEHUV�DQG�WKH�GHVFULSWRU�LV�DQ�HLJKW�E\WH�VWUXFWXUH��LW�ZRXOG�DSSHDU�WKDW�WKH�VSDFH�DYDLODEOH�LV�DOO�XVHG�XS�E\�MXVW�WKHVH�WZR�LWHPV��%\�VTXHH]LQJ�RQ�WKH�OLPLW�HQFRGLQJ��KRZHYHU��H[WUD�ELWV�DUH�IUHHG�XS��,QVWHDG�RI�DOORZLQJ�DOO�HLJKW�KH[�GLJLWV�RI�WKH�IRXU�E\WH�OLPLW�YDOXH�WR�EH�FRQILJXUDEOH��WKH�VHJPHQW�GHVLJQHU�LV�DOORZHG�RQO\�ILYH�GLJLWV�WR�SOD\�ZLWK��7KLV�VDYHV�WKUHH�KH[�GLJLWV�RU����ELWV��7KHVH�WKUHH�KH[�GLJLWV�DUH�DOORZHG�WR�EH�HLWKHU��V�WDFNHG�RQ�DW�WKH�IURQW�RU�)V�WDFNHG�RQ�DW�WKH�HQG��7KH�ILUVW�LV�FDOOHG�E\WH�JUDQXODULW\�DQG�WKH�VHFRQG�LV�FDOOHG�SDJH�JUDQXODULW\��6SHFLI\LQJ�ZKLFK�RI�WKHVH�WZR�JUDQXODULWLHV�LV�XVHG�FRVWV�RQH�PRUH�ELW��7KLV�ELW�LV�FDOOHG�WKH�JUDQXODULW\�ELW��$V�DQ�H[DPSOH�RI�KRZ�WKLV�GHVFULSWRU�IRUPDW�LV�XVHG��OHW�XV�HQFRGH�WKH�VDPSOH���0HJ�VHJPHQW�MXVW�GHVFULEHG��7KH�IRXU�E\WH�EDVH�YDOXH���������+�ZRXOG�EH�VWRUHG�LQ�ELWV�������DQG�����������ELWV�SOXV�HLJKW�ELWV���7KLV�RGG�IUDFWXUH�LV�D�YHVWLJH�RI�WKH����ELW�DGGUHVVLQJ�XVHG�RQ�WKH���������'LVSOD\LQJ�DOO�HLJKW�E\WHV�DV�D����GLJLW�KH[�QXPEHU��XVLQJ�;�IRU�XQGHWHUPLQHG�GLJLWV�\LHOGV���;;�;;����������;;�;;

7KH����ELW�OLPLW�YDOXHV�DUH�FRGHG�LQWR����ELWV�E\�UHVWULFWLQJ�WKH�QXPEHU�RI�DOORZDEOH�OLPLW�YDOXHV��7KH����ELWV�IURP������DQG�������HQFRGH�ILYH�KH[�GLJLWV��%LW�����*�IRU�JUDQXODULW\��GHWHUPLQHV�ZKHWKHU�WKH�WKUHH�UHPDLQLQJ�KH[�GLJLWV�ZLOO�EH��V�DGGHG�WR�WKH�WRS�HQG�RU�)V�DGGHG�WR�WKH�ERWWRP��7KH�YDOXH����)))))+�PD\�

Page 182: Linux assembly language programming

UHPDLQLQJ�KH[�GLJLWV�ZLOO�EH��V�DGGHG�WR�WKH�WRS�HQG�RU�)V�DGGHG�WR�WKH�ERWWRP��7KH�YDOXH����)))))+�PD\�EH�HQFRGHG�XVLQJ�HLWKHU�VFKHPH��,I�ZH�XVH�*� ���IRU�E\WH�JUDQXODULW\��WKHQ�LQVHUWLQJ�WKH����OLPLW�ELWV��)))))+��JLYHV�XV����;)�;;����������))�))

,Q�WKH�&6�VHJPHQWV��WKH�'�ELW�LV�H[WUHPHO\�LPSRUWDQW��,Q�[���FRGH��WKHUH�LV�D�FRGLQJ�GHIDXOW�ZKLFK�PD\�HLWKHU�EH�IRU����ELW�FRGH�RU����ELW�FRGH��6HH�FKDSWHU����VHFWLRQ�����IRU�GHWDLOV�RQ�KRZ�WKLV�ZRUNV��,Q�SURWHFWHG�PRGH��WKH�GHIDXOW�LV�GHWHUPLQHG�E\�WKH�'�ELW�RI�WKH�&6�VHJPHQW�GHVFULSWRU��'� ���PHDQV�WKDW�WKH�GHIDXOW�LV����ELW�FRGH��'� ���PHDQV�LW�LV�����,Q�UHDO�PRGH��WKH�GHIDXOW�LV�DOZD\V����ELW�FRGH��:LWK�*� ����'� ���DQG�ELWV����DQG����DV����ZH�JHW����)�;;����������))�))

%LW�����3�IRU�SUHVHQW��VKRXOG�EH�PDUNHG����,I�WKLV�LV�WR�EH�D�XVHU�DFFHVVLEOH�VHJPHQW��WKHQ�WKH�'3/�ELWV�PXVW�EH����'3/�VWDQGV�IRU�GHVFULSWRU�SULYLOHJH�OHYHO��,I�WKLV�LV�D�GDWD�VHJPHQW��WKHQ�(� ����L�H���LW�LV�QRW�H[HFXWHDEOH��DQG�:� ����L�H���LW�LV�ZULWHDEOH��0DNLQJ�WKH�UHPDLQLQJ�WZR�ELWV�����DQG�������\LHOGV����)�)�����������))�))

�������7DVN�,VRODWLRQ�YLD�/RFDO�'HVFULSWRU�7DEOHV$�SURFHVV�FDQ�RQO\�DFFHVV�PHPRU\�VHJPHQWV�WKDW�DUH�OLVWHG�LQ�WZR�WDEOHV��LWV�RZQ�WDEOH�FDOOHG�WKH�ORFDO�GHVFULSWRU�WDEOH��DQG�DQRWKHU�WDEOH�FDOOHG�WKH�JOREDO�GHVFULSWRU�WDEOH��7KH�V\VWHP�KDV�RQO\�RQH�JOREDO�GHVFULSWRU�WDEOH��$OO�SURFHVVHV�KDYH�DFFHVV�WR�WKH�JOREDO�WDEOH��EXW�ORFDO�WDEOHV�QHHG�QRW�EH�VKDUHG��&RQVHTXHQWO\�RQH�PHWKRG�WKH�RSHUDWLQJ�V\VWHP�FRXOG�XVH�WR�LVRODWH�WDVNV�IURP�RQH�DQRWKHU�ZRXOG�EH�WR�KDQG�RXW�GLIIHUHQW�ORFDO�GHVFULSWRU�WDEOHV�WR�GLIIHUHQW�SURFHVVHV��,I�D�VHJPHQW�LV�QRW�OLVWHG�LQ�HLWKHU�WKH�JOREDO�GHVFULSWRU�WDEOH�RU�WKH�SURFHVVV�RZQ�ORFDO�GHVFULSWRU�WDEOH��WKHQ�WKH�SURFHVV�FDQW�JHW�WR�LW��%HIRUH�GLVFXVVLQJ�SURWHFWLRQ�IXUWKHU��ZH�QHHG�WR�ORRN�DW�VRPH�RI�WKH�GHWDLOV�RI�GHVFULSWRUV��VHOHFWRUV��DQG�WKH�GHVFULSWRU�WDEOHV�6HJPHQWDWLRQ�RQ�WKH�������ZDV�GHVLJQHG�WR�DOORZ�GLIIHUHQW�WDVNV�WR�KDYH�WKHLU�RZQ�PHPRU\�VHJPHQWV�WR�ZKLFK�RWKHU�WDVNV�ZRXOG�QRW�KDYH�DFFHVV��(DFK�WDVN�FDQ�KDYH�LWV�RZQ�ORFDO�GHVFULSWRU�WDEOH��'HVFULSWRUV�RI�SULYDWH�PHPRU\�VHJPHQWV�FDQ�EH�VWRUHG�LQ�WKHVH�ORFDO�WDEOHV��7KH�[���DUFKLWHFWXUH�LPSOHPHQWV�ORFDO�GHVFULSWRU�WDEOHV�DV�VHJPHQWV��FRPSOHWH�ZLWK�GHVFULSWRUV�LQ�WKH�JOREDO�WDEOH��,Q�WKH�PHPRU\�VKRZQ�LQ�)LJXUH������WKHUH�DUH�HLJKW�PHPRU\�VHJPHQWV��(DFK�RI�WKHVH�PHPRU\�VHJPHQWV�LV�GHILQHG�E\�D�GHVFULSWRU�VLWXDWHG�LQ�D�GHVFULSWRU�WDEOH��$OWKRXJK�WKH�JOREDO�WDEOH�LV�OLNH�D�VHJPHQW��LW�LV�QRW�D�VHJPHQW��7KHUH�LV�QR�GHVFULSWRU�IRU�LW�DQ\ZKHUH�LQ�PHPRU\�DQG�QR�VHOHFWRU�IRU�LW�DQ\ZKHUH�LQ�WKH�SURFHVVRU�

)LJXUH�������0HPRU\�ZLWK�3URWHFWHG�6HJPHQWV

Page 183: Linux assembly language programming

5HYLHZLQJ�EULHIO\��WKH�RSHUDWLQJ�V\VWHP�SURWHFWV�WKH�PHPRU\�EHORQJLQJ�WR�RQH�WDVN�IURP�DFFHVV�E\�DQRWKHU�WDVN�E\�XVLQJ�ORFDO�GHVFULSWRU�WDEOHV��$�QHZ�WDVN�ZRXOG�UHFHLYH�D�ORFDO�GHVFULSWRU�WDEOH�FRQWDLQLQJ�GHVFULSWRUV�RI�DOO�WKH�VHJPHQWV�WR�ZKLFK�WKDW�WDVN�LV�DOORZHG�DFFHVV��6R�ORQJ�DV�WKH�RSHUDWLQJ�V\VWHP�GLG�QRW�SXW�WKH�VDPH�GHVFULSWRU�LQ�WKH�ORFDO�WDEOH�EHORQJLQJ�WR�VRPH�RWKHU�WDVN��WKDW�VHJPHQW�ZRXOG�WKHQ�EH�SULYDWH��$�WDVN�FDQ�RQO\�DFFHVV�D�VHJPHQW�LI�D�GHVFULSWRU�IRU�WKDW�VHJPHQW�LV�LQ�WKH�JOREDO�WDEOH�RU�LWV�RZQ�ORFDO�WDEOH�7KLV�V\VWHP�RI�SURWHFWLRQ�LV�LQFRPSOHWH��KRZHYHU��/RFNLQJ�WKH�IURQW�GRRU�WR�\RXU�KRXVH�GRHVQW�ORFN�WKH�KRXVH�LI�WKH�EDFN�GRRU�LV�XQORFNHG��6LQFH�DOO�WDVNV�FDQ�DFFHVV�WKH�JOREDO�WDEOH��WKHUH�PXVW�EH�VRPHWKLQJ�WR�SUHYHQW�D�URJXH�WDVN�IURP�UHDGLQJ�WKH�GHVFULSWRUV�GHILQLQJ�WKH�ORFDO�GHVFULSWRU�WDEOHV�EHORQJLQJ�WR�RWKHU�WDVNV�&RQVLGHU�WKLV�FRGH�3URJUDP������������029�$;�������������������������������$;�LV�D����ELW�VHOHFWRU�����������������������%LW���LV������:HUH�SRLQWLQJ�LQWR�WKH�JOREDO�WDEOH�����������������������%LWV���DQG���DUH������������������������7KDWV�V\VWHP�OHYHO�SULYLOHJH�+$.���//'7�$;������������������������������$;�LV�SRLQWLQJ�DW�VRPH�GHVFULSWRU����������������������,W�FRXOG�EH�D�ORFDO�WDEOH�GHVFULSWRU����������������������,I�VR�LWV�SUREDEO\�QRW�RXU�RZQ�ORFDO�WDEOH�����������������������$QG�LQ�WKDW�FDVH�ZH�KDYH�MXVW�ERUURZHG�VRPHRQH����������������������HOVHV�SULYDWH�GHVFULSWRU�WDEOH�DQG�ZH�FDQ����������������������DFFHVV�DQ\WKLQJ�OLVWHG�LQ�WKHUH�

Page 184: Linux assembly language programming

����������������������DFFHVV�DQ\WKLQJ�OLVWHG�LQ�WKHUH�������$''�$;����������0D\EH�QRW�����������������������*R�WR�WKH�QH[W�GHVFULSWRU������-03�+$.���������7KH�ORFDO�WDEOHV�DUH�LQ�KHUH�����������������������:HOO�ILQG�WKHP�0HPRU\�SURWHFWLRQ�E\�LWVHOI�GRHVQW�ZRUN��8VHU�SURFHVVHV�PXVW�QRW�EH�DOORZHG�WR�H[HFXWH�FRGH�OLNH�WKH�DERYH�FRGH������6HWWLQJ�8S�WKH�*OREDO�'HVFULSWRU�7DEOH:KHQ�DQ�[���SURFHVVRU�LV�WXUQHG�RQ�RU�UHVWDUWHG��LW�GRHV�QRW�FUHDWH�D�JOREDO�GHVFULSWRU�WDEOH�DXWRPDWLFDOO\��+HQFH��XQOHVV�D�PDQXIDFWXUHU�SXWV�RQH�LQ�520���QRQH�H[LVWV�DW�ERRW�WLPH��6LQFH�WKH�SURFHVVRU�FDQW�XVH�PHPRU\�LQ�SURWHFWHG�PRGH�ZLWKRXW�D�JOREDO�WDEOH��WKH�SURFHVVRU�PXVW�ERRW�XS�LQ�UHDO�PRGH��7KH�SURFHVVRU�FDQ�VXEVHTXHQWO\�EH�VZLWFKHG�LQWR�SURWHFWHG�PRGH��EXW�RQO\�DIWHU�WKH�JOREDO�WDEOH�KDV�EHHQ�VHW�XS�7KH�SURFHVVRU�KDV�EDVH�DGGUHVV�DQG�OLPLW�UHJLVWHUV�IRU�WKH�JOREDO�GHVFULSWRU�WDEOH��*'7���7KHVH�UHJLVWHUV�DUH�ORDGHG�XVLQJ�WKH�FRPPDQG����/*'7�PHPZKHUH�PHP�SRLQWV�WR�VL[�E\WHV�RI�PHPRU\�FRQWDLQLQJ�D�WZR�E\WH�OLPLW�DQG�D�IRXU�E\WH�EDVH�DGGUHVV�IRU�WKH�JOREDO�WDEOH��$OWKRXJK�D�UHJLVWHU�029�FRPPDQG�PLJKW�KDYH�EHHQ�D�PRUH�FRQYHQLHQW�ZD\�RI�GRLQJ�WKLV��WKHUH�DUH�QR�VL[�E\WH�UHJLVWHUV�DYDLODEOH�$V�DQ�H[DPSOH�RI�KRZ�ZH�PLJKW�XVH�WKH�/*'7�FRPPDQG��VXSSRVH�WKDW�WHQ�GHVFULSWRUV�WKDW�ZH�ZDQW�WR�XVH�DV�RXU�JOREDO�WDEOH�KDYH�EHHQ�VWRUHG�VWDUWLQJ�DW�DGGUHVV������+��2XU�JOREDO�WDEOH�ZLOO�WKHUHIRUH�EH�HLJKW\�E\WHV�ORQJ�DQG�VWDUW�DW������+��7KH�OLPLW�LV�RQH�OHVV�WKDQ�HLJKW\��RU��)+��,Q�RUGHU�WR�XVH�WKH�/*'7�FRPPDQG��ZH�QHHG�WR�VWRUH�WKHVH�YDOXHV�LQ�PHPRU\�VRPHZKHUH��6XSSRVH�ZH�VHW�XS�D��VFUDWFK��PHPRU\�DUHD�DW������+�DQG�SXW�RXU�*'7�YDOXHV�WKHUH��$IWHU�WKLV�FRGH3URJUDP������������029�$;������+�����6HW�XS�D�VHJPHQW�IRU�WKH�VFUDWFK�DUHD�������029�'6��$;�������������029�$;���)+�������*'7V�OLPLW�LV�D���E\WH�YDOXH�������029�>'6��@��$;����6WRUH����LQWR�WKH�ILUVW���E\WHV�RI������������������������VFUDWFK�������029�($;�������+���*'7V�EDVH�DGGUHVV�LV�D���E\WH�YDOXH�������029�>'6��@��($;���6WRUH�WKLV���E\WH�DGGUHVV��������������������������E\WHV�LQWR�WKH�VFUDWFK��������������������������'RQW�RYHUZULWH�WKH�ILUVW�WZR�E\WHV��������/*'7�>'6��@��������������7KLV�ORDGV�WKH�ERWK�WKH�*'7�EDVH�DGGUHVV�UHJLVWHU������������������������DQG�WKH�*'7�OLPLW�UHJLVWHU������������������������L�H���ORDG�DOO���E\WHV�KDV�H[HFXWHG��WKH�*'7�EDVHV�DGGUHVV�DQG�OLPLW�UHJLVWHUV�ZLOO�EH�ORDGHG��7KH�JOREDO�WDEOH�KDV�QRW�EHHQ�XVHG�IRU�DQ\WKLQJ�\HW��,Q�IDFW��ZH�FRXOG�HYHQ�UXQ�WKLV�FRGH�ILUVW�DQG�WKHQ�VWRUH�WKRVH�HLJKW\�E\WHV�QH[W��7KH�JOREDO�WDEOH�ZLOO�QRW�JR�LQWR�RSHUDWLRQ�XQWLO�WKH�SURFHVVRU�LV�VZLWFKHG�LQWR�SURWHFWHG�PRGH������&ORVLQJ7KH�VXUIDFH�KDV�EDUHO\�EHHQ�VFUDWFKHG��%XW�WKH�ZD\�IRUZDUG�LV�RSHQ�