锘??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜精品美女久久久久av福利,久久青草久久,久久久久久穴http://www.shnenglu.com/Panda/zh-cnTue, 16 Sep 2025 05:24:04 GMTTue, 16 Sep 2025 05:24:04 GMT60Linux 涓?x86 鐨勫唴鑱旀眹緙?/title><link>http://www.shnenglu.com/Panda/archive/2010/10/25/131173.html</link><dc:creator>ChinaPanda</dc:creator><author>ChinaPanda</author><pubDate>Mon, 25 Oct 2010 03:28:00 GMT</pubDate><guid>http://www.shnenglu.com/Panda/archive/2010/10/25/131173.html</guid><wfw:comment>http://www.shnenglu.com/Panda/comments/131173.html</wfw:comment><comments>http://www.shnenglu.com/Panda/archive/2010/10/25/131173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Panda/comments/commentRss/131173.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Panda/services/trackbacks/131173.html</trackback:ping><description><![CDATA[<p>濡傛灉鎮(zhèn)ㄦ槸 Linux 鍐呮牳鐨勫紑鍙戜漢鍛橈紝鎮(zhèn)ㄤ細(xì)鍙戠幇鑷繁緇忓父瑕佸涓庝綋緋葷粨鏋勯珮搴︾浉鍏崇殑鍔熻兘榪涜緙栫爜鎴栦紭鍖栦唬鐮佽礬寰勩傛?zhèn)ㄥ緢鍙兘鏄氳繃灝嗘眹緙栬璦鎸囦護(hù)鎻掑叆鍒? C 璇彞鐨勪腑闂達(dá)紙鍙堢О涓哄唴鑱旀眹緙栫殑涓縐嶆柟娉曪級鏉ユ墽琛岃繖浜涗換鍔$殑銆傝鎴戜滑鐪嬩竴涓? Linux 涓唴鑱旀眹緙栫殑鐗瑰畾鐢ㄦ硶銆傦紙鎴戜滑灝嗚璁洪檺鍒跺湪 IA32 姹囩紪銆傦級</p> <p><a name="1"><span id="hvzpftn" class="atitle">GNU 姹囩紪紼嬪簭綆榪?/span></a></p> <p>璁╂垜浠鍏堢湅涓涓?Linux 涓嬌鐢ㄧ殑鍩烘湰姹囩紪紼嬪簭璇硶銆侴CC錛堢敤浜?Linux 鐨? GNU C 緙栬瘧鍣級浣跨敤 AT&T 姹囩紪璇硶銆備笅闈㈠垪鍑轟簡榪欑璇硶鐨勪竴浜涘熀鏈鍒欍傦紙璇ュ垪琛ㄨ偗瀹氫笉瀹屾暣錛涘彧鍖呮嫭浜嗕笌鍐呰仈姹囩紪鐩稿叧鐨勯偅浜涜鍒欍傦級</p> <p><strong>瀵勫瓨鍣ㄥ懡鍚?/strong><br> 瀵勫瓨鍣ㄥ悕縐版湁 % 鍓嶇紑銆傚嵆錛屽鏋滃繀欏諱嬌鐢?eax錛屽畠搴旇鐢ㄤ綔 %eax銆? </p> <p><strong>婧愭搷浣滄暟鍜岀洰鐨勬搷浣滄暟鐨勯『搴?/strong><br> 鍦ㄦ墍鏈夋寚浠や腑錛屽厛鏄簮鎿嶄綔鏁幫紝鐒跺悗鎵嶆槸鐩殑鎿嶄綔鏁般傝繖涓庡皢婧愭搷浣滄暟鏀懼湪鐩殑鎿嶄綔鏁頒箣鍚庣殑 Intel 璇硶涓嶅悓銆? </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">mov %eax, %ebx, transfers the contents of eax to ebx.<br></pre> </td> </tr> </tbody> </table> <br> <p><strong>鎿嶄綔鏁板ぇ灝?/strong><br> 鏍規(guī)嵁鎿嶄綔鏁版槸瀛楄妭 (byte)銆佸瓧 (word) 榪樻槸闀垮瀷 (long)錛屾寚浠ょ殑鍚庣紑鍙互鏄?b銆亀 鎴?l銆傝繖騫朵笉鏄己鍒舵х殑錛汫CC 浼?xì)灏濊瘯閫氳繃璇誨彇鎿嶄綔鏁版潵鎻愪緵鐩稿簲鐨勫悗緙銆備絾鎵嬪伐鎸囧畾鍚庣紑鍙互鏀瑰杽浠g爜鐨勫彲璇繪э紝騫跺彲浠ユ秷闄ょ紪璇戝櫒鐚滄祴涓嶆紜殑鍙兘鎬с? </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">movb %al, %bl -- Byte move<br> movw %ax, %bx -- Word move<br> movl %eax, %ebx -- Longword move<br></pre> </td> </tr> </tbody> </table> <br> <p><strong>绔嬪嵆鎿嶄綔鏁?/strong><br> 閫氳繃浣跨敤 $ 鎸囧畾鐩存帴鎿嶄綔鏁般? </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">movl $0xffff, %eax -- will move the value of 0xffff into eax register.<br></pre> </td> </tr> </tbody> </table> <br> <p><strong>闂存帴鍐呭瓨寮曠敤</strong><br> 浠諱綍瀵瑰唴瀛樼殑闂存帴寮曠敤閮芥槸閫氳繃浣跨敤 ( ) 鏉ュ畬鎴愮殑銆? </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">movb (%esi), %al -- will transfer the byte in the memory <br> pointed by esi into al<br>register<br></pre> </td> </tr> </tbody> </table> <br> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="2"><span id="hvzpftn" class="atitle">鍐呰仈姹囩紪</span></a></p> <p>GCC 涓哄唴鑱旀眹緙栨彁渚涚壒孌婄粨鏋勶紝瀹冨叿鏈変互涓嬫牸寮忥細(xì)</p> <p><strong>GCG 鐨?"asm" 緇撴瀯</strong></p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> asm ( assembler template<br> <br>: output operands (optional)<br> <br>: input operands (optional)<br> <br>: list of clobbered registers <br> (optional)<br> <br>); <br></pre> </td> </tr> </tbody> </table> <br> <p> 鏈緥涓紝姹囩紪紼嬪簭妯℃澘鐢辨眹緙栨寚浠ょ粍鎴愩傝緭鍏ユ搷浣滄暟鏄厖褰撴寚浠よ緭鍏ユ搷浣滄暟浣跨敤鐨? C 琛ㄨ揪寮忋傝緭鍑烘搷浣滄暟鏄皢瀵瑰叾鎵ц姹囩紪鎸囦護(hù)杈撳嚭鐨?C 琛ㄨ揪寮忋?/p> <p>鍐呰仈姹囩紪鐨勯噸瑕佹т綋鐜板湪瀹冭兘澶熺伒媧繪搷浣滐紝鑰屼笖鍙互浣垮叾杈撳嚭閫氳繃 C 鍙橀噺鏄劇ず鍑烘潵銆傚洜涓哄畠鍏鋒湁榪欑鑳藉姏錛屾墍浠?"asm" 鍙互鐢ㄤ綔姹囩紪鎸囦護(hù)鍜屽寘鍚畠鐨?C 紼嬪簭涔嬮棿鐨勬帴鍙c?/p> <p> 涓涓潪甯稿熀鏈絾寰堥噸瑕佺殑鍖哄埆鍦ㄤ簬 <em>綆鍗曞唴鑱旀眹緙?/em>鍙寘鎷寚浠わ紝鑰? <em>鎵╁睍鍐呰仈姹囩紪</em>鍖呮嫭鎿嶄綔鏁般傝璇存槑榪欎竴鐐癸紝鑰冭檻浠ヤ笅紺轟緥錛? </p> <p><strong>鍐呰仈姹囩紪鐨勫熀鏈绱?/strong></p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">{<br> int a=10, b;<br> asm ("movl %1, %%eax;<br> <br>movl %%eax, %0;"<br> :"=r"(b) /* output */ <br> :"r"(a) /* input */<br> :"%eax"); /* clobbered register */<br>}<br></pre> </td> </tr> </tbody> </table> <br> <p>鍦ㄤ笂渚嬩腑錛屾垜浠嬌鐢ㄦ眹緙栨寚浠や嬌 "b" 鐨勫肩瓑浜? "a"銆傝娉ㄦ剰浠ヤ笅鍑犵偣錛?/p> <ul> <li>"b" 鏄緭鍑烘搷浣滄暟錛岀敱 %0 寮曠敤錛?a" 鏄緭鍏ユ搷浣滄暟錛岀敱 %1 寮曠敤銆?/li> <li>"r" 鏄搷浣滄暟鐨勭害鏉燂紝瀹冩寚瀹氬皢鍙橀噺 "a" 鍜?"b" 瀛樺偍鍦ㄥ瘎瀛樺櫒涓傝娉ㄦ剰錛岃緭鍑烘搷浣滄暟綰︽潫搴旇甯︽湁涓涓害鏉熶慨楗扮 "="錛屾寚瀹氬畠鏄緭鍑烘搷浣滄暟銆?/li> <li>瑕佸湪 "asm" 鍐呬嬌鐢ㄥ瘎瀛樺櫒 %eax錛?eax 鐨勫墠闈㈠簲璇ュ啀鍔犱竴涓? %錛屾崲鍙ヨ瘽璇村氨鏄?%%eax錛屽洜涓?"asm" 浣跨敤 %0銆?1 絳夋潵鏍囪瘑鍙橀噺銆備換浣曞甫鏈変竴涓?% 鐨勬暟閮界湅浣滄槸杈撳叆錛忚緭鍑烘搷浣滄暟錛岃屼笉璁や負(fù)鏄瘎瀛樺櫒銆?/li> <li>絎笁涓啋鍙峰悗鐨勪慨楗板瘎瀛樺櫒 %eax 鍛婅瘔灝嗗湪 "asm" 涓慨鏀?GCC %eax 鐨勫鹼紝榪欐牱 GCC 灝變笉浣跨敤璇ュ瘎瀛樺櫒瀛樺偍浠諱綍鍏跺畠鐨勫箋?/li> <li><code>movl %1, %%eax</code> 灝?"a" 鐨勫肩Щ鍒?%eax 涓紝 <code>movl %%eax, %0</code> 灝?%eax 鐨勫唴瀹圭Щ鍒? "b" 涓? </li> <li>鍥犱負(fù) "b" 琚寚瀹氭垚杈撳嚭鎿嶄綔鏁幫紝鍥犳褰?"asm" 鐨勬墽琛屽畬鎴愬悗錛屽畠?yōu)畣鍙嶆槧鍑烘洿鏂扮殑鍊箋傛崲鍙ヨ瘽璇達(dá)紝瀵?"asm" 鍐?"b" 鎵鍋氱殑鏇存敼灝嗗湪 "asm" 澶栧弽鏄犲嚭鏉ャ?/li> </ul> <p>鐜板湪璁╂垜浠洿璇︾粏鐨勪簡瑙f瘡涓欏圭殑鍚箟銆?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="3"><span id="hvzpftn" class="atitle">姹囩紪紼嬪簭妯℃澘</span></a></p> <p>姹囩紪紼嬪簭妯℃澘鏄竴緇勬彃鍏ュ埌 C 紼嬪簭涓殑姹囩紪鎸囦護(hù)錛堝彲浠ユ槸鍗曚釜鎸囦護(hù)錛屼篃鍙互鏄竴緇勬寚浠わ級銆傛瘡鏉℃寚浠ら兘搴旇鐢卞弻寮曞彿鎷搗錛屾垨鑰呮暣緇勬寚浠ゅ簲璇ョ敱鍙屽紩鍙鋒嫭璧楓傛瘡鏉℃寚浠よ繕搴旇鐢ㄤ竴涓畾鐣岀緇撳熬銆傛湁鏁堢殑瀹氱晫絎︿負(fù)鏂拌 (\n) 鍜屽垎鍙?(;)銆?'\n' 鍚庡彲浠ヨ窡涓涓?tab(\t) 浣滀負(fù)鏍煎紡鍖栫鍙鳳紝澧炲姞 GCC 鍦ㄦ眹緙栨枃浠朵腑鐢熸垚鐨勬寚浠ょ殑鍙鎬с?鎸囦護(hù)閫氳繃鏁?%0銆?1 絳夋潵寮曠敤 C 琛ㄨ揪寮忥紙鎸囧畾涓烘搷浣滄暟錛夈?/p> <p>濡傛灉甯屾湜紜繚緙栬瘧鍣ㄤ笉浼?xì)鍦?"asm" 鍐呴儴浼樺寲鎸囦護(hù)錛屽彲浠ュ湪 "asm" 鍚庝嬌鐢ㄥ叧閿瓧 "volatile"銆傚鏋滅▼搴忓繀欏諱笌 ANSI C 鍏煎錛屽垯搴旇浣跨敤 __asm__ 鍜?__volatile__錛岃屼笉鏄?asm 鍜?volatile銆?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="4"><span id="hvzpftn" class="atitle">鎿嶄綔鏁?/span></a></p> <p>C 琛ㄨ揪寮忕敤浣?"asm" 鍐呯殑姹囩紪鎸囦護(hù)鎿嶄綔鏁般傚湪姹囩紪鎸囦護(hù)閫氳繃瀵?C 紼嬪簭鐨?C 琛ㄨ揪寮忚繘琛屾搷浣滄潵鎵ц鏈夋剰涔夌殑浣滀笟鐨勬儏鍐典笅錛屾搷浣滄暟鏄唴鑱旀眹緙栫殑涓昏鐗規(guī)с?/p> <p>姣忎釜鎿嶄綔鏁伴兘鐢辨搷浣滄暟綰︽潫瀛楃涓叉寚瀹氾紝鍚庨潰璺熺敤鎷姬鎷搗鐨?C 琛ㄨ揪寮忥紝渚嬪錛?constraint" (C expression)銆傛搷浣滄暟綰︽潫鐨勪富瑕佸姛鑳芥槸紜畾鎿嶄綔鏁扮殑瀵誨潃鏂瑰紡銆?/p> <p> 鍙互鍦ㄨ緭鍏ュ拰杈撳嚭閮ㄥ垎涓悓鏃朵嬌鐢ㄥ涓搷浣滄暟銆傛瘡涓搷浣滄暟鐢遍楀彿鍒嗛殧寮銆?/p> <p>鍦ㄦ眹緙栫▼搴忔ā鏉垮唴閮紝鎿嶄綔鏁扮敱鏁板瓧寮曠敤銆傚鏋滄誨叡鏈? <em>n</em> 涓搷浣滄暟錛堝寘鎷緭鍏ュ拰杈撳嚭錛夛紝閭d箞絎竴涓緭鍑烘搷浣滄暟鐨勭紪鍙蜂負(fù) 0錛岄愰」閫掑錛屾渶鍚庨偅涓緭鍏ユ搷浣滄暟鐨勭紪鍙蜂負(fù) <em>n</em> -1銆傛繪搷浣滄暟鐨勬暟鐩檺鍒跺湪 10錛屽鏋滄満鍣ㄦ弿榪頒腑浠諱綍鎸囦護(hù)妯″紡涓殑鏈澶ф搷浣滄暟鏁扮洰澶т簬 10錛屽垯浣跨敤鍚庤呬綔涓洪檺鍒躲? </p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="5"><span id="hvzpftn" class="atitle">淇グ瀵勫瓨鍣ㄥ垪琛?/span></a></p> <p>濡傛灉 "asm" 涓殑鎸囦護(hù)鎸囩殑鏄‖浠跺瘎瀛樺櫒錛屽彲浠ュ憡璇?GCC 鎴戜滑灝嗚嚜宸變嬌鐢ㄥ拰淇敼瀹冧滑銆傝繖鏍鳳紝GCC 灝變笉浼?xì)鍋囪畱之冭鍏ュ埌杩欎簺瀵勫瓨鍣ㄤ腑鐨勫兼槸鏈夋晥鍊箋傞氬父涓嶉渶瑕佸皢杈撳叆鍜岃緭鍑哄瘎瀛樺櫒鍒椾負(fù) clobbered錛屽洜涓?GCC 鐭ラ亾 "asm" 浣跨敤瀹冧滑錛堝洜涓哄畠浠鏄庣‘鎸囧畾涓虹害鏉燂級銆備笉榪囷紝濡傛灉鎸囦護(hù)浣跨敤浠諱綍鍏跺畠鐨勫瘎瀛樺櫒錛屾棤璁烘槸鏄庣‘鐨勮繕鏄殣鍚殑錛堝瘎瀛樺櫒涓嶅湪杈撳叆綰︽潫鍒楄〃涓嚭鐜幫紝涔熶笉鍦ㄨ緭鍑虹害鏉熷垪琛ㄤ腑鍑虹幇錛夛紝瀵勫瓨鍣ㄩ兘蹇呴』琚寚瀹氫負(fù)淇グ鍒楄〃銆備慨楗板瘎瀛樺櫒鍒楀湪絎笁涓啋鍙蜂箣鍚庯紝鍏跺悕縐拌鎸囧畾涓哄瓧絎︿覆銆?/p> <p> 鑷充簬鍏抽敭瀛楋紝濡傛灉鎸囦護(hù)浠ユ煇浜涗笉鍙鐭ヤ笖涓嶆槑紜殑鏂瑰紡淇敼浜嗗唴瀛橈紝鍒欏彲鑳藉皢 "memory" 鍏抽敭瀛楁坊鍔犲埌淇グ瀵勫瓨鍣ㄥ垪琛ㄤ腑銆傝繖鏍峰氨鍛婅瘔 GCC 涓嶈鍦ㄤ笉鍚屾寚浠や箣闂村皢鍐呭瓨鍊奸珮閫熺紦瀛樺湪瀵勫瓨鍣ㄤ腑銆?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="6"><span id="hvzpftn" class="atitle">鎿嶄綔鏁扮害鏉?/span></a></p> <p>鍓嶉潰鎻愬埌榪囷紝"asm" 涓殑姣忎釜鎿嶄綔鏁伴兘搴旇鐢辨搷浣滄暟綰︽潫瀛楃涓叉弿榪幫紝鍚庨潰璺熺敤鎷姬鎷搗鐨?C 琛ㄨ揪寮忋傛搷浣滄暟綰︽潫涓昏鏄‘瀹氭寚浠や腑鎿嶄綔鏁扮殑瀵誨潃鏂瑰紡銆傜害鏉熶篃鍙互鎸囧畾錛?/p> <ul> <li> 鏄惁鍏佽鎿嶄綔鏁頒綅浜庡瘎瀛樺櫒涓紝浠ュ強(qiáng)瀹冨彲浠ュ寘鎷湪鍝簺縐嶇被鐨勫瘎瀛樺櫒涓?/li> <li> 鎿嶄綔鏁版槸鍚﹀彲浠ユ槸鍐呭瓨寮曠敤錛屼互鍙?qiáng)鍦q欑鎯呭喌涓嬩嬌鐢ㄥ摢浜涚綾葷殑鍦板潃</li> <li>鎿嶄綔鏁版槸鍚﹀彲浠ユ槸绔嬪嵆鏁?/li> </ul> <p>綰︽潫榪樿姹備袱涓搷浣滄暟鍖歸厤銆?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="7"><span id="hvzpftn" class="atitle">甯哥敤綰︽潫</span></a></p> <p>鍦ㄥ彲鐢ㄧ殑鎿嶄綔鏁扮害鏉熶腑錛屽彧鏈変竴灝忛儴鍒嗘槸甯哥敤鐨勶紱涓嬮潰鍒楀嚭浜嗚繖浜涚害鏉熶互鍙?qiáng)绠瑕佹弿榪般傛湁鍏蟲搷浣滄暟綰︽潫鐨勫畬鏁村垪琛紝璇峰弬鑰? GCC 鍜?GAS 鎵嬪唽銆?/p> <p><strong>瀵勫瓨鍣ㄦ搷浣滄暟綰︽潫 (r)</strong><br> 浣跨敤榪欑綰︽潫鎸囧畾鎿嶄綔鏁版椂錛屽畠浠瓨鍌ㄥ湪閫氱敤瀵勫瓨鍣ㄤ腑銆傝鐪嬩笅渚嬶細(xì) </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">asm ("movl %%cr3, %0\n" :"=r"(cr3val));<br></pre> </td> </tr> </tbody> </table> <br> <p>榪欓噷錛屽彉閲?cr3val 淇濆瓨鍦ㄥ瘎瀛樺櫒涓紝%cr3 鐨勫煎鍒跺埌瀵勫瓨鍣ㄤ笂錛宑r3val 鐨勫間粠璇ュ瘎瀛樺櫒鏇存柊鍒板唴瀛樹腑銆傛寚瀹?"r" 綰︽潫鏃訛紝GCC 鍙互灝嗗彉閲?cr3val 淇濆瓨鍦ㄤ換浣曞彲鐢ㄧ殑 GPR 涓傝鎸囧畾瀵勫瓨鍣紝蹇呴』閫氳繃浣跨敤鐗瑰畾鐨勫瘎瀛樺櫒綰︽潫鐩存帴鎸囧畾瀵勫瓨鍣ㄥ悕銆?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">a %eax<br>b %ebx<br>c %ecx<br>d %edx<br>S %esi<br>D %edi<br></pre> </td> </tr> </tbody> </table> <br> <p><strong>鍐呭瓨鎿嶄綔鏁扮害鏉?(m)</strong><br> 褰撴搷浣滄暟浣嶄簬鍐呭瓨涓椂錛屼換浣曞瀹冧滑鎵ц鐨勬搷浣滈兘灝嗗湪鍐呭瓨浣嶇疆涓洿鎺ュ彂鐢燂紝榪欎笌瀵勫瓨鍣ㄧ害鏉熸濂界浉鍙嶏紝鍚庤呭厛灝嗗煎瓨鍌ㄥ湪瑕佷慨鏀圭殑瀵勫瓨鍣ㄤ腑錛岀劧鍚庡皢瀹冨啓鍥炲唴瀛樹綅緗腑銆備絾瀵勫瓨鍣ㄧ害鏉熼氬父鍙湪瀵逛簬鎸囦護(hù)鏉ヨ瀹冧滑鏄粷瀵瑰繀闇鐨勶紝鎴栬呭畠浠彲浠ュぇ澶ф彁楂樿繘紼嬮熷害鏃朵嬌鐢ㄣ傚綋闇瑕佸湪 "asm" 鍐呴儴鏇存柊 C 鍙橀噺錛岃屾?zhèn)ㄥ張纭疄涓嶅笇鏈涗娇鐢ㄥ瘎瀛樺櫒鏉ヤ繚瀛樺叾鍊兼椂錛屼嬌鐢ㄥ唴瀛樼害鏉熸渶涓烘湁鏁堛備緥濡傦紝idtr 鐨勫煎瓨鍌ㄥ湪鍐呭瓨浣嶇疆 loc 涓細(xì) </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> ("sidt %0\n" : :"m"(loc));<br></pre> </td> </tr> </tbody> </table> <br> <p><strong>鍖歸厤錛堟暟瀛楋級綰︽潫</strong><br> 鍦ㄦ煇浜涙儏鍐典笅錛屼竴涓彉閲忔棦瑕佸厖褰撹緭鍏ユ搷浣滄暟錛屼篃瑕佸厖褰撹緭鍑烘搷浣滄暟銆傚彲浠ラ氳繃浣跨敤鍖歸厤綰︽潫鍦? "asm" 涓寚瀹氳繖縐嶆儏鍐點(diǎn)? </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">asm ("incl %0" :"=a"(var):"0"(var));<br></pre> </td> </tr> </tbody> </table> <br> <p>鍦ㄥ尮閰嶇害鏉熺殑紺轟緥涓紝瀵勫瓨鍣?%eax 鏃㈢敤浣滆緭鍏ュ彉閲忥紝涔熺敤浣滆緭鍑哄彉閲忋傚皢 var 杈撳叆璇誨彇鍒? %eax錛屽鍔犲悗灝嗘洿鏂扮殑 %eax 鍐嶆瀛樺偍鍦?var 涓傝繖閲岀殑 "0" 鎸囧畾絎?0 涓緭鍑哄彉閲忕浉鍚岀殑綰︽潫銆傚嵆錛屽畠鎸囧畾 var 鐨勮緭鍑哄疄渚嬪彧搴旇瀛樺偍鍦?%eax 涓傝綰︽潫鍙互鐢ㄤ簬浠ヤ笅鎯呭喌錛?/p> <ul> <li>杈撳叆浠庡彉閲忎腑璇誨彇錛屾垨鑰呭彉閲忚淇敼鍚庯紝淇敼鍐欏洖鍒板悓涓鍙橀噺涓?/li> <li>涓嶉渶瑕佸皢杈撳叆鎿嶄綔鏁板拰杈撳嚭鎿嶄綔鏁扮殑瀹炰緥鍒嗗紑</li> </ul> <p> 浣跨敤鍖歸厤綰︽潫鏈閲嶈鐨勬剰涔夊湪浜庡畠浠彲浠ュ鑷存湁鏁堝湴浣跨敤鍙敤瀵勫瓨鍣ㄣ?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="8"><span id="hvzpftn" class="atitle">涓鑸唴鑱旀眹緙栫敤娉曠ず渚?/span></a></p> <p>浠ヤ笅紺轟緥閫氳繃鍚勭涓嶅悓鐨勬搷浣滄暟綰︽潫璇存槑浜嗙敤娉曘傛湁濡傛澶氱殑綰︽潫浠ヨ嚦浜庢棤娉曞皢瀹冧滑涓涓鍒楀嚭錛岃繖閲屽彧鍒楀嚭浜嗘渶緇忓父浣跨敤鐨勯偅浜涚害鏉熺被鍨嬨?/p> <p><strong>"asm" 鍜屽瘎瀛樺櫒綰︽潫 "r"</strong> 璁╂垜浠厛鐪嬩竴涓嬩嬌鐢ㄥ瘎瀛樺櫒綰︽潫 r 鐨?"asm"銆傛垜浠殑紺轟緥鏄劇ず浜?GCC 濡備綍鍒嗛厤瀵勫瓨鍣紝浠ュ強(qiáng)瀹冨浣曟洿鏂拌緭鍑哄彉閲忕殑鍊箋? </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">int main(void)<br>{<br> int x = 10, y;<br> <br> asm ("movl %1, %%eax;<br> <br> "movl %%eax, %0;"<br> :"=r"(y) /* y is output operand */<br> :"r"(x) /* x is input operand */<br> :"%eax"); /* %eax is clobbered register */<br>}<br></pre> </td> </tr> </tbody> </table> <br> <p>鍦ㄨ渚嬩腑錛寈 鐨勫煎鍒朵負(fù) "asm" 涓殑 y銆倄 鍜?y 閮介氳繃瀛樺偍鍦ㄥ瘎瀛樺櫒涓紶閫掔粰 "asm"銆備負(fù)璇ヤ緥鐢熸垚鐨勬眹緙栦唬鐮佸涓嬶細(xì)</p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">main:<br>pushl %ebp<br>movl %esp,%ebp<br>subl $8,%esp<br>movl $10,-4(%ebp) <br>movl -4(%ebp),%edx /* x=10 is stored in %edx */<br>#APP /* asm starts here */ <br>movl %edx, %eax /* x is moved to %eax */<br>movl %eax, %edx /* y is allocated in edx and updated */<br>#NO_APP /* asm ends here */<br>movl %edx,-8(%ebp) /* value of y in stack is updated with <br> <br> the value in %edx */ <br></pre> </td> </tr> </tbody> </table> <br> <p>褰撲嬌鐢?"r" 綰︽潫鏃訛紝GCC 鍦ㄨ繖閲屽彲浠ヨ嚜鐢卞垎閰嶄換浣曞瘎瀛樺櫒銆傚湪鎴戜滑鐨勭ず渚嬩腑錛屽畠閫夋嫨 %edx 鏉ュ瓨鍌? x銆傚湪璇誨彇浜?%edx 涓?x 鐨勫煎悗錛屽畠涓?y 涔熷垎閰嶄簡鐩稿悓鐨勫瘎瀛樺櫒銆?/p> <p>鍥犱負(fù) y 鏄湪杈撳嚭鎿嶄綔鏁伴儴鍒嗕腑鎸囧畾鐨勶紝鎵浠?%edx 涓洿鏂扮殑鍊煎瓨鍌ㄥ湪 -8(%ebp)錛屽爢鏍堜笂 y 鐨勪綅緗腑銆傚鏋?y 鏄湪杈撳叆閮ㄥ垎涓寚瀹氱殑錛岄偅涔堝嵆浣垮畠鍦?y 鐨勪復(fù)鏃跺瘎瀛樺櫒瀛樺偍鍊?(%edx) 涓鏇存柊錛屽爢鏍堜笂 y 鐨勫間篃涓嶄細(xì)鏇存柊銆?/p> <p>鍥犱負(fù) %eax 鏄湪淇グ鍒楄〃涓寚瀹氱殑錛孏CC 涓嶅湪浠諱綍鍏跺畠鍦版柟浣跨敤瀹冩潵瀛樺偍鏁版嵁銆?/p> <p>杈撳叆 x 鍜岃緭鍑?y 閮藉垎閰嶅湪鍚屼竴涓?%edx 瀵勫瓨鍣ㄤ腑錛屽亣璁捐緭鍏ュ湪杈撳嚭浜х敓涔嬪墠琚秷鑰椼傝娉ㄦ剰錛屽鏋滄?zhèn)ㄦ湁璁稿鎸囦护锛尀兏嶆槸杩櫩U嶆儏鍐典簡銆傝紜繚杈撳叆鍜岃緭鍑哄垎閰嶅埌涓嶅悓鐨勫瘎瀛樺櫒涓紝鍙互鎸囧畾 & 綰︽潫淇グ絎︺備笅闈㈡槸娣誨姞浜嗙害鏉熶慨楗扮鐨勭ず渚嬨?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">int main(void)<br>{<br> int x = 10, y;<br> <br> asm ("movl %1, %%eax;<br> <br> "movl %%eax, %0;"<br> :"=&r"(y) /* y is output operand, note the <br> <br> & constraint modifier. */<br> :"r"(x) /* x is input operand */<br> :"%eax"); /* %eax is clobbered register */<br>}<br></pre> </td> </tr> </tbody> </table> <br> <p>浠ヤ笅鏄負(fù)璇ョず渚嬬敓鎴愮殑姹囩紪浠g爜錛屼粠涓彲浠ユ槑鏄懼湴鐪嬪嚭 x 鍜?y 瀛樺偍鍦? "asm" 涓笉鍚岀殑瀵勫瓨鍣ㄤ腑銆?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">main:<br>pushl %ebp<br>movl %esp,%ebp<br>subl $8,%esp<br>movl $10,-4(%ebp)<br>movl -4(%ebp),%ecx /* x, the input is in %ecx */<br>#APP<br> movl %ecx, %eax<br> movl %eax, %edx /* y, the output is in %edx */<br>#NO_APP<br>movl %edx,-8(%ebp)<br></pre> </td> </tr> </tbody> </table> <br> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="9"><span id="hvzpftn" class="atitle">鐗瑰畾瀵勫瓨鍣ㄧ害鏉熺殑浣跨敤</span></a></p> <p>鐜板湪璁╂垜浠湅涓涓嬪浣曞皢涓埆瀵勫瓨鍣ㄤ綔涓烘搷浣滄暟鐨勭害鏉熸寚瀹氥傚湪涓嬮潰鐨勭ず渚嬩腑錛宑puid 鎸囦護(hù)閲囩敤 %eax 瀵勫瓨鍣ㄤ腑鐨勮緭鍏ワ紝鐒跺悗鍦ㄥ洓涓瘎瀛樺櫒涓粰鍑鴻緭鍑猴細(xì)%eax銆?ebx銆?ecx銆?edx銆傚 cpuid 鐨勮緭鍏ワ紙鍙橀噺 "op"錛変紶閫掑埌 "asm" 鐨?eax 瀵勫瓨鍣ㄤ腑錛屽洜涓?cpuid 甯屾湜瀹冭繖鏍峰仛銆傚湪杈撳嚭涓嬌鐢?a銆乥銆乧 鍜?d 綰︽潫錛屽垎鍒敹闆嗗洓涓瘎瀛樺櫒涓殑鍊箋?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">asm ("cpuid"<br>: "=a" (_eax),<br>"=b" (_ebx),<br>"=c" (_ecx),<br>"=d" (_edx)<br>: "a" (op));<br></pre> </td> </tr> </tbody> </table> <br> <p>鍦ㄤ笅闈㈠彲浠ョ湅鍒頒負(fù)瀹冪敓鎴愮殑姹囩紪浠g爜錛堝亣璁?_eax銆乢ebx 絳?.. 鍙橀噺閮藉瓨鍌ㄥ湪鍫嗘爤涓婏級錛?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">movl -20(%ebp),%eax /* store 'op' in %eax -- input */<br>#APP<br>cpuid<br>#NO_APP<br>movl %eax,-4(%ebp) /* store %eax in _eax -- output */<br>movl %ebx,-8(%ebp) /* store other registers in<br>movl %ecx,-12(%ebp) <br> respective output variables */<br>movl %edx,-16(%ebp)<br></pre> </td> </tr> </tbody> </table> <br> <p>strcpy 鍑芥暟鍙互閫氳繃浠ヤ笅鏂瑰紡浣跨敤 "S" 鍜?"D" 綰︽潫鏉ュ疄鐜幫細(xì)</p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">asm ("cld\n<br> <br>rep\n<br> <br>movsb"<br> <br>: /* no input */<br> <br>:"S"(src), "D"(dst), "c"(count));<br></pre> </td> </tr> </tbody> </table> <br> <p>閫氳繃浣跨敤 "S" 綰︽潫灝嗘簮鎸囬拡 src 鏀懼叆 %esi 涓紝浣跨敤 "D" 綰︽潫灝嗙洰鐨勬寚閽?dst 鏀懼叆 %edi 涓傚洜涓?rep 鍓嶇紑闇瑕?count 鍊鹼紝鎵浠ュ皢瀹冩斁鍏?%ecx 涓?/p> <p>鍦ㄤ笅闈㈠彲浠ョ湅鍒板彟涓涓害鏉燂紝瀹冧嬌鐢ㄤ袱涓瘎瀛樺櫒 %eax 鍜?%edx 灝嗕袱涓? 32 浣嶇殑鍊煎悎騫跺湪涓璧鳳紝鐒跺悗鐢熸垚涓涓?4 浣嶇殑鍊鹼細(xì)</p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">#define rdtscll(val) \<br> __asm__ __volatile__ ("rdtsc" : "=A" (val))<br>The generated assembly looks like this (if val has a 64 bit memory space).<br>#APP<br>rdtsc<br>#NO_APP<br>movl %eax,-8(%ebp) /* As a result of A constraint <br>movl %edx,-4(%ebp) <br> %eax and %edx serve as outputs */<br>Note here that the values in %edx:%eax serve as 64 bit output.<br></pre> </td> </tr> </tbody> </table> <br> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="10"><span id="hvzpftn" class="atitle">浣跨敤鍖歸厤綰︽潫</span></a></p> <p>鍦ㄤ笅闈㈠皢鐪嬪埌緋葷粺璋冪敤鐨勪唬鐮侊紝瀹冩湁鍥涗釜鍙傛暟錛?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \<br>type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \<br>{ \<br>long __res; \<br>__asm__ volatile ("int $0x80" \<br>: "=a" (__res) \<br>: "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \<br>"d" ((long)(arg3)),"S" ((long)(arg4))); \<br>__syscall_return(type,__res); \<br>}<br></pre> </td> </tr> </tbody> </table> <br> <p>鍦ㄤ笂渚嬩腑錛岄氳繃浣跨敤 b銆乧銆乨 鍜?S 綰︽潫灝嗙郴緇熻皟鐢ㄧ殑鍥涗釜鑷彉閲忔斁鍏? %ebx銆?ecx銆?edx 鍜?%esi 涓傝娉ㄦ剰錛屽湪杈撳嚭涓嬌鐢ㄤ簡 "=a" 綰︽潫錛岃繖鏍鳳紝浣嶄簬 %eax 涓殑緋葷粺璋冪敤鐨勮繑鍥炲煎氨琚斁鍏ュ彉閲?__res 涓傞氳繃灝嗗尮閰嶇害鏉?"0" 鐢ㄤ綔杈撳叆閮ㄥ垎涓涓涓搷浣滄暟綰︽潫錛宻yscall 鍙? __NR_##name 琚斁鍏?%eax 涓紝騫剁敤浣滃緋葷粺璋冪敤鐨勮緭鍏ャ傝繖鏍鳳紝榪欓噷鐨? %eax 鏃㈠彲浠ョ敤浣滆緭鍏ュ瘎瀛樺櫒錛屽張鍙互鐢ㄤ綔杈撳嚭瀵勫瓨鍣ㄣ傛病鏈夊叾瀹冨瘎瀛樺櫒鐢ㄤ簬榪欎釜鐩殑銆傚彟璇鋒敞鎰忥紝杈撳叆錛坰yscall 鍙鳳級鍦ㄤ駭鐢熻緭鍑猴紙syscall 鐨勮繑鍥炲鹼級涔嬪墠琚秷鑰楋紙浣跨敤錛夈?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link"> </a></p> <p><a name="11"><span id="hvzpftn" class="atitle">鍐呭瓨鎿嶄綔鏁扮害鏉熺殑浣跨敤</span></a></p> <p>璇瘋冭檻涓嬮潰鐨勫師瀛愰掑噺鎿嶄綔錛?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">__asm__ __volatile__(<br>"lock; decl %0"<br>:"=m" (counter)<br>:"m" (counter));<br></pre> </td> </tr> </tbody> </table> <br> <p>涓哄畠鐢熸垚鐨勬眹緙栫被浼間簬錛?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode">#APP<br> lock<br> decl -24(%ebp) /* counter is modified on its memory location */<br>#NO_APP.<br></pre> </td> </tr> </tbody> </table> <br> <p>鎮(zhèn)ㄥ彲鑳借冭檻鍦ㄨ繖閲屼負(fù) counter 浣跨敤瀵勫瓨鍣ㄧ害鏉熴傚鏋滆繖鏍峰仛錛宑ounter 鐨勫煎繀欏誨厛澶嶅埗鍒板瘎瀛樺櫒錛岄掑噺錛岀劧鍚庡鍏跺唴瀛樻洿鏂般備絾榪欐牱鎮(zhèn)ㄤ細(xì)鏃犳硶鐞嗚В閿佸畾鍜屽師瀛愭х殑鍏ㄩ儴鎰忓浘錛岃繖浜涙槑紜樉紺轟簡浣跨敤鍐呭瓨綰︽潫鐨勫繀瑕佹с?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link"> </a></p> <p><a name="12"><span id="hvzpftn" class="atitle">浣跨敤淇グ瀵勫瓨鍣?/span></a></p> <p>璇瘋冭檻鍐呭瓨鎷瘋礉鐨勫熀鏈疄鐜般?/p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="code-outline"> <pre class="displaycode"> asm ("movl $count, %%ecx;<br> <br>up: lodsl; <br> <br>stosl;<br> <br>loop up;"<br> : /* no output */<br> :"S"(src), "D"(dst) /* input */<br> :"%ecx", "%eax" ); /* clobbered list */ <br></pre> </td> </tr> </tbody> </table> <br> <p>褰?lodsl 淇敼 %eax 鏃訛紝lodsl 鍜?stosl 鎸囦護(hù)闅愬惈鍦頒嬌鐢ㄥ畠銆?ecx 瀵勫瓨鍣ㄦ槑紜鍏?count銆備絾 GCC 鍦ㄦ垜浠氱煡瀹冧互鍓嶆槸涓嶇煡閬撹繖浜涚殑錛屾垜浠槸閫氳繃灝?%eax 鍜?%ecx 鍖呮嫭鍦ㄤ慨楗板瘎瀛樺櫒闆嗕腑鏉ラ氱煡 GCC 鐨勩傚湪瀹屾垚榪欎竴姝ヤ箣鍓嶏紝GCC 鍋囪 %eax 鍜?%ecx 鏄嚜鐢辯殑錛屽畠鍙兘鍐沖畾灝嗗畠浠敤浣滃瓨鍌ㄥ叾瀹冪殑鏁版嵁銆傝娉ㄦ剰錛?esi 鍜?%edi 鐢?"asm" 浣跨敤錛屽畠浠笉鍦ㄤ慨楗板垪琛ㄤ腑銆傝繖鏄洜涓哄凡緇忓0鏄?"asm" 灝嗗湪杈撳叆鎿嶄綔鏁板垪琛ㄤ腑浣跨敤瀹冧滑銆傝繖閲屾渶浣庨檺搴︽槸錛屽鏋滃湪 "asm" 鍐呴儴浣跨敤瀵勫瓨鍣紙鏃犺鏄槑紜繕鏄殣鍚湴錛夛紝鏃笉鍑虹幇鍦ㄨ緭鍏ユ搷浣滄暟鍒楄〃涓紝涔熶笉鍑虹幇鍦ㄨ緭鍑烘搷浣滄暟鍒楄〃涓紝蹇呴』灝嗗畠鍒椾負(fù)淇グ瀵勫瓨鍣ㄣ?/p> <div id="hvzpftn" class="ibm-alternate-rule"><hr></div> <p class="ibm-ind-link ibm-back-to-top"><a class="ibm-anchor-up-link">鍥為〉棣?/a></p> <p><a name="13"><span id="hvzpftn" class="atitle">緇撴潫璇?/span></a></p> <p>鎬葷殑鏉ヨ錛屽唴鑱旀眹緙栭潪甯稿法澶э紝瀹冩彁渚涚殑璁稿鐗規(guī)ф垜浠敋鑷沖湪榪欓噷鏍規(guī)湰娌℃湁娑夊強(qiáng)鍒般備絾濡傛灉鎺屾彙浜嗘湰鏂囨弿榪扮殑鍩烘湰鏉愭枡錛屾?zhèn)ㄥ簲璇ュ彲浠ュ紑濮嬪鑷繁鐨勫唴鑱旀眹緙栬繘琛岀紪鐮佷簡銆?/p> <br> <p><a name="resources"><span id="hvzpftn" class="atitle">鍙傝冭祫鏂?</span></a></p> <ul> <li>鎮(zhèn)ㄥ彲浠ュ弬闃呮湰鏂囧湪 developerWorks 鍏ㄧ悆绔欑偣涓婄殑 <a >鑻辨枃鍘熸枃</a>. <br><br></li> <li>璇峰弬鑰? <a >Using and Porting the GNU Compiler Collection (GCC)</a>鎵嬪唽銆? <br><br></li> <li>璇峰弬鑰? <a >GNU Assembler (GAS)</a>鎵嬪唽銆? <br><br></li> <li>浠旂粏闃呰 <a s Guide to Inline Assembly</a>銆? </li> </ul><img src ="http://www.shnenglu.com/Panda/aggbug/131173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Panda/" target="_blank">ChinaPanda</a> 2010-10-25 11:28 <a href="http://www.shnenglu.com/Panda/archive/2010/10/25/131173.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>椋為附鍗忚浠ュ強(qiáng)鍏朵嬌鐢ㄧ殑UDP鏁版嵁鍖呮牸寮忓拰鏂囦歡浼犺緭閫昏緫http://www.shnenglu.com/Panda/archive/2010/01/11/105406.htmlChinaPandaChinaPandaMon, 11 Jan 2010 07:23:00 GMThttp://www.shnenglu.com/Panda/archive/2010/01/11/105406.htmlhttp://www.shnenglu.com/Panda/comments/105406.htmlhttp://www.shnenglu.com/Panda/archive/2010/01/11/105406.html#Feedback0http://www.shnenglu.com/Panda/comments/commentRss/105406.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/105406.html闃呰鍏ㄦ枃

]]>
杞?閮ㄥ垎椋為附鍗忚http://www.shnenglu.com/Panda/archive/2010/01/07/105068.htmlChinaPandaChinaPandaThu, 07 Jan 2010 03:15:00 GMThttp://www.shnenglu.com/Panda/archive/2010/01/07/105068.htmlhttp://www.shnenglu.com/Panda/comments/105068.htmlhttp://www.shnenglu.com/Panda/archive/2010/01/07/105068.html#Feedback0http://www.shnenglu.com/Panda/comments/commentRss/105068.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/105068.html鏈榪戠湅鍒頒竴浜涙湅鍙嬪湪緙栧啓緗戠粶紼嬪簭鏄亣鍒頒竴浜涢棶棰橈紝鏁呮妸浠ュ墠鍋欼PMSG鏃剁炕璇戠殑鏂囨。璐磋繃鏉ワ紝甯屾湜瀵圭綉緇滅紪紼嬫柊鎵嬫湁鎵甯姪錛屽湪瀵繪壘緙栫▼欏圭洰鐨勫悓瀛︿滑涔熷彲鍙傜収姝ゆ枃妗e啓鍑鴻嚜宸辯殑IPMSG銆?br>
鏈枃鍙寘鍚叾涓嚑涓瘮杈冮噸瑕佺殑鍛戒護(hù)浠ュ強(qiáng)榪愯鏈哄埗鐨勪腑鏂囩炕璇戯紝鏇磋緇嗙殑鍐呭璇峰弬鐓ф枃鍚庣殑IPMSG 鍗忚鑻辨枃鏂囨。

