ࡱ> ojklmnF*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(((((((((((((((((((((((((((((P\( ~/ 0DArialrawmantt8 0"DTahomaawmantt8 0" DTimes New Romantt8 00DWingdingsRomantt8 0@DVerdanasRomantt8 0"PDCourier Newmantt8 01`DTimesr Newmantt8 0 pDHelveticawmantt8 0 "DCourierawmantt8 0 1 C0.  @n?" dd@  @@`` @ F   () *  - <  :  Bi   $ 444<9<(   :+'1o!)10> 63;<?DBCFGH IJ KLM NDOjPRS9T6U6V6W6X6Y6Z6\#]^ ` acde fgjklmnopqrstvwxyz{|}~4Q/X$R$Nт۳ Y*2 AA1? ff@338B>ʚ;4 8ʚ;g4dddd 0ppp@ <4dddd@k 0t8 <4BdBd@l 0tg4<d<d 0p p %0___PPT10 ___PPT9nnIt>"ՌPNG  IHDR +tsRGB PLTEfffm cmPPJCmp0712 7tRNS@fIDATWc`  SP1H $XLIENDB`? -O  =9]PMachine-Level Programming  Introduction)) Today Assembly programmer s exec model Accessing information Arithmetic operations Next time More of the same nQ P =bIA32 ProcessorsXTotally dominate computer market Evolutionary design Starting in 1978 with 8086 Added more features as time goes on Backward compatibility: able to run code for earlier version Complex Instruction Set Computer (CISC) Many different instructions with many different formats But, only small subset encountered with Linux programs Hard to match performance of Reduced Instruction Set Computers (RISC) But, Intel has done just that! X86 evolution clones: Advanced Micro Devices (AMD) Historically followed just behind Intel  a little bit slower, a lot cheaper5|(87e3M5|(8  7  e3M>cBX86 Evolution: Programmer s view  Af4Assembly programmer s view Programmer-Visible State %eip Program Counter Address of next instruction Register file (8x32bit) Heavily used program data Condition codes Store status information about most recent arithmetic operation Used for conditional branching Floating point register file_  _     hMemory Byte addressable array Code, user data, (some) OS data Includes stack used to support procedures @aaBgTurning C into object codeCode in files p1.c p2.c Compile with command: gcc  O2 p1.c p2.c -o p Use level 2 optimizations (-O2); put resulting binary in file p6E@.@.TChCompiling into assemblyDiAssembly characteristics$gcc default target architecture: I386 (flat addressing) Minimal data types  Integer data of 1, 2, or 4 bytes Data values or addresses Floating point data of 4, 8, or 10 bytes No aggregate types such as arrays or structures Just contiguously allocated bytes in memory Primitive operations Perform arithmetic function on register or memory data Transfer data between memory and register Load data from memory into register Store register data into memory Transfer control Unconditional jumps to/from procedures Conditional branchesKZ#ZZYZ,ZZaZDZZ<ZK#Y,  aD<Ej Object codeAssembler Translates .s into .o Binary encoding of each instruction Nearly-complete image of exec code Missing linkages between code in different files Linker Resolves references between files One of the object codes must contain function main(); Combines with static run-time libraries E.g., code for malloc, printf Some libraries are dynamically linked Linking occurs when program begins execution, "6(&-  x"  6  (-,.TFkMachine instruction example<C Code Add two signed integers Assembly Add 2 4-byte integers  Long words in GCC parlance Same instruction whether signed or unsigned Operands: x: Register %eax y: Memory M[%ebp+8] t: Register %eax Return function value in %eax Object code 3-byte instruction Stored at address 0x401046n I 6 .   I       %    >";GlDisassembling object code Disassembler objdump -d p Useful tool for examining object code Analyzes bit pattern of series of instructions Produces approximate rendition of assembly code Can be run on either a.out (complete executable) or .o file8 > "HmAlternate disassemblyIn Data formatsb word  16b data type due to its origins 32b  double word 64b  quad words The overloading of  l in GAS causes no problems since FP involves different operations & registers J*#e*#dAccessing information8 32bit registers Six of them mostly for general purpose Last two point to key data in a process stack Two low-order bytes of the first 4 can be access directly (low-order 16bit as well)Operand specifiers nMost instructions have 1 or 2 operands Source: constant or read from register or memory Destination: register or memory Types: Immediate  constant, denoted with a  $ in front Register  either 8 or 16 or 32bit registers Memory  location given by an effective address Operand forms  last is the most general s, scale factor, must be 1, 2, 4 or 8 Other memory forms are cases of it Absolute - M[Imm]; Based + displacement: M[Imm + R[Eb]]'X)I8'X)  I4 >Jo Moving dataAmong the most common instructions IA32 restriction  cannot move from one memory location to another with one instruction Note the differences between movb, movsbl and movzbl Last two work with the stack pushl %ebp = subl $4, %esp movl %ebp, (%esp) Since stack is part of program mem, you can really access allf<><>!Kpmovl operand combinations MrUsing simple addressing modesNsUnderstanding swapOtUnderstanding swapPuUnderstanding swapQvUnderstanding swapRwUnderstanding swapSxUnderstanding swapTyUnderstanding swapUzUnderstanding swapW|A second exampleX}Address computation instructionleal S,D D ! &S leal = Load Effective Address S is address mode expression Set D to address denoted by expression Uses Computing address w/o doing memory reference E.g., translation of p = &x[i]; Computing arithmetic expressions of form x + k*y k = 1, 2, 4, or 8. leal 7(%edx,%edx,4), %eax when %edx=x, %eax becomes 5x+7,b- 1- # " - 1~GY~Some arithmetic operations[%Using leal for arithmetic expressions&&\Understanding arith^Another example_CISC Properties 5Instruction can reference different operand types Immediate, register, memory Arithmetic operations can read/write memory Memory reference can involve complex computation Rb + S*Ri + D Useful for arithmetic expressions, too Instructions can have varying lengths IA32 instructions can range from 1 to 15 bytes 2]5&02]5  &0,`Whose assembler?$ Intel/Microsoft Differs from GAS Operands listed in opposite order mov Dest, Src movl Src, Dest Constants not preceded by  $ , Denote hex with  h at end 100h $0x100 Operand size indicated by operands rather than operator suffix sub subl Addressing format shows effective address computation [eax*4+100h] $0x100(,%eax,4)'Z"ZZ:Z Z?Z Z6ZZ'": ?    6I8/abd e f g h ijklmnpqrstuvwxz{ |!~#$&'()*O   0` .T3f` T3f3f` 999MMM` lff3f3޲` eoHff33Ҷ` ff!` T3f3fffq` T3f3fff[>?" dd@ ?nPd@ d " @ ` n?" dd@   @@``PR   @ ` `$p>>  C; ,(  , , s *ʼn "`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 $͉ ":   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 <7 "   T Click to edit Master title style! !T   0 "  0 T¦ff??"  4 0 0 Tff??"  4 0~  0 Hff??"A~  0 Hff??"A  0 RAk B?nwu-seal-gray"@P%  0 c $Ȧ "`0   !Fabin E. Bustamante, Spring 2007H"0(2 3& 3& 3Z 0 B޽h))? ? T3f3fff[80___PPT10.Zj&( 0 d8(  d  d Nyy .   v* a11aa d Nyy 2 .  x* a11aad d c $ ?  4 d N#yy 9 3  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S d T)yy q   v* a11aa d T:yy q2   x* a11aaH d 0ηo~ ? 3380___PPT10.eۡ ((    Nyy .    \* a11aa  NtP yy 2 .   ^* a11aa  T] yy q    \* a11aa  Tf yy q2    ^* a11aaH  0ηo~ ? 3380___PPT10.dz͓$ 0  $(  r  S Ҧ03  r  S $Ԧ0    H  0޽h ? T3f3fff[80___PPT10.p  0L0   $(   r  S @`,`0   r  S a,@0  H  0޽h ? GGG9  0 990@$ =9(  $ r $ S H},`0   8 pO $  #">2 ____G $  # l(1?0 O 98B ints and floating point formats to vector instructions::3 @` $  # l1?0 0 O K42M @` $  # l1?^ 0O L2001 @` $  # lܝ1? ^O Q Pentium 4   @`U $  # l41?0 K   iInstructions for manipulating vectors of integers or floating point; later versions included Level2 cachejj @` $  # l1?0K 0  L8.2M @` $  # lع1?^K 0  L1999 @` $  # l©1?K ^  S Pentium III   @` $  # l̩ 1?"`0  F>6___PPT9 TAdded special set of instructions for 64-bit vectors of 1, 2, or 4 byte integer dataU " U @` $  # l0֩ 1?"`0 0   L6.5M @` $  # lީ 1?"`^ 0  L1997 @` $  # lt 1?"` ^  S Pentium/MMX   @`W $  # l1?0  K  IMerged Pentium/MMZ and PentiumPro implementing MMX instructions within P6JJ ) @` $  # ll1?0 0 K  J7M @` $  # lG1?^ 0K  L1997 @` $  # lG1? ^K  R Pentium II   @`l $  # lG1?0 |  ^Added conditional move instructions; big change in underlying microarch (called P6 internally)__>  @` $  # l<"G1?0|0  L6.5M @` $  # l+G1?^|0  L1995 @` $  # lX5G1?|^  l PentiumPro    @` w$  # l>G1?0 | \Improved performance @` u$  # lGG1?00 | L3.1M @` s$  # l\PG1?^0| L1993 @` q$  # lYG1?^| OPentium @` n$  # l[G1?0  z2Improved performance; integrated FP unit into chip33 @` l$  # l@lG1?00  L1.9M @` j$  # luG1?^0 L1989 @` h$  # l~G1?^ K486 @` O$  # lG1?0  Extended to 32b, added  flat addressing , capable of running Unix, Linux/gcc usesRRI @` M$  # l$  # lG1?0t0  L134K @` <$  # lXG1?^t0 L1982 @` :$  # lG1?t^ M80286 @`2 +$  # lG1?0 /t F16-bit processor, basis for IBM PC & DOS; limited to 1MB address spaceGG @` *$  # lG1?0/0 t K29k @` )$  # lhG1?^/0t L1978 @` ($  # lPG1?/^t L8086 @` '$  # lG1?0 p/ RComments   @` &$  # l1?0p0 / U Transistors   @` %$  # l 1?^p0/ NDate @` $$  # l1?p^/ NName @`B ,$  To ?pp~B -$  N1 ?//B .$  To ?OOB /$  To ?pO~B 0$  N1 ?^p^O~B 1$  N1 ?0p0O~B 2$  N1 ?0 p0 OB 3$  To ?pO~B ;$  N1 ?tt~B J$  N1 ?~B i$  N1 ?~B r$  N1 ?~B {$  N1 ?||~B $  N1 ?  ~B $  N1 ?  ~B $  N1 ?K K ~B $  N1 ?  H $ 0޽h ? GGGo    0   `0  (  0 ~ 0 s *l,yQ{o    0 s *;,   6"4`@ aYi 0 <t58c? @ b%eip 0  0 <p78c?0 G Registers" 0   0 # l?wawa? o?p  ?CPU 0  0 <C8c?"`p   BMemory 0  0 # lhGwawa? 1?  \ Object Code Program Data OS Data !0 !jB  0 BD8c? pB  0 HD8c?P QjB  0 BD8c?   0 # lNwawa? 1?  C Addresses 0    0 # lPwawa? 1?` E >Data0  0 # lSwawa? 1?  F Instructions 0   0 B8R8c?@ AStack 0  0 <\8c?p0 MCondition Codes"0 ~ 0 s *(^, `p  H 0 0޽h ? GGG   0L0 p4 ?(  4  4 # lvwawa? 1?; @text 0  4 # lzwawa? 1? ;  @text 0  4 # lrwawa? 1?   Bbinary 0  4 # l̀wawa? 1?C( Bbinary 0 B 4  `wawa?o?F d! 4 # l脭wawa? 1?qq }V Compiler (gcc -S)60   = 4 # lȊwawa? 1?A g &  Assembler (gcc or as)N0   F  4 # l4wawa? 1? _  Linker (gcc or ld)Z0    4  fxwawa?o?"` iC program (p1.c p2.c)80   )  4  fhwawa?o?"`d  Asm program (p1.s p2.s)80     4  f\wawa?o?"`w n  nObject program (p1.o p2.o)80    4  f`wawa?o?"`G.> jExecutable program (p)80 B 4  `wawa?o? 4 B 4  `wawa?o?   4  fLwawa?o?"` ?0B  iStatic libraries (.a)80 B 4 @  `wawa?o?P 4r 4 S ĵ,`0   r 4 S h,@0  H 4 0޽h ? GGG   0L0  8 w(  8 r  8 S ׭,`0    8  ftحwawa?1?"`  4int sum(int x, int y) { int t = x+y; return t; }50 5Z  8 Twawa1?  vGenerated assembly(00 Z4aYi 8  fwawa?1?"`   {gsum: pushl %ebp movl %esp,%ebp movl 12(%ebp),%eax addl 8(%ebp),%eax movl %ebp,%esp popl %ebp reth0 h  8 Twawa8c?  7 Obtain with command gcc  O2 -S code.c Produces assembly code in GAS (Gnu Assembler) format code.sl0 20 2<0 25>6  8 T\ wawa1?  jC code(00 Z4aYiH 8 0޽h ? GGGqi___PPT10I+D-' = @B D' = @BA?%,( < +O%,( < +D' =%(D' =%(Do' =4@BBBB%(D' =1:Bitalic*3>)B!style.fontStyle= `B<*8 5HD' =1:B bold*3>+B#style.fontWeight= `B<*8 5HD' =1:B false*3>EB=style.textDecorationUnderline= `B<*8 5H+   0 < $(  < r < S ,`0   r < S H,@0  H < 0޽h ? GGG   0L0 {@ (  @ ) @ T1wawa1?@D  Code for sum \ 00 Z0  4aYiH @ # l5wawa? 1?>  \0x401040 : 0x55 0x89 0xe5 0x8b 0x45 0x0c 0x03 0x45 0x08 0x89 0xec 0x5d 0xc3]0 ] ~ @ s *l9,`0   ~ @ s *D,@0  N @  `4Kwawa? 1? P  NTotal of 13 bytes Each instruction 1, 2, or 3 bytes Starts at address 0x4010404O10 ZF 4aYiH @ 0޽h ? GGG  0 D Y(  D ~ D s *[,y:o    D c $,`   6"40aYi D Txwawa1?P r int t = x+y; 0  $ D # lwawa? 1?LP9 {addl 8(%ebp),%eax0   D # lܑwawa? 1? Pp ^0x401046: 03 45 080   D <8c?P@0  fSimilar to C expression x += y,0 2H D 0޽h ? GGG  0L0 H (  H r H S @,@0   H # lxwawa? 1?0P  @D00401040 <_sum>: 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 8b 45 0c mov 0xc(%ebp),%eax 6: 03 45 08 add 0x8(%ebp),%eax 9: 89 ec mov %ebp,%esp b: 5d pop %ebp c: c3 ret d: 8d 76 00 lea 0x0(%esi),%esi*E0 )/H K   H Tïwawa1? @  Disassembled < 00 Z0 4aYir H S ,`0   H H 0޽h ? GGGx   0L0    L  (  L   L Twawa1?@P D  Disassembled < 00 Z0 4aYi L # l@ޯwawa? 1?8  0x401040 : push %ebp 0x401041 : mov %esp,%ebp 0x401043 : mov 0xc(%ebp),%eax 0x401046 : add 0x8(%ebp),%eax 0x401049 : mov %ebp,%esp 0x40104b : pop %ebp 0x40104c : ret 0x40104d : lea 0x0(%esi),%esi*0 )ME ~ L s *ޯ,`0    L s *, 0  Within gdb debugger Once you know the length of sum using the dissambler Examine the 13 bytes starting at sum gdb p.o x/13b sum ZV P4 &  L Twawa1? Object <00 Z0 4aYiD L # l`wawa? 1?@n  X0x401040: 0x55 0x89 0xe5 0x8b 0x45 0x0c 0x03 0x45 0x08 0x89 0xec 0x5d 0xc3Y0 Y jB L BD8c? 0p jB  L BD8c?` @ H L 0޽h ? GGG)%  0 $$-CP i$(  P r P S  ',@0  r P S ',`0   =#| 0y  CP  #"."Q ?P  # l11? y  M10/12 @` =P  # l:1? y  It @` ;P  # lLC1? y  ZExtended precision @` 9P  # lM1? y  S long double   @` 6P  # lT>1?   I8 @` 4P  # l _1?   Il @` 2P  # l(h1?  XDouble precision @` 0P  # l8q1?   Ndouble @` -P  # ly1?   I4 @` +P  # l1?   Is @` )P  # l1?  XSingle precision @` 'P  # lT1?   Mfloat @` P  # l1?  I4 @` P  # lP$1?   Il @` P  # l1?  S Double word   @`F P  # l1?  .int, unsigned, long int, unsigned long, char *//$ @` P  # lIJ1? I2 @` P  # lXͲ1?  Iw @` P  # lֲ1?  LWord @` P  # lDz1? Mshort @` P  # l\1? I1 @` P  # l1?  Ib @`  P  # l1?  LByte @`  P  # l1? Lchar @`  P  # l1?0 V Size (bytes)   @`  P  # l1? 0 T GAS suffix   @`  P  # l 1?0  YIntel data type @` P  # l*1?0 rC decl @`B P  To ?00~B P  N1 ?~B P  N1 ?~B P  N1 ?B P  To ?y y B P  To ?0y ~B P  N1 ?0y ~B P  N1 ? 0 y ~B  P  N1 ?0y B !P  To ?0y ~B (P  N1 ?  ~B 1P  N1 ?  ~B :P  N1 ?  H P 0޽h ? GGG* ) 0 ))23h )(  h r h S x:,`0   r h S P,@0   h H\R8c?M  `%eax0  h HhW8c?M  `%ecx0  h H[8c? M  `%edx0  h H_8c?@M 0  `%ebx0   h Hc8c?` M P  `%esi0   h H8h8c? M p  `%edi0   h B(m8c? M   `%esp0   h Br8c? M   `%ebp0   h B4x8c? 20  h C xz1?= =%ax0 h B8c? 20  h B؂8c? 20  h C x`1? =%ah0 h C x1?] =%al0 h B88c? 20  h C x1?B _%cx0 h BT8c? 20  h B8c? 20  h C x윳1? _%ch0 h C x<1?b _%cl0 h B8c?4 20  h C x<1?$B _%dx0 h B8c?> 20  h B8c?< 20  h C x`1?$ =%dh0 h C x1?$b =%dl0 h B쾳8c?P,  20   h C xx1?@<  _%bx0 !h BƳ8c?Z  20  "h B$ʳ8c?X  20  #h C xͳ1?@  _%bh0 $h C x ӳ1?@\  _%bl0 %h B׳8c?t P  20  &h C x۳1?` m4  _%si0 'h B8c? p  20  (h C x1? mT  _%di0 )h B@8c?   20  *h C x|1? mt  =%sp0 +h B08c?   20  ,h C x1? m  _%bp0 -h C xd1? - <150 .h C x1? o0 ;00 /h C x1? M ;80 0h C x1?   <310 1h C x 1? n ;70 2h C x1?  t  G Stack pointer0 3h C xx1?   G Frame pointer0H h 0޽h ? T3f3fff[80___PPT10.hP8 * 0 Pl 8(  l r l S t+,`0   r l S L,,@0   p p x Pl  #""rrrp x, /l  # l)1? x @Absolute, Indirect, Based + displacement, Indexed, Scale indexedAA @`Z -l  # l71? x M[Imm + R[Eb]+R[Ei]*s]B   $  @`e +l  # lO1?p x Imm (Eb, Ei, s)B  6 @` )l  # lX1? px NMemory @` l  # l<1?   PRegister   @`! l  # lk1?   }R[Ea],  @` l  # lhv1?p   `Ea,  @` l  # ll1? p  PRegister   @`  l  # lp1?/   Q Immediate   @`   l  # lH1?/   eImm @`  l  # l蚵1?p/   n$Imm @`  l  # lУ1?/ p  Q Immediate   @` l  # lଵ1?p /  NName @` l  # lĵ1?p /  W Operand value @` l  # l@1?pp /  NForm @` l  # l(ȵ1?p p/  NType @`B  l  To ?p p ~B l  N1 ?/ / B l  To ?xxB l  To ?p x~B l  N1 ?pp px~B l  N1 ?p x~B l  N1 ?p xB l  To ?p x~B l  N1 ?  ~B !l  N1 ?  H l 0޽h ? T3f3fff[80___PPT10.@E[C  0 \T!iT (  T r  T S ,`0   r T S ,@0  x   iT  #"* 0 bT  # l 1?"` A  \Pop S from the stack @` `T  # l 1?"`A  JD ! M[R[%esp]] R[%esp] ! R[%esp] + 4;L&" "  "> @`& ^T  # l$  1?"`A  tpopl S" @` LT  # l  1?"` A  ]Push S onto the stack @` JT  # l$ 1?"` A  JR[%esp] ! R[%esp]  4; M[R[%esp]] ! S$&"6 @`' HT  # lh, 1?"` A  upushl S" @` ET  # l5 1?"` =   _Move zero-extended byte @`L CT  # l7 1?"`=  "D ! ZeroExtend(S)$"  @`* AT  # lJ 1?"`=   x movzbl S,D"  @` ,T  # lD 1?"` ~ =  _Move sign-extended byte @`L *T  # l^ 1?"`~ =  "D ! SignExtend(S)$"  @`* (T  # l$i 1?"`~ =  x movsbl S,D"  @`  T  # lhr1? ~  fMove double word, word or byte @` T  # lP|1? ~  ` D ! S$" @`  T  # lt1? ~  |Mov{l,w,b} S,D"   @` T  # l1?   S Description   @` T  # l1?  NEffect @` T  # l<1?   S Instruction   @`B T  To ?  ~B T  N1 ?  B T  To ?B T  To ? ~B T  N1 ? ~B T  N1 ? B T  To ? ~B "T  N1 ?~ ~ ~B )T  N1 ?= = ~B BT  N1 ?  ~B IT  N1 ?A A H T 0޽h ? GGG#  0 X c(  X ~ X s *D,y%-o    X H8c?0  Zmovl 0  X Hƶ8c?p YImm 0  X HŶ8c?0  YReg 0  X Hж8c?   YMem 0  X H Զ8c? YReg 0   X Hض8c?  YMem 0   X H8c? YReg 0   X H޶8c?  YMem 0   X HD8c?   YReg 0   X H\8c?/0 @Source0  X H<8c?/0  E Destination 0   X H8c?H p bmovl $0x4,%eax0   X H8c?`  emovl $-147,(%eax)0  X H8c?`  tmovl %eax,%edx0 $ X H8c?` 4  vmovl %eax,(%edx)0 $  X H 8c? ` 4  vmovl (%eax),%edx0 $ dr X <8c?@0 dr X <8c?0dr X <8c?0  X H, 8c?/ BC Analog 0   X H48c? E temp = 0x4; 0   X H$8c? D *p = -147; 0   X H8c? Htemp2 = temp1;0  X H88c?  D *p = temp; 0   X Hh8c?   D temp = *p; 0  H X 0޽h ? GGG&  0 4 ,  `  (  ` r  ` S p*,`0    `  f+wawa?1?"`  lXvoid swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; }Y0 Y   K ` # l6wawa? 1?p   swap: pushl %ebp movl %esp,%ebp pushl %ebx movl 8(%ebp),%edx movl 12(%ebp),%ecx 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  ` H0O8c? >Body0 d ` <8c?@ ` H|<8c?T @Set Up0 d  ` <8c? P   ` HX8c?   @Finish0 w  ` C x[G" H1? "` ` ,$D 0 3Read value stored in location xp and store it in t0404~  ` C x`G Hm1? "`0 ,$D 0 (Declares xp as being a pointer to an int)0), H ` 0޽h ?/  `  `  GGG  ___PPT10r +Dv ' = @B D1 ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* ` %(D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<* ` %(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* ` %(D?' =%(D' =%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<* ` %(++0+ ` 0 ++0+ ` 0 ++0+ ` 0 ++0+ ` 0 +-   0 TL0$8d (  d r d S n,`0    d  f`wwawa?1?"`0 + lXvoid swap(int *xp, int *yp) { int t0 = *xp; int t1 = *yp; *xp = t1; *yp = t0; }Y0 Y   u d <P8c?0 P  1Register Variable %ecx yp %edx xp %eax t1 %ebx t0.200 F2 t ? d # l|wawa? 1?   movl 12(%ebp),%ecx # ecx = yp movl 8(%ebp),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx  0 x      d Bp8c?  A0x120 0  d B 8c?  A0x124 0  d BL8c?  oRtn adr 0 $jB d BD8c? 0  d H8c?0  `%ebp0  d HtC8c?Fo  = 0 0  d Hт8c?F = 4 0   d Hۂ8c?F = 8 0  !d H8c?F =12 0  "d H 8c?  @Offset0  $d H 8c?x F_  =-4 0  %d B 8c?  ?123 0  &d BT 8c?  ?456 0  'd B$ 8c?  4 0  (d B\ 8c?  4 0  )d B 8c?  4 0  *d H G8c?p AAddress0  +d <x\G8c? @0x124 0  ,d <fG8c? @0x120 0  -d <G8c? @0x11c 0  .d <G8c? @0x118 0  /d <CG8c? @0x114 0  0d <pG8c? @0x110 0  1d <Q8c? ?0x10c0  2d <Q8c? @0x108 0  3d <Q8c?  @0x104 0  4d <̑Q8c?   @0x100 0  5d # ltQ jJ11?`  Zyp"0 Z 6d # l|Q jJ11?` ~ Zxp"0 Z 7d BU8c? ~  ~Old %ebp8 0  8d BH8c?~ n  ~Old %ebx8 0 H d 0޽h ? GGGy___PPT10Y+D=' = @B +w)  0 ((@45h .((  h r 5h S F,`0   M h # l wawa? 1? `  movl 12(%ebp),%ecx # ecx = yp movl 8(%ebp),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx  0 x      h B8c?  A0x120 0  h B8c?  A0x124 0  h B8c?  oRtn adr 0 $ h B 8c? x  4 0 jB h BD8c? 0   h H $8c?0  `%ebp0   h H|)8c?Fo  = 0 0   h H\.8c?F = 4 0   h H/8c?F = 8 0   h H38c?F =12 0  h H78c?  @Offset0  h B(=8c?x h  4 0  h H?8c?x F_  =-4 0  h B>8c?  ?123 0  h B;8c?  ?456 0  h BF8c?  4 0  h BN8c?  4 0  h B@R8c?  4 0  h H$V8c?p AAddress0  h <LZ8c? @0x124 0  h <d]8c? @0x120 0  h <`8c? @0x11c 0  h <[8c? @0x118 0  h <4h8c? @0x114 0  h <k8c? @0x110 0  h <lj8c? ?0x10c0  h <r8c? @0x108 0  h <Dv8c?  @0x104 0   h <y8c?   @0x100 0  !h # l} jJ11?`  Zyp"0 Z "h # lLc jJ11?` ~ Zxp"0 ZbF   #h  P  $h  Bl8c? b%eax 0  %h  B,8c? b%edx 0  &h  BD8c?0  b%ecx 0  'h  B쓹8c?P@ b%ebx 0  (h  B(8c?p`  b%esi 0  )h  B蝹8c?   b%edi 0  *h  <8c?   b%esp 0  +h  <8c?   b%ebp 0 F   ,h    -h  Bt8c? 4 0  .h  BP8c? 4 0  /h  B8c?0  4 0  0h  Bh8c?P@ 4 0  1h  BԼ8c?p`  4 0  2h  B|8c?   4 0  3h  <¹8c?   4 0  4h  <ƹ8c?   A0x104 0 H h 0޽h ? GGGy___PPT10Y+D=' = @B +)  0 ((P45l [((  l r 5l S ,`0   i l # l,ӹwawa? 1? `  movl 12(%ebp),%ecx # ecx = yp movl 8(%ebp),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx <0 x      l B8c?  A0x120 0  l B08c?  A0x124 0  l B8c?  oRtn adr 0 $ l B8c?   4 0 jB l BD8c?0 00   l HD8c?0  `%ebp0   l H8c?F  = 0 0   l H8c?F = 4 0   l H8c?F = 8 0   l H 8c?F =12 0  l H 8c?  @Offset0  l B8c?   4 0  l H8c? Fw  =-4 0  l B8c?   ?123 0  l B8c?  ?456 0  l Bh%8c?  4 0  l B#8c?  4 0  l BX+8c?  4 0  l H/8c?p AAddress0  l <38c?  @0x124 0  l <68c? @0x120 0  l <h58c? @0x11c 0  l <4>8c?  @0x118 0  l <lA8c? @0x114 0  l <D8c? @0x110 0  l <H8c? ?0x10c0  l <L8c? @0x108 0  l <HP8c?  @0x104 0   l <S8c?   @0x100 0  !l # lR jJ11?`  Zyp"0 Z "l # lPK jJ11?`  Zxp"0 ZbF   #l  P  $l  BD_8c? b%eax 0  %l  Bc8c? b%edx 0  &l  B i8c?0  b%ecx 0  'l  Btm8c?P@ b%ebx 0  (l  Br8c?p`  b%esi 0  )l  BPw8c?   b%edi 0  *l  <|8c?   b%esp 0  +l  <,8c?   b%ebp 0 F   ,l    -l  B8c? 4 0  .l  BԄ8c? 4 0  /l  B8c?0  E0x120$0  0l  BL8c?P@ 4 0  1l  Bd8c?p`  4 0  2l  BК8c?   4 0  3l  <p8c?   4 0  4l  <8c?   A0x104 0 H l 0޽h ? GGGy___PPT10Y+D=' = @B +)  0 ((`45p h((  p r 5p S $,`0   i p # l wawa? 1? `  movl 12(%ebp),%ecx # ecx = yp movl 8(%ebp),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx <0 x       p Bƺ8c?  A0x120 0  p Bd8c?  A0x124 0  p Bͺ8c?  oRtn adr 0 $ p B4Ӻ8c?   4 0 jB p BD8c?0 00   p Hֺ8c?0  `%ebp0   p Hں8c?F  = 0 0   p Hߺ8c?F = 4 0   p H8c?F = 8 0   p Hh8c?F =12 0  p HH8c?  @Offset0  p B8c?   4 0  p H8c? Fw  =-4 0  p B8c?   ?123 0  p B8c?  ?456 0  p BD8c?  4 0  p B8c?  4 0  p B 8c?  4 0  p H8c?p AAddress0  p <8c?  @0x124 0  p <8c? @0x120 0  p <8c? @0x11c 0  p <8c?  @0x118 0  p <8c? @0x114 0  p <8c? @0x110 0  p <H$8c? ?0x10c0  p <`(8c? @0x108 0  p <+8c?  @0x104 0   p </8c?   @0x100 0  !p # l<3 jJ11?`  Zyp"0 Z "p # l7 jJ11?`  Zxp"0 ZbF   #p  P  $p  B;8c? b%eax 0  %p  B?8c? b%edx 0  &p  B`D8c?0  b%ecx 0  'p  BxI8c?P@ b%ebx 0  (p  B N8c?p`  b%esi 0  )p  BS8c?   b%edi 0  *p  <X8c?   b%esp 0  +p  <0^8c?   b%ebp 0 F   ,p    -p  Bb8c? 4 0  .p  BDe8c? E0x124$0  /p  Bdi8c?0  A0x120 0  0p  Bm8c?P@ 4 0  1p  Bp8c?p`  4 0  2p  Bt8c?   4 0  3p  <o8c?   4 0  4p  <Hz8c?   A0x104 0 H p 0޽h ? GGGy___PPT10Y+D=' = @B +)  0 ((p45t s((  t r 5t S ذ,`0   i t # lwawa? 1? `  movl 12(%ebp),%ecx # ecx = yp movl 8(%ebp),%edx # edx = xp movl (%ecx),%eax # eax = *yp (t1) movl (%edx),%ebx # ebx = *xp (t0) movl %eax,(%edx) # *xp = eax movl %ebx,(%ecx) # *yp = ebx <0 x>"`      t BD8c?  A0x120 0  t B88c?  A0x124 0  t B8c?  oRtn adr 0 $ t B8c?   4 0 jB t BD8c?0 00   t H8c?0  `%ebp0   t H8c?F  = 0 0   t H8c?F = 4 0   t H8c?F = 8 0   t H8c?F =12 0  t H$8c?  @Offset0  t B(8c?   4 0  t H+8c? Fw  =-4 0  t B/8c?   ?123 0  t BD48c?  ?456 0  t Bt18c?  4 0  t B=8c?  4 0  t B@8c?  4 0  t HB8c?p AAddress0  t <PG8c?  @0x124 0  t <hK8c? @0x120 0  t <`'8c? @0x11c 0  t <\Q8c?  @0x118 0  t <T8c? @0x114 0  t <X8c? @0x110 0  t <\8c? ?0x10c0  t <_8c? @0x108 0  t <W8c?  @0x104 0   t <g8c?   @0x100 0  !t # l>DՐ >(   ~  s *|,`0   = p0P Ր  #"NB0pP  Ґ  # l8޷ 1?"`0 P [Logical right shift @` А  # l(ÿ 1?"` 0  jD ! D >> k$  " @`: ΐ  # l  1?"`p  shrl k,D" $ @` ː  # l  1?"`0 P  ^Arithmetic right shift @` ɐ  # l  1?"` 0  jD ! D >> k$  " @`: ǐ  # l 1?"`p   sarl k,D" $ @`5 Đ  # lDt 1?"`0 & P  Left shift (same as sall) @`   # lp 1?"`& 0  jD ! D << k$  " @`:   # l) 1?"`p&   shll k,D" $ @`   # l,1 1?"`0 Pg  KAnd @`   # lR 1?"` 0 g  hD ! D & S$ " @`(   # l 1?"`p g  vandl S,D"  @`   # l 1?"`0 P  JOr @`   # l 1?"` 0  hD ! D | S$ " @`'   # l= 1?"`p   uorl S,D" @`   # l  1?"`0 * P  T Exclusive or   @`   # l  1?"`* 0  hD ! D ^ S$ " @`(   # lLF  1?"`p*   vxorl S,D"  @`   # l 1?"`0 kP*  PMultiply   @`   # l 1?"`k0 *  hD ! D * S$ " @`)   # l$ 1?"`pk*  w imull S,D"  @` w  # l(.  1?"`0 Pk k Substract    @` u  # l$  1?"`0 k hD ! D  S$ " @`( s  # l 1?"`pk vsubl S,D"  @` p  # lώ 1?"`0 .P R Complement   @` n  # l\ 1?"`.0  b D ! ~D$" @`& l  # l  1?"`p. tnotl D" @` i  # lg  1?"`0 oP. NNegate @` g  # lh= 1?"`o0 . b D ! -D$" @`& e  # lhP 1?"`po. tnegl D" @` b  # l$\ 1?"`0 Po Q Decrement   @` `  # l η 1?"`0 o hD ! D  1$ " @`& ^  # l\ѷ 1?"`po tdecl D" @` *  # lt 1?"`0 g P&  R Left shift   @` +  # lD 1?"`g 0 &  jD ! D << k$  " @`: ,  # lܴ 1?"`pg &  sall k,D" $ @` -  # l 1?"`0 P KAdd @` .  # lǟ 1?"`0  hD ! D + S$ " @`( /  # l͟ 1?"`p vaddl S,D"  @` 0  # lҟ 1?"`0 P Q Increment   @` 1  # lT 1?"`0  hD ! D + 1$ " @`& 2  # lT 1?"`p tincl D" @` 3  # l`1?0 0P S Description   @` 4  # l1?00  NEffect @` 5  # l1?p0 S Instruction   @`B 6  To ?p0P0~B 7  N1 ?pPB 8  To ?pPB 9  To ?p0p~B :  N1 ?0~B ;  N1 ?0 00 B <  To ?P0P~B =  N1 ?pP~B >  N1 ?pP~B ?  N1 ?p& P& ~B _  N1 ?poPo~B f  N1 ?p.P.~B m  N1 ?pP~B t  N1 ?pkPk~B   N1 ?p* P* ~B   N1 ?p P ~B   N1 ?p P ~B   N1 ?pg Pg ~B   N1 ?p P ~B Ȑ  N1 ?p P H  0޽h ? GGG  # 0 w o   (   r  S hG,`0      f4wawa?1?"`P`  int arith (int x, int y, int z) { int t1 = x+y; int t2 = z+t1; int t3 = x+4; int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; }0   0  # lIwawa? 1?   arith: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax movl 12(%ebp),%edx leal (%edx,%eax),%ecx leal (%edx,%edx,2),%edx sall $4,%edx addl 16(%ebp),%ecx leal 4(%edx,%eax),%eax imull %ecx,%eax movl %ebp,%esp popl %ebp ret0 V  d  <8c?   HH`8c? >Body0 d  <8c?  H d8c?T @Set Up0 d  <8c?    Hi8c?0   @Finish0 H  0޽h ? GGGY $ 0   (   r  S a ,`0   r  S 4] ,@0      fbwawa?1?"`` ~  int arith (int x, int y, int z) { int t1 = x+y; int t2 = z+t1; int t3 = x+4; int t4 = y * 48; int t5 = t3 + t4; int rval = t2 * t5; return rval; } 0     # lqwawa? 1? p    movl 8(%ebp),%eax # eax = x movl 12(%ebp),%edx # edx = y leal (%edx,%eax),%ecx # ecx = x+y (t1) leal (%edx,%edx,2),%edx # edx = 3*y sall $4,%edx # edx = 48*y (t4) addl 16(%ebp),%ecx # ecx = z+t1 (t2) leal 4(%edx,%eax),%eax # eax = 4+t4+x (t5) imull %ecx,%eax # eax = t5*t2 (rval)!0 !p   < F P N    pP N    B8c?00  ?y"0    B8c? 0 ?x"0    Bl8c?0  qRtn adr"0 $   Bx8c? 0  Old %ebp> 0 rB  B BD8c?0` P`    Hܙ8c? N  b%ebp 0    HX8c?@   ? 0  0    H 8c?@ ? 4  0    H8c?@- ? 8  0    H8c?@= ?12  0    H8c?P 07 BOffset 0    H8c? ?z AStack 0    B|8c?0@ V " " " 00    B8c?@00 ?z"0    HL8c?@M! ?16  0 H  0޽h ? GGG  & 0   0  (   r  S ,`0   +  # l\ wawa? 1? 8  int logical(int x, int y) { int t1 = x^y; int t2 = t1 >> 17; int mask = (1<<13) - 7; int rval = t2 & mask; return rval; }0   a  # lwawa? 1? $  logical: pushl %ebp movl %esp,%ebp movl 12(%ebp),%eax xorl 8(%ebp),%eax sarl $17,%eax andl $8185,%eax movl %ebp,%esp popl %ebp ret0    d  <8c?0  H4,8c?`q4 @Body 0 d  <8c?P/p  < 08c?`4 BSet Up 0 d  <8c?   H858c?L   BFinish 0 !  # l9wawa? 1?0   movl 8(%ebp),%eax eax = x xorl 12(%ebp),%eax eax = x^y (t1) sarl $17,%eax eax = t1>>17 (t2) andl $8185,%eax eax = t2 & 81850    H@ $  HH8c? x w  >mask 213 = 8192, 213  7 = 8185R 0     H  0޽h ? GGG ' 0 @ $(   r  S DX,`0   r  S X,@0  H  0޽h ? GGG ( 0 P ;(   r  S b,`0   r  S 8l,@0    # lmwawa? 1?   DTlea eax,[ecx+ecx*2] sub esp,8 cmp dword ptr [ebp-8],0 mov eax,dword ptr [eax*4+100h]U0 U       # lDwawa? 1? 0 0 Oleal (%ecx,%ecx,2),%eax subl $8,%esp cmpl $0,-8(%ebp) movl $0x100(,%eax,4),%eaxP0 PH    H̉8c? RIntel/Microsoft Format 0   H~8c?0  JGAS/Gnu Format 0 H  0޽h ? GGG ] 0 P(  X  C d     S Gd9 3    H  0ηo~ ? 3380___PPT10. e, b 0 ` (   X  C d     S Lgd9 3    H  0ηo~ ? 3380___PPT10.xL8 c 0 p (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.xPO8 f 0  (   X  C d     S @rd9 3    H  0ηo~ ? 3380___PPT10.xPO8Wg 0  g(   X  C d     S έd9 3   i)Increasing optimization level increases compilation time & difficulties for debugging Preprocessor expands code to include file sin #include and expands macros Compiler generates assembly for each program Assembler converts them into obkect code Linker merges the two and generate final executable$/ H  0ηo~ ? 3380___PPT10.xPO8 h 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.xPO8 i 0  (   X  C d     S L1d9 3    H  0ηo~ ? 3380___PPT10.xPO8 j 0  (   X  C d     S hd9 3    H  0ηo~ ? 3380___PPT10.xSQ8 k 0  (   X  C d     S 䞯d9 3    H  0ηo~ ? 3380___PPT10.xSQ8 l 0  (   X  C d     S կd9 3    H  0ηo~ ? 3380___PPT10.xSQ8 m 0  (   X  C d     S #d9 3    H  0ηo~ ? 3380___PPT10.xSQ8 n 0   (   X  C d     S $d9 3    H  0ηo~ ? 3380___PPT10.xSQ8 o 0 0 (   X  C d     S 8d9 3    H  0ηo~ ? 3380___PPT10.xSQ8 p 0 @ (   X  C d     S &d9 3    H  0ηo~ ? 3380___PPT10.xSQ8 r 0 ` (   X  C d     S rd9 3    H  0ηo~ ? 3380___PPT10.xSQ8 s 0 p (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.xSQ8 t 0  (   X  C d     S 'd9 3    H  0ηo~ ? 3380___PPT10.xSQ8 u 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.xR8 v 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.xR8 w 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.xR8 x 0  (   X  C d     S ^d9 3    H  0ηo~ ? 3380___PPT10.xR8 y 0  (   X  C d     S X8d9 3    H  0ηo~ ? 3380___PPT10.xR8 z 0  (   X  C d     S d9 3    H  0ηo~ ? 3380___PPT10.x0aT8 | 0  (   X  C d     S d׿d9 3    H  0ηo~ ? 3380___PPT10.x0aT8 } 0  (   X  C d     S hd9 3    H  0ηo~ ? 3380___PPT10.x0aT8 ~ 0   (   X  C d     S Vd9 3    H  0ηo~ ? 3380___PPT10.x0aT8  0 @( (  ( X ( C d    ( S rd9 3    H ( 0ηo~ ? 3380___PPT10.x0aT8  0 P, (  , X , C d    , S d9 3    H , 0ηo~ ? 3380___PPT10.x0aT8  0 p4 (  4 X 4 C d    4 S Td9 3    H 4 0ηo~ ? 3380___PPT10.x0aT8  0 8 (  8 X 8 C d    8 S id9 3    H 8 0ηo~ ? 3380___PPT10.x0aT8  0 < (  < X < C d    < S d9 3    H < 0ηo~ ? 3380___PPT10.x0aT8  0  (   X  C d     S `(d9 3    H  0ηo~ ? 3380___PPT10.0  0   (   X  C d     S $d9 3    H  0ηo~ ? 3380___PPT10.0r` X\i r9yI~S|= uyA~]epMDr&.XOW0[ UG$R^PfdsPug~{d*>Rfzpʜޞ.BVz0j~~ pη,%W }21Oh+'0T hp    (0 CS 343 OSFabian E. Bustamante aqualab01Fabian E. Bustamante104Microsoft PowerPoint@0y;) @QZ@ж@ GSg  )'    """)))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!___wwweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮ՜.+,0  $ , #On-screen Show$CompSci - Northwestern University\!! +ArialTahomaTimes New Roman WingdingsVerdana Courier NewTimes HelveticaCourier 1_aqualab01)Machine-Level Programming IntroductionIA32 Processors"X86 Evolution: Programmers view Assembly programmers viewTurning C into object codeCompiling into assemblyAssembly characteristics Object codeMachine instruction exampleDisassembling object codeAlternate disassembly Data formatsAccessing informationOperand specifiers Moving datamovl operand combinationsUsing simple addressing modesUnderstanding swapUnderstanding swapUnderstanding swapUnderstanding swapUnderstanding swapUnderstanding swapUnderstanding swapUnderstanding swapA second example Address computation instructionSome arithmetic operations&Using leal for arithmetic expressionsUnderstanding arithAnother exampleCISC Properties Whose assembler?  Fonts Used Design Template Slide Titles!,_0Fabian E. BustamanteFabian E. Bustamante  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`acdefghipRoot EntrydO)Pictures2Current UserbSummaryInformation(/UPowerPoint Document(MDocumentSummaryInformation8Z