ࡱ> F*Nт۳ Y*JFIF`WANG2 CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 C    $.' ",#(7),01444'9=82<.342 i }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?Ѷm:LREQEQE܍L-QMM/L3NQLy5=XMqq' X?|%bVX?|# rgK6 ¢G4'  ͷy!HAx"I9ϙ6kR,cT]cnAJ,1Ymi鷾lFƻcTQ = *HVA\RqIQӬY!/PdJA5o:MfӮ+u~$=kwkV/nF )s4ޚcS.* |WB襎Xuu# ԔQEQEQEQEQERQEQKEQEQEQEQEQE! s[څF@3ɯWNjˢ^L|9M$K^ៀk3ϖzk <9SI 9MvQQ5EQ( s2f&K>ҷTr rEr4_^Z fmX6%2J:״+2#"z6ycOh[jtj?k:"ߺox~4Etrkc9unp?*xE2q(@¹:mkrQy"jo⻟@#mOS^V~iVQ@qL4H/`[$6+3Q4Z&K(f ܼu~$*inֳu5!a? H4(r%4xNt5]>34ף2K]6Pۆmkw:FCoT4gr=+pjxU ?*? 6#^%1׬xR.4EB2Mp+*Q GtR1G,O#c ¾CQ>'%7A|XQkpf=6V%*E|.'PӭnapTs򯡭mm*U=MZxA)@-nI#+ſ 5 3M-sj"X S<'K]l 2E} 7ɝb }* -QEQEQEQEQEQEQEQEQEQEQHzkM+̲(rs_9ǚߍ/v4 8?`{}м/xr R%hw2Xڤvq 'sIK5FH6*? h^'RW!~VV+|-]E1&=mR5E(WcIh/޵? $ 6%ٌD}*Oxz/ecm:r1{׿ibL$J +ʾngC^5TWxݲSRJ'K?4b\۵} {-GCӂ fAWVj]/ڍ66~5|;:3I+:Mg3sonMڑ׌pmoZq\\JҊJul&]!qYfXSpѱ#XHG*9,/_In|^ xs_nFJk< 1i }­u-%!J(((((((((()@Ҽ[/;Lr(9 4sZKoF7}31uy2^: ڕWnaZQ^cxZC5 #{y~hq4n٬|\qҾw+M\S ⾗VWPAdyYzݨom2W+/jZ]QX(uiؽ*иL ̺ cg+0$5~{y Oz'58𽿊=qg"5Ah xxKIJxgX-}_5b:aՁR2=k>3,>p%F>Z|%`4 ָd ƼoZ?!62GAaKM m^Sy>w ѥHc]Er3 7w{pCQO^:ϊ5+^M>/0dtm졊_:UP}kGc4; rTaG"y #gdJ<UmY_Mcźglub@~e5QEQEQEQEQEQEQEQEQEQTyG c+築?Z]+CdI0<ҹ_;|ev;0ْgJc|3`}G+TA'.xͯkHۡDoG9h$<+q;(P9$N/\jVf;N/zNWUC۹\U#+7^O|S tqGnk`Mn$#pZOKi V׊m*(/. 0ֹ/2ҼW($^IPbxcږi>%ɶ&|xᯌ5kUKłMqs^yYV5@ 1׼[Y4rVQ7c!ul)?_TcYۅ%\~:QLwTFf` OJoֱI}M{4<9[i n u5cmj6ڎ!Jx|H|\ RyWDktG2^5 j:,k ,с+t_[.2A4M 6(VE"'EQEQEQEQEQEQEQEQETI.%_ďW$M7Nш$dsĒǩjHir_Iime)HEhqA/jmnOGc/Դ<hM ނo豓yBU5ɏ31oՎfV7 4L:ҴW?&owSђ E|cZtMnTNA_FitW$jq*ʹwVA.J:=NgúLq9,qQ?P)䢂IP=jڥ􂩟9n>2<xӓŚ [fufwI?-AZ r#XڃW7xcKuK۸CMlۑȮc-yŏp#9S{xP?ɯl"F5u'/ v Si^ɵCv7G$;hZY3tg'WUËXıj 2y]k"d=W?~!YRi_x-QEQEQEQEQEQEQEQEV+hi$H2OJĩCw.R3`>|/_T)`*>}'imvGP8W;yhPy o#I]G{k%˺9)5ZvSO^ZIc#]W¦r~lk-;6ifx*e7EWv]wJmcJNNVF@kZ,g&YFI5*F bczou(UUk>9Xh]:\o];I"~|G՜5+১Vu1;ո~ig៼9?_?AQyWj{|j|Fmu˸{U)>xMoxWQ;3?5Vm>4jk<@}E?һⷅu;ՂCq]ݽbKyD=5ltV>{e,S"-mo 5"ws)נs66g+cw>0Ք~[ts./ ߵaש5R2[A!yz54k.xMP\%` #_zr=ih((((((()ŘI=oyt-&l@HJ]l?j xE$U\|qikCPbWMq'Éj]#4NUМ0?Jk6:=7w1ƈ3 7ѧvhaֿ|su=^OX8~wpk>LBVJ5k51x퍬.+on<;Isr"f[>2ibŚt|0+i+6yzyjsJѰSWjռ5OFBmZkTExr.b xVγa+ح-" (UQLu m6K(MxcǖX+CYaxn7ۻRpG;źd*#k;Pռ P4St9WEb^6yv^4jvu2W`: Z(#{Zi=C[xDbPng5-B)μTQv j2Ǵ V|;r{[xKKv?ZmB.-fIbq)Yx $QeB"Ny-*[ǜk&Ծ+kei-?t+Yxke孔A#D k7'|}us:Hϧ^t/hOhf");s׵E4w,0daa^Ucz&a]B >7o<-@[d5}gjvƟ C iEQEQEQEQEQEQEQA\|UoMk\y"%'MFR}p3_Wx3С X֝a][NpvƤ?GS-k)m.Y!qiMgƫ.M*M?ƻ߃VΟ& f2r^8mj;\_؆kHzG_ʽӌgj6]^Lă%׊jF7IvKZC_k5?wr8ׅEp~;e2u'A\1)xOvmq^[ë~ex!;H6yG>64=Bb-?,~( QEQEQEQEQEQEQET,$N)UWcelB}kվ t-uP-{;tƋ[]_HLVk,q^OA9mm2yS]+?R-uk)m/"YaU|  5'KM'=Sǚd6̻nf샽z<e8E.fiRkK~(3p>T,k?|]9B7 ? _K͒X@||konfQOݦm97$}szP !x6UK(sYk C\\n>|Q}lBMGQף 59j4 㷒:v ?Wc]FCQ^y^yOxYG\֦Mrpj# BےU-x1oK"_\wqDeQɌ4RZσ|U%,,pƀҼCڼ/Ֆf ~t.g^<ϳ lo/m|95M( | [_ ev/3LܜoKQk]: 6a <]K"RH=kt5K lPZVƛrq a 8+WŚ LRosGu &hyCjMT^/Zkvicf?vOŲxwB֙7ן5 NwjW_;uJ%vEx-rY3<֨'d3EX: }S!8ߎi~EaԠ>~7\S:W|]ާ}&Ny3e#'"+^0l>6X4Y=֡r  ~'x#ðJv^=/ÏKPcS m+~(x:?jcYlr}x)ܲ }}yaAYCwT UҊ((((((+?SMn/ep…M|}}f>-nvM/^3_M;~1;y[kc:s UI=Myx#Ŗ7(;3;RxŖקMfϛIpzޥkdrSE"vq^[=JӮ6ڽ2AJqO3_^:F XWiVgW7ţ߻ ^img[Ek(EV^Mze!#0 s6UI֋ˤOBӚ]kD3ۈ|C:/DRk !7?fn/dDu x'Ě*3(2޽VWW+o>&_~U/.'7:&n?y]~i^{URh>QTGV-nzQ1yfdGkz(u+s~*_vZ1j#[f;vX:Ljt.|< tq3zwzrּMߋ>(}X-V[DqJG&| r+>Q%eP1jk^:&uKhktrp8VW~ݦs&f((((((+ž;;HMLMs̀\? k {O}>v^mmحTVC7e^Mж:vuj.-2F E<|?eˋ-6dl4,zUi_j`;r {W=sV<o4f6M"9x Az$#FrTJox [٣ҭ+oz֑i}{oy6rYi#{ƛnEBKWm_^7G'oagmuM 89>DvO F+f?d/Ү^T]cP_WWk:**yoa^ QM.IB[۞ M{-EtH֬69Q0S}k%BH-,,dAֻxŚ$w! X5*") ⻋%9{ 3';Ew𭷄? 4c'dҞE|;tgz*Vg%Ք4L35DƓ,;Gn=+%_QU4]f8U#=E'҉C&Q^ڕ9o5 Qx87ľ#ƻ0Ѯam)Z7enດw? ~2k,o-ﬡ*R 6->."VI>(oheT$^?,M;I,Y#A]Ox~oQrbg^ooa!Qs1Vy]h@;5zKíLhp3W@(((((;W^~ Tkݧ5 |: "n_[*(*N:dSrsw a|z0kzkP)+wc j/kiu,Mz~>$&pAjτ~Q~Ɉ8=kXeX~j> oI$:5Ǽ^)vi5Myxwz&c]-n[|n6{\/&aBB=Hz$Y۴Hkbz X Yz'~G3$2s[KGtE+s=V#EyKu$W"P$ՏbToTsФ ߻aSGҵQel?rLӴ֯Nb? 鱎_Nv%_4ؚ- t\*1f{!{?LXՏirkǩ&vgZ4>yMr@C]Ay4Z>ﬥVGySW"w0Ĩ6[hk1dV81!QߏtZ_5/j knLH-8"^W%e#K(фF}%Cj񯆡O,Am-w \?Kg4\g"HhڂF"cĖߠndӝ*_ ƕzy|358q8WXZKs1csjfk1Z˾\wſsw4qn<Wďː]4((((((ȯ~<{XV˒]R꒡ܷԵ-A46_ #ֲ-o1@Uw n~{Qǵ~=-<3b |ώ벽7&!Tu5kWpxn.$A+حn`gD6 "J,(WzbG?`Yrl)e2Mx_O{ wO by^XxCL /v5q+[98Y~ /GN q]ei/)*?xu';xl攅 I^T|7 D1f}9 "{q^Vw,-C&@$WTkAhV׿h7Q>S3}\qkKm:[$1.I'mͦY6UP*;Wf&0Vms[Iӄs;Ivt71=OL,ed0 SE⏴[B~A蠚'Stom\4R`G8{z֯cv0tP`ڇ CF9ci յQjr#$g> ^&ݶ*A?<9;SlOWZ:k |'2c`2]<][:"NNϯJF>'jwTbdcJZ }+w^~H"81Iף\4|5{Tm#_UxXMw}X+((((({tvS9ƌğa_2Ɠ6Kg_^xgLO21!u gqt.Akw|7Ϧ]m/<,::g~h4&m%aҺ~(xk"[ubGL}+o̺,&7OjZZ//@=)9תM㒅8Y/qs\<xɺPa$AcO5$o[hsK/$.z2[r|yZ~+x]>)j7ggAx" i+5n$#VW0oåj*lH77/^ Ct9t_|Ga#}?k?ɑ_Z]#DAw+WVZ%׊_ 0zQ⻏j;TcҺxW^*Ok?-Nr[WuԺ圂n<;x#7EƯoho4Oפ͢xFfc$W1O~$6icbGZkZƐuy9*IT o h;+!\>2hZeÍ0q,uO4%hB:W7xO[8O/8HsM?H!FyW>> o>O 9A^Z0Ad\V Iq3Xx^cpV~:f/[rZωP}Α>Y+!c!|Wզ6C=@)8Eb{Ӊ:lrzҮ~am3!Ҋ(((((;W SV]#n_<%=) uvG?6@h~+>WYSOgWxh63i,:\3_AVKaZ"E? ڃ:bKO 2^[gHm`|s^p4_|D?M?MȀFp\d^ii:jZķ ~3\Kf|c]p‰EgP3X$ sN,jpsڼᖉ?YRG]7Voi887z.j=SF"⧃naDwVH|gz~G]qOV.{MgVY Zb8'ں1rV&uuv>bȥȮG)>κ 'A_?WIc\+a׺!k3-.Ogm/ XG,5tWK4p^GTP9,p+>!i_c_<}ki#TϨ!=sR J,>&h h(O#41*i\j|#h|,{)7fH¬CK<w5~2xj-gmoRO_ŤwSr c"/x'9 :g-OW{cvZb%B+_Km+~Cgۏ]d-!a¾9wQ| n5 yzd5}?zYMRg^pȬ"4Ka!w}kh&}-@9eɮុ/eLA?Ȯƚ%V"ϭpƋw:/%-u h֟'R=4j~ĖX[lW :j7V0_3>3Z.~!x Z[wH98ֽ+V#4 s^;*]D,:׹+Fu4\<-xՉ+5!NJJKwbo-4F܋z{ױk"/6R(_j._[C 2Fps\2ַ$<s槬$ 7@.HX5T[լfᢶm Wfuow-lFckc$sϪ1777kM͌m9]L^H@XmUyo|cOMw kgivpo[x\5Xƪ}gO e{-]lF_h}(=+E}i|C! 9gְu?M񞋪rZZkmb:|$~5ƟHGae(J|Cڴq[Of?o/.bU x{u+ ϮYC= ƣ<'}eiMRqXc3V]Fw[|qsZ~jFDxf_ƻQR{ K]o$.]hlC_ײl*0BY:|?VCd2|J%w2 Cl/SPXDW`;א3;/W&;RW.ZҊ(#}3vczWkVڷkvϦ6d3Wg4, }*ޟ=LU[m6qܦMjX]B"AYAk;kUD=@}寏:x*OI$׭|&&*(((((V <&,_s('}[@ +ɭjGNh.%&GpHֶ<j\w:%ܗ+k)sI{Q7Z߇NםKzgXXm1)obkpX ]7Qeq `oEݤcuxiö pť0%#j4 ~`n-bF4 ?SL46GEe#FA?Ox]ktGF03^-'$=X6*Ww4:\N]q?V!Q}*iffvZFWڹ/Bκ (#LAwn"ZRzW|OHH FT)ָ C㟉/1٪[„?G?B@j(]T8;Nq^&7ާ'^0á{X״]?R1 gV gmD\&~aڕp}___񭶏ak s-ܻ0thpZd=xIs^EQEQEQEQEQT'1 6`x|ů_i٨K8#QW|{eMJb@In;] ;/ʚ?UKIMJطt@J#Xy5@kx#1so@!A5'孚H(,~_ c }*x>ɩ]%ˮ'r? ZytZOl[Kp~ +_o)-ZR.bŝٷq9>"i{!i{\cQې> Ȭhb!\v<W"tmƖ'k'V{--Լ~VKn/n)cR:&p-杇ʋް'sɫf6ZW{yLTqNԾ%\i#%u/ @ ^c,Xy91S+]F!Zf Y*-IA|u ݵw pqZGXլ@p=EYv_Gko9!PxSҼKkxLK8dY𷇾xqVC{kup:!'v‚8KdU* q?‘HPژ~*xETy{"֎m+ReKApP9t;1ιoN:4vc&s9+L-gW]B8ܟ¼Tx|%!oN-kʷfb[yzcpuO]Y^Ǧ&-\O+~:Ϣ%4c<r8p5;d {eku^>+)Ͻm?oJCs*ך(}kmѫzkh}Nq9ʻ5H^EQEQEQEQEQYz>5} /t{bYg k=Yi UpdE|}Fhn]O`븏_ᶳ]cJ!km5ŶE9#\U*+ {-4WxOZf]>_¼ ߎ:̬ ~D׼y)kd1z5?4Iav֤Vgw{{Zܐ; ʒjNw-q`p \gl#݆FbA OR?:jI{-A~&k5[y#0u,$cH]mVjpN%aj};z[!x;~ė c03of1+(՗崻no5IE61Ut[MSM2I ]^0*Oxm`uijey4KN:H85ھ}iq{B_'yŚ ]>w_QBkY.KAk<()ҡt,+h-l0e@**c6x:C'4W '>0k}&5KZWg[klcm#ci'EtT(?j|5X|rndB- T]ڶZl"P8~n%wd8x/tM2OJJt#T hœ85l^'>it?Q^X*HG<:'Yg"^]}XGѣm='+OuI5G@9et}+>>6k5Ze,OWxƱ<,pRMq%cSr׾1#1+׮bZmD)ɵWX7𯞙wcZSOM,H0H@NL1JFU8k ҷAں}n1LH5(Q+!Tui8Ȳ?V#vB3A1sJ|9g^^E}]׃|l֯t/iW#>Kḳ~_ t?-pan᫧mATsَ+zZn/|Ă㬨< 9qWoP?#Hʺ#)dW#xC՝/٧<`;Nk ìFվn~چ{6I\#~nT~/q7! _X4)"m$y4mNKh$91 ?/ _}yMwQw[y3tV_P8 :(((((u-ꎦF9nzA}t*U.=B-Ṿ* 7FӴ87}jZa|15xW`sWA=cgDg^iiS-ĐD+~}Y5Mnw8xNs=›:PxWKi=F'`ɭU`2 xg[7 pg_ֽcږ}iQ;W|⼔ F1sk *0ʀ7Z{M99)H KVV+"I\b?X/m[ܸHFf'\?<˫iM=:_.+MzaF1ʳ-nY?UZ MxŶ!Vo%U:4O |,V15C gGT|* 4'V_ \nfZe5dQ:^݁ƹ$w.}JUXC+jvOAζ#TsFK;KƔȏ^޼㴅C7//zސNfq"xHxiT3u=EuY[EooQTp*;Ra}/j?Ez;sVG⟿[?}EQEQEQEQEQU̲OFKׯ4]C +P oFnjkbTMWN5s~5=P,?wy&~'1ku} 5Qx1_v~ ߘlKk wFxsI#dL?y׈>I 跗8W++Y 0A'-vӯ [57@e ?VӴ:5=svv[¹\o7Qz \U?o5EC o8n Hs^\ l69o!-CY./[tyKimMqg>HSMsTPӬDKҘ=ƩikVEp/=i$ Ecs.~&w;ִ5[]^%ôI_硫nZ?!!(;dk#z4Bg=t񖣯_^LdXPFW :oH״?GՃNneHӖ栓UѴ3@l kޡqx#IA<5yiEDY#w~w |c,;NCDV/>u` =㵌 $Oeow@:|?Gf{M+kAE ºG!v6?_^ 1PҼg/|=umS^w70^jQGjܼ8zV=īH2YOvq뫲IfYbnC)ȫhɶåEnZYx((((()2z/d*s -I9y*_jMzFZ(Z¾Ծ$K6^J9#$~ k>H\<%IJ6y?{WvvV:[İkZ9h^g2Ӄ`G^ WosT_/G? u/daH;|Q Ed:ɎGhզGyg(x~^Ƽ㝳K 5^Ch67L"gVC`z8-kz_PH@Mx>9^,?/zy6[ꗑ M&q־q2.;D_ݏmf˦<3[Ն8W'eˢk:4MxҴz](7kh wQgt+m8EvatCJORj|2lpXJ;kᯇZ+#37Ax~NV2uh汴_6m^]K}7):jv7GeҐ ~Oҍ T/9Kg}|/=}b|;ahiS)rƼ~{K2/kVZ|k׭kU!N2Pvc.+OWlb^lVJ#}F[Kּ?OoexgF H$WSZ|SM9eSM3Ym{ J%Mѣ_n?_XLӦ-4}2i H >Cފ~\zF]Z ['^@j&ut# @7t=GX2ʻw?ZuDŽ|{uᕙ?6;C|C^x=Cfa,s^EQEQEQEQEQA_$k6^?|af]5 uOv9tOš 4'5|7f*(&t=r87~,JM.n$epp^k 3oks/2R λ\B[ysA)OQֺ?u1TާXc90=L1Pƣy '̈Bi~ eaxv֬Eq,j)Wx#$;4[͍ # ٹ W9S]7m6fHb^y-Ċ3JkǚΦZ\;|ipG] wjz{Wu)ΈARď]:g@R1q^iJ"1ҩg ;Dd690`z 8|E!Tui8Ȳ KI)qHG/Z~R$HH ǿ5zu4s\"Wz>'i>" mrMFolנRQX^'F.3+>\.+; ⦭seᆲ25S\FSVʹ6$.#DuPda$8"o!xNg}*ki,@Xбx{v~ kE?t=wQoᑴ@mgaOXtI{hMy ] B66d%jNYb2I^W^oWkezq^?|> !9XF07~QEQEQEQEQE|C5]?Pa?t'Չ9xdHbϴ, bsMkUY ႀݓ] 2YCWKa *#nâvOQXZ74;:fomkv,W AٲZ0knb͞ED25ZVw kjЬC]F23Uiz֭}b&kч!y׫>wt,˂پ|_cPl=9fҬ y ~_ʴx8bDOEyUTdڼK?^ yY&^7Ω~\s+)RxkźՍIF,j$;H cAxԧTFy"GR`7/ݶehMK|#7/*kAOӭ#Pz™D;#!5=?tʩ*;tPp7 OPsjKVp+>4jS >mqn7_+oVn(^Upd#ǂ3@yl)"Xھ2麲yEp?Ǻ^$w H-9+$cwجjP Pyeş=Zu#3G_K֗2ZȞa3<I|w=`Fz~yo3i [AݹwwFi5':X6$8FA xMg y⻽7K,$*cc? [?|헐uj&`V<"?|Kruݹ%뭃}}!c> Q٢(((((& kgx^w W[O`ͅN=}9ڠwyQn9l f{maiR4fc+̼CD{{{N~7n:fv'N_N,Y,W{QҼ#4 _zg`bpֽ?k?\2"주̄1^x[(/>d⭷/yږW|NԡlM^:]x.'< c X}narq]G_ IJ7e 2خN{BD$^C]_<A-pw4-֮9*zfVMEE^ (> yV>*#HبX0yeJ~ʠ7-ԛm{Pk-ɾz ԑRIX4ڌo4gL&'*sqo@Mb8k!:/Dnu"H*58K6Lc"X j4K?g~l]bڬM] mHͥۂɽQQaSK/jh-׬FR2j6qrcKg=kƾ^*NE״wO<=+l>i:5yIخ_he bD*/#יW1Ck <70s-oC}HͻnH UMka.+>:xYXihiWEᏎaVD_O4Mn :2g` oAKQ|q J>[Z{;ۦٱ)QEQEQEQEQEL: B/#M͜1\yo?¾͂d9ǥxſZxWG/vɰ< M-b7!MzlVV;x@r)ml>hf`*x}Zm?P'BżsޛOÃDy =qx¿Bok2ko--[<lEmI/EQRM,pHʨ$9&U5YGFk?FQyeq( 86(_0ޕxCZ悗{7SW޼_%-ofK .y5^,A ۆG+dI|RGgI;mLK,jLI +2V༷`J_D-LW(q\y#~dE?5<32ohu^únyj7;Z-[Ð?;6~vjO~1\V}Zus%,sj/+zW]x.ħZOHb ʨo/B Hq^q| 4^Nqʦ fE>"+y+)k>24[cfNޣҽxQ+>cZlm~Gq4qs+I+nZ((((()0kω<*lfewvW$j#qJ xO"=W⎹^|k) qs^E&xL?[xy2L֯g4'GPU(O^6Rnzku^GҸOn,$=^uK{[ 5&?>0Lӭ~+g|QMcp,#cjo> o A^#$WRr+uռcx>^M= { <9]7b pB>f>qcW7Kcה.Tާ'Zo~ E$ ˌhI}8UπlGjٟYw0^/^GA bebF\}?W<\m~>d?6zZxn%Z/:>,C9S\7Q&t9=z W|PvI[~UTh]_;CJ_R٘rSXxvkHn_b;^[u 4,̮ x&f%t.yZVo^[8hPC#Hl:@ׅmmvbWPs]x#RъLJ{h.P$Pk| 㛽n("p? Ofu_Ih]) 'q:m9J((((((xOlӘ3FC>x8+ȴwyM렂Km? hO4粑gk 鷚Ov Xu&cy_ I׸\^Z~6*{O8܊HSGZƩ[=֛pۧN}EUimt<g\|ALjk}>& WA vQT@Ҧ#">kA0s\<{s^ t2|~+L!<2659#it$մ>!x[4m=sGQ;{xG¨y]7v3]H ]<73mb.Ҝu5EiX=uF𽍒.ݑ ܊:~l um9/K"2BTÊP3Qqd5>/c.Tvt5nM[×9Y!rUM{5E}+7k7ˣ˟n碷{Ҳ-*T1\*WW7xZ[ɎF:Wl^)e ,R2@A\ΡGREc+):<+/Bk,7vAJXֶ~7bX$l~WꚔF=˅$,rk<c?}q[&Ȅ7JSW6Ǧ[sll MFfI#;WJk6\ Z6]#}\׊&.y~d+{ uqߌ}GivֈXc VQEQEQEQEQEPzW;5 X:/+WZq1%^m3_cj:|d O|O3f9;z_xJ-o퓄9${> zd>(i$;brGZ>giYıƒIu}mcN;Wsc& ex믇^=VrQd^ݤ֙ UV쌛yc?ʬ)R0x,|ahTCz1̽s^sx\{ 1%;b9}kb״}:Y%LVt2 *-^,{k_#nN:Wzcx5umlʷwUJ=K:8A {XPxFeж\qu{^/6"]?i_z%+mz|:T`b8ѝ?uaV%KC|dpNkH#hC Ic]{ęT~Bׯ* 8S>(^:3\2 x~ |27:hjv]i+G$T8+ςEΖK%?ѼoO5Ő9|muGKm`}IT1NEղ1^kFSaN7_@ O߉ɥCW1k֦BRa2;Ҁ t((((()|Ÿ$т=|W|A<>t{5aXf[;UmooP51\?>!Cn:qs^ox%:05 bx@>t$t> /~x+; 9;(xgM%j"c_=,znrp>xO2ގ$f7zteXȘWSA:|v;cƶ3\?iZ}3^ڼM<7ƕ+;#>v:$܏{V4]HxpE]gtp*0>W=O]͎"CMyƯ/MtptȯG_Í/‘1qxF^w9AKER1WKgMkKWߨ܍"T*M6ٵUwj76[תqҗ`T34r"2+[sCU,YrC'BkuxcO쯶lE {/ 1H?[ԍK1>?qOYZO.!gῇÞ)CqMvQEQEQEQEQEQE|L70$y㜊 ^/g܊ys)}yeyWhP5JdH|[^OS /y\] +Wm<7e>m#K';N3y[v(j+1+.Z'."m9q4.Fes\ÏOouD^ I(p})C( W⟅ݥ}%c$?K}FNN+WK,-IMg( wx:*jz+ⲷhFk G+c^ rCklుa#F pcڗ42`GRxŶ^dUQ5ugU"H GYzvcOq V;KAY?k"l;^-,>)~/Oo+UUT` ?0Ўm 7\6*_|&VI= WJ1ҝEQEQEQEQEQEQE5*As_,dFڅx;FKoq^H*y_>|Ix/?oA'{|9\P𪂀k;N43dص~ϺaCԝ~y'Wꚵf7 H9,kt?C':-ܘ,A*=s^oq)4.7PGz󯈿VYxߊ4?Pq E: 񦕪&y߀v u(Ԁ3ßĒh"_&4R ^W FG=iJ =+U𾏭!}5j7u!զ~Y"m#ēEflLtjTҾ/.j%k&_֝_5/)µ>i*VMJNGuOp^&DB;jiMJLbº;_@~35yn}iͽ1oV6k.x%}k<9ͤhZM3*[ [?z[<.,Ƽz+C2鱶b#Z=œ2 > ~<-O4&y74>`lཷKyVHd25x:w"+veITa]T}4ifKnmީAܾBĚŚό|[$2ģ5Ï -onT y[k(((((((ҹOfxvDaRbltjVPOnh :dfοoM PpC3i۬c ؊ƨ 㟴Ӂ;8R*| r}쩹 ,xt xj^&Kk xKº,)hl>Z:Զ;hQ.^Gj+ 6hڎ>ϪE#/4CpbLf%7WF A=+|y;Bkk YU1mF㻵k4I!u"AxQЭIR2qW>|A SXp4ZF>o<ѵl#nrXhCKMN1FGQ(ڎFOݱYZϋI҈\f<[X Ge$vVcJiu=sƞ#[FK=*7,J~fi=>_د3O׼OizYeaL0{΂PIF\l`mҸoEӼ%fM|G מxkߏu/[=ۢnvXGoo4UQwTFa7{o?yi+ >Ycq |WφӅ?,L3Ǩ⺻OXK [v=&//Gq /[.,)b(,l4Rvڳ/cc5e&Jj^َ/ֺ?4zZvIP?|UYE·G&㪹zJՎ`|)Y;$r=EbxEYk4xj5kbڗb[FŋN+WZNEu4riv8B ziwt]:]Z1Z|-k-E[?xHEq^ݵCCsq -,*F,q?|ZyNX1FB7d_&M&-{qq"U?QH@$l4h IDSn\+\6l* k~,(,"5|צ[gCQWpGA_0}U) }k I>".l/Tc;=+ڻW -,"snJ-QEi6Zū[0Wk _6)+Wß]7Ķct)r0 S!IgXd`j(hʞbTM^n!cf,7dj%\e.Z'`R1>][ԏ6rx5ү7 O<1YOq"+k!w"["(9=Mz_è5I1n7_#FWogkuq|jO NծSCb*_4{cY\|GY|ɷֻmk4N8hZvA%Q2H_|Nм4\]tX993e+&ߌ/|>)ngIuS8v t(K2k^P^y?ɱ-hv\N0+ۆ6Yޱk]ȫ`OZ+>%@]џd1¾W4𾊗WHGz`Җ(((((((J|S_X]v>9S_'ZV?4/nxLq([Y[޽jZ(3Epk/_Dq*5yρ|iu纶>Kp+OGַ|rdہ}'Ś.cR 4[kyABۢcՂWDӓQ{i\a&ܖЬj͸W8v+B3Q-gr[@FXcPԬ#/ws*W`+2hN,zd~> ;X_MӛxcHzB^ 1A*"Q*P-dQEZ$ #V'|1aI G.G$ֹFs1=fNVRl(}k9-uXs~((((((()O-`9W'A๷~Wa_Ox6~2ҖU%%<]#(UZXU@',EC'Y(x[G"x-[pk_Ф~bB fŧo _0F]H>F4RSmֶM>Tw`9}ϊx9o'`lZ|%+`[iֺ**P>(]ZY-۪@-_&x]ֵ }tI_ |DZ¸ˮ{קTnbAh2ǁ_<|Tɣ貕^%O/X x/oQӐ嘏}+ >L!Q@QEQEQEQEQEQEQEQEQE!+;"9}oèF27{[[/-aoa_Exem`TN7}+҇AKHyx3Kִ{á+&>l1߅fGf9o0pGTy /zt[Wyr -<+V,*<I? iX|t(=*դ7qIꧡ+Ŀ5}KKm(g +# H aT 7 A(d;xY̋$%1ι^y;Ld ' ^\B"l2=qEQQIrEǰZ,+x"pP3}+KX@6ƁGSH8ERMxz׶ZeshP:R(x6N@!W|(oNuWrDC{WјA5_W?'gBT̥C޻/|EC4 lTQG5?yncVSE gŽsIlmInWx͗.E_f=5)  `:~5reܟE$t ( TQETM,,qVc+ǼwK2X.n@~Umwq#{?;Y#!+֕* ?QEQEQEQEQEQEQEQEQEQER`TSC4Rtad|Ԍ*nycx#V$'F]gE%i|:ne[W1 [5KEW^ֿ vQ$_/7.$|ڽss^2xk×Z?: 5b牙RcNъQKᆭHZXW׾x7^_fSd_{դ K$mXdi:zp<Ҿvau~9V`ׯ,2A#}XHS&kĶ2Ga]Gmj>(EsdEe w(4 )$+gĽвp3HpFNO֭x/6YR6',9j'Ҽ+nX[(`>iHqREQEQEQEQEQEQEQEQEQEQER0x wW^PI>9x_4z+zG s^6E=ū#s{m)oBc~>_tf%)ʶ◵QY!+) O^νn#/`8'Ʃy:5ɂ|ֽy2}G?fh[yQ}=v[u".2ɞ^{~hGu}J((T Q*J((((((((((((R0kt?}f#0>( {h^CϋzH5'#<[QR^g+м3rme>: \`{S$8q\εh?ڵ8wk̵-ѥzIҼ\oV[U_99Ğ%rڼ1&Y<+KH.5/˅i(5p6,QT`U8((((((((((((1H@KEHW֑N̼כFO%<:f\)}-FqH|57KFQEQEQEQEQEQEQEQEQEQEQEQEQEQE*JZC0?L%|%K9j5?NiD}뗿6Pʽ;uw6_/Ys=up1U-86zgя?Y<5/Ɣh,'gԿ?zz\WK?[6Wr}pKښN0u\N_KHYs]$qh4U_E&((((((((((((((((QE`S4QO"ȣȋy'*LQ(((((((((((((((((((((((((((((kQ( 2/ 0`DArialicawmantt`9 0"DTahomacawmantt`9 0" DTimes New Romantt`9 00DWingdingsRomantt`9 0@DVerdanasRomantt`9 0"PDCourier Newmantt`9 01`DHelveticawmantt`9 0 "pDTimesicawmantt`9 0  C0.  @n?" dd@  @@`` XP mZ   () *  - <  :  Bi   $ 444<9<(   :+'1o!)10> 63;<?DA BCDE.FGHIJKLMNOPQR;STUVWXYZ [\]^%_+`'a#bcdefg+h i6j&k<lmnopqrstuvwxyz{|}~/X$R$Nт۳ Y*2 AA1? 3ff@338; ʚ;J%5ʚ;g4dddd 08vppp@ <4dddd@k 0t<9 <4BdBd@l 0t g4<d<d8 0p p %0___PPT10 ___PPT9nnIt>"ՌPNG  IHDR +tsRGB PLTEfffm cmPPJCmp0712 7tRNS@fIDATWc`  SP1H $XLIENDB`? -O  =,=a*Machine-Level Programming III - Procedures++ {Today IA32 stack discipline Register saving conventions Creating pointers to local variables Next time Structured data PZ Z >b IA32 StackRegion of memory managed with stack discipline Grows toward lower addresses Register %esp indicates lowest stack address address of top element@|V"W9?cIA32 Stack pushingbPushing pushl Src Fetch operand at Src Decrement %esp by 4 Write operand at address given by %esp|[ )b *@dIA32 Stack poppingZPopping popl Dest Read operand at address given by %esp Increment %esp by 4 Write to DestrS# b$ AeStack operation examplesBfProcedure control flowUse stack to support procedure call and return Procedure call call label Push return address on stack; Jump to label Return address value Address of instruction immediately following call Example from disassembly 804854e: e8 3d 06 00 00 call 8048b90
8048553: 50 pushl %eax Return address = 0x8048553 Procedure return ret Pop address from stack; Jump to address (stack should be ready) :>8KVi>&-      V c>2CgProcedure call exampleDhProcedure return exampleEiStack-based languages\Languages that support recursion e.g., C, Pascal, Java Code must be  reentrant Multiple simultaneous instantiations of single procedure Need some place to store state of each instantiation Arguments Local variables Return pointer Stack discipline State for given procedure needed for limited time From when called to when return Callee returns before caller does Stack allocated in frames state for single procedure instantiation!/95)2 ")!$ 95)  2 ")  J_FjCall chain exampleGk Stack framesContents Local variables Return information Temporary space Management Space allocated when enter procedure  Set-up code Deallocated when return  Finish code Pointers Stack pointer %esp indicates stack top Frame pointer %ebp indicates start of current frame 3 % [ 3 %    #">z 3$"HlStack operationImStack operationJnStack operationKoStack operationLpStack operationMqStack operationNrStack operationOsStack operationPtStack operationQuStack operationRvStack operationSwIA32/Linux stack frame Current stack frame ( Top to Bottom) Parameters for function about to call  Argument build Local variables If can t keep in registers Saved register context Old frame pointer Caller stack frame Return address Pushed by call instruction Arguments for this call&&)&&)    TxRevisiting swapUyRevisiting swapVz swap Setup #1W{ swap Setup #2X| swap Setup #3Y}Effect of swap setupZ~swap Finish #1[swap Finish #2\swap Finish #3]swap Finish #4^Register saving conventionsWhen procedure yoo calls who: yoo is the caller, who is the callee Can register be used for temporary storage? Contents of register %edx overwritten by who&1-1       P H_Register saving conventionsWhen procedure yoo calls who: yoo is the caller, who is the callee Can register be used for temporary storage? Conventions  Caller Save Caller saves temporary in its frame before calling  Callee Save Callee saves temporary in its frame before using&8318 3 1b {+`IA32/Linux register usage"Integer registers Two have special uses %ebp, %esp Three managed as callee-save %ebx, %esi, %edi Old values saved on stack prior to using Three managed as caller-save %eax, %edx, %ecx Do what you please, but expect any callee to do so, as well Register %eax also stores returned value *>*            *> )J%aRecursive factorialbRfact stack setup c Rfact bodydRfact recursion e Rfact resultfRfact completion gSummaryThe stack makes recursion work Private storage for each instance of procedure call Instantiations don t clobber each other Addressing of locals + arguments can be relative to stack positions Can be managed by stack discipline Procedures return in inverse order of calls IA32 Procedures combination of instructions + conventions Call / Ret instructions Register usage conventions Caller / Callee save %ebp and %esp Stack frame organization conventions4l#,:3$%4l#,  :3$%>&/hijkl m n o p qrstuvwxyz{|}~ !"#$%&'()*+,-./O   0` .T3f` T3f3f` 999MMM` lff3f3޲` eoHff33Ҷ` ff!` T3f3fffq` T3f3fff[>?" dd@ ?nPd@ d " @ ` n?" dd@   @@``PR   @ ` `$p>>  C; ,(  , , s * "`0  T Click to edit Master title style! ! , c $ "@0  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  , c $Pʼn ":   AEECS 213 Introduction to Computer Systems Northwestern University2B0(2* 3 3 , Nff??"` , Nff??"` F   ," , Nff??" , Nff??"  , Nff??"  , Nff??"`  , c $Ή "ce  L*"0(2Z , B޽h))? ? T3f3fff[ 0___PPT10.Zj&___PPT92p22 1_aqualab01R  0  0@(  0~ 0 Hff??"A 0 0& "    A Click to edit  0 <) "   T Click to edit Master title style! !T   0 "  0 T-ff??"  4 0 0 TT0ff??"  4 0~  0 Hff??"A~  0 Hff??"A  0 RAk B?nwu-seal-gray"@P%  0 c $4 "`0   !Fabin E. Bustamante, Spring 2007H"0(2 3& 3& 3Z 0 B޽h))? ? T3f3fff[80___PPT10.Zj&( 0 d8(  d  d Nzyy .   v* a11aa d N8yy 2 .  x* a11aad d c $ ?  4 d Nyy 9 3  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S d Tyy q   v* a11aa d Tyy q2   x* a11aaH d 0ηo~ ? 3380___PPT10.eۡ ((    NT8yy .    \* a11aa  NL yy 2 .   ^* a11aa  T yy q    \* a11aa  T yy q2    ^* a11aaH  0ηo~ ? 3380___PPT10.dz͓ 0L0   $(   r   S >03  r   S ?0    H  0޽h ? GGG   0 q i   (   ~  s *ʨ,`0   ~  s *˨,@0  L    #  ~ Z fB   68c?    Z%wawa8c?  |Stack Pointer %esp,0   NΨwawa8c?{ [  =  0 ^B  68c?  [    `HѨwawa 8c? 9K  LStack Grows Down 0 L    # <fB  68c?pp    `֨wawa 8c? _ PIncreasing Addresses 0 ^B  68c?[ K   `Tۨwawa 8c?{>` RStack  Top  0  dB  <D8c?     `(ިwawa 8c?0 XStack  Bottom  0 jB  @ BD8c? @{H  0޽h ? GGGB  0   0$  (  $ ~ $ s *,,`0   ~ $ s *,@0  > 8    $   fB $  68c?> ~  $  NLwawa8c? pP  =  0 fB $ B 68c?  P  $   `DKwawa 8c?9 @  LStack Grows Down 0 T   $ # <fB  $ 68c?pp  $   `Kwawa 8c? _ PIncreasing Addresses 0 fB  $ 68c?   $   `Kwawa 8c?>;  RStack  Top  0  lB  $  <D8c?   $   `4 Kwawa 8c?0 XStack  Bottom  0 rB $ B BD8c? @p $  N Kwawa8c? P  =  0 T   $ #  ~ fB $  68c?  $  ZKwawa8c?  |Stack Pointer %esp,0  $  C xxK jJ11? C  B-4$0 ZB $  S ~DjJ11? H $ 0޽h ? GGG   0   @( | (  ( ~ ( s *%K,`0   ~ ( s *X&K,@0 K 8 8   (  T   ( #  ~ fB (  68c?  (  Z*Kwawa8c?  |Stack Pointer %esp,0  (  N+Kwawa8c?   =  0 fB (  68c?     (   `4Kwawa 8c?9 p  LStack Grows Down 0 T    ( # <fB  ( 68c?pp  (   `p5Kwawa 8c? _ PIncreasing Addresses 0   (   `( RStack  Top  0  lB (  <D8c?   (   `@Kwawa 8c?0 XStack  Bottom  0 rB ( B BD8c? @fB (  68c?0 p  (  C xEK jJ11? [ P  B+4$0 ZB ( C xDjJ11? `  (  NCKwawa8c?   =  0 fB ( 68c? pH ( 0޽h ? GGGy___PPT10Y+D=' = @B +6   0 !!P,-, !(  ,  , BXK8c?   b%esp 0  , B]K8c?   b%eax 0  , BTcK8c?   b%edx 0  , BgK8c? pP  b%esp 0  , B@lK8c? pP  b%eax 0  , BpK8c? pP  b%edx 0  , BPuK8c?   b%esp 0   , BhzK8c?   b%eax 0   , B(K8c?   b%edx 0   , BhK8c?@`0  A0x104 0   , BHK8c?   ?555 0   , <(K8c? P  A0x108 0  , BK8c?P@P @ A0x108 0  , BPK8c?`@P P A0x10c 0  , BK8c?p@P ` A0x110 0  , BxK8c?@@P 0  A0x104 0  , B K8c? P  ?555 0  , BK8c? P  ?213 0  , <4K8c?@P 0 ,$D 0 ?213 0  , <K8c?PP @ ?123 0  , <K8c?PP P 4 0 r -, S  K,`0  K  , B`K8c?P@ A0x108 0  , B8K8c?`P A0x10c 0  , BK8c?p` A0x110 0  , BK8c? P  ?555 0  , BK8c? P  ?213 0  , <K8c?PP@ ?123 0  , <K8c?PPP 4 0  , <K8c? P  A0x108 0   , <XKf8c? P ,$D 0 A0x104 0  !, HLK8c? ,$ 0 p pushl %eax 0  $ ", B@K8c?P`@ A0x108 0  #, BK8c?``P A0x10c 0  $, BK8c?p`` A0x110 0  %, BpK8c?   ?213 0  &, <K8c?P@ ?123 0  ', <K8c?PP 4 0  (, <xK8c?   A0x104 0  ), <hK8c?  ,$D 0 ?213 0  *, HK8c?p,$ 0 o popl %edx 0  $ +, <XKf8c?  ,$D 0 A0x108 0  ,, <$8c?@0  ?213 0 H , 0޽h ? GGGF>___PPT10+9FDB' = @B D' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*!, %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* , %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*, %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<**, %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*), %(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*+, %(D~' =%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<* , %(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<*,, %(++0+ , 0 ++0+, 0 ++0+ , 0 ++0+!, 0 ++0+), 0 ++0+*, 0 ++0++, 0 ++0+,, 0 +  0L0 $`0 (  0 r 0 S ,`0    0 S ~wawa1 ?,@0  <(h aYiH 0 0޽h ? GGGy___PPT10Y+D=' = @B +    0 VN8 (  8  8 BL8c? `  b%esp 0  8 B;8c? ` b%eip 0  8 BlA8c?   b%esp 0  8 BxF8c?   b%eip 0  8 <J8c?  E 0x804854e 0   8 <:8c?  A0x108 0  8 BDP8c?   A0x108 0   8 BT8c?   A0x10c 0   8 B`X8c?    A0x110 0   8 B\8c?   A0x104 0   8 <`8c? ` E 0x804854e 0    8 <,c8c? ,$D 0 E 0x8048553 0   8 < h8c?  ?123 0  8 <@m8c?  4 0 r 8 S n,`0    8 Bo8c? `  A0x108 0  8 Bk8c?`  A0x10c 0  8 Bw8c? ` A0x110 0  8 <{8c? `  ?123 0  8 <8c?`  4 0  8 <08c? `  A0x108 0  8 H쁰8c?` ,$ 0 Hcall 8048b900 K 8 H8c?pP S804854e: e8 3d 06 00 00 call 8048b90
8048553: 50 pushl %eaxT0 T>1 8 <8c? ,$D 0 E 0x8048b90 0   8 <f8c? ,$D 0 A0x104 0  8 HH8c?pB W %eip is program counter60 H 8 0޽h ? GGGN F ___PPT10& +hgD* ' = @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*8 %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*8 %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* 8 %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*8 %(++0+ 8 0 ++0+8 0 ++0+8 0 ++0+8 0 +x   0 SK< (  <  < B\8c? @  b%esp 0  < Bh8c? @ b%eip 0  < B8c? @  A0x104 0  < B8c?  b%esp 0  < Bð8c?  b%eip 0  < <8Ȱ8c?  E 0x8048591 0   < <<̰8c?   E 0x8048591 0    < <ʰ8c?   A0x104 0   < <ΰ8c?   A0x104 0   < BҰ8c? @  A0x108 0   < B4۰8c?@  A0x10c 0   < B߰8c? @ A0x110 0  < <8c?   E 0x8048553 0   < <ݰ8c?   ?123 0  < <l8c?  4 0 r < S ,`0    < B8c?  A0x108 0  < Bt8c?  A0x10c 0  < BT8c?   A0x110 0  < <8c?   ?123 0  < <D8c?   4 0  < H88c? V,$ 0 =ret0  < H@ 8c?pPW V8048591: c3 ret0  < < f8c?  ,$D 0 A0x108 0  < H8c?p bW %eip is program counter60  < <8c? ,$D 0 E 0x8048553 0   < <8c?   E 0x8048553 0  H < 0޽h ? GGG___PPT10+|LD' = @B D' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*< %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*< %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*< %(++0+< 0 ++0+< 0 ++0+< 0 +   0L0 @ (  @ r @ S +,`0    @ S ~,wawa1 ?,@0  H @ 0޽h ? GGGy___PPT10Y+D=' = @B +   0L0 D (  D r D S \2,`0    D S ~xCwawa1 ?,@@   >Code structureP D NXEwawa8c? @  2yoo(& ) { " " who(); " " }Z 0 0 0   D NLIwawa8c?  Twho(& ) { " " " amI(); " " " amI(); " " " }Z 0  0 0   ,  R D NXwawa8c? @p 2amI(& ) { " " amI(); " " }Z 0 0 0  $  p D H8c))? @  D Tjwawa8c?E Wyoo0   D TP)wawa8c?`EE =who0   D Tqwawa8c? > WamI0   D Tuwawa8c? E  WamI0   D Tywawa8c? E  WamI0 ^B  D 68c?p^B D 68c? 0^B D 68c? ^B D 68c?   D Z}wawa8c? H Call Chain" 0   D Twawa8c? k WamI0 ^B D 68c? 20 D  fA1?   Procedure amI recursive20 2    H D 0޽h ? GGGy___PPT10Y+D=' = @B +   0L0 ) ! H  (  H L h H #  ;  fB H  68c?(`h` H  ZDwawa8c?< Stack Pointer %esp00  H Nwawa8c?  c yoo  0  H Nwawa8c?@n0 A who  0  H N`wawa8c?   D proc "0 F    H  T wZ fB  H  68c? Q Q    H  Zܧwawa8c?  Frame Pointer %ebp>0 ^B  H 68c? 9   H Zwawa8c? G#p RStack  Top  0  ~  H s *4,`0   ~ H s *ܱ,@    H N`wawa8c?1 c amI  0 H H 0޽h ? GGGy___PPT10Y+D=' = @B +[   0L0 j b L  (  L L  h L #  fB L  68c?(`h` L  Zʴwawa8c? < |Stack Pointer %esp,0  L N̴wawa8c?` c yoo  0  L T|Դwawa8c? o F " " "  0 F    L   zOfB L  68c? Q Q   L  Z<״wawa8c?  Frame Pointer %ebp80 ~  L s *lܴ,`0     L Tlߴwawa8c?@U % Wyoo0   L Zwawa8c?`, ~ H Call Chain" 0  P  L N,wawa8c?   2yoo(& ) { " " who(); " " }Z 0 0 0  B L S ~DfԔ11?`H L 0޽h ? GGGy___PPT10Y+D=' = @B +   0L0   P  (  P L  h P #   fB P  68c?(`h` P  Zwawa8c? < |Stack Pointer %esp,0  P Nwawa8c?` c yoo  0  P Nl wawa8c? A who  0  P T8wawa8c? o F " " "  0 F    P  P zfB  P  68c? Q Q   P  Z<wawa8c?  Frame Pointer %ebp80 r P S ,`0     P Twawa8c?U  Wyoo0   P Twawa8c?`U E  =who0 ^B P 68c?p  P Zwawa8c?,  H Call Chain" 0   P N1wawa8c?`   Twho(& ) { " " " amI(); " " " amI(); " " " }Z 0  0 0   ,  B P S ~DfԔ11?@`@H P 0޽h ? GGGy___PPT10Y+D=' = @B +y  0L0 T (  T L  h T # !  ` fB T  68c?(`h` T  Z=wawa8c? < |Stack Pointer %esp,0  T NCwawa8c?` c yoo  0  T N@Gwawa8c? A who  0  T NJwawa8c?/  c amI  0  T T(Owawa8c? o F " " "  0 F     T   z fB  T  68c? Q Q   T  ZdSwawa8c?  Frame Pointer %ebp80 r T S V,`0     T TZwawa8c?U  Wyoo0  T T0_wawa8c?U e  =who0  T THcwawa8c?) N   WamI0 ^B T 68c? ^B T 68c?@ P  T Zgwawa8c?,  H Call Chain" 0  R T NHlwawa8c? P  2amI(& ) { " " amI(); " " }Z 0 0 0  $  B T S ~DfԔ11?```H T 0޽h ? GGGy___PPT10Y+D=' = @B +  0L0 X V(  X L  h X #   fB X  68c?(`h` X  ZLzwawa8c? < |Stack Pointer %esp,0  X N0wawa8c?n c yoo  0  X Nlwawa8c? A who  0  X Nwawa8c?=  c amI  0  X TTwawa8c?.} F " " "  0 F     X   z- fB  X  68c? Q Q   X  Zwawa8c?  Frame Pointer %ebp80 ~  X s *,`0     X Twawa8c?U  Wyoo0  X T\wawa8c?U u =who0  X Ttwawa8c?9N   WamI0 ^B X 68c? ^B X 68c?P ` X Z@wawa8c?,  H Call Chain" 0  R X Ntwawa8c? `  2amI(& ) { " " amI(); " " }Z 0 0 0  $  B X S ~DfԔ11?p`p X Nwawa8c?. }  c amI  0  X Twawa8c? N  WamI0 ^B X 68c? " H X 0޽h ? GGGy___PPT10Y+D=' = @B +  0L0 \ "(  \ dB \ <8c?@ \ ZƵwawa8c? T |Stack Pointer %esp,0  \ N͵wawa8c?\ c yoo  0  \ Ndѵwawa8c? A who  0  \ N|յwawa8c?+  c amI  0  \ THٵwawa8c?k F " " "  0 F     \   z[fB  \  68c? Q Q   \  Z`ݵwawa8c?  Frame Pointer %ebp80 ~  \ s * ,`0     \ Twawa8c?U  Wyoo0  \ Twawa8c?U u =who0  \ T|wawa8c?9N   WamI0 ^B \ 68c? ^B \ 68c?P ` \ ZPwawa8c?,  H Call Chain" 0  R \ Nxwawa8c? `  2amI(& ) { " " amI(); " " }Z 0 0 0  $  B \ S ~DfԔ11?p`p \ NDwawa8c? k  c amI  0  \ Twawa8c? N  WamI0 ^B \ 68c? "  \ Twawa8c? N  WamI0 ^B \ 68c?  \ Nlwawa8c?\  c amI  0 H \ 0޽h ? GGGy___PPT10Y+D=' = @B +  0L0   :` (  ` L  h ` #   fB `  68c?(`h` `  Zwawa8c? < |Stack Pointer %esp,0  ` N wawa8c? c yoo  0  ` N"wawa8c?  A who  0  ` N%wawa8c? O  c amI  0  ` T4*wawa8c?@ F " " "  0 F     `   z? fB  `  68c? Q Q   `  Z.wawa8c?  Frame Pointer %ebp80 ~  ` s *1,`0     ` T5wawa8c?U  Wyoo0  ` T9wawa8c?U u =who0  ` TD=wawa8c?9N   WamI0 ^B ` 68c? ^B ` 68c?P ` ` ZAwawa8c?,  H Call Chain" 0  R ` NEwawa8c? `  2amI(& ) { " " amI(); " " }Z 0 0 0  $  B ` S ~DfԔ11?` ` NMwawa8c?@   c amI  0  ` TpRwawa8c? N  WamI0 ^B ` 68c? "  ` TVwawa8c? N  [amI"0 ^B ` 68c? H ` 0޽h ? GGGy___PPT10Y+D=' = @B +  0L0 .&0d (  d L  h d # A   fB d  68c?(`h` d  Zbwawa8c? < |Stack Pointer %esp,0  d Niwawa8c? c yoo  0  d N0nwawa8c?  A who  0  d Nqwawa8c? O  c amI  0  d T uwawa8c?@ F " " "  0 F     d   z fB  d  68c? Q Q   d  ZPywawa8c?  Frame Pointer %ebp80 ~  d s *4},`0     d Twawa8c?U  Wyoo0  d Twawa8c?U u =who0  d Twawa8c?9N   WamI0 ^B d 68c? ^B d 68c?P ` d ZԌwawa8c?,  H Call Chain" 0  R d Nwawa8c? `  2amI(& ) { " " amI(); " " }Z 0 0 0  $  B d S ~DfԔ11?@`@ d Twawa8c? N  [amI"0 ^B d 68c? "  d Twawa8c? N  [amI"0 ^B d 68c? H d 0޽h ? GGGy___PPT10Y+D=' = @B +t  0L0 {@h (  h L  h h #  @ fB h  68c?(`h` h  Zwawa8c? < |Stack Pointer %esp,0  h Ndwawa8c? c yoo  0  h Nwawa8c?  A who  0  h TLwawa8c?@ F " " "  0 F    h  p zfB  h  68c? Q Q   h  ZDwawa8c?  Frame Pointer %ebp80 ~  h s *(·,`0     h Tŷwawa8c?U  Wyoo0   h T0ʷwawa8c?U u =who0 ^B h 68c?  h Z$ηwawa8c?,  H Call Chain" 0   h Nѷwawa8c? @  Twho(& ) { " " " amI(); " " " amI(); " " " }Z 0  0 0   ,  B h S ~DfԔ11?` h TTطwawa8c?9N   [amI"0 ^B h 68c?P ` h Twawa8c? N  [amI"0 ^B h 68c? "  h Tlwawa8c? N  [amI"0 ^B h 68c? H h 0޽h ? GGGy___PPT10Y+D=' = @B +L  0L0 [SPl (  l L  h l # !  ` fB l  68c?(`h` l  Zwawa8c? < |Stack Pointer %esp,0  l Nwawa8c?` c yoo  0  l Nwawa8c? A who  0  l Nwawa8c?/  c amI  0  l T, wawa8c? o F " " "  0 F     l   z fB  l  68c? Q Q   l  Zwawa8c?  Frame Pointer %ebp80 ~  l s *0,`0     l Twawa8c?U  Wyoo0  l T wawa8c?U u =who0 ^B l 68c?  l Zwawa8c?,  H Call Chain" 0  2 l N"wawa8c?  $amI(& ) { " " " " }Z 0 0 0  B l S ~DfԔ11?` l TL)wawa8c?9N   [amI"0  l Tpwawa8c? U  [amI"0  l Th0wawa8c? U  [amI"0 ^B l 68c?P `^B l 68c?  ^B l 68c?  l T<5wawa8c?9{   WamI0 ^B l 68c?P B `H l 0޽h ? GGGy___PPT10Y+D=' = @B +  0L0 `p `(  p L  h p #   fB p  68c?(`h` p  ZBwawa8c? < |Stack Pointer %esp,0  p NHwawa8c?` c yoo  0  p NPMwawa8c? A who  0  p TPwawa8c? o F " " "  0 F    p  P zfB  p  68c? Q Q   p  ZTwawa8c?  Frame Pointer %ebp80 ~  p s *0W,`0     p TZwawa8c?U  Wyoo0   p T _wawa8c?U u =who0 ^B p 68c?  p Z<]wawa8c?,  H Call Chain" 0   p Nswawa8c? @  Twho(& ) { " " " amI(); " " " amI(); " " " }Z 0  0 0   ,  B p S ~DfԔ11?` p Tlwawa8c?9N   [amI"0 ^B p 68c?P ` p Tywawa8c? N  [amI"0 ^B p 68c? "  p T~wawa8c? N  [amI"0 ^B p 68c?  p Twawa8c?9{   [amI"0 ^B p 68c?P B `H p 0޽h ? GGGy___PPT10Y+D=' = @B +  0L0 pt a(  t P t Nwawa8c? p  2yoo(& ) { " " who(); " " }Z 0 0 0  L  h t #  fB t  68c?(`h` t  Zhwawa8c? < |Stack Pointer %esp,0  t N`wawa8c? c yoo  0  t Twawa8c?@ F " " "  0 F    t  0 zofB  t  68c? Q Q   t  Zԫwawa8c?  Frame Pointer %ebp80 ~  t s *,`0     t T,wawa8c?U  Wyoo0   t TDwawa8c?U u Awho"0 ^B t 68c?  t Zwawa8c?,  H Call Chain" 0  B t S ~DfԔ11?` t T`wawa8c?9N   [amI"0 ^B t 68c?P ` t Tøwawa8c? N  [amI"0 ^B t 68c? "  t TǸwawa8c? N  [amI"0 ^B t 68c?  t Td̸wawa8c?9{   [amI"0 ^B t 68c?P B `H t 0޽h ? GGGy___PPT10Y+D=' = @B +V   0L0 e ] x  (  x r x S 4ٸ,`0    x S ~ ڸwawa1 ?,@0  ^B x 68c?0 x Z۸wawa8c?  d Stack Pointer (%esp)60 ^B x 68c?lJl x Zwawa8c?>i  Frame Pointer (%ebp)60  x Zwawa8c?HQ i Return Addr 0    x Zָwawa8c?Q@  ]!Saved Registers + Local Variables "0 "  x Zwawa8c?P Q  JArgument Build 0   x <8c?Q 4 0   x Zwawa8c?I fOld %ebp 0    x Zwawa8c?QP E Arguments 0   x H8c?4 H Caller Frame 0  dr x <8c?H x 0޽h ? GGGy___PPT10Y+D=' = @B +   0 4 ,  |  (  | r | S T,`0    | # lwawa? 1?  lXvoid swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; }Y0 Y   y | # l-wawa? 1?` [ Oint zip1 = 15213; int zip2 = 91125; void call_swap() { swap(&zip1, &zip2); }P0 P6   | # l$9wawa? 1?  dcall_swap: " " " pushl $zip2 # Global Var pushl $zip1 # Global Var call swap " " " X0 XZ    | <F8c?p `  A&zip2 0  | < K8c?` P  A&zip1 0  | <O8c?P @ oRtn adr 0 $jB  | @ BD8c?    | H$S8c?P 7 `%esp0   | HW8c?pN  KResulting Stack 0   | <[8c? p  R " " " ,0 I  | 3 r(a jJ11?c J Calling swap from call_swapN0 Z  H | 0޽h ? GGGy___PPT10Y+D=' = @B +   0     (   r  S p,`0     # lrwawa? 1?  lXvoid swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; }Y0 Y   I  # lwawa? 1?   swap: pushl %ebp movl %esp,%ebp pushl %ebx movl 12(%ebp),%ecx movl 8(%ebp),%edx movl (%ecx),%eax movl (%edx),%ebx movl %eax,(%edx) movl %ebx,(%ecx) movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret0      d  <8c?0`   H8c?  >Body0 d  <8c?`@  HX8c? tT @Set Up0 d  <8c? `P   H8c? <  @Finish0 H  0޽h ? GGGy___PPT10Y+D=' = @B +   0 ,$ (   r  S ,`0     # lwawa? 1?0  ? )-swap: pushl %ebp movl %esp,%ebp pushl %ebxJ0 x(0  t   <豹8c? & KResulting Stack 0   <Ź8c?@  A&zip2 0   <ȹ8c? @  A&zip1 0   <̹8c? @  oRtn adr 0 $jB  @ BD8c?\  \   Hxѹ8c? `,  `%esp0   Hչ8c?p.v JEntering Stack 0   <lڹ8c?@ R " " " ,0 jB  @ BD8c?  H߹8c?tV"[ `%ebp0 z |    | ,$D 0   < 8c?p  Xyp 0    <H8c? p  Xxp 0    < 8c? p  oRtn adr 0 $   < 8c? p  ~Old %ebp8 0 rB  B BD8c?h   H8c?|c `%ebp0    <D8c?p R " " " ,0 T    $BxC0DELF$8c?0d00 xHhp`xp0@0P``@       rB  B BD8c?b\ \    H8c?   `%esp0 H  0޽h ? GGG~___PPT10^+,DB' = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+7  0 ^V (   r  S ,`0     # lTwawa? 1?0  ? )-swap: pushl %ebp movl %esp,%ebp pushl %ebxJ0 x(0  t   <8c?p  Xyp 0   <'8c? p  Xxp 0   <d+8c? p  oRtn adr 0 $  <,08c? p  ~Old %ebp8 0 jB  @ BD8c?@ p@   H78c?   `%ebp0   Ht;8c? KResulting Stack 0   <@8c?p R " " " ,0   <D8c?@  A&zip2 0   <H8c? @  A&zip1 0   <K8c? @  oRtn adr 0 $jB  @ BD8c?\  \   HQ8c? `,  `%esp0   HdU8c?p.v JEntering Stack 0   <Y8c?@ R " " " ,0 jB  @ BD8c?  Hl^8c?tV"[ `%ebp0 jB  BD8c? r<   H0 x(0 # t   <t8c?p  Xyp 0   <脻8c? p  Xxp 0   <8c? p  oRtn adr 0 $  <(8c? p  ~Old %ebp8 0 jB  @ BD8c?@ p@   H`8c?   `%ebp0   HP8c?@F KResulting Stack 0   <8c?p R " " " ,0   <8c?@  A&zip2 0   <8c? @  A&zip1 0   <t8c? @  oRtn adr 0 $jB  @ BD8c?\  \   H8c? `,  `%esp0   Hx8c?p.v JEntering Stack 0   <Զ8c?@ R " " " ,0 jB  @ BD8c?  H8c?tV"[ `%ebp0   <8c? p  rOld %ebx, 0 jB  @ BD8c?< z<   Hƻ8c?   `%esp0 L   $BxC0DELF$8c?0d00 xHhp`xp0@0P``@       H  0޽h ? GGGy___PPT10Y+D=' = @B +; ! 0 bZ"$ (   ^  6f8c?  ^  68c?  ^  68c? r $ S 0ֻ,`0     <׻8c?p  Xyp 0   <ܻ8c? p  Xxp 0   <8c? p  oRtn adr 0 $  <8c? p  ~Old %ebp8 0 jB  @ BD8c?@ p@   H$8c?   `%ebp0   H8c?   = 0 0   Ht8c?   = 4 0   HL8c?   = 8 0   H8c?  =12 0   H8c?`  Offset (relative to %ebp)80   HX8c?006 KResulting Stack 0   <һ8c?p R " " " ,0   <h8c?@  A&zip2 0   <8c? @  A&zip1 0   <8c? @  oRtn adr 0 $jB  @ BD8c?\  \   H8c? `,  `%esp0   Hd!8c?p.v JEntering Stack 0   <,8c?@ R " " " ,0 jB  @ BD8c?  Hd*8c?tV"[ `%ebp0   <$/8c? p  rOld %ebx, 0 jB  @ BD8c?< z<   H58c?   `%esp0 L   $BxC0DELF$8c?0d00 xHhp`xp0@0P``@         # l;wawa? 1?!  ` @ movl 12(%ebp),%ecx # get yp movl 8(%ebp),%edx # get xp . . .A0 AP d ! <8c?Q 0 1 " H0F8c?  >Body0 H  0޽h ? GGGy___PPT10Y+D=' = @B +  " 0 '* c(   r * S Q,`0     # l0Swawa? 1?  3 movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret640  b   <c8c?0@  Xyp 0   <0f8c? @ Xxp 0   <k8c?@  oRtn adr 0 $  <o8c? @  ~Old %ebp8 0 jB  @ BD8c?` @` `   Hv8c?  `%ebp0   HX|8c? P  = 0 0   H88c?P = 4 0   H̃8c? P = 8 0   H`8c?0P =12 0   H8c?`t @Offset0   H8c?` bswap s Stack. 0    <@8c?@0 R " " " ,0   <ؗ8c? @  rOld %ebx, 0 jB  @ BD8c?\ Jj \   HН8c?  `%esp0 L   $BxC0DELF$8c?0d00 xHhp`xp0@0P``@      X 0   H䢼8c? P  =-4 0   s *p,    *Observation Saved & restored register %ebxD  '  <8c?Hx8 Xyp 0   <8c?8x( Xxp 0   <P8c?(x  oRtn adr 0 $  <\8c? x  ~Old %ebp8 0 jB  @ BD8c?x 8x   H,8c? Z  `%ebp0   Hż8c? (   = 0 0   H ʼ8c?((   = 4 0   Hͼ8c?8(  = 8 0   HѼ8c?H( / =12 0  ! Hռ8c?(8 L @Offset0  " <pټ8c?xH R " " " ,0  # <`Լ8c? x  rOld %ebx, 0 jB $ @ BD8c?t "Bt  % Ht8c? d  `%esp0 L &  $BxC0DELF$8c?0d00 xHhp`xp0@0P``@      0H  ' HX8c? (   =-4 0 H  0޽h ? GGGy___PPT10Y+D=' = @B + # 0 %& |(   r & S ,`0     # l<wawa? 1?  3 movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret640 b   <8c?0@  Xyp 0   <8c? @ Xxp 0   <<8c?@  oRtn adr 0 $  <8c? @  ~Old %ebp8 0 jB  @ BD8c?` @` `   H!8c?  `%ebp0   HL'8c? P  = 0 0   H,+8c?P = 4 0   H.8c? P = 8 0   H28c?0P =12 0   H58c?`t @Offset0   H98c?` bswap s Stack. 0    <=8c?@0 R " " " ,0   <*8c? @  rOld %ebx, 0 jB  @ BD8c?\ Jj \   H\H8c?  `%esp0 L   $BxC0DELF$8c?0d00 xHhp`xp0@0P``@      X 0   HL8c? P  =-4 0   <P8c?XxH Xyp 0   <U8c?Hx8 Xxp 0   <lY8c?8x(  oRtn adr 0 $  <^8c?( x  ~Old %ebp8 0 jB  @ BD8c? 8   HHe8c? Z  `%ebp0   Hi8c?( (  = 0 0   H4n8c?8(  = 4 0   Hr8c?H(/ = 8 0   Hu8c?X(? =12 0   H+B#style.visibility<*" %(D?' =%(D' =%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<*" %(+p+0+" 0 ++0+" 0 + % 0 <4  (   r  S ,`0     # l wawa? 1?  3 movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret*40 0b   <8c?0m   A&zip2 0   <8c? m  A&zip1 0 jB  @ BD8c? -  H18c? Y `%esp0   H068c?`S I Exiting Stack 0   <:8c?m 0 R " " " ,0 jB  @ BD8c? -  H?8c?O{ `%ebp0   s *C, 0  Observation Saved & restored register %ebx Didn t do so for %eax, %ecx, or %edx D P'  <,P8c?9p) Xyp 0   <8U8c?)p Xxp 0   <S8c?p  oRtn adr 0 $jB  @ BD8c? ^~   H]8c?  `%ebp0   Hb8c?  = 4 0   HTf8c?) = 8 0   Hj8c?9  =12 0   H(h8c? @Offset0   Hq8c? bswap s Stack. 0    <pv8c?p9 R " " " ,0 jB  BD8c? E   H |8c? |  `%esp0 H  0޽h ? GGGy___PPT10Y+D=' = @B + & 0L0 0 (   r  S |,`0     S ~ؕwawa1 ?,@0    Nwawa8c?>  yoo: " " " movl $15213, %edx call who addl %edx, %eax " " " retx 0 +0 0 0  +l        Nwawa8c?@ S  tvwho: " " " movl 8(%ebp), %edx addl $91125, %edx " " " retx 0 %0 0 0  %P      H  0޽h ? GGGy___PPT10Y+D=' = @B + ' 0L0 @ (   r  S ȿ,`0     S ~̿wawa1 ?,@0  H  0޽h ? GGGy___PPT10Y+D=' = @B +  ( 0 ) ! P  (   ~  s *8п,`0   ~  s *ֿ,@0    <(ܿ8c?  b%eax 0   <߿8c?@0 b%edx 0   <8c?`P b%ecx 0   <\8c?p b%ebx 0   <\8c?  b%esi 0   <8c?   b%edi 0   <D8c?   b%esp 0   <8c?   b%ebp 0 dr  <8c? &`Pdr  <8c?&` dr  <8c? &`   H8c? F UCaller-Save Temporaries"0   H`8c?`  oCallee-Save Temporaries"0   H 8c? P  ESpecial"0 H  0޽h ? GGGy___PPT10Y+D=' = @B +/ ) 0   `   (   ll  `@   `@,$D 0   # ljJ11?L``   3 rjJ11? @   3 rjJ11? M  N$wawa1?@n  dint rfact(int x) { int rval; if (x <= 1) return 1; rval = rfact(x-1); return rval * x; }e0 el  r  S t,,`0   |  s *-,9   \Registers %eax used without first saving %ebx used, but save at beginning & restore at end^ S ., .`l     ,$D 0   # ljJ11?p   # ljJ11?`     # ljJ11?p    # lx5wawa? 1? `  S.globl rfact .type rfact,@function rfact: pushl %ebp movl %esp,%ebp pushl %ebx movl 8(%ebp),%ebx cmpl $1,%ebx jle .L78 leal -1(%ebx),%eax pushl %eax call rfact imull %ebx,%eax jmp .L79 .align 4 .L78: movl $1,%eax .L79: movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret 0   HH  0޽h ? GGG___PPT10+y2D~' = @B D9' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+- * 0 b Z p)* (     N8cwawag ?"``   .rfact: pushl %ebp movl %esp,%ebp pushl %ebx6/0  ~    Nvwawag ?"``  ,$D 0 .rfact: pushl %ebp movl %esp,%ebp pushl %ebx6/0  ~  r * S 8w,`0     HPd8c?0 DP NEntering Stack$0   <08c? 0  =x 0   <08c? 0  oRtn adr 0 $  Hؐ8c? @  = 4 0   H8c? @  = 8 0 dB  @ <D8c?  jB  BD8c? `jB  BD8c?0   B8c?   @Caller0 z 0 r     0 r ,$D 0   H`8c? r  `%ebp0 rB  B BD8c?0 P P P   H8c? @  = 0 0 z  |     | ,$D 0   H8c? |  `%esp0    <8c? 0  rOld %ebx, 0 rB  B BD8c?: LZ L  H8c? @ =-4 0   Bx8c?P 7 ZCallee0 F p\    p\    <8c?p  =x 0    <d8c?p oRtn adr 0 $lB  B <D8c?prB   BD8c?   B 8c?pt @Caller0 rB  B BD8c?|: |   Hx8c? \  `%esp0   H\8c?I R 0 `%ebp0  ! <8c?@p0 ~pre %ebp8 0 jB " @ BD8c?0  # <8c?0p  rpre %ebx, 0  $ <8c?0 0  ~pre %ebp8 0  % <\8c? 0   rpre %ebx, 0 z  H  &   H ,$D 0 '  <@8c? 0  ~Old %ebp8 0 T (   $BxC0DELF$8c?0d00 xHhp`xp0@0P``@       H  ) NXwawag ?"``  ,$D 0 .rfact: pushl %ebp movl %esp,%ebp pushl %ebx*/0 $ ~  H  0޽h ? GGG  ___PPT10 +hDL ' = @B D ' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*& %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*) %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+p+0+ 0 ++0+) 0 +  + 0    o (   r  S t,`0     s *T, ` 0  yRegisters %ebx Stored value of x %eax Temporary value of x-1 Returned value from rfact(x-1) Returned value from this call T  , U4aYiH   fhwawa?1?njp  movl 8(%ebp),%ebx # ebx = x cmpl $1,%ebx # Compare x : 1 jle .L78 # If <= goto Term leal -1(%ebx),%eax # eax = x-1 pushl %eax # Push x-1 call rfact # rfact(x-1) imull %ebx,%eax # rval * x jmp .L79 # Goto done .L78: # Term: movl $1,%eax # return val = 1 .L79: # Done: 0 : 0  T 7wawa1?`  Keint rfact(int x) { int rval; if (x <= 1) return 1; rval = rfact(x-1) ; return rval * x; }Vf0 D  l  r  Z+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*/ %(+? - 0 aY$% (     <&8c?p `  B(x-1)! 0 r % S (,`0     <+8c?  =x 0   </8c?  oRtn adr 0 $  <$58c?  ~Old %ebp8 0 jB  @ BD8c?P @P  H ;8c?$ `%ebp0   <?8c?  rOld %ebx, 0 jB  @ BD8c?` @`   HPE8c?$  `%esp0   <I8c?   ?x-1 0 dB  <D8c? wz 0 `    0 ` ,$D 03   # lNwawa? 1?0  imull %ebx,%eax0 $0   <X8c? p `  >x! 0   B\8c?p P `  b%eax 0   <a8c?` P  =x 0   Be8c?` P P  b%ebx 0   <i8c?` =x 0   <n8c?` oRtn adr 0 $  <r8c?` ~Old %ebp8 0 jB  @ BD8c?P P  Hy8c? `%ebp0   <p8c?` rOld %ebx, 0 jB  @ BD8c?`  `   H(8c?  `%esp0   <8c?`  ?x-1 0 dB  <D8c?p`  <8c?p ``  B(x-1)! 0   B8c?p 0`  b%eax 0   <8c?` `P  =x 0  ! B`8c?` 0P  b%ebx 0  " # lwawa? 1?P dReturn from Call0 0 # <8c?p ``  B(x-1)! 0 f $  f jJ11? 0  6Assume that rfact(x-1) returns (x-1)! in register %eax\70 Z    3H  0޽h ? GGG~___PPT10^+,DB' = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(+> . 0 +1#1:; 0(   r ; S d,`0   u  Nwawag ?"``P N /movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret*00 Z    <08c?Pp =x 0   <dh8c?pP` oRtn adr 0 $  <8c?`PP ~Old %ebp8 0 jB  @ BD8c?Pp  HT8c?T@ ; `%ebp0   H8c?``G = 0 0   Ht8c?p`W = 4 0   HL8c?`g = 8 0   <$8c?PP@ rOld %ebx, 0 jB  @ BD8c?Zz  H8c?@J'  `%esp0   H8c?P`7 =-4 0   <8c? P  >x! 0   BH8c?   b%eax 0   <8c? P  =x 0   B8c?   b%ebx 0   < 8c?@P0  ?x-1 0   H8 8c?@`'  =-8 0   <8c?P ~pre %ebp8 0   <8c?P rpre %ebx, 0 R   *BxC0DELF$8c?0d00 xHhp`xp0@0P``@      h  Npwawag ?"``P N,$D 0 /movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret600 Z  z P@fP    @PfP ,$D 0   <*8c?   =x 0    <-8c?   oRtn adr 0 $   <28c?  ~Old %ebp8 0 rB  B BD8c? ` `    H 98c? \  `%ebp0    H|>8c? &  = 0 0  !  HB8c?&  = 4 0  "  HD8c? &  = 8 0 rB # BD8c? 5  $  HH8c? f  `%esp0  %  <0N8c? p `  >x! 0  &  BL8c?Pp `  b%eax 0  '  <pU8c? ` P  rOld %ebx, 0  (  B,Z8c?P` P  b%ebx 0  )  <_8c? @ 0 ~pre %ebp8 0  *  <e8c? 0  rpre %ebx, 0 Z +   *BxC0DELF$8c?0d00 xHhp`xp0@0P``@      @  0  , <Lk8c? P ,$D 0 rOld %ebx, 0  - N0pwawag ?"``P N,$D 0 /movl -4(%ebp),%ebx movl %ebp,%esp popl %ebp ret600 " Z  B z `p .  `p,$D 0 /  <<8c?Z@0  =x 0  0  <x8c?Z0   oRtn adr 0 $rB 1 B BD8c? 2  H 8c?`G `%ebp0  3  HL8c?9   `%esp0  4  <x8c?Z   >x! 0  5  B8c? *  b%eax 0  6  <48c?Z p rOld %ebx, 0  7  B8c? *p b%ebx 0  8  <8c?Z`P ~pre %ebp8 0  9  <8c?ZP@ rpre %ebx, 0 rB : B BD8c?  H  0޽h ? GGGE = ___PPT10 +tDY ' = @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*, %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*- %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*. %(++0+ 0 ++0+, 0 ++0+- 0 +m / 0  $(   r  S з,`0   r  S ,@0  H  0޽h ? GGGy___PPT10Y+D=' = @B +hf 0 ( p4 (  4  4 S ~A"p״"p״1 ?d9 f     4  T1 ?d   H 4 0ηo~ ? a( a 0  (   X  C d     S ذd9 3    H  0ηo~ ? 3380___PPT10.jT b 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.@T c 0  (   X  C d     S P#Kd9 3    H  0ηo~ ? 3380___PPT10.wT d 0  (   X  C d   K  S (SKd9 3  K  H  0ηo~ ? 3380___PPT10.T e 0  (   X  C d     S pd9 3    H  0ηo~ ? 3380___PPT10.T g 0   (   X  C d     S pd9 3    H  0ηo~ ? 3380___PPT10.`T h 0 0 (   X  C d     S (d9 3    H  0ηo~ ? 3380___PPT10.`T i 0 @ (   X  C d     S >d9 3    H  0ηo~ ? 3380___PPT10.T j 0 P (   X  C d     S  d9 3    H  0ηo~ ? 3380___PPT10.T k 0 ` (   X  C d     S ƴd9 3    H  0ηo~ ? 3380___PPT10.T l 0 p (   X  C d     S Dd9 3    H  0ηo~ ? 3380___PPT10.T m 0  (   X  C d     S 9d9 3    H  0ηo~ ? 3380___PPT10.T n 0  (   X  C d     S yd9 3    H  0ηo~ ? 3380___PPT10.T o 0  (   X  C d     S µd9 3    H  0ηo~ ? 3380___PPT10.@&T p 0  (   X  C d     S xd9 3    H  0ηo~ ? 3380___PPT10.@&T q 0  (   X  C d     S  <d9 3    H  0ηo~ ? 3380___PPT10.@&T r 0  (   X  C d     S اd9 3    H  0ηo~ ? 3380___PPT10.T s 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.T t 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.T u 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.T v 0  (   X  C d     S ָd9 3    H  0ηo~ ? 3380___PPT10. T w 0  $ (  $ X $ C d    $ S @d9 3    H $ 0ηo~ ? 3380___PPT10.@T x 0 0( (  ( X ( C d    ( S md9 3    H ( 0ηo~ ? 3380___PPT10.@T y 0 @, (  , X , C d    , S pd9 3    H , 0ηo~ ? 3380___PPT10.@T z 0 P0 (  0 X 0 C d    0 S d9 3    H 0 0ηo~ ? 3380___PPT10.@T { 0 `4 (  4 X 4 C d    4 S |ld9 3    H 4 0ηo~ ? 3380___PPT10.`T | 0 p8 (  8 X 8 C d    8 S ѻd9 3    H 8 0ηo~ ? 3380___PPT10.`T } 0 < (  < X < C d    < S <d9 3    H < 0ηo~ ? 3380___PPT10.NT ~ 0 @ (  @ X @ C d    @ S d9 3    H @ 0ηo~ ? 3380___PPT10.NT  0 D (  D X D C d    D S d9 3    H D 0ηo~ ? 3380___PPT10.T  0 H (  H X H C d    H S d9 3    H H 0ηo~ ? 3380___PPT10.T  0 L (  L X L C d    L S d9 3    H L 0ηo~ ? 3380___PPT10.T  0 P (  P X P C d    P S ſd9 3    H P 0ηo~ ? 3380___PPT10.T  0 T (  T X T C d    T S Կd9 3    H T 0ηo~ ? 3380___PPT10.hT  0 X (  X X X C d    X S d9 3    H X 0ηo~ ? 3380___PPT10.hT  0 \ (  \ X \ C d    \ S _d9 3    H \ 0ηo~ ? 3380___PPT10. T  0 ` (  ` X ` C d    ` S t d9 3    H ` 0ηo~ ? 3380___PPT10. T  0  d (  d X d C d    d S \Od9 3    H d 0ηo~ ? 3380___PPT10.`T  0 0h (  h X h C d    h S 0#d9 3    H h 0ηo~ ? 3380___PPT10.T  0 @l (  l X l C d    l S dd9 3    H l 0ηo~ ? 3380___PPT10. T  0 Pp (  p X p C d    p S лd9 3    H p 0ηo~ ? 3380___PPT10. T  0 `t (  t X t C d    t S hd9 3    H t 0ηo~ ? 3380___PPT10. Tr sQ^$gTn=`dshu1{H {*5AN^or~!u>f{ Yk.AUp.=HxЗ%9Mau)= Q e y -"A$U&i(}*,.0w21Oh+'0T hp    (0 EECS 213Fabian E. Bustamante aqualab01Fabian E. Bustamante100Microsoft PowerPoint@ ɔ @QZ@8kGSg  )'    """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___wwwx4'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮ՜.+,0   $ ,4<D L Lecture notesOn-screen Show$CompSci - Northwestern University++ 4ArialTahomaTimes New Roman WingdingsVerdana Courier New HelveticaTimes 1_aqualab01+Machine-Level Programming III - Procedures IA32 StackIA32 Stack pushingIA32 Stack poppingStack operation examplesProcedure control flowProcedure call exampleProcedure return exampleStack-based languagesCall chain example Stack framesStack operationStack operationStack operationStack operationStack operationStack operationStack operationStack operationStack operationStack operationStack operationIA32/Linux stack frameRevisiting swapRevisiting swapswap Setup #1swap Setup #2swap Setup #3Effect of swap setupswap Finish #1swap Finish #2swap Finish #3swap Finish #4Register saving conventionsRegister saving conventionsIA32/Linux register usageRecursive factorialRfact stack setup Rfact bodyRfact recursion Rfact resultRfact completionSummary  Fonts UsedDesign Template Slide Titles+,_U40Fabian E. BustamanteFabian E. Bustamante  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgijklmnopqrstuvwxyz{|}~Root EntrydO)Pictures2Current UserSummaryInformation(hUPowerPoint Document(My4DocumentSummaryInformation8