澹版槑錛氫笅榪板崗璁唴瀹圭暐鍘諱簡涓浜涘湪緙栧啓紼嬪簭榪囩▼涓病鏈夌敤鍒板崗璁唴瀹癸紝鏈鍒濈殑Ipmsg鍗忚鏄敤鏃ユ枃鍐欑殑錛屼笅闈㈠崗璁唴瀹圭敱鏈漢(cugb_cat)緲昏瘧鑷狹r.Kanazawa鐨勮嫳鏂囨枃妗c傛湰緲昏瘧鏂囨。鍙換鎰忎紶鎾拰浣跨敤銆?br>
        IP淇′嬌浼犺緭鍗忚(絎?鐗堣崏妗?         1996/02/21
                2003/01/14 淇

                H.Shirouzu
            shirouzu@h.email.ne.jp


鍏充簬IP淇′嬌錛?br>   IP淇′嬌浣跨敤TCP/UDP鍗忚鎻愪緵鏀跺彂娑堟伅鍙?qiáng)鏂囦?鐩綍)銆?br> 鐗規(guī)э細(xì)
IP淇′嬌鑳藉瀹夎鍦ㄤ換浣曚竴涓畨瑁呬簡TCP/IP鍗忚鏍堢殑鎿嶄綔緋葷粺涓婏紝浣跨敤鍦ㄧ嚎鐢ㄦ埛鐨勫姩鎬佽瘑鍒満鍒訛紝鍙互鍜屽湪綰挎墍鏈夌敤鎴瘋繘琛屼俊鎭氦鎹€?br> 榪愯鏈哄埗浠嬬粛錛?br> 浣跨敤TCP/UDP绔彛(榛樿绔彛涓?425)錛屾秷鎭殑鏀跺彂浣跨敤UDP鍗忚錛屾枃浠?鏂囦歡澶?鐨勬敹鍙戜嬌鐢═CP鍗忚銆?br> 1銆?nbsp;  鍛戒護(hù)瀛楋細(xì)
1)   鍩烘湰鍛戒護(hù)瀛?32浣嶅懡浠ゅ瓧鐨勪綆8浣?
    IPMSG_NOOPERATION     涓嶈繘琛屼換浣曟搷浣?br>     IPMSG_BR_ENTRY     鐢ㄦ埛涓婄嚎
    IPMSG_BR_EXIT         鐢ㄦ埛閫鍑?br>     IPMSG_ANSENTRY     閫氭姤鍦ㄧ嚎
    IPMSG_SENDMSG         鍙戦佹秷鎭?br>     IPMSG_RECVMSG         閫氭姤鏀跺埌娑堟伅
    IPMSG_GETFILEDATA     璇鋒眰閫氳繃TCP浼犺緭鏂囦歡
    IPMSG_RELEASEFILES   鍋滄鎺ユ敹鏂囦歡
    IPMSG_GETDIRFILES     璇鋒眰浼犺緭鏂囦歡澶?br> 2)   閫夐」浣?32浣嶅懡浠ゅ瓧鐨勯珮24浣?
