版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)一顯示程序?qū)嶒?yàn)1emu8086介紹Emu8086-AssemblerandMicroprocessorEmulator是一個(gè)可在Windows環(huán)境下運(yùn)行的8086CPU匯編仿真軟件,Emu8086集源代碼編輯器,匯編/反匯編工具以及可以運(yùn)行debug的模擬器(虛擬機(jī)器)于一身,它優(yōu)于一般編譯器的地方在于提供了一個(gè)虛擬的0 x86環(huán)境,擁有自己一套獨(dú)立的“硬件”,可以完成一些純軟件編譯器無(wú)法完成的功能例如ed顯示,交通燈,步進(jìn)電機(jī)等等,而且動(dòng)態(tài)調(diào)試(DEBUG)時(shí)非常方便一軟件啟動(dòng)啟動(dòng)界面如圖1所示,用戶可以選擇新建文本、程序?qū)嵗?、啟?dòng)指南、近期文檔。圖1啟動(dòng)界面newcodseKdtnpl
2、asqurckstartuitorrecentfHes注冊(cè)的用戶名隨意,密碼112,即可成功。.新建文件單擊圖1中的“New”選項(xiàng),軟件會(huì)彈出如圖2所示的選擇界面。ij:choosecode1eplateCOMtemplate-simpleandtinyexecutablefileformalpuremachirecode.CEXEtemplate-advancedewecutableFile,header:relocationchecksum.BINtemplate-purebinaryfilm”allowsallsortsofcustomizations(advanced)廠BOOTtem
3、plate-forcreatingfloppydiskbootrecordsveryadvancedtheemulataruseFlatAssembler/Intelsyntaxsee:fasm_compatibility.asminexamplesCancel;ECOM模板一一適用于簡(jiǎn)單且不需分段的程序,所有內(nèi)容均放在代碼段中,程序代碼默認(rèn)從ORG0100H開始;EXE模板一一適用于需分段的復(fù)雜程序,內(nèi)容按代碼段、數(shù)據(jù)段、堆棧段劃分。需要注意的是采用該模板時(shí),用戶不可將代碼段人為地設(shè)置為ORG0100H,而應(yīng)由編譯器自動(dòng)完成空間分配;BIN模板一一二進(jìn)制文件,適用于所有用戶定義結(jié)構(gòu)類型;BO
4、OT模板一一適用于在軟盤中創(chuàng)建文件。此外,若用戶希望打開一個(gè)完全空的文檔,則可選擇emptyworkspace的選項(xiàng)。三.編譯和加載程序用戶可根據(jù)上述選擇的模板中編寫程序,如圖3所示。該編輯界面集文檔編輯、指令編譯、程序加載、系統(tǒng)工具、在線幫助為一體,其菜單功能如表1所示。shswaIeport5aretrmu;thltechnoiogiySilloustoexternaladd-sndevieJFd嚴(yán)emuS0&61such-asLeddlisplaysHsrsabo-Ls.tersi;anyoneGancreateananinHatedvirtUiSiLdwice.qaGiCies9vlr
5、tual.perInthi5fiIelG;eiwtf(nake_biin#nameR,ledJstart1eddllfrexe-ffmovax1234cut199,axmouax.567ocwt1?TaxQip_W1IKtdEVVhit_日戈苦匸disy.exs3文檔編輯界面編寫完程序后,用戶只需單擊工具欄上的“compile”按鈕,即可完成程序的編譯工作,并彈出如圖4所示的編譯狀態(tài)界面。若有錯(cuò)誤則會(huì)在窗口中提示,若無(wú)錯(cuò)誤則還會(huì)彈出保存界面,讓用戶將編譯好的文件保存相應(yīng)的文件夾中。默認(rèn)文件夾為emu8086MyBuild,但您可以通過菜單中assembler/setoutputdirector
6、y對(duì)默認(rèn)文件夾進(jìn)行修改。用戶保存的文件類型與第一階段所選擇的模板有關(guān)。完成編譯和保存文件后,用戶可按下圖4中的“close”按鈕先關(guān)閉該窗體,再利用工具欄上的“emulate”按鈕打開真器界面和原程序界面進(jìn)行真調(diào)試,也可以按下圖4中的Run按鈕運(yùn)行直接程序。asseBblerstatusexternalviewAssembledin2passes.Timespent:.093seconds.isassembledsuccessfullyinto97bytes.Listing也saved:hi-world.corm.listSymboltableissaved:.eynnbcdview,exte
7、rnal.closerun圈4編譯狀態(tài)界面表1編譯器菜單功能一級(jí)菜單名稱二級(jí)菜單名稱三級(jí)菜單名稱功能file文件new新建comtemplatecom模板e(cuò)xetemplateexe模板bintemplatebin模板boottemplateboot模板e(cuò)xample實(shí)例open打開文件save保存文件saveas另存為prints打印文件exporttoHTML轉(zhuǎn)換為超文本文件exit退出edit編輯undo取消redo重復(fù)cut剪切cope復(fù)制paste粘貼selectall選擇全部find查找findnext查找下一個(gè)replace代替indent縮進(jìn)outdent凸出commentbl
8、ock將被選塊變?yōu)樽⑨寀ncommentblock將被注釋變?yōu)橹噶頰dvancededitormacros高級(jí)宏匯編advanced高級(jí)設(shè)置Showlinenumbers顯示仃編號(hào)tabitfyselection空格轉(zhuǎn)換為定位字元untabitfyselection定位字元轉(zhuǎn)換為空格lowercaseselection用小寫字母表示uppercaseselection用大與字母表示displaywhitespace顯示出空格出空間bookmark書簽togglebookmark在光標(biāo)處放置標(biāo)簽previousbookmark跳到上一個(gè)標(biāo)簽處nextbookmark跳到下一個(gè)標(biāo)簽處jumptof
9、irst跳到第一個(gè)標(biāo)簽處jumptolast跳到最后一個(gè)標(biāo)簽處clearallbookmark清除所有標(biāo)簽assembler匯編compile編譯compileandloadintheemulation編譯并加載到真器中fasmFasm匯編setoutputdirectory設(shè)置輸出文件夾emulator真器showemulator顯示真窗口assembleandloadintheemulator編譯并加載到真器中math數(shù)學(xué)計(jì)算multibasecalculator多進(jìn)制基本計(jì)算器baseconverter基本轉(zhuǎn)換器asciicodeASCII碼表help幫助documentationand
10、tutorials文檔及指南checkforanupdate軟件更新檢查about關(guān)于軟件四仿真調(diào)試當(dāng)用戶完成程序編譯后,利用工具欄中的“emulate”按鈕可將編譯好的文件加載到仿真器進(jìn)行真調(diào)試。除使用“emulate”按鈕外,用戶也可以用菜單欄中的assembler/compileandloadintheemulation或emulator/assembleandloadintheemulator打開仿真器。仿真器界面如圖5所示。;c7oo:oioal.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.ll.l00ocT
11、00::G0::ET:|oo00070001000700FFFE00000000000007000700BBBZ77777777777777:Jf:07100:07101:07102:100830B00840300機(jī)器碼區(qū)3456789ABCDEF01-00000000000011D0830B00D0808E8C1B01B00C1B0B8D564367005640426-1&0180001&0&4101001002010112MOVAX,00003hINMOMOINMOMOMOMOMOMOMOMO-010hAX,01003hBX蠱00000h01&hAX,0B800hDSZAXb100002b
12、C00004bC00006bC00008b0000A源代碼區(qū)變量窗口虛擬屏幕源程序界面程序復(fù)位堆棧窗口輔助工具;可打開存儲(chǔ)專寄存器、運(yùn)算器、停止D航呂調(diào)試窗蛙行卑性.探和羌.程宮托和I潔的藝帝標(biāo)記位窗口圈5仿真器界面當(dāng)用戶將程序加載到仿真器后,會(huì)同時(shí)打開仿真器界面和源程序界面,用戶在仿真器界面中也可以同時(shí)看到源代碼和編譯后的機(jī)器碼。點(diǎn)擊的任意一條源程序指令,則對(duì)應(yīng)的機(jī)器代碼顯示為被選顯示狀態(tài),與此同時(shí),上面的代碼指針也會(huì)相應(yīng)變化。用戶也可以通過這種操作了解,數(shù)據(jù)段和堆棧段中各變量或數(shù)據(jù)在存儲(chǔ)器中的情況。用戶可以利用工具欄中的“singlestep”按鈕進(jìn)行單步跟蹤調(diào)試,以便仔細(xì)觀察各寄存器、存
13、儲(chǔ)器、變量、標(biāo)記位等情況,這對(duì)于程序初始調(diào)試時(shí)十分有用;當(dāng)程序調(diào)試完畢,或需要連續(xù)運(yùn)行觀察時(shí),則可以使用“run”按鈕;當(dāng)希望返回上一步操作時(shí),則可以使用“stepback”按鈕;若單擊“reload按鈕,則真器會(huì)重新加載程序,并將指令指針指向程序的第一條指令;您也可以利用“l(fā)oad”按鈕,從您保存的文件夾中加載其它程序。用戶除使用上述工具欄中的按鈕進(jìn)行仿真調(diào)試外,還可以利用其菜單中的其它功能進(jìn)行更高級(jí)的調(diào)試和設(shè)置。菜單的詳細(xì)功能見表2所示。表2真器菜單功能一級(jí)菜單名稱二級(jí)菜單名稱功能file文件loadexecutable.加載要執(zhí)行的程序reload重新加載程序examples打開實(shí)例re
14、setemulatorandram復(fù)位真器和RAMsetcommandlineparameter設(shè)置命令行參數(shù)settheemulatorsstate保存真器設(shè)置loadformpreviousstate載入原先保存的設(shè)置math數(shù)學(xué)計(jì)算multibasecalculator多進(jìn)制基本計(jì)算器baseconverter基本轉(zhuǎn)換器debugsinglestep單步跟蹤singleover單步stepback單步返回stoponcondition設(shè)置停止運(yùn)行的條件rununtil運(yùn)行到光標(biāo)處run連續(xù)運(yùn)行setbreakpoint在光標(biāo)處設(shè)置斷點(diǎn)clearbreakpoint清除所有斷點(diǎn)showcu
15、rrentbreakpoint顯示當(dāng)前斷點(diǎn)指令showcurrentinstruction(atCS:IP)顯示當(dāng)前指令setCS:IPtoselectedposition將被選指令設(shè)定為當(dāng)前指令view觀察loganddebug.exeemulation打開debug.調(diào)試窗口extendvalueviewer打開擴(kuò)展數(shù)值觀察器stack打開堆棧窗口variables打開變量窗口symboltable打開標(biāo)記表listing顯示源程序及目標(biāo)文件內(nèi)容originalsourcecode打開源程序代碼窗口option軟件高級(jí)設(shè)置,可對(duì)字體、顏色、文本格式、鍵盤輸入等進(jìn)行設(shè)置arithmetic&
16、logicalunit選擇打開存儲(chǔ)器、奇存器等單元,與AUX按鈕功能相同flag打開標(biāo)記位窗口lexicalflaganalyser打開文本說(shuō)明格式的標(biāo)記位窗口asciicode打開ASCII碼表emulatorscreen打開模擬屏幕窗口external外部真器startdebug.exe啟動(dòng)windows的debug真調(diào)試器commandprompt打開DOS命令窗口run在DOS環(huán)境下運(yùn)行程序virtualdevices虛擬設(shè)備LED-Disply.exeLED顯示器printer.exe打印機(jī)robit.exe機(jī)器人simple.exe讀寫端口simplest.exe在屏幕上讀寫端口s
17、teppermotor.exe步進(jìn)馬達(dá)thermometer.exe溫度控制tranfficlights交通燈控制VGASTATE.exe顯示屏控制Virtualdrive虛擬驅(qū)動(dòng)盤bootformvirtualfloppy(floppy0)從虛擬的軟盤中導(dǎo)入程序write512byteat0000:7C00tobootsector(floppy_0)(將存儲(chǔ)器中07C00單兀開始的512個(gè)字節(jié)寫到軟盤中write“.bin”filetofloppy將bin文件寫到軟盤中createnewfloppydrive創(chuàng)建一個(gè)新的軟盤2實(shí)驗(yàn)?zāi)康氖煜mu8086集成環(huán)境和調(diào)試器的使用。掌握部分DOS功
18、能調(diào)用使用方法。3實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)要求顯示一串字符。注釋:INT10H是由BIOS對(duì)屏幕及顯示器所提供的服務(wù)程序,這些服務(wù)程序也加掛在INT10H內(nèi)。使用INT10H中斷服務(wù)程序時(shí),先指定AH寄存器為下表編號(hào)其中之一,該編號(hào)表示欲調(diào)用的功用,而其他寄存器的詳細(xì)說(shuō)明,參考表后文字,當(dāng)一切設(shè)定好之后再調(diào)用INT10H。AH:OOH設(shè)置顯示器模式AL:03H80X2516色文本AH:10H設(shè)置顏色中斷。AL:03H觸發(fā)閃爍/亮顯位4.參考程序:namehi-world;thisexampleprintsouthelloworld!;bywritingdirectlytovideomemory.;inv
19、gamemory:firstbyteisasciicharacter,bytethatfollowsischaracterattribute.;ifyouchangethesecondbyte,youcanchangethecolorof;thecharacterevenafteritisprinted.;characterattributeis8bitvalue,;high4bitssetbackgroundcolorandlow4bitssetforegroundcolor.;hexbincolor;00000black;10001blue;20010green;30011cyan;401
20、00red;50101magenta;60110brown;70111lightgray;81000darkgray;91001lightblue;a1010lightgreen;b1011lightcyan;c1100lightred;d1101lightmagenta;e1110yellow;f1111whiteorg100h;setvideomodemovax,3int10h;textmode80 x25,16colors,8pages(ah=0,al=3);doit!;cancelblinkingandenableall16colors:movax,1003hmovbx,0int10h
21、;setsegmentregister:movax,0b800hmovds,ax;printhelloworld;firstbyteisasciicode,secondbyteiscolorcode.mov02h,Hmov04h,emov06h,lmov08h,lmov0ah,omov0ch,mov0eh,Wmov10h,omov12h,rmov14h,lmov16h,dmov18h,!;colorallcharacters:movex,12;numberofcharacters.movdi,03h;startfrombyteafterhc:movdi,11101100b;lightred(1
22、100)onyellow(1110)adddi,2;skipovernextasciicodeinvgamemory.loopc;waitforanykeypress:movah,0int16hretDS數(shù)據(jù)段寄存器:數(shù)據(jù)所存放段的起始地址b800h,觀察內(nèi)存b800:0000的存放內(nèi)容movax,0b800hmovds,ax改為movds,0b800h是否可行實(shí)驗(yàn)二十進(jìn)制數(shù)的BCD碼加法運(yùn)算程序?qū)嶒?yàn)1實(shí)驗(yàn)?zāi)康恼莆者\(yùn)算類指令編程及調(diào)試方法。掌握運(yùn)算類指令對(duì)各狀態(tài)標(biāo)志位的影響及測(cè)試方法。2實(shí)驗(yàn)原理(1)二進(jìn)制數(shù)在計(jì)算機(jī)上進(jìn)行運(yùn)算是非常簡(jiǎn)單的。但是,通常人們習(xí)慣于用十進(jìn)制數(shù)。在計(jì)算機(jī)中十進(jìn)制數(shù)是用
23、BCD碼來(lái)表示的,BCD碼有兩類:一類叫壓縮型BCD碼,一類叫非壓縮型BCD碼。壓縮BCD碼與非壓縮BCD碼的區(qū)別一一壓縮BCD碼的每一位用4位二進(jìn)制表示,一個(gè)字節(jié)表示兩位十進(jìn)制數(shù)。例如10010110B表示十進(jìn)制數(shù)96D;非壓縮BCD碼用1個(gè)字節(jié)表示一位十進(jìn)制數(shù),高四位總是0000,低4位的00001001表示09.例如00001000B表示十進(jìn)制數(shù)8.十進(jìn)制0oooot0001Z0010300114Q1Q0501016011070111g1000910018421BCD碼是最基本和最常用的BCD碼,它和四位自然二進(jìn)制碼相似,各位的權(quán)值為8、4、2、1,故稱為有權(quán)BCD碼。和四位自然二進(jìn)制碼
24、不同的是,它只選用了四位二進(jìn)制碼中前10組代碼,即用00001001分別代表它所對(duì)應(yīng)的十進(jìn)制數(shù),余下的六組代碼不用。用BCD碼進(jìn)行加、減、乘、除運(yùn)算,通常采用兩種方法:一種是在指令系統(tǒng)中設(shè)置一套專用于BCD碼運(yùn)算的指令;另一種是利用二進(jìn)制數(shù)的運(yùn)算指令算出結(jié)果,然后再用專門的指令對(duì)結(jié)果進(jìn)行修正(調(diào)整),使之轉(zhuǎn)變?yōu)檎_的BCD碼表示的結(jié)果。8086/8088指令系統(tǒng)所采用的是后一種方法。BCD碼的運(yùn)算規(guī)則:BCD碼是十進(jìn)制數(shù),而運(yùn)算器對(duì)數(shù)據(jù)做加減運(yùn)算時(shí),都是按二進(jìn)制運(yùn)算規(guī)則進(jìn)行處理的。這樣,當(dāng)將BCD碼傳送給運(yùn)算器進(jìn)行運(yùn)算時(shí),其結(jié)果需要修正。修正的規(guī)則是:當(dāng)兩個(gè)BCD碼相加,如果和等于或小于100
25、1(即十進(jìn)制數(shù)9),不需要修正;如果相加之和在1010到1111(即十六進(jìn)制數(shù)0AH0FH)之間,則需加6進(jìn)行修正;如果相加時(shí),本位產(chǎn)生了進(jìn)位,也需加6進(jìn)行修正。這樣做的原因是,機(jī)器按二進(jìn)制相加,所以4位二進(jìn)制數(shù)相加時(shí),是按“逢十六進(jìn)一”的原則進(jìn)行運(yùn)算的,而實(shí)質(zhì)上是2個(gè)十進(jìn)制數(shù)相加,應(yīng)該按“逢十進(jìn)一”的原則相加,16與10相差6,所以當(dāng)和超過9或有進(jìn)位時(shí),都要加6進(jìn)行修正。需要修正BCD碼運(yùn)算值的舉例。(1)計(jì)算5+8;(2)計(jì)算8+8解:(1)將5和8以8421BCD輸入機(jī)器,則運(yùn)算如下:0101+)10001101結(jié)果大于9+)0110加6修正10011即13的BCD碼結(jié)果是0011,即十
26、進(jìn)制數(shù)3,還產(chǎn)生了進(jìn)位。5+8=13,結(jié)論正確。(2)將8以8421BCD輸入機(jī)器,則運(yùn)算如下:1000+)100010000結(jié)果大于9+)0110加6修正1011016的BCD碼結(jié)果是0110,即十進(jìn)制的6,而且產(chǎn)生進(jìn)位。8+8=16,結(jié)論正確。(2)非壓縮型BCD碼加法調(diào)整指令A(yù)AA(ASCIIAdjustforAddition)指令格式:AAAAAA也稱為加法的ASCII調(diào)整指令。指令后面不寫操作數(shù),但實(shí)際上隱含累加器操作數(shù)AL和AH。指令的操作為:如果(AL)A0FH9,或(AF)=1貝I(AL)(AL)+06H(AH)(AH)+1(AF)1(CF)-(AF)(AL)-(AL)A0FH
27、)否則(AL)-(AL)A0FH)由上可見,指令將影響AF和CF標(biāo)志,但狀態(tài)標(biāo)志位SF、ZF、PF和0F的狀態(tài)不確定。在用AAA指令調(diào)整以前,先用指令A(yù)DD(多字節(jié)加法時(shí)用ADC)進(jìn)行8位數(shù)的加法運(yùn)算,相加結(jié)果放在AL中,用AAA指令調(diào)整后,非壓縮型BCD碼結(jié)果的低位在AL寄存器,高位在AH寄存器。3實(shí)驗(yàn)內(nèi)容:本實(shí)驗(yàn)要求計(jì)算X+Y=Z,其中,X、Y、Z為BCD碼,其中X=09H,Y=05H。4滲考程序:;thisexampleshowstheuseofaaainstruction(asciiadjustafteraddition).;itisusedtoaddhugebcdnumbers.na
28、mebcd_aaaorg100h;firstnumber9:movah,09h;secondnumber5:moval,05h;al=al+ah=;=09h+05h=0ehaddal,ah;cleartensbyteofbcd;result:xorah,ah;adjustresulttobcdform,;ah=1,al=4-14aaa;printtheresult:;storecontentsof;axregister:movdx,ax;printfirstdigit:movah,0eh;converttoascii:ordh,30hmoval,dhint10h;printseconddigi
29、t:;converttoascii:ormovintdl,30hal,dl10h;waitforanykeypress:movah,0int16hret;returncontroltooperatingsystem.5總結(jié)思考:(l)xor指令含義;(2)aaa指令的操作過程實(shí)驗(yàn)三串操作類指令應(yīng)用程序1實(shí)驗(yàn)?zāi)康恼莆沾僮黝愔噶罹幊碳罢{(diào)試方法。掌握串操作類指令對(duì)各狀態(tài)標(biāo)志位的影響及測(cè)試方法。2實(shí)驗(yàn)原理(1)在計(jì)算機(jī)中,大部分?jǐn)?shù)據(jù)存放在主存中,8086CPU提供了一組處理主存中連續(xù)存放的數(shù)據(jù)串的指令一一串操作指令。串操作指令中,源操作數(shù)用寄存器SI尋址,默認(rèn)在數(shù)據(jù)段DS中;目的操作數(shù)用寄存器DI尋
30、址,默認(rèn)在附加段ES中。每執(zhí)行一次串操作指令,作為源地址指針的SI和作為目的地址指針的DI將自動(dòng)修改:+/T(對(duì)于字節(jié)串)或+/-2(對(duì)于字串)。地址指針時(shí)增加還是減少取決于方向標(biāo)志DF。在系統(tǒng)初始化后或者執(zhí)行指令CLD指令后,DF=0,此時(shí)地址指針增1或2;在執(zhí)行指令STD后,DF=1,此時(shí)地址指針減1或2。串操作指令尋址方式:源操作數(shù)和目的操作數(shù)分別使用寄存器DS:SI和ES:DI進(jìn)行間接尋址,源指針DS:SI和目的指針ES:DI將自動(dòng)進(jìn)行修改:1、2、4,其對(duì)應(yīng)的分別是字節(jié)操作、字操作和雙字操作。串比較指令:CMPSB;字節(jié)串比較:DS:SI-ES:DI,SISI+/T,DIDI+/TC
31、MPSW;字串比較:DS:SI-ES:DI,SI-SI+/-2,DI-DI+/-2比較指令的功能是比較源串與目的串是否相同,并根據(jù)其減法結(jié)果設(shè)置標(biāo)志位;指令在每次比較后修改SI和DI寄存器的值,使之指向下一個(gè)元素。串掃描指令:格式1:SCASB功能1:AL(DI)格式2:SCASW功能2:AX(DI);字節(jié)操作DIDI1;字操作DIDI2重復(fù)前綴指令:任何一個(gè)串操作指令,都可以在前面加一個(gè)重復(fù)前綴,以實(shí)現(xiàn)串操作的重復(fù)執(zhí)行,重復(fù)次數(shù)隱含在CX寄存器中REP;REP前綴用在MOVS、STOS、LODS指令前,每次執(zhí)行一次指令,CX減1;直到CX=O,重復(fù)執(zhí)行結(jié)束.REPZ;也可以表示為REPE,用
32、在CMPS、SCAS指令前,每執(zhí)行一次串指令CX減1,并判斷ZF標(biāo)志是否為0;只要CX=0或ZF=0,則重復(fù)執(zhí)行結(jié)束。REPNZ;也可以表達(dá)為REPNE,用在CMPS、SCAS指令前,每執(zhí)行一次串操作指令CX減1,并判斷ZF標(biāo)志是否為1,只要CX=0或ZF=1,則重復(fù)執(zhí)行結(jié)束。REP前綴可以理解為“當(dāng)數(shù)據(jù)串沒有結(jié)束(CXH0),則繼續(xù)傳送”REPZ/REPE前綴可以理解為“當(dāng)數(shù)據(jù)串沒有結(jié)束(CXH0),并且串相等(ZF=1)則繼續(xù)比較”REPNZ/REPNE前綴可以理解為“當(dāng)數(shù)據(jù)串沒有結(jié)束(CXH0),并且串不相等(ZF=0)則繼續(xù)比較”(2)$是指當(dāng)前指令的地址3實(shí)驗(yàn)內(nèi)容3.1利用repec
33、mps指令比較兩個(gè)字符串是否相等。若相等,顯示字符Y,否則顯示N。3.2利用repnescasb指令在一個(gè)字符串中查找一個(gè)指定的字符。4滲考程序:41;cmpsborg100h;setforwarddirection:cld;loadsourceintods:si,;loadtargetintoes:di:movax,csmovds,axmoves,axleasi,str1leadi,str2;setcountertostringlength:movcx,size;compareuntilequa
34、l:repecmpsbjnznot_equal;yes-equal!movmovintal,yah,0eh10hjmpexit_herenot_equal:;no-notequal!movmovintal,nah,0eh10hexit_here:;waitforanykeypress:movah,0int16hret;stringsmusthaveequallengths:x1:str1dbteststringstr2dbteststringsize=($-x1)/24.2;100h
35、jmpstartstr1dbaaabbbxddds_founddbyes-found!,0Dh,0Ah,$s_notdbno-notfound!,0Dh,0Ah,$find_whatequxstart:;setforwarddirection:cld;setcountertostringsize:movcx,10;loadstringaddressintoes:dimovax,csmoves,axleadi,str1;wewilllookforthecharacterinstring:moval,find_whatrepnescasbjzfoundnot_found:;no-notfound!
36、movdx,offsets_notmovah,9int21hjmpexit_herefound:;yes-found!movdx,offsets_foundmovah,9int21h;waitforanykeypress.movah,0int16hexit_here:ret5.思考寫出參考程序1和2的流程圖實(shí)驗(yàn)四堆棧指令程序1實(shí)驗(yàn)?zāi)康模?)掌握堆棧類指令編程及調(diào)試方法。(2)掌握堆棧類指令對(duì)各狀態(tài)標(biāo)志位的影響及測(cè)試方法。2實(shí)驗(yàn)原理堆棧是存儲(chǔ)器中專用的緩沖區(qū),用于暫存寄存器數(shù)據(jù)或地址指針,push/pop就用于堆棧的操作,這兩個(gè)指令一般用在:1子程序調(diào)用,為了保護(hù)現(xiàn)場(chǎng),把所要用的寄存器中的內(nèi)容先
37、暫時(shí)保存起來(lái),在子程序調(diào)用結(jié)束之前,按照先進(jìn)后出的原則,把數(shù)據(jù)恢復(fù)。2有時(shí)候,需要臨時(shí)用一下某些寄存器,也可用一下,憑個(gè)人喜好。堆棧是一個(gè)先進(jìn)后出的主存區(qū)域,位于堆棧段中,使用SS段寄存器記錄器段地址。棧只有一個(gè)出口,即當(dāng)前棧頂。棧頂是地址較小的一端(低端),它用堆棧指針寄存器SP指定。堆棧的兩種基本操作,對(duì)應(yīng)兩條基本指令:(1)進(jìn)棧指令push進(jìn)棧指令先使堆棧指令sp減2,然后把一個(gè)字操作數(shù)存入堆棧頂部。堆棧操作的對(duì)象只能是字操作數(shù),進(jìn)棧時(shí)底字節(jié)存放于低地址,高字節(jié)存放于高地址,sp相應(yīng)向低地址移動(dòng)兩個(gè)字節(jié)單元。(2)出棧指令pop出棧指令把棧頂?shù)囊粋€(gè)字傳送至指定的目的操作數(shù),然后堆棧指針s
38、p加2。目的操作數(shù)應(yīng)為字操作數(shù),字從棧頂彈出時(shí),低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)。注意:因?yàn)槎褩V羔榮p總是指向已經(jīng)存入數(shù)據(jù)的棧頂(不是空單元),所以PUSH指令是將(SP)減2,后將內(nèi)容壓棧(即先修改SP是指指向空單元,后壓入數(shù)據(jù)),而POP是先從棧頂彈出一個(gè)字,后將堆棧指針SP加2.用PUSH指令和POP指令時(shí)只能按字訪問堆棧,不能按字節(jié)訪問堆棧。3實(shí)驗(yàn)內(nèi)容通過堆棧指令觀察堆棧寄存器內(nèi)容的變化4參考程序:;thissampleshowshowthestackworks.;clickstackbuttoninemulatortoseethecontentsofthestack.;sta
39、ckisimportantelementincomputerarchitecture.;thiscodedoesnothinguseful,exceptprintingHiintheend.;waitforanykeypressnamestackorg100h;createtinycomfile.movpushax,1234haxmovpushdx,5678hdxpoppopbxcx;functioncallpushesipvalueofthenextinstruction:calltfuncmovpushpopax,7890haxbx;interruptsarelikefuntions,;b
40、utinadditiontheypushcodesegmentintothestackmovintax,310h;setstandartvideomode.;atypicaluseofstackistosetsegmentregisters.;setdstovideomemorysegment:movpushpopax,0b800haxds;printhi:movmov170h,H172h,i;colorattributeforhmov171h,11001110b;colorattributeforimov173h,10011110bmovintah,016h;herewepoptheipva
41、lue,;andreturncontroltotheoperatingsystem:ret;thetestprocedure:tfuncprocxorbx,bxxorcx,cx;herewepoptheipvalue,;andreturncontroltothemainprogram:retendp5.思考列出參考程序的堆棧內(nèi)容變化過程實(shí)驗(yàn)五求找最大值和最小值程序設(shè)計(jì)1實(shí)驗(yàn)?zāi)康恼莆毡容^類指令編程及調(diào)試方法。掌握綜合程序的設(shè)計(jì)及調(diào)試2實(shí)驗(yàn)原理微機(jī)系統(tǒng)的內(nèi)存是分段管理的,為了與之相對(duì)應(yīng),匯編語(yǔ)言源程序也分若干個(gè)段來(lái)構(gòu)成。8086CPU有四個(gè)段寄存器CS,DS,ED,SS.2.1段定義段名SEGME
42、NT,;段內(nèi)的具體內(nèi)容,段名ENDS例如參考程序的數(shù)據(jù)段DDATASEGMENTMES1DBTheleastnumberis:$MES2DB0AH,0DH,Thelargestnumberis:$NUMBDB0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9HDDATAENDS代碼段CODESEGMENTASSUMECS:CODE,DS:DDATACODEENDS2.2段寄存器說(shuō)明語(yǔ)句每個(gè)段都要與一個(gè)段寄存器建立一種對(duì)應(yīng)關(guān)系。建立這種對(duì)應(yīng)關(guān)系的說(shuō)明語(yǔ)句格式:ASSUME段寄存器名:段名,段寄存器名:段名,.(1)通常情況下,代碼段的第一條語(yǔ)句就是用ASSUME語(yǔ)句來(lái)說(shuō)明段寄存
43、器與段之間的對(duì)應(yīng)關(guān)系。參考程序ASSUMECS:CODE,DS:DDATA該語(yǔ)句說(shuō)明:CS對(duì)應(yīng)于代碼段CODE,DS對(duì)應(yīng)于數(shù)據(jù)段DDATA(2)ASSUME說(shuō)明語(yǔ)句只起說(shuō)明作用,它不會(huì)對(duì)段寄存器賦值,所以,必須對(duì)有關(guān)段寄存器賦值,參考程序代碼:MOVAX,DDATAMOVDS,AX3)代碼段寄存器不能由程序員在源程序中對(duì)其賦值,其值是由操作系統(tǒng)在裝入它進(jìn)入系統(tǒng)運(yùn)行時(shí)自動(dòng)賦值的(4)堆棧段是一個(gè)特殊的段,在程序中可以定義它,也可以不定義。除了要生成COM型執(zhí)行文件的源程序外,一個(gè)完整的源程序一般最好定義堆棧段。如果在程序中不定義堆棧段,那么,操作系統(tǒng)在裝入該執(zhí)行程序時(shí)將自動(dòng)為其指定一個(gè)64K字節(jié)
44、的堆棧段。在源程序中,可用以下方法來(lái)定義堆棧段STACK1SEGMENTSTACK定義一個(gè)堆棧段,其段名為STACK1DB256DUP(?)STACK1ENDS上述段定義說(shuō)明該段是堆棧段,系統(tǒng)會(huì)自動(dòng)把段寄存器SS和棧頂寄存器SP與該堆棧段之間建立相應(yīng)的關(guān)系,并設(shè)置其初值,而不用在代碼段對(duì)它們進(jìn)行賦值2.3偽指令END完整的源程序是分段結(jié)構(gòu)形式,由若干邏輯段組成,整個(gè)源程序以END語(yǔ)句結(jié)束。偽指令END表示源程序到此為止,匯編程序?qū)υ撜Z(yǔ)句之后的任何內(nèi)容都不作處理,所以,通常情況下,偽指令END是源程序的最后一條語(yǔ)句。偽指令END后面可附帶一個(gè)在程序中已定義的標(biāo)號(hào),由該標(biāo)號(hào)指明程序的啟動(dòng)位置.2.
45、4條件轉(zhuǎn)移表格分類指令(I)轉(zhuǎn)移條件為單個(gè)標(biāo)志位JZ/JEJNZ/JNEJSJNSJOJNOJP轉(zhuǎn)移條件說(shuō)明ZF=1為零/相等,則轉(zhuǎn)移ZF=0不為零/不相等,則轉(zhuǎn)移SF=1為負(fù),則轉(zhuǎn)移SF=O為正,則轉(zhuǎn)移OF=1溢出,則轉(zhuǎn)移OF=0不溢出,則轉(zhuǎn)移PF=1奇偶位為1,則轉(zhuǎn)移JNPPF=O奇偶位為0,則轉(zhuǎn)移JCCF=1進(jìn)位位為1,則轉(zhuǎn)移JNCCF=0進(jìn)位位為0,則轉(zhuǎn)移仃I)兩個(gè)無(wú)符號(hào)數(shù)比較JB/JNAE/JCCF=1低于/不高于等于,則轉(zhuǎn)移JNB/JAE/JNCCF=0不低于/高于等于,則轉(zhuǎn)移JBE/JNA(CF*ZF)=1低于等于/不高于,則轉(zhuǎn)移JNBE/JA(CF*ZF)=0不低于等于/高于,
46、則轉(zhuǎn)移(III)兩個(gè)有符號(hào)數(shù)比較JL/JNGE(SF*OF)=1小于/不大于等于,則轉(zhuǎn)移JNL/JGE(SF*OF)=0不小于/大于等于,則轉(zhuǎn)移JLE/JNG(SF*OF)*ZF)=1小于等于/不大于,則轉(zhuǎn)移JNLE/JG(SF*OF)*ZF)=0不小于等于/大于,則轉(zhuǎn)移(W)測(cè)試CX的值是否為零則轉(zhuǎn)移JCXZ(CX)=0CX的內(nèi)容為0,則轉(zhuǎn)移2.5匯編常用的INT21H系統(tǒng)調(diào)用(1)輸出顯示一個(gè)字符(AH=2)功能:輸出DL寄存器中的字符到顯示器。入口參數(shù):被輸出顯示的字符或者字符ASCII碼送到DL寄存器中調(diào)用方法MOVDL序符碼MOVAH,2INT21H執(zhí)行完上面的調(diào)用后,顯示器顯示出D
47、L中的字符。(2)輸出一個(gè)字符串(AH=9)功能:輸出顯示一個(gè)以$字符結(jié)尾的字符串到顯示器。入口參數(shù):DX=字符串偏移地址;DS=字符串的段地址調(diào)用方法MOVAX,字符串所在的段地址MOVDS,AXMOVDX,字符串的首址偏移地址MOVAH,9INT21H執(zhí)行上面調(diào)用,輸出以DS:DX為首地址,$為結(jié)尾的字符串到顯示器中。若要在顯示字符串光標(biāo)自動(dòng)回車換行,則在$字符前面加上ODH(回車),OAH(換行)字符帶返回碼的結(jié)束(AH=4CH)功能:返回DOS入口參數(shù):無(wú)調(diào)用方法MOVAH,4CHINT21H通過4CH功能調(diào)用能夠結(jié)束當(dāng)前正在執(zhí)行的程序,返回DOS系統(tǒng),一般用于匯編程序的結(jié)束位置3實(shí)驗(yàn)
48、內(nèi)容本實(shí)驗(yàn)要求通過求無(wú)符號(hào)字節(jié)序列中的最大值和最小值并顯示。4.參考程序STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDDATASEGMENTMES1DBTheleastnumberis:$MES2DB0AH,0DH,Thelargestnumberis:$NUMBDB0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9HDDATAENDSCODESEGMENTASSUMECS:CODE,DS:DDATASTART:MOVAX,DDATAMOVDS,AXMOVSI,OFFSETNUMBMOVCX,0008HJCXZA4MOVMOVBH,SIBL,
49、BHA1:LODSB;AL=DS:SI,SI=SI+1CMPAL,BHJBEA2MOVBH,ALJMPA3A2:CMPAL,BLJAEA3MOVBL,ALA3:LOOPA1A4:MOVDX,OFFSETMES1;showmes1MOVAH,09HINT21HMOVAL,BL;showtheleastnumberANDAL,0F0H;getthehighest4bitsSHRAL,4CMPAL,0AHJBC2ADDAL,07HC2:ADDAL,30HMOVDL,AL;showcharacterMOVAH,02HINT21HINT21HMOVAL,BLANDAL,0FH;getthelowest4
50、bitsCMPAL,0AHJBC3ADDAL,07HC3:ADDAL,30HMOVDL,AL;showcharacterMOVAH,02HINT21HMOVDX,OFFSETMES2;showmes2MOVAH,09HINT21HMOVAL,BH;showthelargestnumberANDAL,0F0H;getthehighest4bitsSHRAL,4CMPAL,0AHJBC22ADDAL,07HC22:ADDAL,30HMOVDL,AL;showcharacterMOVAH,02HINT21HMOVAL,BHANDAL,0FH;getthelowest4bitsCMPAL,0AHJBC
51、33ADDAL,07HC33:ADDAL,30HMOVDL,AL;showcharacterMOVAH,02HINT21HMOVAX,4C00H;gobacktodosINT21HCODEENDSENDSTART實(shí)驗(yàn)六從鍵盤輸入兩個(gè)數(shù)據(jù)并顯示相加結(jié)果1實(shí)驗(yàn)?zāi)康恼莆战邮真I盤數(shù)據(jù)的方法,掌握鍵盤數(shù)據(jù)顯示時(shí)須轉(zhuǎn)換為ASCII碼的原理掌握綜合程序的設(shè)計(jì)及調(diào)試2實(shí)驗(yàn)原理從鍵盤輸入一個(gè)字符串到緩沖區(qū)(AH=0AH)功能:從鍵盤輸入一串ASCII碼字符到緩沖區(qū),輸入結(jié)束為緩沖區(qū)的個(gè)數(shù)或者回車”字符。入口參數(shù):DX=緩沖區(qū)首偏移地址;DS=緩沖區(qū)段地址調(diào)用方法MOVAX,緩沖區(qū)的首址的段地址MOVDS,AXM
52、OVDX,緩沖區(qū)的首址的偏移地址MOVAH,0AHINT21H執(zhí)行完上面調(diào)用,將從鍵盤接受字符串送到內(nèi)存的輸入緩沖區(qū)(由DS:DX指定緩沖區(qū)),要求預(yù)先定義一個(gè)緩沖區(qū),緩沖區(qū)的第一個(gè)字節(jié)指定容納的最大字符個(gè)數(shù),由用戶給岀;第二個(gè)字節(jié)存放實(shí)際的最大字符個(gè)數(shù),由系統(tǒng)最后添入;從第三個(gè)字節(jié)開始存放從鍵盤接受的字符,直到ENTER鍵結(jié)束。3實(shí)驗(yàn)內(nèi)容鍵盤輸入兩個(gè)數(shù),計(jì)算相加結(jié)果并顯示4.參考程序;程序,必須輸入兩位10進(jìn)制數(shù).比如11,45以空格隔開,必須是這樣的形式,否則無(wú)法計(jì)算并且兩數(shù)的和不能超過99,data1segmentvardb6,0,6dup(0),$da1db2dup(0),0ah,0d
53、h,$da2db2dup(0),0ah,0dh,$str1dbpleaseinputtwovariable!,0ah,0dh,$data1endscode1segmentassumeds:data1,cs:code1start:movax,data1movds,axmovdx,offsetvarmovah,0ahint21hmovsi,2movcx,2leadi,da1loopda1:movbl,byteptrvarsimovbyteptrdi,blincsiincdiloopnzloopda1incsimovcx,2leadi,da2loopda2:movbl,byteptrvarsimov
54、byteptrdi,blincdiincsiloopnzloopda2leadi,da1leasi,da2movcx,2loop1:subbyteptrdi,30hsubbyteptrsi,30hincdiincsiloopnzloop1decsidecdiclcmovcx,2movbp,0loop2:moval,diadcal,siaaamovdi,aldecdidecsiloopnzloop2incdimovcx,2loop3:addbyteptrdi,30hincdiloopnzloop3movvar+4,+movvar+7,=movdx,offsetvaradddx,2movah,09
55、hint21hmovdx,offsetda1movah,09hint21hmovah,4chint21hcode1endsendstart實(shí)驗(yàn)七排序程序1實(shí)驗(yàn)?zāi)康恼莆辗种?、循環(huán)、子程序調(diào)用的基本程序結(jié)構(gòu)。掌握寄存器、指令使用的基本方法。學(xué)習(xí)綜合程序的設(shè)計(jì)、編制及調(diào)試。2實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)要求編寫一個(gè)排序程序,并將排序結(jié)果顯示在屏幕上。3參考程序;用匯編語(yǔ)言實(shí)現(xiàn)實(shí)現(xiàn)冒泡排序,并將排序后的數(shù)輸出DATASSEGMENTAdw100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45N=$-A;計(jì)算數(shù)字所占的字節(jié)數(shù)DATASENDSCODESSEGMENT
56、ASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXMOVSI,0MOVCX,N/2-1CALLBUBBLE;輸出排序后的數(shù)MOVCX,N/2MOVSI,0MOVDI,0MOVBP,N+5SHOW:PUSHCXMOVDX,0MOVAX,SICALLDTOC;SI遍歷數(shù)字;前一個(gè)數(shù)的地址;設(shè)置循環(huán)次數(shù),M(M=N/2)個(gè)數(shù)需要,循環(huán)M-1次;調(diào)用BUBBLE將原來(lái)的數(shù)排序;循環(huán)M次輸出排序后的M個(gè)數(shù);SI遍歷排序后的數(shù);用DI記錄數(shù)字的位數(shù);BP用于遍歷存儲(chǔ)的轉(zhuǎn)化后的字符的位置;循環(huán)次數(shù)入棧;由于將要進(jìn)行16位除需要置高16位為0;低16位為排序后的數(shù)
57、;調(diào)用DTOC將十進(jìn)制數(shù)轉(zhuǎn)換為字符串;下一個(gè)數(shù);循環(huán)次數(shù)出棧棧CALLSHOW_STR;調(diào)用SHOW_STR將一個(gè)數(shù)轉(zhuǎn)化得到的字符串輸出ADDSI,2POPCXLOOPSHOWMOVAH,4CHINT21H;冒泡排序BUBBLEPROCL1:PUSHCXLEASI,AL2:MOVAX,ASICMPAX,ASI+2JBENEXTXCHGAX,ASI+2MOVASI,AXNEXT:ADDSI,2LOOPL2POPCXLOOPL1RETBUBBLEENDP;將循環(huán)次數(shù)入棧;SI遍歷DATAS數(shù)據(jù)段的數(shù)字;將前一個(gè)數(shù)存于AX;比較前后兩個(gè)數(shù);如果前一個(gè)數(shù)小于或等于后一個(gè)數(shù)則繼續(xù)本輪的比較;否則,交換前
58、后兩個(gè)數(shù)的位置;下一個(gè)數(shù);注意內(nèi)層循環(huán)的次數(shù)已經(jīng)確定了;將循環(huán)次數(shù)出棧;下一輪比較;將十進(jìn)制數(shù)轉(zhuǎn)換為字符串并儲(chǔ)存起來(lái)DTOCPROCS:MOVCX,10CALLDIVDWADDCL,30HMOVDS:BP,CLINCDIPUSHAX;將除數(shù)10,放入CX中;調(diào)用DIVDW程序;把數(shù)字轉(zhuǎn)換為ASCII碼,這樣就能顯示了;把ASCII碼放到內(nèi)存中;用DI記錄循環(huán)的次數(shù);將低16位入棧;將高位與低位相加,接著判斷是否已經(jīng)除盡ADDAX,DXJZBACKPOPAXDECBPJMPS;除盡后返回調(diào)用處;將低16位出棧;逆序存放轉(zhuǎn)化后的字符,便于主程序調(diào)用SHOW_STRBACK:POPAXRETDTOCENDP;為了得到正確的IP值,需要出棧一次;子程序定義開始,功能是分離被除數(shù)的各個(gè)位的數(shù)字;公式:X/N=int(H/N)*
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度環(huán)保項(xiàng)目研發(fā)合作協(xié)議
- 2024臨時(shí)工合同模板
- 2024年度倉(cāng)儲(chǔ)合同倉(cāng)儲(chǔ)物及倉(cāng)儲(chǔ)期限
- 2024年度軟件定制開發(fā)合同
- 2024年 衛(wèi)星發(fā)射與運(yùn)營(yíng)服務(wù)合同
- 2024年商標(biāo)轉(zhuǎn)讓合同注意事項(xiàng)
- 2024年度碳排放權(quán)交易合同交易數(shù)量與交易價(jià)格
- 2(2024版)網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估合同
- 2024年度物業(yè)管理合同:住宅小區(qū)物業(yè)管理服務(wù)
- 2024年合作伙伴尋找居間合同 with 合作意向及中介費(fèi)用的規(guī)定
- 2024-2025學(xué)年上海市普陀區(qū)八年級(jí)(上)期中數(shù)學(xué)試卷
- 假期補(bǔ)課協(xié)議書
- 電子商務(wù)支付結(jié)算系統(tǒng)開發(fā)合同
- 服務(wù)質(zhì)量、保證措施
- (必練)廣東省軍隊(duì)文職(經(jīng)濟(jì)學(xué))近年考試真題試題庫(kù)(含答案)
- 含羞草天氣課件
- 2024年安全生產(chǎn)知識(shí)競(jìng)賽考試題庫(kù)及答案(共五套)
- 22《鳥的天堂》課件
- 農(nóng)業(yè)灌溉裝置市場(chǎng)環(huán)境與對(duì)策分析
- 新疆烏魯木齊市第十一中學(xué)2024-2025學(xué)年八年級(jí)上學(xué)期期中道德與法治試卷
- 部編版小學(xué)五年級(jí)上冊(cè)道法課程綱要(知識(shí)清單)
評(píng)論
0/150
提交評(píng)論