绋嬪簭鐨勬満鍣ㄧ骇琛ㄧず
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绋嬪簭鐨勬満鍣ㄧ骇琛ㄧず相关的知识,希望对你有一定的参考价值。
鏍囩锛?/p>
閫昏緫鍙崇Щ涓庣畻鏈彸绉?
閫昏緫鍙崇Щ锛氶珮浣嶈ˉ0
绠楁湳鍙崇Щ锛氶珮浣嶈ˉ鏈€楂樻湁鏁堜綅鐨勫€?/p>
鍦╦ava涓?x>>k:琛ㄥ仛閫昏緫鍙崇Щ锛寈>>>k锛氳〃鍋氱畻鏈彸绉?/p>
濡傛灉鍦ㄤ竴涓?2锛坵锛変綅鏈哄櫒涓紝绉讳綅鎿嶄綔鐨勪綅鏁?k)>32鏃舵€庝箞鍔烇紵锛屼护k=(k)mod(w)銆?/p>
缁冧範棰?2.11銆€鍦ㄧ粌涔犻 2.10 涓殑inplace_swap鍑芥暟鐨勫熀纭€涓婏紝浣犲喅瀹氬啓涓€娈典唬鐮侊紝瀹炵幇灏嗕竴涓暟 缁勪腑鐨勫厓绱犲ご灏句袱绔緷娆″璋冦€備綘鍐欏嚭涓嬮潰杩欎釜鍑芥暟 锛?/p>
1 void reverse_array(int a[], int cnt) { 2 int first, last; 3 for (first = 0, last = cnt-1; 4 first <= last; 5 first++,last--) 6 inplace_swap(&a[first], &a[last]); 7 }
褰撲綘瀵逛竴涓寘鍚厓绱?1銆?2銆?3 鍜?4 鐨勬暟缁勪娇鐢ㄨ繖涓嚱鏁版椂锛屾濡傞鏈熺殑閭f牱锛岀幇鍦ㄦ暟缁勭殑鍏冪礌鍙樻垚浜?4銆?3銆? 鍜?1銆備笉杩囷紝褰撲綘瀵逛竴涓寘鍚厓绱?1銆?銆?銆? 鍜?5 鐨勬暟缁勪娇鐢ㄨ繖涓嚱鏁版椂锛屼綘浼氬緢鎯婂鍦扮湅鍒板緱 鍒版暟瀛楃殑鍏冪礌涓?5銆?銆?銆? 鍜?1銆傚疄闄呬笂锛屼綘浼氬彂鐜拌繖娈典唬鐮佸鎵€鏈夊伓鏁伴暱搴︾殑鏁扮粍閮借兘姝g‘鍦板伐浣滐紝 浣嗘槸褰撴暟缁勭殑闀垮害涓哄鏁版椂锛屽畠灏变細鎶婁腑闂寸殑鍏冪礌璁剧疆鎴?0銆?/p>
http://c-faq.com/expr/xorswapexpr.html
A: first鍜宭ast鐨勫€肩浉绛変簡锛屼负k锛堝浜庡鏁颁釜鍏冪礌锛?k+1锛?/p>
B:瀵逛簬xor_swap杩欎釜鍑芥暟锛寈鍜寉鏄笉鑳藉鎸囧悜鍚屼竴涓湴鍧€鐨? 棣栧厛灏辨槸涓湭瀹氫箟琛屼负.
鍙互鍙傜湅 http://c-faq.com/expr/xorswapexpr.html
鍏舵灏辩畻涓嶆槸鏈畾涔夎涓猴紝姣斿璇碈璇█涓ユ牸瑙勫畾浜嗘眰鍊煎緱椤哄簭涔熶竴鏍蜂細鍑虹幇闂锛岀涓€姝ュ氨鎶妜鍜寉鍙樻垚0浜?/p>
C:淇敼涓篺or(first = 0, last = cnt; first < last, first++, last--)灏卞彲浠ヤ簡銆?/p>
銆€涔犻2.25鑰冭檻涓嬪垪浠g爜锛岃繖娈典唬鐮佽瘯鍥捐绠楁暟缁刟涓墍鏈夊厓绱犵殑鍜岋紝鍏朵腑鍏冪礌鐨勬暟閲忕敱鍙傛暟length缁欏嚭銆?/p>
1 /* WARNING: This is buggy code */
2 float sum_elements(float a[], unsigned length) {
3 int i;
4 float result = 0;
6 for (i = 0; i <= length-1; i++)
7 result += a[i];
8 return result;
9 } 銆€銆€褰撳弬鏁發ength绛変簬0鏃讹紝杩愯杩欐浠g爜搴旇杩斿洖0.0銆備絾瀹為檯涓婏紝杩愯鏃朵細閬囧埌涓€涓瓨鍌ㄥ櫒閿欒銆?璇疯В閲婁负浠€涔堜細鍙戠敓杩欐牱鐨勬儏鍐碉紝骞朵笖璇存槑濡備綍淇敼浠g爜銆?/p>
answer锛歭ength-1浼氭湁婧㈠嚭锛屾墍浠ユ敼涓?< length
鏈夌鍙锋暟鍜屾棤绗﹀彿鏁版瘮杈冧篃鏈夐棶棰橈紝褰搇ength鐗瑰埆澶х殑鏃跺€欙紝寰椾笉鍒版纭殑缁撴灉銆?br />
鎵€浠ユ敼涓?
unsigned i
for (i = 0; i < length; ++i)
****************************************************************
澹版槑锛氫互涓嬬殑鍚勭瀛楄妭闀垮害琛ㄧず閮芥槸鍩轰簬IA32鎸囦护闆嗕綋绯荤粨鏋勭殑銆?/p>
绋嬪簭鐨勬満鍣ㄧ骇琛ㄧず鏂瑰紡锛?/strong>
涓€涓狪A32涓ぎ澶勭悊鍗曞厓涓惈鏈?涓瓨鍌?strong>32浣?/strong>鍊肩殑瀵勫瓨鍣ㄣ€傜敤鏉ュ瓨鍌?strong>鏁存暟鏁版嵁鍜屾寚閽?/strong>銆?/p>
%eax锛?ecx锛?edx锛?ebx锛?esi锛?edi锛?esp锛堟爤鎸囬拡锛夛紝%ebp锛堝抚鎸囬拡锛?/p>
鍓嶅叚涓负閫氱敤瀵勫瓨鍣ㄣ€傚悓鏃秂ax锛宔cx锛宔dx鐨勪繚瀛樺拰鎭㈠鎯緥涓嶅悓浜巈bx锛宔di锛宔si銆?/p>
鎿嶄綔鏁扮被鍨? 1銆?
绔嬪嵆鏁帮紝涔熷氨鏄父鏁帮紝琛ㄧず鏂规硶锛?鍚庨潰鍔犳爣鍑咰琛ㄧず鐨勬暣鏁?/p>
2銆?
瀵勫瓨鍣紝琛ㄧず鏌愪釜瀵勫瓨鍣ㄧ殑鍐呭锛屽浜庡弻瀛楋紝鍙互鏄叓涓瘎瀛樺櫒鐨勪换鎰忎竴涓紱瀵逛簬瀛楋紝鍙互鏄?ax杩欑锛屽浜庡瓧鑺傦紝鍙互鏄?al杩欑 3銆?
瀛樺偍鍣ㄥ紩鐢紝鏍规嵁璁$畻鍑烘潵鐨勫湴鍧€锛岃闂煇涓瓨鍌ㄥ櫒浣嶇疆銆傚皢瀛樺偍鍣ㄧ湅浣滀竴涓緢澶х殑鏁扮粍锛岀敤Mb[addr]琛ㄧず瀵瑰瓨鍌ㄥ櫒浠庡湴鍧€addr寮€濮嬬殑b涓瓧鑺傚€肩殑寮曠敤銆?/p>
%eax锛?x100 (%eax):0xFF (鍏朵粬鐨勫彉鍧€瀵诲潃绛変笉鍋氳繃澶氳璁? *********************************************************************** 鏁版嵁浼犻€佹寚浠わ細浼犻€佹寚浠ょ殑涓や釜鎿嶄綔鏁颁笉鑳介兘鎸囧悜瀛樺偍鍣ㄤ綅缃?/strong> mov:灏嗘簮鎿嶄綔鏁扮殑鍊煎鍒跺埌鐩殑鎿嶄綔鏁颁腑銆?/p>
婧愭搷浣滄暟鍒跺畾鐨勬槸涓€涓珛鍗虫暟锛屽瓨鍌ㄥ湪瀵勫瓨鍣ㄦ垨鑰呭瓨鍌ㄥ櫒涓€?/p>
鐩殑鎿嶄綔鏁版寚瀹氫竴涓綅缃紝瑕佷箞鏄竴涓瘎瀛樺櫒锛岃涔堟槸涓€涓瓨鍌ㄥ櫒鐨勫湴鍧€銆?/p>
mov绫诲垎涓夌: 1銆乵ovb,movw,movl
鍒嗗埆琛ㄧず锛氫紶閫佸瓧鑺傦紝浼犻€佸瓧锛屼紶閫佸弻瀛?/p>
2銆乵ovsbw,movsbl,movswl锛屽皢鍋氫簡绗﹀彿鎵╁睍鐨勫瓧鑺備紶閫佸埌瀛楋紝灏嗗仛浜嗙鍙锋墿灞曠殑瀛楄妭浼犻€佸埌瀛楋紝灏嗗仛浜嗙鍙锋墿灞曠殑瀛椾紶閫佸埌瀛?/p>
3銆乵ovzbw,movzbl,movzwl,pushl
S,popl D,灏嗗仛浜嗛浂鎵╁睍鐨剘~~~pushl鍜宲opl鎸囦护鍋氬涓嬭В閲? pushl S(灏嗗弻瀛楀帇鏍?/strong>)锛?/p>
R[%esp]<-R[%esp]-4;//鎶婂湴鍧€鍑?锛堟爤鍚戝湴鍧€涓嬮檷澶勫欢浼革級 M[R[%esp]]<-S;//灏嗘暟鎹帇鍏?/p>
鎵€浠?pushl鎸囦护鐩稿綋浜庡仛浜唖ub鍦板潃鍜宮ovl鍊间袱鏉℃寚浠ゃ€傚厛鎶婃爤鎸囬拡鍑?锛?/p>
鐒跺悗灏嗘柊鐨勫€煎啓鍒版柊鐨勬爤椤跺湴鍧€銆?/p>
sub $4,%esp
鍏堟妸%esp鍐呯殑鍊煎噺4锛?/p>
movl %ebp锛?%esp) 鎶?ebp涓殑鏁板€兼斁鍒?esp鎸囧悜鐨勫瓨鍌ㄥ櫒涓殑鏌?/p>
涓綅缃?/p>
popl D(灏嗗弻瀛楀嚭鏍?/strong>)锛?/p>
D<-M[R[%esp]];//灏嗘暟鎹粠鏍堜腑鍙栧嚭 R[%esp]<-R[%esp]+4//鎶婂湴鍧€鍔?锛?/p>
(movs鍜宮ovz閮芥槸鎶婁竴涓緝灏忕殑鏁版嵁婧愬鍒跺埌涓€涓緝澶х殑鏁版嵁浣嶇疆) 鏃犺濡備綍锛?/strong>%esp鎸囧悜鐨勫€兼案杩滄槸鏍堥《銆?/strong> ***************************************************************** 鏍堝湪澶勭悊杩囩▼璋冪敤涓捣鏋佸ぇ鐨勪綔鐢ㄣ€傚湪IA32涓紝绋嬪簭鏍堝瓨鏀惧湪瀛樺偍鍣ㄧ殑鏌愪釜鍖哄煙銆備竴鑸皢鏍堝€掕繃鏉ョ敾锛屾爤鍚戜笅澧為暱锛岃秺寰€涓嬫爤鍦板潃瓒婂皬銆?strong>鏍堟寚閽?/strong>%esp淇濆瓨鐫€鏍堥《鍏冪礌鐨勫湴鍧€銆傦紙鍙傝涓婁釜閮ㄥ垎锛?/p>
鏍堝拰绋嬪簭浠g爜浠ュ強鍏朵粬褰㈠紡鐨勭▼搴忔暟鎹兘鏄瓨鏀惧湪鍚屾牱鐨勫瓨鍌ㄥ櫒涓紝鎵€浠ョ▼搴忕敤鏍囧噯鐨勫瓨鍌ㄥ櫒瀵诲潃鏂瑰紡璁块棶鏍堝唴鐨勪换鎰忎綅缃€備緥濡?/strong>:鍋囪鏍堥《鍏冪礌鏄弻瀛楃殑锛岄偅涔?/strong>movl 4(%esp)锛?/strong>%edx锛屼細灏嗙浜屼釜鍙屽瓧浠庢爤涓鍒跺埌瀵勫瓨鍣?/strong>%edx銆?/p>
************************** c璇█浠g爜锛?/p>
int
change(int *xp,int y){ int x=*xp; *xp=y; return x; } ********************** 姹囩紪浠g爜锛?/p>
xp
at %ebp+8,y at %ebp+12// movl
8(%ebp),%edx//鑾峰彇xp锛岃祴缁?edx movl
(%edx),%eax//鑾峰彇*xp锛岃祴缁?eax movl
12(%ebp),%ecx movl
%ecx,(%edx) *********************** 绠楁湳鎿嶄綔: leal:鍔犺浇鏈夋晥鍦板潃锛?/p>
leal S,D 琛ㄧず:D<-&S; 浣嗘槸寰€寰€琚敤鏉ユ墽琛岀畝鍗曠殑绠楁湳鎿嶄綔锛?strong>杩涜鍦板潃璁$畻銆?/strong> leal (%eax,%ecx,4)绛変环浜庯細x+4y 鍏朵粬鎸囦护:INC D D+1;DEC
D-1; NEG D -D,NOT D ~D; ADD 鍔狅紝sub 鍑忥紝imul
涔橈紝xor 寮傛垨锛宱r
鎴栵紝and 涓庯紝sal
宸︾Щ锛宻hl 宸︾Щ锛?/p>
sar 绠楁湳鍙崇Щ锛宻hr 閫昏緫鍙崇Щ銆?/p>
*********************************************************** ps锛氱▼搴忓瓨鍌ㄥ櫒鍖呭惈锛氱▼搴忕殑鍙墽琛屾満鍣ㄤ唬鐮侊紝鎿嶄綔绯荤粺闇€瑕佺殑涓€浜涗俊鎭紝鐢ㄦ潵绠$悊杩囩▼璋冪敤鍜岃繑鍥炵殑杩愯鏃舵爤锛屼互鍙婄敤鎴峰垎閰嶇殑瀛樺偍鍣ㄥ潡锛堟瘮濡俶alloc搴撳嚱鏁板垎閰嶇殑锛夈€傜▼搴忓瓨鍌ㄥ櫒鐢ㄨ櫄鎷熷湴鍧€鏉ュ鍧€銆傚湪浠绘剰鏃跺埢锛屽彧璁や负鏈夐檺鐨勪竴浠借櫄鎷熷湴鍧€鏄悎娉曠殑銆傝櫧鐒禝A32鐨?2浣嶅湴鍧€鍙互瀵诲潃4gb鐨勫湴鍧€绌洪棿锛屼絾鏄€氬父涓€涓▼搴忓彧浼氳闂嚑鍏嗗瓧鑺傘€傛搷浣滅郴缁熻礋璐g鐞嗚櫄鎷熷湴鍧€绌洪棿锛屽皢铏氭嫙鍦板潃缈昏瘧鎴愬疄闄呭鐞嗗櫒瀛樺偍鍣ㄤ腑鐨勭墿鐞嗗湴鍧€锛屼竴鏉℃満鍣ㄦ寚浠ゅ彧鎵ц涓€涓潪甯稿熀鏈殑鎿嶄綔锛岀畝鍗曠殑绠楁湳杩愮畻銆佸瓨鍌ㄥ櫒涓庡瘎瀛樺櫒闂存暟鎹紶閫侊紝鏉′欢鍒嗘敮杞Щ鍒版柊鐨勬寚浠ゅ湴鍧€绛夛紝缂栬瘧鍣ㄥ繀椤讳骇鐢熻繖浜涙寚浠ょ殑搴忓垪锛屼粠鑰屽疄鐜拌〃杈惧紡姹傚€笺€佸惊鐜垨杩囩▼璋冪敤鍙婅繑鍥炵瓑鐨勭▼搴忕粨鏋勩€?/p>
鎺у埗:鏍规嵁娴嬭瘯缁撴灉鍐冲畾鎿嶄綔鎵ц鐨勯『搴忋€傦紙绋嬪簭瀛樺偍鍣ㄥ瓨鍌ㄦ満鍣ㄤ唬鐮?/strong>锛?/p>
鐢╦ump鍙互鏀瑰彉涓€缁勬満鍣ㄤ唬鐮佹寚浠ょ殑鎵ц椤哄簭銆?/p>
鏉′欢鐮侊細闄や簡鏁存暟瀵勫瓨鍣紝cpu杩樼淮鎶や竴缁勫崟涓綅鐨勬潯浠剁爜瀵勫瓨鍣紝瀹冧滑鎻忚堪鏈€杩戠殑绠楁湳鎴栭€昏緫鎿嶄綔鐨勫睘鎬э紝鍙互妫€娴嬭繖浜涘瘎瀛樺櫒鏉ユ墽琛屾潯浠跺垎鏀寚浠ゃ€?/strong> 闄や簡leal涔嬪鐨勬墍鏈夌殑add锛宻hr绛夋寚浠わ紙涓婁竴閮ㄥ垎鏈夎锛夐兘浼氳缃潯浠剁爜锛岄櫎姝や箣澶栵紝杩樻湁涓ょ被鎸囦护涔熶細璁剧疆鏉′欢鐮侊紝浣嗘槸涓嶆敼鍙樹换浣曞瘎瀛樺櫒鐨勫€硷紙涔嬪墠鐨刟dd绛夋寚浠ゅ線寰€鏀瑰彉鐩爣鎿嶄綔鏁板瘎瀛樺櫒涓殑鍊硷級銆傚垎鍒槸cmp鍜宼est鎸囦护 cmp
S1,S2 : S1-S2(姣旇緝鎿嶄綔)
(涓巗ub琛屼负涓€鏍? test
S1,S2 : S1&S2(娴嬭瘯) (涓巃dd琛屼负涓€鏍? 瀹冧滑鍙敤浜庤缃潯浠剁爜鐨勫€笺€?/p>
鐗规畩鐢ㄦ硶锛歵est %eax,%eax锛氭鏌?eax鏄礋鏁般€侀浂銆佽繕鏄鏁般€?/p>
璁块棶鏉′欢鐮?/strong>:鏉′欢鐮佷笉浼氳鐩存帴璇诲彇锛岀敤set鎸囦护灏嗘潯浠剁爜鐨勫€肩粍鍚堝悗鏀惧埌涓€涓洰鐨勬搷浣滄暟锛?/strong>灏嗚繖涓洰鐨勬搷浣滄暟鏀惧埌涔嬪墠鐨?涓崟瀛楄妭瀵勫瓨鍣ㄥ厓绱狅紙%ah閭d簺锛変腑锛屾垨鑰呭瓨鍌ㄤ竴涓瓧鑺傜殑瀛樺偍鍣ㄤ綅缃?strong>銆?/strong> 姣旇緝a<b鍚庯紝灏嗙粨鏋滄斁鍒?eax涓€?/p>
************************************* 璺宠浆鎸囦护鍙婂叾缂栫爜锛?/p>
movl $0,%eax jmp .L1 movl (%eax),%edx .L1 popl %edx 绗笁琛屾寚浠や細璺宠繃movl鎸囦护銆傚湪浜х敓鐩爣浠g爜鏂囦欢鏃讹紝姹囩紪鍣ㄤ細纭畾鎵€鏈夊甫鏍囧彿鎸囦护鐨勫湴鍧€锛屽苟灏嗚烦杞洰鏍囷紙鐩殑鎸囦护鐨勫湴鍧€锛夌紪鐮佷负璺宠浆鎸囦护鐨勪竴閮ㄥ垎銆?/p>
璺宠浆鎸囦护鐨勭紪鐮佹柟寮? 1銆?
pc鐩稿叧鐨?灏嗙洰鏍囨寚浠ょ殑鍦板潃涓庣揣璺熷湪璺宠浆鎸囦护鍚庨潰鐨勬寚浠や箣闂寸殑鍦板潃鍋氬樊浣滀负缂栫爜銆?/p>
杩欎簺鍋忕Щ閲忓彲浠ユ槸1锛?锛屾垨4涓瓧鑺?/p>
2銆?
缁欏嚭缁濆鍦板潃锛岀敤鍥涗釜瀛楄妭鐩存帴鎸囧畾鐩爣 绋嬪簭璁℃暟鍣ㄧ殑鍊兼槸璺宠浆鎸囦护鍚庨潰閭f潯鎸囦护鐨勫湴鍧€锛?/strong>鑰屼笉鏄烦杞寚浠ゆ湰韬殑鍦板潃銆傚皢绋嬪簭璁℃暟鍣ㄩ噷鐨勫€煎姞涓?strong>鐩爣缂栫爜锛堝簲璇ュ氨鏄箣姘旇鐨勫亸绉婚噺锛夛紝寰楀埌璺宠浆鐩爣鍦板潃銆?/p>
8048757锛?72 e7 je xxxxxxx 8048759锛?c6 05 10 a0 movl $0x1,0x804a010 鐩爣鍦板潃锛?x8048759-25锛?xe7鏄?25鐨勪竴涓瓧鑺傜殑琛ョ爜褰㈠紡锛?/p>
*************************************** 鏉′欢鐮?璺宠浆鎸囦护锛氬绋嬪簭鎵ц杩涜鎺у埗銆傦紙鎺у埗娴侊級 鏍规嵁鏉′欢鐮佷笌璺宠浆鎸囦护鐨勭粨鍚堬紝鎴栬€呰烦杞紝鎴栬€呯户缁墽琛屼唬鐮佸簭鍒椾腑涓嬩竴鏉℃寚浠ゃ€傝繖浜涙寚浠ょ殑鍚嶅瓧涓巗et鎸囦护鏄浉鍖归厤鐨勩€?/p>
瀹炵幇鏉′欢鍒嗘敮锛?/p>
瀹炵幇寰幆锛氬厛鍐欐垚goto浠g爜銆傚啀鍐欐垚姹囩紪銆俤o while锛寃hile锛宖or銆俧or鍙互鐢眞hile杞寲鑰屾潵锛屼絾鏄娉ㄦ剰continue鐨勬儏鍐碉紝鍙兘閫犳垚i鏃犳硶鑷1浠庤€岄櫡鍏ユ寰幆涓€?/p>
鏉′欢浼犻€佹寚浠?/strong>锛?/p>
鏁版嵁鐨勮浆绉绘槸涓€绉嶆浛浠g瓥鐣ャ€傚厛璁$畻涓€涓潯浠舵搷浣滅殑涓ょ缁撴灉锛岀劧鍚庢牴鎹潯浠舵槸鍚︽弧瓒充粠鑰岄€夊彇涓€涓€備娇鐢ㄦ儏鏅彈闄愩€傚尮閰嶇幇浠e鐞嗗櫒銆?/p>
鍘熷鐨刢璇█浠g爜: int absdiff(int x,int y){ if(x<y) return
y-x; else return
x-y; } 浣跨敤鏉′欢璧嬪€硷細 int cmovdiff(int x,int y){ int
tval=y-x; int
rval=x-y; int
test=x<y; if(test)
rval=tval; return
rval; } 鍙戠幇鍦ㄤ笅闈㈢▼搴忕殑姹囩紪浠g爜涓病鏈夎烦杞寚浠ゃ€傝€屽綋鏈哄櫒杩愯鍒版潯浠惰烦杞紙涔熺О鍒嗘敮锛夋椂锛屽畠杩樹笉鑳藉纭畾鏄惁浼氭墽琛岃烦杞紝澶勭悊鍣ㄩ噰鐢ㄥ崄鍒嗙簿瀵嗙殑鍒嗘敮棰勬祴閫昏緫璇曞浘鐚滄祴姣忔潯璺宠浆鎸囦护鏄惁浼氭墽琛屻€備細瀛樺湪鍒嗘敮棰勬祴澶勭綒銆傛墍浠ユ渶濂藉敖閲忓噺灏戣烦杞寚浠ゃ€傛潯浠朵紶閫佹棤闇€棰勬祴娴嬭瘯缁撴灉锛屽彧鏄鍙栨簮鍊硷紝妫€鏌ユ潯浠跺悧锛岀劧鍚庤涔堟洿鏂扮洰鐨勫瘎瀛樺櫒锛岃涔堜繚鎸佷笉鍙樸€?/p>
************************************ 瀵逛簬鏉′欢鍜屽惊鐜殑瀹炵幇涓嶅啀鍋氬璁ㄨ銆備笅闈㈣璁簊witch璇彞: switch璇彞鏍规嵁鏁存暟绱㈠紩鍊艰繘琛屽閲嶅垎鏀€備娇鐢ㄨ烦杞〃銆?/p>
璺宠浆琛?/strong>锛?strong>涓€涓暟缁?/strong>锛岃〃椤筰鏄竴涓唬鐮佹鐨勫湴鍧€锛岃繖涓唬鐮佺殑瀹炵幇褰撳紑鍏崇储寮曞€肩瓑浜巌鏃跺簲璇ラ噰鍙栫殑鍔ㄤ綔銆傜▼搴忎唬鐮佺敤寮€鍏崇储寮曞€兼潵鎵ц涓€涓烦杞〃鍐呯殑鏁扮粍寮曠敤锛岀‘瀹氳烦杞洰鏍囥€?/p>
鍏坖mp *.L7(,%eax,4)锛宑浠g爜灏嗚烦杞〃澹版槑涓轰竴涓湁7涓厓绱犵殑鏁扮粍锛屾瘡涓厓绱犻兘鏄竴涓寚鍚戜唬鐮佷綅缃殑鎸囬拡锛屼粠鑰屽疄鐜伴棿鎺ヨ烦杞紝姣忎釜浠g爜鍧楀疄鐜颁簡switch璇彞鐨勪笉鍚屽垎鏀€?/p>
************************************************ 杩囩▼璋冪敤: 鍖呮嫭灏?strong>鏁版嵁 鏍堝抚缁撴瀯: 鏈哄櫒鐢ㄦ爤鏉ヤ紶閫掕繃绋嬪弬鏁帮紝瀛樺偍杩斿洖淇℃伅锛屼繚瀛樺瘎瀛樺櫒鐢ㄤ簬浠ュ悗鎭㈠銆?/p>
浠€涔堜簨鏍堝抚锛熶负鍗曚釜杩囩▼鍒嗛厤鐨勯偅閮ㄥ垎鏍?/strong>绉颁负鏍堝抚銆?/p>
绋嬪簭鎵ц鏃讹紝鏍堟寚閽堝彲浠ョЩ鍔紝鍥犳澶у鏁颁俊鎭闂兘鏄浉瀵逛簬甯ф寚閽堢殑銆傦紙娉ㄦ剰杩斿洖鍦板潃锛侊紒锛?/p>
鏍堜粎浠呯敤鏉ュ瓨鍌ㄤ竴浜涘湴鍧€鍜屾暟鎹紒锛佷笉瑕佹兂鐫€閭d簺鎸囦护閮藉湪鏍堥噷!!!鎸囦护鏄瓨鍦ㄤ簬涓€涓▼搴忓瓨鍌ㄥ櫒閲岄潰鐨勶紒锛?/strong> 鍋囪p璋冪敤杩囩▼q锛屽垯q鐨勫弬鏁版斁鍦╬鐨勬爤甯т腑銆傚綋p璋冪敤q鏃讹紝p涓殑杩斿洖鍦板潃琚帇鍏ユ爤涓紝褰㈡垚p鐨勬爤甯х殑鏈熬銆傝繑鍥炲湴鍧€灏辨槸褰撶▼搴忎粠q杩斿洖鏃跺簲璇ョ户缁墽琛岀殑鍦版柟銆?/p>
杩囩▼q鐢ㄦ爤鏉ヤ繚瀛樺叾浠栦笉鑳芥斁鍦ㄥ瘎瀛樺櫒涓殑灞€閮ㄥ彉閲忥紝鍘熷洜: 1銆?nbsp; 娌℃湁瓒冲澶氱殑瀵勫瓨鍣ㄥ瓨鏀炬墍鏈夊眬閮ㄥ彉閲?/p>
2銆?nbsp; 鏈変簺灞€閮ㄥ彉閲忔槸鏁扮粍鎴栫粨鏋勶紝蹇呴』閫氳繃鏁扮粍鎴栫粨鏋勫紩鐢ㄦ潵璁块棶 3銆?nbsp; 瑕佸涓€涓眬閮ㄥ彉閲忎娇鐢ㄥ湴鍧€鎿嶄綔绗?amp;锛屽繀椤昏兘澶熶负瀹冪敓鎴愪竴涓湴鍧€銆?/p>
杞Щ鎺у埗 call鎸囦护锛屽悓璺宠浆涓€鏍凤紝鍙互鏄洿鎺ョ殑锛屼篃鍙互鏄棿鎺ョ殑銆?/p>
call鎸囦护鐨勬晥鏋滐細1銆佸皢杩斿洖鍦板潃鍏ユ爤2銆佽烦杞埌琚皟鐢ㄨ繃绋嬬殑璧峰澶勩€?/strong> 褰撹皟鐢ㄨ繃绋嬭繑鍥炴椂锛屾墽琛屼細浠庢澶勭户缁€?strong>ret 绋嬪簭璁℃暟鍣細%eip銆傚叾涓殑鍊艰〃绀哄綋鍓嶆鍦ㄦ墽琛岀殑鎸囦护鐨勫湴鍧€銆?/strong> 瀵勫瓨鍣ㄤ娇鐢ㄦ儻渚嬶細 绋嬪簭瀵勫瓨鍣ㄧ粍鏄敮涓€鑳借鎵€鏈夎繃绋嬪叡浜殑璧勬簮銆傚繀椤讳繚璇佸綋涓€涓繃绋嬶紙璋冪敤鑰咃級璋冪敤鍙︿竴涓繃绋嬶紙琚皟鐢ㄨ€咃級鏃讹紝琚皟鐢ㄨ€呬笉浼氳鐩栨煇涓皟鐢ㄨ€呬箣鍚庤浣跨敤鐨勫瘎瀛樺櫒鐨勫€笺€傦紙鎴戠悊瑙d负铏界劧琚皟鐢ㄨ繃绋嬫湁鑷繁鐨勬爤甯э紝浣嗘槸鏁版嵁鏄鏀惧埌瀵勫瓨鍣ㄩ噷锛屾墠鑳藉仛杩愮畻绛夌瓑鎿嶄綔鐨?/strong>锛夋儻渚嬪皢%eax锛?edx鍜?ecx鍒掑垎涓鸿皟鐢ㄨ€呬繚瀛樺瘎瀛樺櫒銆?/p>
%ebx锛?esi鍜?edi琚垝鍒嗕负璋冪敤鑰呬繚瀛樺瘎瀛樺櫒銆?/p>
褰揚浼犱簡涓€涓弬鏁皔缁橯锛屽鏋滃湪Q鐨勬搷浣滀腑灏唝鍋氫簡鍏朵粬鐨勮繍绠椼€傞偅涔堝湪涔嬪悗P浣跨敤y鐨勬椂鍊欏氨浼氬嚭閿欍€傝繖灏辨剰鍛砆蹇呴』鍦ㄨ鐩栬繖浜涘瘎瀛樺櫒鐨勫€间箣鍓嶏紝鍏堟妸浠栦滑淇濆瓨鍒版爤涓苟鍦ㄨ繑鍥炲墠鎭㈠瀹冧滑銆傜敤涓ょ鏂规硶瀹炵幇锛?/p>
1銆?nbsp; 璋冪敤Q涔嬪墠锛孭灏唝鐨勫€间繚瀛樺湪鑷繁鐨勬爤甯т腑锛屽綋Q杩斿洖鍚庯紝P浠庤嚜宸辩殑鏍堜腑鍙栧嚭y 涔熷氨鏄P淇濆瓨杩欎釜鍊?/p>
2銆?nbsp; 灏唝鐨勫€间繚瀛樺湪琚皟鐢ㄨ€呯殑瀵勫瓨鍣ㄤ腑锛岀劧鍚庡皢杩欎釜瀵勫瓨鍣ㄧ殑鍊间繚瀛樺湪鑷繁鐨勬爤甯т腑锛岃繑鍥炲墠鎭㈠璇ュ€笺€備篃灏辨槸璇碤淇濆瓨杩欎釜鍊笺€?/p>
鍏充簬杩囩▼璋冪敤璇︾粏锛岃娣卞叆鐞嗚В璁$畻鏈虹郴缁?56椤碉紙%ebp涓?esp涓€鐩翠笉鏂湪鍙橈級銆?/p>
鏁扮粍鍒嗛厤鍙婅闂? 1銆?nbsp; 瀵逛簬瀹氫箟 T A[N]锛屾湁涓や釜鏁堟灉锛?/p>
鍦?strong>瀛樺偍鍣?/strong>涓垎閰嶄竴涓?strong>L*N ps锛氬畾涔塩har *B[8],鎸囬拡鏁扮粍涓紝鍏冪礌澶у皬涓?涓瓧鑺傦紙鑰屼笉鏄痗har鐨勪竴涓瓧鑺傦級 鍋囪E鏄竴涓猧nt鍨嬬殑鏁扮粍锛岃绠桬[i]:
(E鐨勫湴鍧€鏀惧湪%edx涓紝i瀛樻斁鍦?ecx涓?锛?/p>
浣跨敤濡備笅鎸囦护锛歮ovl (
%edx,%ecx,4),%eax 浼氭墽琛岃绠楀湴鍧€xE+4i,鐒跺悗璇诲彇杩欎釜瀛樺偍鍣ㄤ綅缃殑鍊兼斁鍒?eax涓€?/p>
ps锛歝璇█鍏佽瀵规寚閽堣繘琛岃繍绠楋紝璁$畻鐨勫€间細鏍规嵁璇ユ寚閽堝紩鐢ㄧ殑鏁版嵁绫诲瀷澶у皬杩涜浼哥缉銆?/p>
渚嬪瓙锛氬鏋淎鏄竴涓暟缁勶紝閭d箞*(A+i)琛ㄧず绗琲涓暟缁勫厓绱狅紙鍥犱负A鍙互琛ㄧず璇ユ暟缁勭殑璧峰鍦板潃锛夈€?/p>
鏁版嵁瀵归綈锛氫负浠€涔堟渶濂藉仛鍒版暟鎹榻愶紵 鍋囪涓€涓鐞嗗櫒鎬绘槸浠庡瓨鍌ㄥ櫒涓彇8涓瓧鑺傦紝鍒欏湴鍧€蹇呴』涓?鐨勫€嶆暟銆傚鏋滄垜浠兘淇濊瘉鎵€鏈夌殑double绫诲瀷鏁版嵁鐨勫湴鍧€瀵归綈鎴?鐨勫€嶆暟锛岄偅涔堝鐞嗗櫒鍙瀛樺偍鍣ㄨ繘琛屼竴娆¤鎿嶄綔灏卞彲浠ヨ幏鍙栬繖涓猟ouble鍊笺€傚惁鍒欏彲鑳借鎵ц瀵逛簬瀛樺偍鍣ㄧ殑涓ゆ璇诲啓銆傝櫧鐒舵棤璁烘槸鍚﹀榻愶紝IA32閮借兘姝e父宸ヤ綔锛屼絾鏄暟鎹榻愬彲浠ユ彁楂樻晥鐜囥€?/p>
***************************** 瀵逛簬鍑芥暟鎸囬拡锛?/p>
鎸囬拡涔熷彲浠ユ寚鍚戝嚱鏁帮紝鎻愪緵涓€涓緢寮哄ぇ鐨勫瓨鍌ㄥ拰鍚戜唬鐮佷紶閫掑紩鐢ㄧ殑鍔熻兘銆?/p>
int fun(int x,int *p);//澹版槑涓€涓嚱鏁?/p>
(int ) (*fp)(int x,int *p);//澹版槑涓€涓嚱鏁版寚閽?/p>
fp=fun;//灏嗗嚱鏁癴un璧嬪€肩粰杩欎釜鎸囬拡锛屾敞鎰忚繖閲屼笉鏄啓鎴?amp;fun();涓庢暟缁勬寚閽堢殑璧嬪€煎師鐞嗙被浼?/p>
//鍑芥暟鎸囬拡鐨勫€兼槸璇ュ嚱鏁版満鍣ㄤ唬鐮佷腑绗竴鏉℃寚浠ょ殑鍦板潃锛?/p>
鐢ㄨ繖涓寚閽堟潵璋冪敤杩欎釜鍑芥暟锛?/p>
int y=1; fp(3,&y); ps:娉ㄦ剰鍐欐硶锛?/p>
int (*fp)(int *x)//琛ㄧずf鏄竴涓寚鍚戝嚱鏁扮殑鎸囬拡銆傚嚱鏁扮殑鍙傛暟涓篿nt*鍨嬬殑锛屽嚱鏁拌繑鍥炵被鍨嬫槸int int *fp(int *x)//杩欏彞浼氳瑙h鎴?:
(int *)fp(int *x)锛岃鐞嗚В涓烘槸涓€涓嚱鏁板師鍨嬶紝杩欎釜鍑芥暟浠nt*x //涓哄弬鏁帮紝骞朵笖杩斿洖绫诲瀷鏄痠nt* 涓汉鎬濊€冿細杩囩▼璋冪敤涓殑灞€閮ㄥ彉閲忕瓑鏄瓨鏀惧湪鏍堥噷鐨勶紝鍦ㄥ杩欑鍙橀噺杩涜鎿嶄綔鏃讹紝鏄鏀惧埌澶勭悊鍣ㄧ殑瀵勫瓨鍣ㄤ腑鏆傚瓨鐒跺悗杩涜鎿嶄綔鐨勩€傚湪鏁版嵁鏇存敼鍚庯紝鍐嶅啓閬撴爤涓紙涔熷氨鏄洿鏂版爤涓殑鏁版嵁锛夛紝褰撹皟鐢ㄧ粨鏉熷悗锛岀姸鎬佷俊鎭紙%epx鍜?ebx锛夊脊鍑烘爤锛屾爤椤舵寚鍚戣繑鍥炲湴鍧€锛屾墽琛岃繑鍥炲湴鍧€瀵瑰簲鐨勬寚浠ゃ€傚鏋滆璋冪敤杩囩▼鐨勫弬鏁版槸涓€涓寚閽堬紝閭d箞鎸囬拡鎸囧悜鐨勫€兼敼鍙樺悗锛屽唴瀹硅嚜鐒跺氨鏀瑰彉浜嗭紝鎸囬拡鎸囧悜鐨勫唴瀹瑰彲浠ヨ璋冪敤鑰呮垨鑰呰璋冪敤鑰呭瓨鍦ㄨ嚜宸辩殑鏍堝抚涓€?/p>
娉ㄦ剰:鐢ㄦ潵淇濆瓨涓存椂鍊肩殑瀵勫瓨鍣ㄨ鎸囧畾涓鸿皟鐢ㄨ€呬繚瀛樻椂锛屽嚱鏁板彲浠ヨ嚜鐢辫鐩栬繖浜涘€硷紙鏄洜涓烘爤涓湁涔?/strong>~~锛夛紱鑰屾湁浜涘瘎瀛樺櫒琚寚瀹氫负琚皟鐢ㄨ€呬繚瀛樺瘎瀛樺櫒锛屼换浣曚慨鏀硅繖浜涘瘎瀛樺櫒鐨勮繃绋嬮兘瑕佷繚瀛樺苟鎭㈠瀹冧滑銆傛槸鎸囧湪淇敼杩欎簺瀵勫瓨鍣ㄧ殑鍊间箣鍓嶏紝瑕佸厛鍦ㄦ爤涓婁繚瀛樺畠浠殑鍊笺€?/p>
************************************************************ 瀛樺偍鍣ㄧ殑瓒婄晫寮曠敤鍜岀紦鍐插尯婧㈠嚭锛侊紒锛堢粓浜庣湅鍒板拰csp鏈夊叧鐨勯儴鍒嗕簡锛?/p>
c瀵逛簬鏁扮粍鐨勫紩鐢ㄤ笉杩涜浠讳綍杈圭晫妫€鏌ワ紝骞朵笖灞€閮ㄥ彉閲忓拰鐘舵€佷俊鎭?/strong>锛堜緥濡備繚瀛樼殑瀵勫瓨鍣ㄥ€煎拰杩斿洖鍦板潃锛夐兘瀛樻斁鍦ㄦ爤涓紙杩欎簺鍙橀噺蹇呴』淇濆瓨鍦ㄦ爤涓紝鍥犱负鎴戜滑蹇呴』涓轰粬浠敓鎴愬湴鍧€锛夈€傚瓒婄晫鐨勬暟缁勫厓绱犵殑鍐欐搷浣滀細鐮村潖瀛樺偍鍦ㄦ爤涓殑鐘舵€佷俊鎭€傚綋绋嬪簭浣跨敤杩欎釜琚牬鍧忕殑鐘舵€侊紝璇曞浘閲嶆柊鍔犺浇瀵勫瓨鍣ㄦ垨鑰呮墽琛宺et鎸囦护锛屽氨浼氬嚭鐜颁弗閲嶉敊璇€?/p>
************************************************ 鍦ㄧ敱32浣嶆墿灞曞埌64浣嶅悗锛屽瘎瀛樺櫒鍙樻垚浜?6涓紝鍙樺寲濡備笅锛?/p>
鍦ㄨ浆涓?4浣嶅悗鍙戠敓浜嗗緢澶х殑鍙樺寲銆?/p>
鍦ㄨ繃绋嬭皟鐢ㄤ腑锛岄€氳繃瀵勫瓨鍣ㄧ炕鍊嶏紝绋嬪簭涓嶅啀闇€瑕佷緷璧栨爤鏉ュ瓨鍌ㄥ拰鑾峰彇杩囩▼淇℃伅銆?/p>
闇€瑕佹爤鐨勫敮涓€鍘熷洜鍙樻垚锛氬瓨鍌ㄨ繑鍥炲湴鍧€銆?/p>
濡傛灉涓€涓嚱鏁伴渶瑕佹爤甯э紝鍙兘鍘熷洜锛? 1銆?nbsp; 灞€閮ㄥ彉閲忓お澶氾紝涓嶈兘閮芥斁鍦ㄥ瘎瀛樺櫒涓?/p>
2銆?nbsp; 鏈変簺灞€閮ㄥ彉閲忔槸鏁扮粍鎴栬€呯粨鏋?/p>
3銆?nbsp; 鍑芥暟鐢ㄥ彇鍦板潃鎿嶄綔绗︽潵璁$畻涓€涓眬閮ㄥ彉閲忕殑鍦板潃锛堥渶瑕佹眰鍦板潃鐨勫彉閲忚淇濆瓨鍦ㄦ爤涓紝鍚﹀垯鏀惧湪瀵勫瓨鍣ㄤ腑锛屾病鏈夊湴鍧€锛?/p>
4銆?nbsp; 鍑芥暟蹇呴』灏嗘爤涓婄殑鏌愪簺鍙傛暟浼犵粰鍙︿竴涓嚱鏁?/p>
5銆?nbsp; 鍦ㄤ慨鏀逛竴涓璋冪敤鑰呯殑淇濆瓨瀵勫瓨鍣ㄥ墠锛屽嚱鏁拌淇濆瓨瀹冪殑鐘舵€併€?/p>
娉ㄦ剰:鍦↖A32涓紝鏍堟寚閽堥殢鐫€鍊肩殑鍘嬪叆涓庡脊鍑轰笉鏂墠鍚庣Щ鍔紝浣嗗湪x86-64杩囩▼鐨勬爤甯ч€氬父鏈夊浐瀹氱殑浣嶇疆锛屽湪杩囩▼寮€濮嬫椂閫氳繃鍑忓皬鏍堟寚閽堬紙瀵勫瓨鍣?rcp锛夋潵璁剧疆锛堟爤鍚戝皬鍦板潃澧為暱锛夛紝浣垮緱鍙互閫氳繃鐩稿浜庢爤鎸囬拡鐨勫亸绉婚噺鏉ヨ闂暟鎹紝鍙锛屼笉闇€瑕両A32涓殑甯ф寚閽堜簡銆傦紙IA32涓殑甯ф寚閽堝師鏉ユ槸鐢ㄦ潵鍥哄畾浣嶇疆鐨勫憖~~锛夊彲瑙侊紝鍦▁86-64涓紝鍚戞爤鍘嬫暟鎹悗涓嶇敤灏嗘爤鎸囬拡-1锛屽洜涓烘爤鎸囬拡鏄浐瀹氱殑銆傚苟涓斿湪璋冪敤缁撴潫鍚庝篃涓嶇敤灏嗘參鎱㈠脊鍑烘爤涓厓绱狅紙璁╁叾鎸囧悜杩斿洖鍦板潃瀵瑰簲鐨勬爤涓綅缃級锛屽彲浠ョ畝鍗曠殑澧炲姞鏍堟寚閽堟潵閲婃斁鏍堢┖闂淬€?/p>
***************************************************** 以上是关于绋嬪簭鐨勬満鍣ㄧ骇琛ㄧず的主要内容,如果未能解决你的问题,请参考以下文章