IPMSG_SENDCHECKOPT   浼犻佹鏌?闇瑕佸鏂硅繑鍥炵‘璁や俊鎭?
IPMSG_FILEATTACHOPT   浼犻佹枃浠墮夐」
3)   闄勪歡綾誨瀷鍛戒護(hù)(鏂囦歡綾誨瀷鍛戒護(hù)瀛楃殑浣?浣?
IPMSG_FILE_REGULAR   鏅氭枃浠?br> IPMSG_FILE_DIR     鐩綍鏂囦歡
IPMSG_FILE_RETPARENT   榪斿洖涓婁竴綰х洰褰?br> 2銆?nbsp;  鏁版嵁鍖呮牸寮?浣跨敤瀛楃涓?錛?br> 1)   鏁版嵁鍖呮牸寮?鐗堟湰1鐨勬牸寮?
鐗堟湰鍙?1):鍖呯紪鍙?鍙戦佽呭鍚?鍙戦佽呬富鏈哄悕:鍛戒護(hù)瀛?闄勫姞淇℃伅
2)   涓句緥濡備笅
“1:100:shirouzu:Jupiter:32:Hello”
3銆?nbsp;  鏁版嵁鍖呭鐞嗘昏堪錛?br> 1)   鐢ㄦ埛璇嗗埆
褰揑PMSG 鍚姩鏃訛紝鍛戒護(hù)IPMSG_BR_ENTRY琚箍鎾埌緗戠粶涓紝鍚戞墍鏈夊湪綰跨殑鐢ㄦ埛鎻愮ず涓涓柊鐢ㄦ埛鐨勫埌杈?鍗寵〃紺?#8220;鎴戞潵浜?#8221;)錛涙墍鏈夊湪綰跨敤鎴峰皢鎶婅鏂頒笂綰跨敤鎴鋒坊 鍔犲埌鑷繁鐨勭敤鎴峰垪琛ㄤ腑錛屽茍鍚戣鏂頒笂綰跨敤鎴峰彂閫両PMSG_ANSENTRY鍛戒護(hù)(鍗寵〃紺?#8220;鎴戝湪綰?#8221;)錛涜鏂頒笂綰跨敤鎴鋒帴鏀跺埌IPMSG_ANSENTRY鍛? 浠ゅ悗鍗沖皢鍦ㄧ嚎鐢ㄦ埛娣誨姞鍒拌嚜宸辯殑鐢ㄦ埛鍒楄〃涓?br> 2)   鏀跺彂娑堟伅
浣跨敤IPMSG_SENDMSG鍛戒護(hù)鍙戦佹秷鎭紝娑堟伅鍐呭娣誨姞鍦ㄩ檮鍔犱俊鎭腑錛涘湪鎺ユ敹娑堟伅鏃訛紝濡傛灉瀵規(guī)柟瑕佹眰鍥炰俊紜(IPMSG_SENDCHECKOPT浣嶆墦寮)錛屽垯闇鍙戦両PMSG_RECVMSG鍛戒護(hù)騫跺皢瀵規(guī)柟鍙戦佺殑鏁版嵁鍖呯殑緙栧彿鏀懼湪闄勫姞淇℃伅涓竴鍚屽彂閫佽嚦鍙戦佹秷鎭柟
3)   闄勫姞鏂囦歡鐨勬墿鍏?娣誨姞浜庣9鐗?
甯︽湁IPMSG_FILEATTACHOPT浣嶇殑IPMSG_SENDMSG鍛戒護(hù)鍙敤鏉ヤ紶杈撴枃浠訛紝鏂囦歡灞炴у強(qiáng)鍐呭娣誨姞鍦ㄩ檮鍔犱俊鎭腑錛屾枃浠跺唴瀹規(guī)坊鍔犲湪娑堟伅鍐? 瀹瑰悗騫朵互’\0’涓庝箣鍒嗛殧寮銆備紶杈撴枃浠舵椂浠ヤ笅淇℃伅灝嗚娣誨姞鍒版秷鎭唴瀹逛箣鍚?鍖呮嫭鏍煎紡)錛氭枃浠跺簭鍙?鏂囦歡鍚?澶у皬(鍗曚綅:瀛楄妭):鏈鍚庝慨鏀規(guī)椂闂?鏂囦歡灞炴? [: 闄勫姞灞炴?val1[,val2…][:闄勫姞淇℃伅=…]]:\a:鏂囦歡搴忓彿…
(鏂囦歡澶у皬銆佹渶鍚庝慨鏀規(guī)椂闂村拰鏂囦歡灞炴т負(fù)鍗佸叚榪涘埗鏁幫紝濡傛灉鏂囦歡鍚嶄腑鍖呭惈’:’鍒欎嬌鐢?#8220;::”浠f浛)銆?br> 鎺ユ敹绔紑濮嬫帴鏀舵枃浠舵椂錛岃姹備紶杈撴枃浠跺懡浠PMSG_GETFILEDATA灝嗗彂閫佸埌鍙戦佺鐨凾CP绔彛(鍜孶DP鐨勫彂閫佺鍙g浉鍚?錛屽茍灝嗗彂閫佺鍙戦佺殑鍖? 緙栧彿:鏂囦歡搴忓彿:鍋忕Щ閲?鍏ㄤ負(fù)鍗佸叚榪涘埗鏍煎紡)鍐欏埌闄勫姞淇℃伅鍖轟竴鍚屽彂閫侊紝鏂囦歡鍙戦佺鎺ユ敹鍒拌璇鋒眰淇℃伅騫惰繘琛屾牎楠屾紜悗鍗沖紑濮嬪彂閫佹枃浠?涓嶄嬌鐢ㄤ換浣曟牸寮忥紝浜︿笉 榪涜鍔犲瘑)銆?br> 褰撴帴鏀剁鎺ユ敹鍒扮洰褰曟枃浠舵椂錛屽皢鍙戦侀檮鍔犱俊鎭尯涓哄彂閫佺鍙戦佺殑鍖呯紪鍙?鏂囦歡搴忓彿:鍋忕Щ閲?鍏ㄤ負(fù)鍗佸叚榪涘埗鏍煎紡)鐨? IPMSG_GETDIRFILES鍛戒護(hù)錛屼互鐢ㄦ潵璇鋒眰浼犺緭鐩綍鏂囦歡錛涘彂閫佺鍒欏皢澶翠俊鎭暱搴?鏂囦歡鍚?鏂囦歡澶у皬:鏂囦歡灞炴?鏂囦歡鍐呭娣誨姞鍒伴檮鍔犱俊鎭尯(闄や簡 鏂囦歡鍚嶅拰鏂囦歡鍐呭澶栵紝鍏朵綑鐨嗕負(fù)鍗佸叚榪涘埗)錛屽ご淇℃伅闀垮害鏄粠澶翠俊鎭暱搴﹀紑濮嬪埌鏂囦歡鍐呭鍓嶇殑‘:’鍒嗗壊絎︿負(fù)姝㈢殑瀛楃涓暟銆?br> 褰撴枃浠跺睘鎬т負(fù)IPMSG_FILE_DIR鏃訛紝IPMsg鑳藉鑷姩璇嗗埆鍏朵負(fù)鐩綍錛屼笅涓涓枃浠剁殑鏁版嵁鍦ㄨ鐩綍涔嬪悗銆?br> 褰撴枃浠跺睘鎬т負(fù)IPMSG_FILE_RETPARENT鏃訛紝IPMsg璇嗗埆鍏跺姩浣滀負(fù)榪斿洖涓婁竴綰х洰褰曪紝鍦ㄨ繖縐嶆儏鍐典笅錛屾枃浠跺悕涓?#8216;.’鍏跺睘鎬т負(fù)褰撳墠鐩綍鐨勫箋?br>
闄処PMSG鍗忚鑻辨枃鐗?



Original ipmsg protocol specification is written in Japanese.
This document was translated by Mr.Kanazawa.
This document is not verified yet.

----------------------------------------------------------------------
    IP Messenger communication protocol (Draft-9) 1996/02/21
                                Modified 2003/01/14

                                    H.Shirouzu
                              shirouzu@h.email.ne.jp
----------------------------------------------------------------------

About IP Messenger
    This is a Send/Receive message service using the TCP/UDP Port.

Characteristics
    IP Messenger can be installed in any OS if TCP/IP is used on your machine.
    Dynamic member recognition can be done within your network or specified network.
    You can exchange messages between all IPMsg members.

Function description
    Use TCP/UDP port(default:2425). See the following descriptions
    (Message Send/Receive: UDP, File Send/Receive: TCP)

1. Command

  1) Command functions (Low 8 bits from command number 32 bits)

    IPMSG_NOOPERATION No Operation
    IPMSG_BR_ENTRY Entry to service (Start-up with a Broadcast command)
    IPMSG_BR_EXIT Exit from service (End with a Broadcast command)
    IPMSG_ANSENTRY Notify a new entry
    IPMSG_BR_ABSENCE Change absence mode

    IPMSG_BR_ISGETLIST Search valid sending host members
    IPMSG_OKGETLIST Host list sending notice
    IPMSG_GETLIST Host list sending request
    IPMSG_ANSLIST Host list sending

    IPMSG_SENDMSG Message transmission
    IPMSG_RECVMSG Message receiving check

    IPMSG_READMSG Message open notice
    IPMSG_DELMSG Message discarded notice
    IPMSG_ANSREADMSG Message open confirmation notice(added from version-8 )

    IPMSG_GETFILEDATA File Transfer request by TCP
    IPMSG_RELEASEFILES Discard attachment file
    IPMSG_GETDIRFILES Attachment hierarchical file request

    IPMSG_GETINFO Get IPMSG version info.
    IPMSG_SENDINFO Send IPMSG version info.

    IPMSG_GETABSENCEINFO Get absence sentence
    IPMSG_SENDABSENCEINFO Send absence sentence

    IPMSG_GETPUBKEY RSA Public Key Acquisition
    IPMSG_ANSPUBKEY RSA Public Key Response

  2) Option flag (High 24 bits from command number 32 bits)

    IPMSG_ABSENCEOPT Absence mode(Member recognition command)
    IPMSG_SERVEROPT Server(Reserved)
    IPMSG_DIALUPOPT Send individual member recognition command

    IPMSG_SENDCHECKOPT Transmission check
    IPMSG_SECRETOPT Sealed message
    IPMSG_READCHECKOPT Sealed message check(added from ver8 )
    IPMSG_PASSWORDOPT Lock
    IPMSG_BROADCASTOPT Broadcast message
    IPMSG_MULTICASTOPT Multi-cast(Multiple casts selection)
    IPMSG_NEWMUTIOPT New version multi-cast(reserved)
    IPMSG_AUTORETOPT Automatic response(Ping-pong protection)
    IPMSG_NOLOGOPT No log files
    IPMSG_NOADDLISTOPT Notice to the members outside of BR_ENTRY

    IPMSG_FILEATTACHOPT File attachment
    IPMSG_ENCRYPTOPT Code

    IPMSG_NOPOPUPOPT (No longer valid)
    IPMSG_RETRYOPT Re-send flag(Use when acquiring HOSTLIST)

  3) Extended code flag (hex format combination)

    IPMSG_RSA_512
    IPMSG_RSA_1024
    IPMSG_RSA_2048
    IPMSG_RC2_40
    IPMSG_RC2_128
    IPMSG_RC2_256
    IPMSG_BLOWFISH_128
    IPMSG_BLOWFISH_256
    IPMSG_SIGN_MD5

  4) Extended files for attachment (fileattr low 8 bits)

    IPMSG_FILE_REGULAR
    IPMSG_FILE_DIR
    IPMSG_FILE_RETPARENT
    IPMSG_FILE_SYMLINK
    IPMSG_FILE_CDEV
    IPMSG_FILE_BDEV
    IPMSG_FILE_FIFO
    IPMSG_FILE_RESFORK

  5) Attachment file extended attribute(fileattr high 24 bits)

    IPMSG_FILE_RONLYOPT
    IPMSG_FILE_HIDDENOPT
    IPMSG_FILE_EXHIDDENOPT
    IPMSG_FILE_ARCHIVEOPT
    IPMSG_FILE_SYSTEMOPT

  6) Extended file attribute for attachment file

    IPMSG_FILE_UID
    IPMSG_FILE_USERNAME
    IPMSG_FILE_GID
    IPMSG_FILE_GROUPNAME
    IPMSG_FILE_PERM
    IPMSG_FILE_MAJORNO
    IPMSG_FILE_MINORNO
    IPMSG_FILE_CTIME
    IPMSG_FILE_MTIME
    IPMSG_FILE_ATIME
    IPMSG_FILE_CREATETIME

    IPMSG_FILE_CREATOR
    IPMSG_FILE_FILETYPE
    IPMSG_FILE_FINDERINFO

    IPMSG_FILE_ACL
    IPMSG_FILE_ALIASFNAME
    IPMSG_FILE_UNICODEFNAME


