版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、微機原理軟件實驗實驗1兩個多位十進(jìn)制數(shù)相加的實驗實驗內(nèi)容:將兩個多位十進(jìn)制數(shù)相加,要求加數(shù)和被加數(shù)均以ASCII碼形式各自順序存放以DATA1和DATA2為首的5個內(nèi)存單元中(低位在前),結(jié)果送回DATA1處。完整代碼如下:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼STRING1DBinputthefirstnumber:*STRING2DB13,10;inputthesecondnumber,$STRING3DB13,10;theoutputis:;$DATA1DB6DUP(00H),$DATA2DB6DUP(00H),$DATASENDSSTACKSSEGMENT;此處輸入堆棧段代碼ST
2、ACKSENDS.word.zl-CODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;此處輸入代碼段代碼LEASI,DATA1LEADI,DATA2L0:LEADX,STRING1;打印字符串STRING1MOVAH,09INT21HINPUT1:;輸入第一個數(shù)MOVAH,01;輸入字符至AL中INT21HCMPAL,/JEL1MOVSI,AL.word.zl-INCSIJMPINPUT1L1:LEADX,STRING2;打印字符串STRING2MOVAH,09INT21HINPUT2:;輸入第二個數(shù)MO
3、VAH,01;輸入字符至ALINT21HCMPAL,/JEL2MOVDI,ALINCDIJMPINPUT2L2:MOVSI,0CLC;清空進(jìn)位標(biāo)志位CF.word.zl-MOVCX,6PLUSE:;相加;SUBDATA1SI,30H;SUBDATA2SI,30H;這里不能使用這兩條指令,因為如果DATA15=00H,00H-30H需要借位相減,使CF=1MOVAL,DATA1SIADCAL,DATA2SIAAA;加法調(diào)整指令,可使兩個ASCII數(shù)直接相加MOVDATA1SI,AL;和賦給DATA1SIINCSILOOPPLUSEL3:LEADX,STRING3;打印字符串STRING3MOVA
4、H,09INT21HMOVCX,6MOVSI,6.word.zl-SHOW:DECSICMPDATA1SI,00HJESHOWSHOW2:MOVDL,DATA1SIADDDL,30HMOVAH,02INT21HCMPSI,0JEL4DECSIJMPSHOW2L4:MOVAH,4CHINT21HCODESENDSENDSTART運行結(jié)果如下:輸入為低位在前,即輸入1234和99999相加實際上是4321和.word.zl-99999相力口(即:4321+99999=104320遲(XKBoir0,4,Cpu1曄杜1KX3中也,八仙0.牌pgygDWTEM|ii|mif.thi#fIr4ftiMi
5、.hulXH/injutths&etsidwiwbcr:5?X)ztheoutputis:W13ZePrhrss也叫keytocontinue實驗2兩個數(shù)相乘的實驗(無符號數(shù)相乘)實驗內(nèi)容:實現(xiàn)十進(jìn)制數(shù)的乘法。要求被乘數(shù)和乘數(shù)均以ASCII碼形式各自順序存放在內(nèi)存中,乘積在屏幕上顯示出來。完整代碼如下:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼STRING1DBtheoutputis:;$DATA1DB31H,32H,33HDATA2DB35H,36HDATASENDS.word.zl-STACKSSEGMENT;此處輸入堆棧段代碼STACKSENDSCODESSEGMENTASSUMECS
6、:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;此處輸入代碼段代碼MOVDL,10MOVAL,DATA10;AL=31HSUBAL,30H;AL=01HMULDL;乘10;AL=10ADDAL,DATA11;AL=10+32HSUBAL,30H;AL=10+32H-30H=12MULDL;AL=120ADDAL,DATA12;AL=120+33H.word.zl-SUBAL,30H;AL=120+33H-30H=123MOVBL,AL;BL=AL;MOVAL,DATA20;AL=35HSUBAL,30H;AL=5MULDL;乘10;AL=5
7、0ADDAL,DATA21;AL=50+36HSUBAL,30H;AL=50+36H-30H=56MULBL;AX=123x56=6888SUBDX,DX;DX清零MOVBX,1000DIVBX;(DX,AX)/1000,商6在AX中,余數(shù)8884DX中PUSHDXMOVDL,ALADDDL,30HMOVAH,02;打印最高位6INT21HPOPDX.word.zl-MOVBL,100MOVAX,DX;888武給AXDIVBL;AX/100,商放在AL中,余數(shù)88放在AH中MOVDL,ALMOVCL,AH;!這里千萬不能把AH直接賦給AL,因為經(jīng)過INT21H指令后AL,AH會改變ADDDL,
8、30HMOVAH,02;打印第二位INT21HMOVBL,10MOVAL,CLSUBAH,AH;清空AHDIVBL;AX/10,商放在AL中,余數(shù)8放在AH中MOVDL,ALMOVCL,AHADDDL,30HMOVAH,02;打印第三位INT21H.word.zl-MOVDL,CLADDDL,30HMOVAH,02;打印第四位INT21HCODESENDSENDSTART運行結(jié)果為:實驗3字符串匹配實驗match”,實驗內(nèi)容:編寫程序?qū)崿F(xiàn)兩個字符串比較。如果相同,則屏幕顯示否則屏幕顯示nomatch”,完整代碼如下:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼PRINT1DBinputthef
9、irststring:*PRINT2DB13,10,inputthesecondstring*.word.zl-PRINT3DBmatch,$PRINT4DBnomatch;$PRINT5DB13,10;output:,$STRING1DB30DUP(00H),13,10$STRING2DB30DUP(00H),13,10$DATASENDSSTACKSSEGMENT;此處輸入堆棧段代碼STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKS,ES:DATASSTART:MOVAX,DATASMOVDS,AX;此處輸入代碼段代碼LEADX,
10、PRINT1打印字符串PRINT1MOVAH,09.word.zl-INT21HLEASI,STRING1;STRING1地址賦給SILEADI,STRING2;STRING2地址賦給DIINPUT1:MOVAH,01;輸入字符至ALINT21HCMPAL,/;輸入字符串以/結(jié)束,L0JEL0MOVSI,ALINCSIJMPINPUT1L0:LEADX,PRINT2打印字符串PRINT2MOVAH,09INT21H.word.zl-INPUT2:MOVAH,01;輸入字符至ALINT21HCMPAL,/JEL1MOVDI,ALINCDIJMPINPUT2L1:MOVCX,30;CX=30代表比
11、較3畋MOVSI,00HPARE:;字符用一個一個比較MOVAL,STRING1SI;取STRING1存儲單位中的第SI個字符賦給ALCMPAL,STRING2SI;AL與STRING2存儲單位中的第SI個字符比較JNENOMATCHINCSILOOPPAREJMPMATCH.word.zl-NOMATCH:;打印output:nomatchLEADX,PRINT5MOVAH,09INT21HLEADX,PRINT4MOVAH,09INT21HJMPL2MATCH:;打Bpoutput:matchLEADX,PRINT5MOVAH,09INT21HLEADX,PRINT3MOVAH,09INT
12、21HL2:MOVAH,4CHINT21H.word.zl-CODESENDSENDSTART運行結(jié)果:CJ工超-ADO53o0,74,.CpjSOUQcycli二Qrr.Ekip0(.PregramZWTEMFintMitHiefirststrinpctsdf/士力總secortdstringiasdf/output:rmtch.word.zl-實驗4從鍵盤輸入數(shù)據(jù)弁顯示的實驗實驗內(nèi)容:將鍵盤輸入的2位十六進(jìn)制數(shù)轉(zhuǎn)換為等值的二進(jìn)制數(shù),并在屏幕上顯示。歹如:鍵入f2,則顯示1111001沈整代碼如下:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼STRING1DBpleaseinputastri
13、ng:$STRING2DB13,10;theoutputis:$STRING3DB13,10;inputerror,13,10;$DATASENDSSTACKSSEGMENT.word.zl-;此處輸入堆棧段代碼STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;此處輸入代碼段代碼L0:LEADX,STRING1;打印字符串STRING1MOVAH,09INT21HMOVAH,01;輸入第一個字符至AL中INT21HCMPAL,0ERROR1CMPAL,9EENTER1CMPAL,A.
14、word.zl-ERROR1CMPAL,FEENTER1CMPAL,aERROR1CMPAL,fEENTER1ERROR1:LEADX,STRING3;打印字符串STRING3MOVAH,09INT21HJMPL0ENTER1:CALLASC2BCD才巴ASCII碼轉(zhuǎn)化成十進(jìn)制數(shù)BCD碼MOVCL,4ROLAL,CLMOVBL,AL;把高四位放到BL寄存器中;輸入第二個字符.word.zl-MOVAH,01輸入第二個字符至AL中INT21HCMPAL,0ERROR1CMPAL,9EENTER2CMPAL,AERROR1CMPAL,FEENTER2CMPAL,aERROR1CMPAL,fEENT
15、ER2ENTER2:CALLASC2BCD才巴ASCII碼轉(zhuǎn)化成十進(jìn)制數(shù)BCD碼ADDBL,ALLEADX,STRING2;打印字符串STRING2.word.zl-MOVAH,09INT21HMOVCX,9CLC;清空標(biāo)志位SHOW:;顯示BL中的二進(jìn)制數(shù)DECCXCMPCX,0JENEXT;輸出完八位之后返回DOSROLBL,1;循環(huán)左移一位,若溢出為1,則CF=1JCM1JMPM2M1:MOVDL,1;若CF=1,轉(zhuǎn)至M1打印1MOVAH,02INT21HJMPSHOWM2:MOVDL,0;若CF=0,轉(zhuǎn)至M1打印0MOVAH,02INT21H.word.zl-JMPSHOWNEXT:M
16、OVAH,4CHINT21HASC2BCDPROCCMPAL,9EL1AL09,他1SUBAL,07H;若輸入的數(shù)為AF,或者af,貝U減7,A接在39H后面,AF=3AH3FH,af=5AH5FHL1:SUBAL,30H減30HANDAL,0FH;濾除高位,保留低位,因為af恰好比AF大20H,這樣afgft和AF的數(shù)值一樣了RETASC2BCDENDPCODESENDSENDSTART輸出結(jié)果為:(若輸出不在09,AF,af內(nèi),則重新輸入).word.zl-|DO&Eox3.74,Cpuspeed3O0Ceye-me仃kipDrPragram:DWTEMPpleaselll|JLLtdtr
17、iIMJ;tInputezrurpleAeInputaEtringzdsInputsnrorpleaseinputa&tring:3Pinputerrorpleftscinputastring:IZthnutputis:11116010PityxclPFromejidp0,rogrorn:DWL儲口iiipitstriiny:asdlli23k4j21zklTiljklidxabtKii1L-5Pr的窗Anyk由jtoconihme實驗6改變年月日的實驗實驗內(nèi)容:先在屏幕上顯示“whatisthedate(mm/dd/yy)?“從鍵盤輸入的月曰年能把計算機的系統(tǒng)日期改為你鍵入的值。完整代碼如下
18、:DATASSEGMENTS1DB0AH,0DH,whatisthedate(mm/dd/yy)?:$DATASENDSSTACKSSEGMENTSTACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKS.word.zl-START:MOVAX,DATASMOVDS,AXMOVDX,OFFSETS1MOVAH,09H;打印字符串whatisthedate(mm/dd/yy)?:INT21HMOVDX,0H;DX=CH=0MOVCH,0;MOVSI,0AHKAISHI:MOVCL,0;用來壓縮移位SHURU:MOVAH,01H;輸入字符存入AL
19、中INT21HMOVAH,0AH;10賦給AHCMPAL,0DH;AL=13則結(jié)束,設(shè)置日期JEGENGGAICMPAL,/;計算來判斷是年,月,日J(rèn)EZIZENG.word.zl-ANDAL,0FHCMPCH,0;等于0則轉(zhuǎn)月JEYUECMPCH,1;等于1則轉(zhuǎn)日J(rèn)ERICMPCH,2;等于2則轉(zhuǎn)年JENIANZIZENG:INCCHJMPSHURU;無條件轉(zhuǎn)移至SHURUYUE:ADDDH,ALCMPCL,0JNZKAISHIINCCLMOVAL,DHMULAHMOVDH,ALJMPSHURU;無條件轉(zhuǎn)移至SHURURI:.word.zl-ADDDL,ALCMPCL,0JNZKAISHII
20、NCCLMOVAL,DLMULAHMOVDL,ALJMPSHURU;無條件轉(zhuǎn)移至SHURUNIAN:CMPCL,0JNZXIABUADDBL,ALMOVCL,03H;3賦給CLJMPSHURU;無條件轉(zhuǎn)移至SHURUXIABU:MOVAH,0;清空AHMOVSI,BX;SI=BXSHLBX,CL;BX左移三位,乘以8.word.zl-SHLSI,1;SI左移一位,乘以2ADDBX,SI;兩個相加,即乘以10ADDBX,AX;BX加上新輸入的數(shù)字JMPSHURUGENGGAI:MOVCX,BXMOVAH,2BH;設(shè)置日期INT21HMOVAH,4CHINT21HCODESENDSENDSTART
21、輸出結(jié)果為:(設(shè)置2008年12月3日,注意如果要設(shè)置好系統(tǒng),否則可能計算機的日期改變不了).word.zl-實驗7將小寫字母轉(zhuǎn)換為大寫字母的實驗實驗內(nèi)容:接收鍵入字符(以Ctrl-c為結(jié)束),將小寫字母變?yōu)榇髮懽帜?,并在屏幕上顯示。完整代碼如下:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼STRING1DB13,10pleaseinputastring$STRING2DB13,10;theoutputstringis,$DATADB100DUP(00H),$DATASENDSSTACKSSEGMENT;此處輸入堆棧段代碼STACKSENDS.word.zl-CODESSEGMENTASSUM
22、ECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;此處輸入代碼段代碼M:LEASI,DATALEADX,STRING1;打印字符串1MOVAH,09INT21HINPUT:MOVAH,01;輸入字符CINT21HCMPAL,03HJEOUTPUTCMPAL,aMCMPAL,z.word.zl-JAMSUBAL,20H;減20H變小寫MOVSI,ALINCSIJMPINPUTOUTPUT:LEADX,STRING2;打印字符用2MOVAH,09INT21HLEASI,DATAL1:MOVDL,SICMPDL,00HJEENDINGMOVA
23、H,02INT21HINCSIJMPL1.word.zl-ENDING:MOVAH,4CHINT21HCODESENDSENDSTART運行結(jié)果為:(如果輸入的不在af中,則重新輸入)DOSBct074匚加1MMcyiJes,3口0,片口卡啟E.W/TEMPfilrrtXrkJinput,astringUinpiildstriny:PInputastrhiyinputqstringJshglEfsAagvtheovtputstrintfi等;LSH應(yīng)5JGU屋hsgPressanykeytdccmtLiuue_實驗8排序?qū)嶒?0-9)實驗內(nèi)容:從首地址為1000H開始存放10個數(shù),將這些數(shù)按降
24、序排列完整代碼如下:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼.word.zl-STRING1DBpleaseinput10number$STRING2DB13,10;thesortednumbersare$ORG1000HDATADB10DUP(00H),$DATASENDSSTACKSSEGMENT;此處輸入堆棧段代碼STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AX;此處輸入代碼段代碼LEADX,STRING1;輸入提示語pleseinput10numbers:MOVAH,09
25、INT21H.word.zl-MOVCX,10LEASI,DATAINPUT:MOVAH,01輸入字符至ALINT21HMOVSI,AL把AL賦給偏移地址為SI指向的單元INCSILOOPINPUTMOVBL,0L0:MOVCX,9LEASI,DATAL1:;比較第SI個數(shù)和第SI+1個數(shù)的大小MOVAL,SIINCSICMPAL,SICHANGE;若小于M轉(zhuǎn)CHANGEL2:LOOPL1;小循環(huán)(CX自動減1),若CX=0則結(jié)束L3:INCBL.word.zl-CMPBL,10L0;若大循環(huán)有1畋了,則轉(zhuǎn)OUTPUTJMPOUTPUTCHANGE:;交換兩個數(shù)XCHGAL,SI;交換,MOV
26、SI-1,AL;賦給SI-1JMPL2OUTPUT:LEADX,STRING2;輸入提示語thesortednumbersare:MOVAH,09INT21HMOVCX,10LEASI,DATAL4:;循環(huán)輸出MOVDL,SIMOVAH,02INT21HINCSI.word.zl-LOOPL4MOVAH,4CHINT21HCODESENDSENDSTART輸出結(jié)果為:里|口鏘呢乂白乂工四jOOOy;lcirran-cikip0.r&gam;DWTMPdeaseinpirtItJnumbers:125UHJbtJicsartednuinbcrsAreFrcssonyNeytocontimuc_實
27、驗8排序?qū)嶒灒ǘ辔粩?shù)排序)實驗內(nèi)容:從首地址為1000H開始存放10個數(shù),將這些數(shù)按降序排列.完整代碼如下:.word.zl-DATASEGMENT;CHANGE函數(shù)DI,SI為入口函數(shù),交換SI,DI的值,SI,DI值已經(jīng)大變BUFFERDB100DB?DB100DUP(?)DB$ORG1000HNEQU10;每個數(shù)最大為1帥;中間變量;中間變量;中間變量STOREDATADB110DUP(30H)TEMP1DB12DUP(24H)TEMP2DB12DUP(24H)TEMP3DB12DUP(24H)DATAENDSSTACKSEGMENTPARASTACKDW60HDUP(0)STACKEN
28、DSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACKSTART:MOVAX,DATA.word.zl-MOVDS,AX;MOVAX,STACK;MOVSS,AX;可以有可以無,因為其已經(jīng)默認(rèn)為SSTMOVDX,OFFSETBUFFERMOVAH,0AHINT21HCALLTURNLINELEASI,BUFFERLEADI,STOREDATACALLBUFFERTOSTORECALLTURNLINELEASI,STOREDATACALLPAREGO:MOVSI,OFFSETSTOREDATAMOVCL,110PRINT:MOVDL,SICMPDL,30H.wor
29、d.zl-JNEPRINT1CMPAL,1JEPRINT1;打印該有的0INCSILOOPPRINTPRINT1:CMPDL,2CHJEPRINT0JIXU:MOVAH,02HINT21HCMPDL,2CHJNEGOON5MOVAL,0JMPGOON6PRINT0:CMPAL,0JNEJIXUMOVDL,30HMOVAH,02HINT21H.word.zl-MOVDL,2CHJMPJIXUGOON5:MOVAL,1GOON6:INCSILOOPPRINTMOVAH,01HINT21HMOVAH,4CHINT21HPAREPROC;以$為入口傳遞MOVBX,SI;LEADI,TEMP2;GETL
30、AST:;CALLTEMPSAVE;INCDL;CMPDL,N;JEGOON1;LEADI,TEMP2.word.zl-JMPGETLAST;TEMP2始終指向當(dāng)前最后一個數(shù);GOON1:MOVCL,NPARE1:MOVSI,BXLEADI,TEMP1CALLTEMPSAVE;TEMP1指向第一個數(shù),錯啦,為什么呢,因為那樣比不會進(jìn)行變化MOVSI,BXMOVDH,1LEADI,TEMP1PUSHSIPARE2:LODSBMOVAH,DICMPAL,2CHJEEQUALCMPAL,AHBELOW.word.zl-CMPAL,AHJAABOVEINCDIJMPPARE2BELOW:INCDHPOPSIPUSHSILEADI,TEMP1CALLTEMPSAVE;使TEMP1存入當(dāng)前最小,因為TEMP1當(dāng)前元已經(jīng)存在了;不可以再轉(zhuǎn)存,否則出錯POPSIADDSI,NINCSIPUSHSICMPDH,CLJAGOON2LEADI,TEMP1JMPPARE2.word.zl-EQUAL:INCDH;不交換POPSIADDSI,NINCSIPUSHSICMPDH,CLJAGOON2;比較CL次LEADI,TEMP1JMP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東血液凈化護(hù)理知識競賽考試題庫(含答案)
- 角度調(diào)制與解調(diào)課程設(shè)計
- 校車安全行駛路線及運行方案
- 高中人際技巧課程設(shè)計
- php課程設(shè)計貼吧貼吧
- 湖州師范學(xué)院《中學(xué)思想政治教學(xué)論》2022-2023學(xué)年第一學(xué)期期末試卷
- 建筑安全評價課程設(shè)計
- 辣椒的歷史課程設(shè)計
- 校園全光網(wǎng)(POL)技術(shù)方案
- 2025屆湖南省邵陽市邵東縣第四中學(xué)物理高一上期末檢測模擬試題含解析
- 領(lǐng)導(dǎo)干部的心理調(diào)適課件
- 家政服務(wù)高級培訓(xùn)課件
- 中醫(yī)診斷學(xué)中的婦科疾病與具體病例分析
- 小學(xué)音樂(人音版)五年級上冊《外婆的澎湖灣》
- 《太陽電池工作原理》課件
- 人民調(diào)解工作業(yè)務(wù)知識講座
- 2023年上海市中考英語試題及參考答案(word解析版)
- 《杰出的科學(xué)家》課件
- 胃竇惡性腫瘤相關(guān)知識講座
- 倉庫降本增效方案培訓(xùn)課件
- 運動前后的熱身與放松活動
評論
0/150
提交評論