版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、微機(jī)原理與接口技術(shù)軟件實(shí)驗(yàn)、實(shí)驗(yàn)?zāi)康?. 掌握匯編程序的編輯,編譯,連接和執(zhí)行的全過程;2. 學(xué)習(xí)和掌握用debug調(diào)試程序的方法.二、源程序datasegmentadb 4;(自定)bdb 5;(自定)yzdb 3 dup(o)db ofodataendsstacksegment stackdw 50 dup(?)stackendscodesegmentassumecs:code, ds:datastarprocfarpushdsxoraxfaxpushaxmovax,datamovds,axmovaxfstackmovss.axmoval, amovz,almovz+l, alcallsu
2、b1;a*amovaltbmovzfalmovz+l, alcallsub1;b*bmoval, amovzfalmoval,bmovz+l, al:z stores the two oprd temporallycallsub1;a*baddword ptr yf axadcbyte ptry+2, 0;a*b*2retstarendpsub1procmovalfzmovah, z+lmulahaddword ptr 匕 ax;y stores the resultadcbyte ptry+2, 0;y+2 s tores the signalflagretsub1endpcodendsen
3、d star三、實(shí)驗(yàn)文檔屮的耍求(1) 用d命令觀察數(shù)據(jù)區(qū)在內(nèi)存中的具體內(nèi)容,記錄單元a和b的具體 地址.c:windowssystem32cmd.exe > debug my_a.exb °!*1f:nasns >dehug ny_a.exeuiepushds1424:br01 33c0xor1424:0003 50pushax1424:0004 b81c14houax141c1424:000? 8ed8wouds,ax1424:b(j0? b81d14hourx.141d1424:0006 8ed0hou1424:080ertoual. 10陽8】1424:0611
4、a20500hou【泗仍 j.rl1424:h014 a20gh0hou1424:0017 e825h0call003f1424:w1a a00100woual. (0001)1424:m1d a20500hou【的郵d 141c:00hh14tc:rrm a4 05 )0 bo 00 r0 bh ffi 00 w m bb robr14ic:06l000 mmdm mm mm mm 00 00 b0 00 bb 00 00 03 00141c:r020 rr rh bq br r0 00 ml w 00 b80b rhbr br14tc:h030 br rh h0 ba hc4 h00a-0
5、0 rh r0 ha bh 00 ha b0141c:r04000 00 80 b0 00 80 m 00-00 00 w m 00 ro hr hr141c:rhs0 m hr 00 r0 h0r0 00-0» br 的 0r rbrb ro1410:006000 80 00 00 00 00 00 00-00 00 00 00 00 00 00 0014ic:h«70 0r00 br rfl b0 m m-00 rfl 的朋 rr r0 ab 朋(圖一:反匯編結(jié)果以及數(shù)據(jù)區(qū)具體內(nèi)容)由圖一,可知a的地址為:141ch:0000h; b的地址為:141ch:0001ho(
6、2) 用u命令對目標(biāo)代碼反匯編,觀察反匯編后的結(jié)果注意發(fā)現(xiàn)源程序的起始位并記錄這個(gè)起始地址.曲圖一,可知:data段段基址:141ciia的偏移地址:0000hb的偏移地址:0001hy的偏移地址:0002hz的偏移地址:0005hstack段段基址:141dhcode段段基址:1424h第一條指令的偏移地址:0000ii子程序sub1入口的偏移地址:003fh(3)用t命令作單步跟蹤調(diào)試比較每條指令執(zhí)行后的結(jié)果和原來的理解 是否一致得出程序運(yùn)行的結(jié)果:它們是寫在什么單元,具體內(nèi)容是什么;并判 斷結(jié)果是否正確.現(xiàn)僅將關(guān)鍵步驟的單步調(diào)試結(jié)果列出,配合命令杳看結(jié)果。nx-«mb4 bx
7、-tmeu&s-141ces-140c1424:0846 f6e4cx -00d2 dx 二fkmmsss-141dcs-1424nul ahspmwseip-0046bp -0u0t9 si -00u0 d1 -twubnu up el pl zr ma pe nchx=mib bx 0000 ids-141c es -14hc 142:8048 8106021cx =«9d2 dx二£000ss-141d csf 4 iaddsp-095eip-0048 (00t>2 j,axbp=o0r0 si=80»0 di nu up el pl hz n
8、a po ncds : me2 -tmwmiax-rr1a rx -mm cx-wd2sp-bh5f(ds-i41c es-14rc ss«14id cs-1424 ip-hb48 1424:0048 b10602b0add 10002 e axrp-arbr si -mm di -warfix-o01h bx-0mm4 cx -b0d2d<;-141c2 use 沁 1 iip cs -1-12 11424: wmc b016mb 她a dcdx=0bm9 sp-o05e1 pmmmcbvte p1r 1匕測4側(cè)bp-uh0u s ! -08b0 di nu up el pl
9、 nz nft po nchxmmw bx詡介腳 ps-141ces=140c1424:uubl c3rf 141r:hhm?41c:a0or41c:ra10j41c:flfl2r;41c:e04tt41c:000 41c:0060.410:0070e41c:008rcx 詡”d2 dxs p -005 ess=141dcs=1424ip=o051ketrprrrfl s i 二(mm di 詡q佔(zhàn)w) up el pl zr na pe ncm m 00 tm 00 00 ar ie器0000盅10m ssff 1a器器霜re04 00 8r ar m-m m 00時(shí) 08 00-00 ut
10、t昭血 00 00 60 80 00 51 aa 0« b0器器器器eaneoeor 0rishahtsfl rrob b b ar 8rr0tt81a 器器盅裁 8rn8oopo 0rqq000a 8r00mh4a bnnhuoir(圖二:單步調(diào)試結(jié)果一)這是第一次調(diào)用subl子程序退出后的結(jié)果,從圖中可以看出y存儲(chǔ)的數(shù)據(jù)是+16 (a已經(jīng)改為4; b已經(jīng)改為5),即是a*a的結(jié)果,符號位為0表示是止數(shù)。es=14wcsidi -mumuhu up el pl 込r na pe ngdj>:wwww=04cx-u0d2 dx -仙如 sp-0h60 ss=141dcs=142
11、41p=hm26mou auuhm30bp=(m,bs sidiax=mm19 bx =0whh ds=141c es=14mc l424:0026 afwhwcx =iwd2 dx 40 時(shí)ss=14id cs=1424mounu up el pl zr na pe ncds:hwm«=04bp-w»or si=0000 di nu up el pl nz na po ncds:0004=00ax=0019 bx =0r«« cx=o0d2 dx=0«0w sp=o05e ©s=141c es =140c ss=14(d cs=14
12、24 ip-004c f424:004c 8016040000 adc byte ptb r0004k00 ktaddds: 0(402 =0w1hds=141c ts=14hc 1424:0048 wlw6m2wa -tbp-0000 si-0000 di 一哋bhu up el pl nz na po ncsp-00se 1p-mm8 l»»02uaxcx"00d2 dx-0000 ss=141dcs=1424sp-005e1 p-0046bp-0900 si-0000 di-3000 nu up el pl zr ha pe nccx-0002 dx-000
13、0ss-141dcs-1424nul ahax-0505 bx-0ar0ds141ces-140c1424:0046 f6e4tnn0sicd09b7h00000000006r 00000e000000000000004000000010ax-0019dx-0000cx 00d2dx-0080sp 0()se bp-000081-0000di-0000ds-141ces-140css-141dcs-1424ip-(mnu up elpl zr nfipe nc1424:0051 -tc3ret£p二i p=0o26ax-u01v bx-uwfcjw ds=141c 1424咖26-d
14、 141c:«w«2 141c:cw00 i41c:ww1o ;14ic:0020 141c:0030 141c:0040 141c:0050 141c:0060 141c:00?0 一41c:008000 00 06 00000b iem00000000000033肋 rr 00 00 00 00 0014w5 時(shí) 00 00 00 00 00 00b5r00000000019000«-»b 陽一附 00-00 00 00 00 00 00 00 00 00 00 00ob09900000000000(圖三:單步調(diào)試結(jié)果二)這是第二次調(diào)用sub1子程序
15、退出后的結(jié)果,從圖屮可以看出執(zhí)行完“mul ah” 指令后,ax存儲(chǔ)的數(shù)據(jù)是25,即是b*b的結(jié)果,子程序退出后y存儲(chǔ)的數(shù)據(jù)是 +41,即是16+25的結(jié)果。bx-wufcjkji)s=141c es=14wci 424訕46 f6e4cx=wud2 dx-»0u0ss=141dcs=1424hul ahsp-««!>ei p=w»46bp -(mjmw s1d1 =uo»kjnu up el pl 込r na pe ncwx-aa14 bx-0000i)s-i41c es -140c 1424:0040 01060200cx-00d2
16、dx-0000ss-141dcs-1424hddsp-005e ip-0048 0002eaxbp-0000 si-0000 di-0000nu up el pl nz na pe ncds:0002 -0029(ix-0014 bx-0000 cxbbd2 dx -0u00 sp-005e 1)s=141c es=140c ss=141d cs=1424 1p-004ci424:w04cadc bvte pth 10004)3rtbp-0000s1-00u0 di-0000nu up el pl nz na p0 ncds:0004=00ax=0014 rx-firowi)s-141ces-
17、140c1424:0051 c3cx-rad2 dx-brofiss-141dcs-1424retspmw5eip-8051bpsi -orbpj di -arrrhu up el pl zr na pe nchx-0014 dx-0000 j)s-141ces-140c424:0tj3!> d1u6u2uu t-d 1 41 : rra9cx-00d2ss-141dcs-1424dx-0000sp-0868ip-0035bp-0060 si-0000 di-0000 hu up £1 pl zrhdd10602j.hxna pe hcds:0u02-wu3d141c:0000
18、141c:tj010141c:(402u141c:0m3u141c:mw4h141c:o05a141c:0w6o 141c:0070 141c:00o0503503: 0 4 ct 00u00h10 器器器器 0b»ob»4b bb buoh丄日 器器器0014 duuhhnt c 3u0hho 叼 0 ®0»0n003 00000003 0u0m000e00-8600-h8wm-h0bh-0r00-0000-800ouum9e000000000b0ssis0f0b00000008 0»»的040b0m0his10(圖四:單步調(diào)試結(jié)果
19、三)這是第三次調(diào)用subl 了程序的結(jié)果,從圖中可以看出執(zhí)行完“mulah”指令后, ax存儲(chǔ)的數(shù)據(jù)是20,即是a*b的結(jié)果,子程序退出后y存儲(chǔ)的數(shù)據(jù)是+61,即是 41+20的結(jié)果。ax-hwi4 bx i)s-141ces-140c1424:003e cdcx=hhdz dx-wrrwss-141dcs-1424retfip-003ekp-wwmi si-wwwr di hu up el pl zr na pe hcx-0014 bx =0000ds-141ces-140c400:0000 cd20ld 141c:(!j0w2141c:0010i41c:0020 14ic:0030i 41
20、c:0u40i41c:hhsw i41c:0060 14ic:0070 141c:0080cx=00d2 dx-0000 ss-141dcs-140csp-wi64 ip 0000bp-0000 si-0000 di=0rw0mu up el pl zr na pe ncoh000080m000cie0000001433h4hm-owm0ho0-a0hr000000 0000000000 000800盹一畸08怖»hh0-w1hh140000-0000000000 00001ht00000 c2iski0scsf0r0b000000000000050130000hobbs2hbb0q
21、0000rb(圖五:單步調(diào)試結(jié)果四)這是程序退出時(shí)的最終結(jié)果,從圖中可以看出,y存儲(chǔ)的數(shù)據(jù)最終為+81 ,即 為(a+b) * (a+b)的結(jié)果。結(jié)果止確。(4) 在子程序sub1的入口處設(shè)一斷點(diǎn),用g命令執(zhí)行程序.在斷點(diǎn)處觀 察堆棧的內(nèi)容,比較堆棧的內(nèi)容和程序返回地址是否一致.我 c:windowssptem92cmd.e)e debug tny_d.exebsdk1424:0800iepushds1424:8o0133c8xor50pushax1424:0hh4b81c14houax>141c1424:0««78ed8houds.ax1424:0009b81d14
22、houax.141d1424:e0»c8ed0houss,axi424:o00ehoual 心 mm1424:hh1ia20s00kouihuhb ual1424:h014a2r60rhouirar6 1#al1424:0017e82500call003 f1424:mm1aa801o8houal八】424:0010a2 站hou10005 jalh 1424:im)17bx-0000cx-88d2 dx -rntw sp-warwrpsi hmnn di -ww0ps-141c1es-140css-141d cst-1424ip-0817nuup el pl zb na pe nc
23、1424:0017e82s08uhll003fg 1424:0mlaax-ra1r 1bx-raoecx-00d2 dx-bfmw sp-0060bptr000 si-0000 di-0000cds-141c 1es-140crr-141d cs -14241f-ww1anuup el pl zr ha pe hc1424:b01aa88100houal,jd£ : 0001-0s(圖六:調(diào)用子程序的堆棧內(nèi)容改變結(jié)果)從圖屮可以看出,1p指針的變化說明調(diào)用了子程序sub1,而堆棧段段基址ss 和棧頂指針sp的值都沒有改變。程序返冋地址一致。(5) 用e命令修改單元a,b的內(nèi)容,重新執(zhí)
24、行程序,并記錄結(jié)果.080000 06m-m"c:whdowsuystein32cmd.xb debug mya.exb 31emhaoecmbuhh001"cd0hdcd3ph 00h0010h器器0e霜72no424:000c8ed0hou424:»ehehou424:0»11a2o5m9nov424:0014a20600nou424:0017e82500call424:0o1aa00100mov424:mhdmove 14tc:h0»h41c:0»0r04.01c 141c:k»ml 41c:06ei0s.01grog
25、raiw terfwlnated d 141c:0w2 4ic:0eee 41c:0010 41c:(m920 41c:0030 41c:0040 41c:06g0 41c:06tf41c:kw7tt 41c:0d8ruh r» 00 00d2 mc ier4 00 mw 朗 00 00 0046ssax puihhbh j (riw5eal 0006 eal 003 f alueeei j 【的宓1用ee 90 00 00 恥昭 hh-mm0800wu8h0hhiwm00m4f03b200h011(1(圖七:修改a, b數(shù)值后的結(jié)果)從圖中可見,分別將a, b的值改為1, 1后,程
26、序執(zhí)行完畢,y存儲(chǔ)的內(nèi)容是+4, 結(jié)果正確。(6)用m命令和a命令對程序進(jìn)行修改:將主程序中最后兩條指令(add和adc)修改為一條call sub1指令,重新執(zhí)行程序.1470:00201470:00231470:00261479:0029 1470:0b2c t47w:«b2f147«:rb32a20600e81900a0000oa測師e8rarr147«:0039 8r1604r0flo147w:003e cb1470:003f a0050h1470:b035 call b03f附篇翻猝時(shí)mov call hou hou mou moucfilladd ad
27、cretfhou0006).al 003f al.wd胸】 (0o05eal 仏時(shí)01】 wn06】.al wa3f a»»2rax byte ptral.酮05】mrprogram terninated nornally -d 1468:0002 1468:«»«a 1468:6010 1468:flr2a 1468:fl»3r 1468 5040 1468:0050 1468:0060 1468:6070 1468:0080qnrocs 2 8 e0fid0004300000x3csaq® 9 q8d 00000060
28、rqcecscsogocs0oao000 a0nn0000 oaaq m6q6 一 t i 一 一 - t narrorr0 aaao0h000 0 0 00000 b400a00000b000b0湘器器13閑aqfl® q04 d<£r00d0is3000s0eecsaaha0400f3x(圖八:a命令練習(xí)使用的結(jié)果) 反匯編發(fā)現(xiàn)程序最后的add指令在code段的偏移地址為0035,將此處改為調(diào)用 sub1子程序的指令,然后將0038處改為retfo重新執(zhí)行后,查看y的內(nèi)容,結(jié) 果正確。(7)重新使用編輯軟件,把源程序最后一句中的star去掉再次生成可執(zhí)行文件,并用
29、debug調(diào)入內(nèi)存當(dāng)使用u命令時(shí),顯示的結(jié)果與前一次(未加 star)的結(jié)果有何不同?| g c : sffllllotfs syx t«n32crid. ex ft一 d«bu£ftxe碁-|d| x|1468:04197callbbbf1468:0w9a abl刖moual.l»bmlj1468:0w9dmoub則 j.almou她6】jl1468:0wa3 e819h0call00bf1468:0&a6 a80060mou1468:0«a9 a20s06mou【0005 l1468:00ac a00100moual.1800114
30、68:00af a20600mou00061468:0082 e80a00call00bf1468:0685 01060206add00021468:0009 8016040000adcbyte ptr 00843,001468:00be cbretfl468:00bf a00500moual.00051468:卿c2 8a260600mouahf08061468:00c6 f6e4mulah1468:00c8 01060200add0002rax1468:00cc 8016040600adcbyte ptr r00043,001468:00d1 c3ret1468:a«d2 ff7
31、6r6pushbpm611468:r«d5 ff76r4pushrbp>r411468:0«d8 8db674ffleaax,rbp*ff?4j1468:(wdc 5rpushax1468:0«dd e85afdcallfe3a1468:0»e» 8be5mousp.bp(圖九:修改源程序后執(zhí)行的結(jié)果) 觀察到兩點(diǎn)不同(雖然不明了其原因), 其一:不能立即進(jìn)入程序,需執(zhí)行許多冗余指令;其二:不能正確退出程序。預(yù)習(xí)題:若ss=2000h, sp=ffffh,向堆棧中壓入4字節(jié)數(shù)據(jù)后,如何用d命令顯 示壓入堆棧的內(nèi)容?使用debug指令“d
32、2000:0000”即可顯示壓入堆棧的內(nèi)容,這是因?yàn)?sp+1會(huì)溢出,變成ooooo四、心得體會(huì)匯編語言編程時(shí)耍求程序員冇嚴(yán)謹(jǐn)、縝密的思維,在某些程度上,我感 覺使用匯編語言的編程過程就是把高級語言的結(jié)構(gòu)過程拉平成線性過程來考慮 問題。經(jīng)過此次試驗(yàn),我基本掌握了匯編程序的編輯、編譯、連接、執(zhí)行以及 調(diào)試的主要步驟。應(yīng)注意以下幾點(diǎn):在debug a程屮,任何存儲(chǔ)器單元都無法用標(biāo)號來識別,要使用它們,只能使用 物理地址調(diào)用。使用u指令修改asm代碼時(shí)要對照反匯編的結(jié)果,若要?jiǎng)h去某條指令,可以找到 那條指令在代碼段的偏移地址,再用u指令將其修改為nop (從該指令開始到下 一條指令開始的地址t處)。
33、可以結(jié)合r指令、t指令、已經(jīng)用g指令設(shè)置斷點(diǎn)來診斷問題。微機(jī)原理與接口技術(shù)軟件實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告二實(shí)驗(yàn)二分支,循環(huán)程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康模?. 開始獨(dú)立進(jìn)行匯編語言程序設(shè)計(jì);2. 掌握基本分支,循環(huán)程序設(shè)計(jì);3. 掌握最簡單的dos功能調(diào)用。實(shí)驗(yàn)內(nèi)容:1 安排一個(gè)數(shù)據(jù)區(qū),內(nèi)存有若干個(gè)止數(shù),負(fù)數(shù)和零。每類數(shù)的個(gè)數(shù)都不超過 9o2. 編寫一個(gè)程序統(tǒng)計(jì)數(shù)據(jù)區(qū)中正數(shù),負(fù)數(shù)和零的個(gè)數(shù)。3 將統(tǒng)計(jì)結(jié)果在屏幕上顯示。二、預(yù)習(xí)題:1. 十進(jìn)制數(shù)0 9所對應(yīng)的ascii碼是什么?如何將十進(jìn)制數(shù)0 9在屏 幕上顯水出來?答:0的ascii碼是30h,以后依次遞增。要屏顯0-9的數(shù)碼,只需將ah置成02h (dos功能調(diào)用
34、),然后將要顯 示的數(shù)碼的ascii碼存進(jìn)dl里,然后執(zhí)行int 21h就可以打印字符?;蛘撸暨@些數(shù)碼是以字符串的格式存儲(chǔ),則口j以將ah置成09h,(最 后以$'字符結(jié)束,)然后將串首地址傳給ds,然后執(zhí)行i nt 2111就可以打卬 字符串。2如何檢驗(yàn)一個(gè)數(shù)為正,為負(fù)或?yàn)榱??你能舉岀多少種不同的方法? 答:可以將待檢驗(yàn)數(shù)與0比較(使用cmp指令后判斷cf、of或者以表達(dá)式【實(shí) 用eq、ge等操作符】的返回值來判斷),也可以將待檢驗(yàn)數(shù)與80h相與,判斷 zf的值。三、源程序data segmentbufo db 2bhf 3ahpost db 0buf1 db 0ahf odh,
35、30h, 3ah;lf, cr,zero db 0buf2 db oah, odh, 2dh, 3ahnega db 0num db 72h, 88h, 91h, 01h, ooh, ooh, 23比 77h, 21h ;you can add other numbers:lent/cnt equ $-numdata endsstack segment stack 'stack'db 100 dup (?)stack endscode segmentassume cs:code, ds:dataf ss:stackstart proc farpush dsxor axf axp
36、ush axmov ax, datamov ds, axmov cxf 0mov bxf 0loop!: mov al,numbxcall far ptr cmprinc bxinc cx;loop cnt times;transfer to asc2;to print charscmp cxf cntjnz loop!add posif 3011add zero, 30hadd nega, 30hcodemov ahf 02hmov cxf 0mov bx, 0l00p2: mov dl, bufobxint 21hinc bxinc cx:loop 13 timescmp cxf odhj
37、nz l00p2mov axf 4c00hint 2111retstart endpcmpr proc farcmp alf 0j ge biggerinc negajmp exitbigger:je equalinc postjmp exitequal: inc zeroexit:retcmpr endpcode endsend start四、程序流程圖alcxm- bxmc回)(圖表一:主程序流程圖)cmfr(圖表二:cmpr 了程序流程圖)五、實(shí)驗(yàn)結(jié)果與調(diào)試過程ca c: wilhlowssystem32cmd. exe - debug ex2. exe522 g 一 0 一fitern
38、mated normally(圖一:程序運(yùn)行結(jié)果) 分析:設(shè)置的數(shù)據(jù)區(qū)待分析數(shù)據(jù)為“ 72h, 88h, 91h, 01h, ooh, ooh, 23h, 77h, 21f , 其中正數(shù)為72h,01h, 23h, 77h,21h;負(fù)數(shù)為88h, 91h;還有兩個(gè)零??梢姵绦虻?出的結(jié)果是正確的。-u1468:0000 1468:0001 1468:0003 1468:0004 1468:0007 1468 =£002. 1468:0000 1468:000f 1468:0013 1468:0018 1468:0019 1468:001a 1468:001d 1468:001f146
39、8:0024 1468:0029 el468:002e 1468:0030 1468:0033 1468:flfl3l 1468:003a 1468:003c 1468:003d 1468:003e 1468:0041 1468:00431468:0046 1468:0048 1468:0049 1468:004b 1468:004d 1468:0051 1468:0053 1468:0054 1468:0056 1468:005a 1468:005c 1468:fi05il 1468:£061c0e30135b866148ed8b90000bb00008a870d00 9a4900
40、68144341 83f90975 f0800602003080060700308006000030b402b90000bb0000 8a970000cd21434183f90d75 f3b8004ccd21cb3c007d07 fe060c00eb0e907407fe060200eb0590fe060700cbpush xor push mou mou mou mou mou call inc inc cmp jnz adddduuuutccpzuddoooonnnmnoaammmmiiicjmi nt retf cmp jge inc jmp nop jz inc jmp nop inc
41、retfax.axaxfix,1466 ds.axcx.0000bx.0000al,bx+000d1468:0049dsbxrvcx , +09000fbyte ptr 00021.30byte ptr 000?,30b¥te ptr 000c,30 ah .02cx,0000bx.0000dl,bx+000021bxrvcx,+0d0036ax,4c0021al. 000054bvte ptr 000c 0061005dbvte ptr 0002 0061byte ptr 0007(圖二:反匯編結(jié)果)分析:data 段地址:1466;posi偏移地址:0002;zero偏移地址:0
42、007;nega偏移地址:000c;code 段地址:1468;子程序cmpr偏移地址:0049;cnt 的值+09d。六、選作題:統(tǒng)計(jì)出正奇數(shù),正偶數(shù),負(fù)奇數(shù),負(fù)偶數(shù)以及零的個(gè)數(shù)。源代碼如下:data segmentbuf db 2bh, 4fh, 3ahposod dbdb0ail9 0dil9 2bil9 4511, 3aii;lf, cruposev dbdboah, odh, 30比 3ah;lf, cr, v;zero dbdboah, odhf 2dh, 4fh, 3ah;lf,cr, 'j v:crj j 空;negaod db 0db oah, odh, 2dh, 4
43、5h, 3ahnegaev db 0num db 72h, 88h, 91h, 01h, ooh, ooh, 23h, 77h, 21h;you can add other numberscnt equ $num/lent/data endsstack segment stack 'stack'db 100 dup (?)stack endscode segmentassume cs:code, ds:data, ss:stackstart proc farpush dsxor axf axpush axmov ax, datamov ds, axmov cxf 0mov bx
44、f 0l00p1: mov al,numbxcall far ptr cmprinc bxinc cx/loop cnt times;transfer to asc2 code;to print charscmp cxf cntjnz l00p1add posod, 30hadd posev, 30hadd zero, 30hadd negaod, 3011add negaev, 30hmov ah, 02hmov cxf 0mov bxf 0l00p2: mov dl, bufbx1nt 21hinc bxinc cxcmp cxt ibil:loop 26 timesjnz l00p2mo
45、v axf 4c00hint 21hretstart endpcmpr proc farcmp al, 0jge biggertest al, 01hjnz noddinc negaevjmp exitnodd: inc negaodjmp exitbigger:je equaltest alf 01hjnz poddinc posevjmp exitpodd: inc posodjmp exitequal: inc zeroexit:retcmpr endpcode endsend start運(yùn)行結(jié)果:c:c c: wind0wssyste»32aid. exe - debug e
46、xtra. exefg+0:4+e:10:2-0:1-e:lprogran terninated nornally(圖三:選做題程序運(yùn)行結(jié)果)根據(jù)um中的數(shù)據(jù),這個(gè)結(jié)果是正確的。七、心得體會(huì):這個(gè)實(shí)驗(yàn)有兩個(gè)要點(diǎn),其實(shí)就是兩個(gè)預(yù)習(xí)題目里討論的問題。一是字符顯示。要顯示數(shù)字字符,首先耍把數(shù)據(jù)轉(zhuǎn)換成ascii碼,然后 調(diào)用dos功能將其顯示。其中使用09h號功能時(shí),要特別注意每段待輸出的字符 串要以'$'結(jié)尾,不然無法識別串尾,輸出亂碼。二是判斷正負(fù)數(shù)。本程序選用cmp指令來實(shí)現(xiàn)該功能。注意與0相比吋, 要使用有符號數(shù)的條件跳轉(zhuǎn)指令,jge等等,在使用無符號數(shù)的條件跳轉(zhuǎn)指令時(shí), 不是
47、與0相比較。判斷奇偶同樣也有很多途徑,這里選擇將待判別的數(shù)與01h相與后改變 的標(biāo)志位來判斷奇偶,用test指令是一個(gè)很好的選擇。另外,通過這次試驗(yàn),我對匯編程序的分支、循環(huán)結(jié)構(gòu)有了進(jìn)一步的理 解。微機(jī)原理與接口技術(shù)軟件實(shí)驗(yàn)實(shí)驗(yàn)三代碼轉(zhuǎn)換程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康?1. 掌握幾種最基本的代碼轉(zhuǎn)換方法;2. 運(yùn)用了程序進(jìn)行程序設(shè)計(jì)。實(shí)驗(yàn)內(nèi)容:1.從鍵盤上輸入若干兩位i 進(jìn)制數(shù),尋找其小的最小值,然后在屏幕上顯示出來;2兩個(gè)十進(jìn)制數(shù)之間的分隔符,輸入結(jié)束標(biāo)志自定,但要在報(bào)告中說明;3. 對輸入要有檢錯(cuò)措施,以防止非法字符輸入,并有適當(dāng)?shù)奶崾荆?. 將整個(gè)程序分解為若干模塊,分別用子程序?qū)崿F(xiàn)在報(bào)告屮要給
48、出模塊層次圖。二、預(yù)習(xí)題:1如何將輸入的兩個(gè)字符(0 9)變?yōu)閨 進(jìn)制或二進(jìn)制數(shù)?答:可以通過將字符的減去30h再乘以10d,加上個(gè)位的值(同樣要將ascii碼 減去3011變?yōu)槭M(jìn)制數(shù))即可得兩個(gè)字符的十進(jìn)制數(shù)。2如何將選岀的最小值(二進(jìn)制或十進(jìn)制)變?yōu)閍scii碼再進(jìn)行顯示?答:選岀最小十進(jìn)制數(shù)后可以通過除十得到余數(shù)和商,商為高位,余數(shù)為低位, 分別對這兩個(gè)加30h即可到得其ascii碼。3. 你覺得采用二進(jìn)制運(yùn)算還是十進(jìn)制運(yùn)算更適合于這個(gè)實(shí)驗(yàn)?答:個(gè)人覺得采用二進(jìn)制運(yùn)算更簡便,這樣可以直接使用ascii碼比 較,使問題簡化。三、源程序data segmentbuffer db 101;為
49、 buffer 分配空間db 0; buffer實(shí)際長度db 101 dup (0)message db 'error, try again', odh, oah, '$'錯(cuò)誤信息min dw ?errdb 0;錯(cuò)誤標(biāo)志寄存器data endsstack segment stack 'stack'db 100 dup(?)stack ends;大于3ah,出錯(cuò)code segmentcheck procfar;check子程序pushaxpushbxpushcxpushdxleabx, buffer+2;bx指向第一個(gè)輸入的數(shù)movcl, buffer+1;輸入字符串總氏度again: cmpbyte ptr bx, 30hjlerror;小于30h,出錯(cuò)cmpbyte ptr bx, 3aiiassumecs:code, ds:data, ss:stackjg errorjmp exit1error:mov ah, 9movdx, seg messagemovdsfdxmovdx, offset message
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 政務(wù)(含公共服務(wù))服務(wù)平臺(tái)項(xiàng)目建設(shè)方案X
- 未來教育領(lǐng)域中如何利用移動(dòng)支付進(jìn)行教育資源的優(yōu)化配置和共享研究
- 環(huán)境保護(hù)教育推廣與實(shí)踐
- 國慶節(jié)團(tuán)隊(duì)旅行活動(dòng)方案
- 環(huán)境藝術(shù)設(shè)計(jì)中的視覺體驗(yàn)與審美需求
- 生態(tài)環(huán)保理念在辦公空間的設(shè)計(jì)實(shí)踐
- 環(huán)保材料在環(huán)境藝術(shù)設(shè)計(jì)中的應(yīng)用前景
- 生活用紙的創(chuàng)新設(shè)計(jì)與實(shí)踐案例分享
- 《2 顏色填充和橡皮擦工具》(說課稿)-2023-2024學(xué)年五年級下冊綜合實(shí)踐活動(dòng)吉美版
- 2023八年級物理上冊 第四章 光現(xiàn)象第5節(jié) 光的色散說課稿 (新版)新人教版
- 工業(yè)企業(yè)電源快速切換裝置設(shè)計(jì)配置導(dǎo)則
- 某有限公司雙螺紋偏轉(zhuǎn)型防松防盜螺母商業(yè)計(jì)劃書
- 年產(chǎn)3萬噸噴氣紡、3萬噸氣流紡生產(chǎn)線項(xiàng)目節(jié)能評估報(bào)告
- 外研版九年級英語上冊單元測試題全套帶答案
- 2023年云南省貴金屬新材料控股集團(tuán)有限公司招聘筆試題庫及答案解析
- GB/T 1094.1-2013電力變壓器第1部分:總則
- 2023年益陽醫(yī)學(xué)高等??茖W(xué)校單招綜合素質(zhì)考試筆試題庫及答案解析
- 胸外科診療指南和操作規(guī)范
- 電網(wǎng)基本知識
- 民法原理與實(shí)務(wù)課程教學(xué)大綱
- 鋼筋混凝土框架結(jié)構(gòu)工程監(jiān)理的質(zhì)量控制
評論
0/150
提交評論