2.Command format(Use all character strings)

  1) Command(Format version-1)

    Ver(1) : PacketNo : SenderName : SenderHost : CommandNo : AdditionalSection

  2) An example for Message Send/Receive by using the current command format

    "1:100:shirouzu:jupiter:32:Hello"


3.Command process overview

  1) Member recognition

    An IPMSG_BR_ENTRY command notifies a new entry to the current
    members at start-up.

    All members add the new member to their list after getting a notification message.
    An IPMSG_ANSENTRY command sends a message back to the new member.

    The new member gets the current member data by a
    IPMSG_ANSENTRY command. All members can communicate as long as an
    IP packet exists.

    An IPMSG_BR_ABSENCE command broadcasts absence mode cancel or
    nickname change to all members. However, an IPMSG_ANSENTRY command
    does not send a message back, which is different from an IPMSG_BR_ENTRY
    command.

    IPMSG_BR_ENTRY, IPMSG_ANSENTRY, and IPMSG_BR_ABSENCE commands
    use an IPMSG_ABSENCEOPT flag for absence mode. Input a nickname to
    additional command.
    Add an IPMSG_DIALUPOPT flag for dial-up users who can't be reached by
    a broadcast command. A member recognition command needs to be
    sent individually to the members with this optional flag.

    (Extended group)IPMSG_BR_ENTRY and IPMSG_BR_ABSENCE commands
    sends a group name by adding the new group name after the current
    command format character strings (Input '
\0' between the current
    command and extended name).

  2) Send/Receive Message
    Send Message uses an IPMSG_SENDMSG command that can input a message
    in the extended area.
    Receive Message sends back an IPMSG_RECVMSG command only
    if an IPMSG_SENDCHECKOPT flag is ON. Input the original packet number
    to the extended area.

    Broadcast Message Send uses an IPMSG_BOADCASTOPT command
    and an IPMSG_SENDMSG flag should be ON.
    Auto-Send packet(absence notice) needs to be added to IPMSG_AUTORETOPT
    for ping-pong protection. If either one or another packet is ON, then
    confirmation/auto-send packet is not sent back.

    Send Message Sealing needs to be an IPMSG_SECRETOPT packet ON.
    In this case, Receive Message sends an IPMSG_READMSG command.
    Input the original packet number to the extended area.

    (Additional IPMSG_NOADDLISTOPT)
    When receiving an IPMSG_SENDMSG packet from a host that is
    not on your Send/Receive list, IPMsg will either confirm a host by
    sending an IPMSG_BR_ENTRY command or add a host name to
    the Send/Receive list.
    However, single-shot Message Send/Receive action needs to be avoided.
    Add an IPMSG_NOADDLISTOPT flag to an IPMSG_SENDMSG command.

    (Additional IPMSG_READCHECKOPT from version-8 )
    When an IPMSG_READMSG command contains an IPMSG_READCHECKOPT flag,
    IPMsg process is the same as IPMSG_SENDMSG with an
    IPMSG_SENDCHECKOPT flag.
    However, Send Message uses an IPMSG_ANSREADMSG command,
    not IPMSG_RECVMSG.

  3) Message Send/Receive 浜卐ncrypted extension (Added in the version-9 )

    Use the combination of Public-key(RSA) and common key(RC2/Blowfish).
    (Encrypted extension area is used in hex format.)

    (Public key acquisition)Send an IPMSG_GETPUBKEY command to Receive
    Message. Receive Message gets an IPMSG_ANSPUBKEY that
    means receiving RSA public key from Send Message.

    IPMSG_GETPUBKEY/IPMSG_ANSPUBKEY both require the value which is
    encryption capability (Exp. IPMSG_RSA_1024) flag uses "OR" at first
    part of extension

    In addition, In IPMSG_ANSPUBKEY, public key written as EE-NNNNNN
    E=Exponent涓凬=method)devide by '
:'. and Input the Fdelimiter '-'
    between E and N.

    This sequence can be skipped after the 2nd Send/Receive process by
    memorizing public key and encrypted data.
   
    (Encrypted message)After a sender creates a common key that is
    supported both sender and receiver, a common key can encrypt a message.
    In addition, a receiver'
s public key encrypts the common key.


    (Encrypted message transmission) IPMSG_ENCRYPTOPT is used in
    IPMSG_SENDMSG. At the first part of extension, input the value which
    is 'or' resoult from Convination of public key and common key type .
    Then use common key which encrypt with public key devide by ':'.
    Then input message which is eccrypted by public key devide by ':'.
    If both supports IPMSG_SIGN_XXX, then add ':' and signeture.

    Also, In the method of encode padding, PKCS#1ECB key is used for RSA,
    PKCS#5 CBC common key is used for RC2/blowfish.

    Also, The Packet related to Entry manifestation the capability of
    ecryption support using IPMSG_ENCRYPTOPT

  4) Extension with file attachment(Available from version-9 )

    An IPMSG_SENDMSG command with an IPMSG_FILEATTACHOPT flag for
    File transfer (download permission)notification sends a message
    with attachment.
    Input '\0' after the message and attachment file data.
   

    fileID:filename:size:mtime:fileattr[:extend-attr=val1
    [,val2...][:extend-attr2=...]]:\a:fileID...
    (size, mtime, and fileattr describe hex format.
      If a filename contains ':', please replace with "::".)

    When Receive Message downloads an attachment file, an IPMSG_GETFILEDATA
    command requests a data transmission packet to the TCP port that is the same number
    as the UDP sending port number. Input packetID:fileID: offset to the extended area.
    (Use all hex format.)
    File Transfer side receives the request. After recognizing that it's a correct request,
    then send the specified data (no format)

    When the data receiving side downloads a hierarchical attachment file,
    use an IPMSG_GETDIRFILES command and input a packetID:fileID
    to the extended area and send a data transmission request packet.
    (all hex format)

    Data sending side sends the following hierarchical data format.
    header-size:filename:file-size:fileattr[:extend-attr=val1
    [,val2...][:extend-attr2=...]]:contents-data
    Next headersize: Next filename...
    (All hex format except for filename and contetns-data)

    header-size is from the beginning of header-size to the delimiter '
:'
    that is before contents-data. extend-attr can be omitted and used multiple
    extended attributes. Use '
=' for data input.

    When fileattr is IPMSG_FILE_DIR, IPMsg recognizes that it is automatically
    in the directory, the next file data is after the directory.

    When fileattr is IPMSG_FILE_RETPARENT, IMPsg recognizes that it returns
    to the parent directory. In this case, File name is always "." and the attribute
    value is the current directory data.

    Sending process starts from the attachment directly and returns the
    IPMSG_FILE_RETPARENT command to the attachment directory.

    Add an IPMSG_FILEATTACHOPT flag for an Entry packet to support the
    attachment file.

  5) Other commands

    When acquiring different versions, send an IPMSG_GETINFO command.
    Receiving side sends the version information character string to
    extended area.

    Send an IPMSG_GETABSENCEINFO command for acquiring an absence message.
    Receiving side sends an IPMSG_SENDABSENCEINFO back if the status is absence mode.
    If the status is not absence mode, a character string "Not absence mode" will be sent back.

  6) Confirmation/Retry

    If a confirmation packet for IPMSG_SENDMSG or IPMSG_RECVMSG is not delivered
    within a specified time, then it will be sent again.
    A number of retry actions or interval period is depended on the current condition.


4. Other

  1) Linefeed

    Linefeed characters in Send Message is standardized with UNIX type ('
0x0a').
    Please change if needed.

  2) Delimiter '
:'

    '
:' is used as a delimiter. You can't use this delimiter for user name
    and host name.
    If the use/host names contain a ':', please replace with another sign,
    for an example ';'.
    Although using this delimiter isn



]]>
ACE about serverhttp://www.shnenglu.com/Panda/archive/2009/12/23/103803.htmlChinaPandaChinaPandaWed, 23 Dec 2009 07:59:00 GMThttp://www.shnenglu.com/Panda/archive/2009/12/23/103803.htmlhttp://www.shnenglu.com/Panda/comments/103803.htmlhttp://www.shnenglu.com/Panda/archive/2009/12/23/103803.html#Feedback1http://www.shnenglu.com/Panda/comments/commentRss/103803.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/103803.html闃呰鍏ㄦ枃

]]>
AT&T鎸囦護(hù)闆?/title><link>http://www.shnenglu.com/Panda/archive/2009/12/08/102799.html</link><dc:creator>ChinaPanda</dc:creator><author>ChinaPanda</author><pubDate>Tue, 08 Dec 2009 07:48:00 GMT</pubDate><guid>http://www.shnenglu.com/Panda/archive/2009/12/08/102799.html</guid><wfw:comment>http://www.shnenglu.com/Panda/comments/102799.html</wfw:comment><comments>http://www.shnenglu.com/Panda/archive/2009/12/08/102799.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/Panda/comments/commentRss/102799.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Panda/services/trackbacks/102799.html</trackback:ping><description><![CDATA[     鎽樿: GAS涓瘡涓搷浣滈兘鏄湁涓涓瓧絎︾殑鍚庣紑錛岃〃鏄庢搷浣滄暟鐨勫ぇ灝忋? C澹版槑 GAS鍚庣紑 澶у皬(瀛楄妭) ...  <a href='http://www.shnenglu.com/Panda/archive/2009/12/08/102799.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/Panda/aggbug/102799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Panda/" target="_blank">ChinaPanda</a> 2009-12-08 15:48 <a href="http://www.shnenglu.com/Panda/archive/2009/12/08/102799.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓鑷翠笌闈炰竴鑷存т唬鐮佹http://www.shnenglu.com/Panda/archive/2009/10/18/98858.htmlChinaPandaChinaPandaSat, 17 Oct 2009 18:08:00 GMThttp://www.shnenglu.com/Panda/archive/2009/10/18/98858.htmlhttp://www.shnenglu.com/Panda/comments/98858.htmlhttp://www.shnenglu.com/Panda/archive/2009/10/18/98858.html#Feedback0http://www.shnenglu.com/Panda/comments/commentRss/98858.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/98858.html闃呰鍏ㄦ枃

]]>
絎簩绔?緋葷粺鏋舵瀯嫻忚2.5http://www.shnenglu.com/Panda/archive/2009/09/27/97411.htmlChinaPandaChinaPandaSun, 27 Sep 2009 15:13:00 GMThttp://www.shnenglu.com/Panda/archive/2009/09/27/97411.htmlhttp://www.shnenglu.com/Panda/comments/97411.htmlhttp://www.shnenglu.com/Panda/archive/2009/09/27/97411.html#Feedback0http://www.shnenglu.com/Panda/comments/commentRss/97411.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/97411.html闃呰鍏ㄦ枃

]]>
copy on writehttp://www.shnenglu.com/Panda/archive/2009/09/27/97390.htmlChinaPandaChinaPandaSun, 27 Sep 2009 11:41:00 GMThttp://www.shnenglu.com/Panda/archive/2009/09/27/97390.htmlhttp://www.shnenglu.com/Panda/comments/97390.htmlhttp://www.shnenglu.com/Panda/archive/2009/09/27/97390.html#Feedback0http://www.shnenglu.com/Panda/comments/commentRss/97390.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/97390.html    
  瀵硅薄涔嬮棿鐨勫鍒跺彧閫氳繃寮曠敤璁℃暟鏉ヨ〃紺猴紝鍐呴儴鍏跺疄鍙湁涓浠藉璞″疄渚嬨備竴鏃﹀璞″彂鐢熷彉鍖栵紝鎵嶅垱寤哄璞★紝鐒跺悗澶嶅埗鍘熷璞°? 
  榪欏彲浠ュぇ澶ф彁楂樻晥鐜囥?img src ="http://www.shnenglu.com/Panda/aggbug/97390.html" width = "1" height = "1" />

]]>
CPU緇撴瀯浠嬬粛http://www.shnenglu.com/Panda/archive/2009/09/23/96988.htmlChinaPandaChinaPandaTue, 22 Sep 2009 16:10:00 GMThttp://www.shnenglu.com/Panda/archive/2009/09/23/96988.htmlhttp://www.shnenglu.com/Panda/comments/96988.htmlhttp://www.shnenglu.com/Panda/archive/2009/09/23/96988.html#Feedback0http://www.shnenglu.com/Panda/comments/commentRss/96988.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/96988.html64浣嶅鐞嗗櫒 榪欓噷鐨?4浣嶆妧鏈槸鐩稿浜?2浣嶈岃█鐨勶紝榪欎釜浣嶆暟鎸囩殑鏄疌PU GPRs錛圙eneral-Purpose Registers錛岄氱敤瀵勫瓨鍣級鐨勬暟鎹搴︿負(fù)64浣嶏紝64浣嶆寚浠ら泦灝辨槸榪愯64浣嶆暟鎹殑鎸囦護(hù)錛屼篃灝辨槸璇村鐞嗗櫒涓嬈″彲浠ヨ繍琛?4bit鏁版嵁銆?4bit澶? 鐞嗗櫒騫墮潪鐜板湪鎵嶆湁鐨勶紝鍦ㄩ珮绔殑RISC錛圧educed Instruction Set Computing錛岀簿綆鎸囦護(hù)闆嗚綆楁満錛夊緢鏃╁氨鏈?4bit澶勭悊鍣ㄤ簡錛屾瘮濡係UN鍏徃鐨刄ltraSparc 鈪€両BM鍏徃鐨凱OWER5銆丠P鍏徃鐨凙lpha絳夈?br> 64bit璁$畻涓昏鏈変袱澶т紭鐐癸細(xì)鍙互榪涜鏇村ぇ鑼冨洿鐨勬暣鏁拌繍綆楋紱鍙互鏀寔鏇村ぇ鐨勫唴瀛樸備笉鑳藉洜涓烘暟 瀛椾笂鐨勫彉鍖栵紝鑰岀畝鍗曠殑璁や負(fù)64bit澶勭悊鍣ㄧ殑鎬ц兘鏄?2bit澶勭悊鍣ㄦц兘鐨勪袱鍊嶃傚疄闄呬笂鍦?2bit搴旂敤涓嬶紝32bit澶勭悊鍣ㄧ殑鎬ц兘鐢氳嚦浼?xì)鏇村己锛屽嵆鋴涉? 64bit澶勭悊鍣紝鐩墠鎯呭喌涓嬩篃鏄湪32bit搴旂敤涓嬫ц兘鏇村己銆傛墍浠ヨ璁ゆ竻64bit澶勭悊鍣ㄧ殑浼樺娍錛屼絾涓嶅彲榪蜂俊64bit銆?br> 瑕佸疄鐜扮湡姝f剰涔変笂鐨?4浣嶈綆楋紝鍏夋湁64浣嶇殑澶勭悊鍣ㄦ槸涓嶈鐨勶紝榪樺繀欏誨緱鏈?4浣嶇殑鎿嶄綔緋葷粺浠ュ強(qiáng) 64浣嶇殑搴旂敤杞歡鎵嶈錛屼笁鑰呯己涓涓嶅彲錛岀己灝戝叾涓換浣曚竴縐嶈绱犻兘鏄棤娉曞疄鐜?4浣嶈綆楃殑銆傜洰鍓嶏紝鍦?4浣嶅鐞嗗櫒鏂歸潰錛孖ntel鍜孉MD涓ゅぇ澶勭悊鍣ㄥ巶鍟嗛兘鍙? 甯冧簡澶氫釜緋誨垪澶氱瑙勬牸鐨?4浣嶅鐞嗗櫒錛涜屽湪鎿嶄綔緋葷粺鍜屽簲鐢ㄨ蔣浠舵柟闈紝鐩墠鐨勬儏鍐典笉瀹逛箰瑙傘傚洜涓虹湡姝i傚悎浜庝釜浜轟嬌鐢ㄧ殑64浣嶆搷浣滅郴緇熺幇鍦ㄥ氨鍙湁 Windows XP X64錛岃學(xué)indows XP X64鏈韓涔熷彧鏄竴涓繃娓℃ц川鐨?4浣嶆搷浣滅郴緇燂紝鍦╓indows Vista鍙戝竷浠ュ悗灝卞皢琚窐姹幫紝鑰屼笖Windows XP X64鏈韓涔熶笉澶畬鍠勶紝鏄撶敤鎬т笉楂橈紝涓涓槑鏄劇殑渚嬪瓙灝辨槸鍚勭紜歡璁懼鐨勯┍鍔ㄧ▼搴忓緢涓嶅畬鍠勶紝鑰屼笖鐜板湪64浣嶇殑搴旂敤杞歡榪樺熀鏈笂娌℃湁錛岀‘瀹炵‖浠跺巶鍟嗗拰杞歡鍘傚晢 涔熶笉鎰挎剰鍘諱負(fù)涓涓繃娓℃ц川鐨勬搷浣滅郴緇熺紪鍐欓┍鍔ㄧ▼搴忓拰搴旂敤杞歡銆傛墍浠ヨ鎯沖疄鐜扮湡姝g殑64浣嶈綆楋紝鎭愭曡繕寰楃瓑鍒癢indows Vista鏅強(qiáng)涓孌墊椂闂翠箣鍚庢墠琛屻?br> 鐩墠涓繪祦CPU浣跨敤鐨?4浣嶆妧鏈富瑕佹湁AMD鍏徃鐨凙MD64浣嶆妧鏈両ntel鍏徃鐨? EM64T鎶鏈佸拰Intel鍏徃鐨処A-64鎶鏈傚叾涓璉A-64鏄疘ntel鐙珛寮鍙戯紝涓嶅吋瀹圭幇鍦ㄧ殑浼犵粺鐨?2浣嶈綆楁満錛屼粎鐢ㄤ簬Itanium錛堝畨 鑵撅級浠ュ強(qiáng)鍚庣畫浜у搧Itanium 2錛屼竴鑸敤鎴蜂笉浼?xì)娑夊強(qiáng)鍒板Q屽洜姝よ繖閲屼粎瀵笰MD64浣嶆妧鏈拰Intel鐨凟M64T鎶鏈仛涓涓嬬畝鍗曚粙緇嶃?br> AMD64浣嶆妧鏈?br> AMD64鐨勪綅鎶鏈槸鍦ㄥ師濮?2浣峏86鎸囦護(hù)闆嗙殑鍩虹涓婂姞鍏ヤ簡X86-64鎵╁睍64浣峏86鎸? 浠ら泦錛屼嬌榪欐鑺墖鍦ㄧ‖浠朵笂鍏煎鍘熸潵鐨?2浣峏86杞歡錛屽茍鍚屾椂鏀寔X86-64鐨勬墿灞?4浣嶈綆楋紝浣垮緱榪欐鑺墖鎴愪負(fù)鐪熸鐨?4浣峏86鑺墖銆傝繖鏄竴涓湡姝? 鐨?4浣嶇殑鏍囧噯錛孹86-64鍏鋒湁64浣嶇殑瀵誨潃鑳藉姏銆?br> X86-64鏂板鐨勫嚑緇凜PU瀵勫瓨鍣ㄥ皢鎻愪緵鏇村揩鐨勬墽琛屾晥鐜囥傚瘎瀛樺櫒鏄疌PU鍐呴儴鐢ㄦ潵鍒涘緩鍜屽偍瀛? CPU榪愮畻緇撴灉鍜屽叾瀹冭繍綆楃粨鏋滅殑鍦版柟銆傛爣鍑嗙殑32-bit x86鏋舵瀯鍖呮嫭8涓氱敤瀵勫瓨鍣紙GPR錛夛紝AMD鍦╔86-64涓張澧炲姞浜?緇勶紙R8-R9錛夛紝灝嗗瘎瀛樺櫒鐨勬暟鐩彁楂樺埌浜?6緇勩俋86-64瀵勫瓨鍣ㄩ粯璁や綅 64-bit銆傝繕澧炲姞浜?緇?28-bit XMM瀵勫瓨鍣紙涔熷彨SSE瀵勫瓨鍣紝XMM8-XMM15錛夛紝灝嗚兘緇欏崟鎸囦護(hù)澶氭暟鎹祦鎶鏈紙SIMD錛夎繍綆楁彁渚涙洿澶氱殑絀洪棿錛岃繖浜?28浣嶇殑瀵勫瓨鍣ㄥ皢鎻愪緵鍦ㄧ煝閲? 鍜屾爣閲忚綆楁ā寮忎笅榪涜128浣嶅弻綺懼害澶勭悊錛屼負(fù)3D寤烘ā銆佺煝閲忓垎鏋愬拰铏氭嫙鐜板疄鐨勫疄鐜版彁渚涗簡紜歡鍩虹銆傞氳繃鎻愪緵浜嗘洿澶氱殑瀵勫瓨鍣紝鎸夌収X86-64鏍囧噯鐢熶駭鐨? CPU鍙互鏇存湁鏁堢殑澶勭悊鏁版嵁錛屽彲浠ュ湪涓涓椂閽熷懆鏈熶腑浼犺緭鏇村鐨勪俊鎭?
EM64T鎶鏈?br> Intel瀹樻柟鏄粰EM64T榪欐牱瀹氫箟鐨勶細(xì)EM64T鍏ㄧОExtended Memory 64 Technology錛屽嵆鎵╁睍64bit鍐呭瓨鎶鏈侲M64T鏄疘ntel IA-32鏋舵瀯鐨勬墿灞曪紝鍗矷A-32e錛圛ntel Architectur-32 extension錛夈侷A-32澶勭悊鍣ㄩ氳繃闄勫姞EM64T鎶鏈紝渚垮彲鍦ㄥ吋瀹笽A-32杞歡鐨勬儏鍐典笅錛屽厑璁歌蔣浠跺埄鐢ㄦ洿澶氱殑鍐呭瓨鍦板潃絀洪棿錛屽茍涓斿厑璁歌蔣浠惰繘琛? 32 bit綰挎у湴鍧鍐欏叆銆侲M64T鐗瑰埆寮鴻皟鐨勬槸瀵?2 bit鍜?4 bit鐨勫吋瀹規(guī)с侷ntel涓烘柊鏍稿績澧炲姞浜?涓?4 bit GPRs錛圧8-R15錛夛紝騫朵笖鎶婂師鏈塆RPs鍏ㄩ儴鎵╁睍涓?4 bit錛屽鍓嶆枃鎵榪拌繖鏍峰彲浠ユ彁楂樻暣鏁拌繍綆楄兘鍔涖傚鍔?涓?28bit SSE瀵勫瓨鍣紙XMM8-XMM15錛夛紝鏄負(fù)浜嗗寮哄濯掍綋鎬ц兘錛屽寘鎷SSE銆丼SE2鍜孲SE3鐨勬敮鎸併?br> Intel涓烘敮鎸丒M64T鎶鏈殑澶勭悊鍣ㄨ璁′簡涓ゅぇ妯″紡錛氫紶緇烮A-32妯″紡錛坙egacy IA-32 mode錛夊拰IA-32e鎵╁睍妯″紡錛圛A-32e mode錛夈傚湪鏀寔EM64T鎶鏈殑澶勭悊鍣ㄥ唴鏈変竴涓О涔嬩負(fù)鎵╁睍鍔熻兘嬋媧誨瘎瀛樺櫒錛坋xtended feature enable register錛孖A32_EFER錛夌殑閮ㄤ歡錛屽叾涓殑Bit10鎺у埗鐫EM64T鏄惁嬋媧匯侭it10琚О浣淚A-32e妯″紡鏈夋晥錛圛A-32e mode active錛夋垨闀挎ā寮忔湁鏁堬紙long mode active錛孡MA)銆傚綋LMA錛?鏃訛紝澶勭悊鍣ㄤ究浣滀負(fù)涓棰楁爣鍑嗙殑32 bit錛圛A32錛夊鐞嗗櫒榪愯鍦ㄤ紶緇烮A-32妯″紡錛涘綋LMA錛?鏃訛紝EM64T渚胯嬋媧伙紝澶勭悊鍣ㄤ細(xì)榪愯鍦↖A-32e鎵╁睍妯″紡涓嬨?br> 鐩墠AMD鏂歸潰鏀寔64浣嶆妧鏈殑CPU鏈堿thlon 64緋誨垪銆丄thlon FX緋誨垪鍜孫pteron緋誨垪銆侷ntel鏂歸潰鏀寔64浣嶆妧鏈殑CPU鏈変嬌鐢∟ocona鏍稿績鐨刋eon緋誨垪銆佷嬌鐢≒rescott 2M鏍稿績鐨凱entium 4 6緋誨垪鍜屼嬌鐢≒rescott 2M鏍稿績鐨凱4 EE緋誨垪銆?br>

IA-32錛圛ntel Architecture-32錛夌О涓鴻嫳鐗瑰皵32浣嶇粨鏋勶紝琛ㄧず鎸囦護(hù)闆嗙粨鏋処SA錛圛nstruction Set Architecture錛夈?br>
IA-32澶勭悊鍣紙鎴栫О32浣?0x86澶勭悊鍣級灝辨槸鎸囧叿鏈夎鎸囦護(hù)闆嗙粨鏋勭殑澶勭悊鍣紝渚嬪鑻辯壒灝?dāng)鍏徃鐨?0386銆?0486浠ュ強(qiáng)Pentium鍚勪唬澶勭悊鍣ㄣ侫MD鐨?2浣嶅鐞嗗櫒鍏煎榪欎釜緇撴瀯銆?br>


]]>
絎簩绔?緋葷粺鏋舵瀯嫻忚2.2-2.4灝忚妭http://www.shnenglu.com/Panda/archive/2009/09/22/96986.htmlChinaPandaChinaPandaTue, 22 Sep 2009 15:59:00 GMThttp://www.shnenglu.com/Panda/archive/2009/09/22/96986.htmlhttp://www.shnenglu.com/Panda/comments/96986.htmlhttp://www.shnenglu.com/Panda/archive/2009/09/22/96986.html#Feedback0http://www.shnenglu.com/Panda/comments/commentRss/96986.htmlhttp://www.shnenglu.com/Panda/services/trackbacks/96986.html闃呰鍏ㄦ枃

]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一级高清| 免费成人高清| 夜夜嗨av一区二区三区免费区| 美女精品在线观看| 伊人伊人伊人久久| 欧美成年网站| 欧美激情第9页| 亚洲一区二区在线免费观看| 亚洲一区二区av电影| 国产欧美精品| 奶水喷射视频一区| 欧美高清视频在线观看| 亚洲视频在线观看三级| 一区二区三区四区五区视频| 欧美大片91| 在线成人av.com| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产经典视频| 久久久天天操| 国产资源精品在线观看| 亚洲大片免费看| 亚洲激情影院| 宅男噜噜噜66国产日韩在线观看| 久久久久久尹人网香蕉| 99pao成人国产永久免费视频| 久久久亚洲高清| 欧美激情精品久久久久久大尺度| 国产精品久久久久久久久免费桃花 | 亚洲永久视频| 国产精品视频第一区| 亚洲永久免费观看| 中文av一区特黄| 国产精品一区二区女厕厕| 性久久久久久久久久久久| 一区二区三区精品久久久| 欧美日韩直播| 亚洲香蕉成视频在线观看 | 国产一区导航| 久久婷婷影院| 免费h精品视频在线播放| 亚洲三级电影在线观看| 日韩视频免费观看| 欧美午夜宅男影院| 欧美一区日韩一区| 欧美一区激情| 一区免费在线| 亚洲国产成人在线| 国产精品成人av性教育| 欧美伊人久久大香线蕉综合69| 欧美在线视频一区二区三区| 亚洲欧洲日本专区| 一区二区日韩免费看| 国产欧美日韩精品丝袜高跟鞋 | 亚洲精品欧美极品| 亚洲一区二区三区乱码aⅴ| 激情欧美一区二区三区在线观看 | 香蕉成人久久| 亚洲级视频在线观看免费1级| 亚洲美女色禁图| 国产欧美一区二区精品仙草咪| 久久亚洲欧美国产精品乐播| 鲁大师影院一区二区三区| 极品尤物av久久免费看| 一本色道久久加勒比88综合| 欧美ed2k| 性8sex亚洲区入口| 免费成人激情视频| 亚洲欧美另类久久久精品2019| 午夜精品视频在线| 亚洲精品国产精品国产自| 亚洲毛片在线观看| 欧美激情一区二区久久久| 亚洲自拍都市欧美小说| 久久夜色撩人精品| 欧美在线一二三| 久久三级视频| 亚洲性图久久| 免费在线视频一区| 欧美日韩在线高清| 久久国产精品久久久久久久久久 | 亚洲影音一区| 亚洲国产免费| av成人手机在线| 亚洲美女视频| 欧美96在线丨欧| 麻豆精品视频在线观看视频| 国产精品自拍一区| 中文欧美字幕免费| 中文日韩欧美| 欧美日本亚洲视频| 亚洲七七久久综合桃花剧情介绍| 在线观看成人一级片| 香蕉久久夜色精品国产| 亚洲欧美一区二区三区久久| 欧美日韩一区二区三区四区五区| 欧美国产一区视频在线观看| 国产一区二区三区的电影 | 久久综合五月| 免费亚洲电影在线| 狠狠综合久久av一区二区小说| 亚洲欧美国产精品桃花| 午夜精品偷拍| 国产精品丝袜xxxxxxx| 亚洲一区二区久久| 欧美一级电影久久| 国产欧美另类| 久久成人免费网| 久久青青草综合| 欧美激情精品久久久久久| 久久婷婷国产麻豆91天堂| 国产精品美女999| 亚洲福利视频二区| 亚洲视频综合在线| 国产日韩欧美麻豆| 亚洲精品男同| 国产欧美在线视频| 久久久久久久综合日本| 亚洲高清中文字幕| 国产精品一区一区三区| 亚洲欧美偷拍卡通变态| 老牛国产精品一区的观看方式| 黑人中文字幕一区二区三区| 另类尿喷潮videofree| 亚洲全黄一级网站| 中日韩美女免费视频网站在线观看| 欧美日产国产成人免费图片| 亚洲视频电影在线| 久久精品一区二区三区四区| 欧美午夜欧美| 亚洲国产精品va在看黑人| 亚洲精品欧美日韩专区| 黄色一区二区三区四区| 另类成人小视频在线| 亚洲乱码国产乱码精品精可以看| 亚洲欧美日韩在线综合| 黄页网站一区| 欧美日韩在线播放一区| 欧美国产成人在线| 亚洲欧美一区二区原创| 亚洲电影免费观看高清完整版在线观看 | 亚洲国产精品一区二区www| 欧美国产日韩在线观看| 亚洲男人的天堂在线| 欧美激情视频一区二区三区在线播放| 一区二区国产精品| 精品动漫3d一区二区三区免费| 欧美人与禽猛交乱配视频| 午夜影视日本亚洲欧洲精品| 亚洲国产精品久久久久婷婷884| 亚洲欧美日本伦理| 亚洲国内高清视频| 国产手机视频精品| 欧美视频精品在线| 久久一区中文字幕| 亚洲欧美电影院| 亚洲经典在线看| 玖玖玖国产精品| 性感少妇一区| 亚洲精品系列| 久久久免费av| 亚洲自拍高清| 亚洲人成7777| 亚洲黄色av| 欧美成人资源网| 久久综合电影一区| 久久国产一二区| 午夜日韩激情| 亚洲在线观看视频| 日韩视频免费看| 91久久黄色| 亚洲国产婷婷| 亚洲国内自拍| 国产精品区一区二区三区| 午夜亚洲激情| 欧美激情一区二区三区成人| 久久米奇亚洲| 欧美在线免费观看视频| 欧美在线视频免费播放| 欧美专区日韩专区| 欧美在线三区| 欧美淫片网站| 久久亚洲国产精品日日av夜夜| 久久午夜精品一区二区| 久久久免费精品| 久久久久久久尹人综合网亚洲| 久久超碰97中文字幕| 亚洲日本一区二区| 伊人久久亚洲热| 亚洲久久一区二区| 亚洲一区在线播放| 欧美在线观看一区二区| 久久久水蜜桃| 亚洲欧美日本日韩| 久久成人免费日本黄色| 另类成人小视频在线| 欧美高清视频一区| 99精品国产高清一区二区| 在线亚洲免费| 欧美中文字幕久久| 一区二区av在线|