版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告 和 在程序的數(shù)據(jù)段先定義兩個(gè)字符串 和 和 和 string2,通過(guò)比較判斷是否相同。若相同則顯示 match二、 在 在(1)調(diào)用(2)用匯編程序 (3)用連接程序(4)執(zhí)行程序 ;*datarea segmentstring1 db;define data segmentMove the cursor backward.Move the cursor backward.Match.,13,10,$string2 dbmess1mess2dbdbNo match!,13,10,$datarea ends;*prognam segment ;define code s
2、egment;-main proc farassume cs:prognam,ds:datarea,es:datareastart: ;staring execution address;set up stack for returnpushsubds;save old data segmentax,ax ;put zero in AXpushax;save it on stack;set DS register to current data segmentmovmovmovax,datareads,ax;datarea segment addr;into DS registeres,ax;
3、into ES register;MAIN PART OF PROGRAM GOES HEREleasi,string1di,string2leacldmovrepzjzcx,25cmpsbmatchleadx,mess2short dispjmpmatch:disp:leadx,mess1movintah,0921hret;return to DOSmain endp ;end of main part of program;-prognam ends ;end of code segment;*endstart ;end assembly2. 執(zhí)行程序結(jié)果截圖用u命令顯示程序根據(jù)其中指示的
4、ds寄存器內(nèi)容查看數(shù)據(jù)段情況:-d0用 e 命令修改數(shù)據(jù)區(qū)的字符串:用-g 運(yùn)行程序結(jié)果為:用-q 退出debug再 EDIT 中建立 ASM 文件,再用匯編程序?qū)υ闯绦騾R編產(chǎn)生目標(biāo)文件 Debug 進(jìn)行調(diào)試。三、源程序清單和debug截圖1.程序一的源程序清單 mycode2.asmdata segmentdata endsprognam segmentmain proc farassume cs:prognam,ds:datastart:push dssub ax,axpush axmov ax,3000hmov bx,5000hmov sp,2000hpush axmov ax,bxpo
5、p bxretmain endpprognam endsend start運(yùn)行到該處AX=3000,繼續(xù)運(yùn)行此時(shí)BX=5000,繼續(xù)運(yùn)行SP=2000運(yùn)行到該處時(shí),可以發(fā)現(xiàn)AX=5000,繼續(xù)運(yùn)行此時(shí)BX=3000,通過(guò)比較可知AX和BXprognam segmentret再用-a指令從指令查看程序:然后再用-t中的內(nèi)容:ax,0001bxsi后,ax=0E0D.結(jié)果與所預(yù)期的一樣。實(shí)驗(yàn)三、存儲(chǔ)器塊清零和內(nèi)存塊移動(dòng)一、程序說(shuō)明第一個(gè)程序用來(lái)存儲(chǔ)塊清零,先設(shè)置塊起始地址,然后設(shè)置塊長(zhǎng)度,再將當(dāng)前地址內(nèi)容清零,地址加一,然后判斷是否清完,若清完則結(jié)束,否則返回到上一步。1第二個(gè)程序用來(lái)移動(dòng)內(nèi)存塊,
6、先設(shè)置塊的源地址,再設(shè)置塊的目標(biāo)地址,然后設(shè)置移動(dòng)長(zhǎng)度,安長(zhǎng)度重復(fù)傳送數(shù)據(jù)直到結(jié)束。二、調(diào)試說(shuō)明第一個(gè)程序在進(jìn)入debug 斷點(diǎn)設(shè)置在指令 Loop again 之后,通過(guò)指令-g 加上指令 LoopagainLoop again-d指令查看相關(guān)內(nèi)存內(nèi)容是否被清零。第二個(gè)程序在進(jìn)入到debug將斷點(diǎn)設(shè)置在指令rep movsb指令查看一下內(nèi)存塊的相關(guān)內(nèi)容。三、源程序清單以及debug結(jié)果1. 程序一的源代碼data segmentblock db 256 dup(55h)data endscode segmentassume cs:code,ds:datastart proc nearmov
7、ax,datamov ds,ax;對(duì)段寄存器給值mov bx,offset block ;起始地址mov cx,256again:mov bx,byte ptr 0 ;字節(jié)填充0;清256字節(jié)inc bxLoop again;計(jì)數(shù)加一jmp $;跳轉(zhuǎn)到當(dāng)前地址,故是死循環(huán)code ends程序一的debug過(guò)程:先用-u查看一下程序由以上可知內(nèi)容被清零了code segmentassume cs:code,ds:data,es:datastart proc nearmov si,offset sourcemov di,offset targetmov cx,256code endsend st
8、art程序二的debug過(guò)程:將斷點(diǎn)設(shè)在repz movsb 之前-g0010,用-d觀察所得:將斷點(diǎn)設(shè)在repz movsb之后-g0012,用-d觀察所得:經(jīng)過(guò)觀察和對(duì)比可知,內(nèi)存塊發(fā)生了移動(dòng)。一、 程序說(shuō)明本程序用來(lái)將小寫字母轉(zhuǎn)變?yōu)榇髮?,并在屏幕上顯示出來(lái)。先利用DOS功能調(diào)用int 21H的1號(hào)功能從鍵盤輸入字符,然后判斷輸入的是否是小寫字母,若不是小寫字母,則顯示輸入出錯(cuò),重新母。在通過(guò) DOS 功能調(diào)用 INT21H 的 2 號(hào)功能顯示出來(lái)。若輸入的是Enter鍵,則結(jié)束程序。二、 調(diào)試說(shuō)明在debug中進(jìn)行,基本步驟和前面的實(shí)驗(yàn)大致相同,調(diào)試時(shí)可通過(guò)-t指令來(lái)逐步運(yùn)行程序,觀察相
9、關(guān)內(nèi)容變化,來(lái)調(diào)試程序。三、 源程序清單和debug過(guò)程1 源程序代碼data segmentstring1 db Input error!Please input between a toz!,0ah,0dh,$string2 db $; DOS功能調(diào)用int 21H中9號(hào)功能要求的要顯示字符串的結(jié)束標(biāo)志。data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axL0: mov ah,1 ;從鍵盤輸入一個(gè)字符int 21hcmp al,0dh ;檢驗(yàn)寄存器中的值是不是十進(jìn)制的13jz exitcmp al,aja
10、e L1jb L3;如果大于等于a,則轉(zhuǎn)到L1處執(zhí)行;如果小于a,則轉(zhuǎn)到L3處執(zhí)行;與z相比L1:cmp al,zjna L2;小于等于z則轉(zhuǎn)到L2處執(zhí)行;大于z則轉(zhuǎn)到L3處執(zhí)行;al=al-20hja L3L2:sub al,20hmov cl,allea dx,string2mov ah,9int 21hmov dl,0mov dl,clmov ah,2int 21h;輸出DL寄存器里面的內(nèi)容mov dl,0ah;0ah 表示回車mov ah,2int 21hmov dl,0dh;0dh表示換行mov ah,2int 21hjmp L0end start程序運(yùn)行的結(jié)果是:實(shí)驗(yàn)五:循環(huán)程序設(shè)
11、計(jì)過(guò)DOS功能調(diào)用INT 21H的2號(hào)功能顯示出來(lái)。流程圖:令第二個(gè)程序是用來(lái)判別鍵盤上輸入的字符:若是1-9 字符,則顯示之;若為 A-Z或 a-z 則結(jié)束程序,若為其他字符則不顯示,繼續(xù)等待新的字符輸入。首先輸入一個(gè)字符,將其和回車字符比較,若是回車字符,則結(jié)束程序。1-9 字符,則顯示之。若是若小于0,則重新等待輸入。若大于9,于Z,則跳轉(zhuǎn)到和a、z比較處,若小于 a 或大于 z,則重新等待輸入,否則輸出c。二、 調(diào)試說(shuō)明1. 用EDIT或其它編輯軟件,編寫.asm源程序2. 對(duì)其進(jìn)行匯編及連接,產(chǎn)生.exe文件3. 對(duì).exe文件進(jìn)行調(diào)試運(yùn)行a. 用debug調(diào)試運(yùn)行,學(xué)會(huì)修改al內(nèi)容
12、的方法b. 對(duì)于第二個(gè)程序鍵入不同的字符,分別進(jìn)行調(diào)試c. 在DOS下運(yùn)行這兩個(gè)文件三、 源程序清單以及debug結(jié)果1. 第一個(gè)程序的源代碼data segmentdata endscode segmentassume cs:code,ds:datastart:mov al,3ehmov bl,al ;保存mov cx,2again:mov al,blpush cxmov cl,4rol al,clmov bl,al al中的值,我們操作的是bland al,0fh ;需要將AL中的數(shù)字變成字符add al,30h ;0-9的ASCII碼cmp al,9 9比較,若小于等于9則轉(zhuǎn)到next1
13、jl printadd al,07hprint:mov ah,02h;A-F 的ASCIImov dl,al ;dl=顯示的字符int 21hpop cxloop againmov ah,4chint 21hcode endsend start第一個(gè)程序的調(diào)試:修改AL指令來(lái)實(shí)現(xiàn),如修改ax 中的內(nèi)容,通過(guò)指令-rax來(lái)實(shí)現(xiàn),如下圖所示:ax中的內(nèi)容從開(kāi)始的003E變?yōu)?31A2. 第二個(gè)程序的源代碼code segmentassume cs:codestart:;輸入字符;與回車比較,若該字符是回車則cmp al,0;輸入的字符與0比較,若小于0,則轉(zhuǎn)到start處執(zhí)行jb startcmp
14、 al,9轉(zhuǎn)到output1處執(zhí)行jbe output1;輸入的字符與9比較,若大于9,則cmp al,Ajb startcmp al,Zjbe outputcmp al,ajb startcmp al,zjbe outputoutput1:mov dl,al;將al中的數(shù)據(jù)放到dl中mov ah,2int 21hjmp startoutput:exit:code ends實(shí)驗(yàn)六:分支程序設(shè)計(jì)一、 程序說(shuō)明第一個(gè)程序是用來(lái)顯示 AL 寄存器中的兩位十六進(jìn)位制數(shù),通過(guò)令DOS 功能調(diào)用INT21H的 2 號(hào)功能顯示出來(lái)。 第二個(gè)程序是用來(lái)判別鍵盤上輸入的字符:若是1-9字符,則顯示之;若為 A-
15、Z 或 a-z 字符,均顯示“c”;若是回車字符,z則結(jié)束程序,若為其他字符則不顯示,繼續(xù)等待新的字符輸入。首先輸入一個(gè)字符,將其和回車字符比較,若是回車字符,則結(jié)束程序。1-9 字符,則顯示之。若是若小于0,則重新等待輸入。若大于9,于Z,則跳轉(zhuǎn)到和a、z比較處,若小于 a 或大于 z,則重新等待輸入,否則輸出c。開(kāi) 始=?) 或)二、 調(diào)試說(shuō)明調(diào)試程序可以在 debug 中進(jìn)行,基本步驟和前面的實(shí)驗(yàn)大致支的。修改AL指令來(lái)實(shí)現(xiàn),如修改ax 中的內(nèi)容,通過(guò)指令-r ax來(lái)實(shí)現(xiàn)三、 源程序清單和執(zhí)行結(jié)果1.程序一代碼:CODES SEGMENTASSUME CS:CODESSTART:mov
16、al,3ehpush axmov dl,almov cl,4shr dl,clcmp dl,9jbe next1add dl,7next1:add dl,30hmov ah,2int 21hpop axmov dl,aland dl,0fhcmp dl,9jbe next2add dl,7next2:add dl,30hmov ah,2int 21hmov ah,4chint 21h第一個(gè)程序的debug:2.第二個(gè)程序的代碼:code segmentassume cs:code,ds:datastart:mov ah,1;輸入字符int 21hcmp al,0dh轉(zhuǎn)到done處執(zhí)行jz do
17、ne;與回車比較,若該字符是回車則;輸入的字符與0比較,若小于0,;輸入的字符與9比較,若大于9,;將al中的數(shù)據(jù)放到dl中cmp al,0則轉(zhuǎn)到next處執(zhí)行jb nextcmp al,9則轉(zhuǎn)到charup處執(zhí)行ja charupmov dl,almov ah,2int 21hjmp startcharup:cmp al,41h則轉(zhuǎn)到next處;輸入的字符與A比較,若小于Ajb nextcmp al,5ah;輸入的字符與Z 比較,若大于Z則轉(zhuǎn)到chrdn處ja chrdn;輸入的字符與a比較,若小于的jmp dispccode endsend start第二個(gè)程序的運(yùn)行結(jié)果:一、 程序說(shuō)明本
18、程序用來(lái)統(tǒng)計(jì)在不同分?jǐn)?shù)段的學(xué)生人數(shù)并顯示出來(lái)。二、 調(diào)試說(shuō)明有三個(gè)子程序,分別用來(lái)統(tǒng)計(jì)各分?jǐn)?shù)段的學(xué)生人數(shù)、輸出相關(guān)內(nèi)容、換行回車。子程序一中,先將每個(gè)學(xué)生的分?jǐn)?shù)從 100、90、 逐個(gè)比較,在哪一分?jǐn)?shù)段,則將其個(gè)數(shù)加一。直到所有分?jǐn)?shù)都完成比較。子程序二則利用 DOS 功能調(diào)用 INT 21H 的 9號(hào)功能在顯示器上顯示一個(gè)字符串和 2 號(hào)功能在顯示器上顯示一個(gè)DOS功能調(diào)用INT 21H的 2 號(hào)功能在顯示器上顯示一個(gè)字符實(shí)現(xiàn)換行和回車的。績(jī)于0否是是是否大于否否是是是否大于是否大于三、 源程序代碼以及程序結(jié)果DATAS SEGMENTarray db 76,69,84,90,73,88,99
19、,63,100,80db 65,90,100,65,45,98,90,34,88,73db 89,87,76,90,92,100,59,87,92,91string1 db The number of 100:$string2 db The number of 90-99:$string3 db The number of 80-89:$string4 db The number of 70-79:$string5 db The number of 60-69:$string6 db the number of low 60:$DATAS ENDSSTACKS SEGMENTSTACKS EN
20、DSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov al,0mov bx,0mov cx,0mov dh,0;用于計(jì)數(shù)mov dl,30 ;循環(huán)次數(shù)call countcall outputMOV AH,4CHINT 21Hcount proc near ;子程序一,用來(lái)統(tǒng)計(jì)各分?jǐn)?shù)段的人數(shù)mov si,0next:cmp arraysi,100 ;將分?jǐn)?shù)與100比較jz L1;若成績(jī)?yōu)?00則轉(zhuǎn)到L1處執(zhí)行;否則轉(zhuǎn)到next1處jl next1next1:cmp arraysi,90 ;
21、與90比較jae L2;若大于等于90則轉(zhuǎn)到L2;若小于90則轉(zhuǎn)到next2處jl next2next2: cmp arraysi,80 ;與80比較jae L3;若大于等于80則轉(zhuǎn)到L3;若小于80則轉(zhuǎn)到next3處執(zhí)行jl next3next3: cmp arraysi,70 ;與70比較jae L4;若大于等于則轉(zhuǎn)到L4;若小于的話則轉(zhuǎn)到next4jl next4next4: cmp arraysi,60 ;與60比較jae L5;若大于等于60則轉(zhuǎn)到L5處執(zhí)行inc dhinc si;對(duì)低于60的學(xué)生的人數(shù)計(jì)數(shù)dec dl;循環(huán)次數(shù)減1jnz next;若dl尚未減少到零則回到next
22、處執(zhí)行jmp exit;若為零就轉(zhuǎn)到exit處執(zhí)行,退出;對(duì)分?jǐn)?shù)為100的學(xué)生的人進(jìn)行計(jì)數(shù)L1:inc alinc sidec dljnz nextjmp exitL2:inc bh90-99的學(xué)生的人進(jìn)行計(jì)數(shù)inc sidec dljnz nextjmp exitL3:inc bl;對(duì)分?jǐn)?shù)在80-89的學(xué)生的人進(jìn)行計(jì)數(shù)inc sidec dljnz nextjmp exitL4:inc chinc si;對(duì)分?jǐn)?shù)在70-79的學(xué)生的人進(jìn)行計(jì)數(shù)dec dljnz nextjmp exitL5:inc clinc si60-69的學(xué)生的人進(jìn)行計(jì)數(shù)dec dljnz nextexit:retcoun
23、t endpoutput proc near ;子程序二,用來(lái)輸出相關(guān)內(nèi)容mov ah,0push dxpush cxpush bxpush axlea dx,string1 ;輸出100分的人數(shù)mov ah,9int 21Hpop bxmov dl,bladd dl,30hmov ah,2int 21Hcall enterlea dx,string2 ;輸出90至99分的人數(shù)mov ah,9int 21Hpop bxmov dl,bhadd dl,30hmov ah,2int 21Hcall enterlea dx,string3 ;輸出80至89分的人數(shù)mov ah,9int 21Hmov dl,bladd dl,30hmov ah,2int 21Hcall enterlea dx,string4 ;輸出70至79分的人數(shù)mov ah,9int
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 客服員工培訓(xùn)管理制度
- 新疆訪匯聚夜校培訓(xùn)制度
- 云峰集團(tuán)培訓(xùn)開(kāi)發(fā)制度
- 培訓(xùn)學(xué)校班委會(huì)制度
- 培訓(xùn)學(xué)校招生辦制度
- 托幼項(xiàng)目培訓(xùn)公司規(guī)章制度流程
- 生產(chǎn)部員工培訓(xùn)制度
- 培訓(xùn)機(jī)構(gòu)課堂巡堂制度
- 清潔人員培訓(xùn)及考評(píng)制度
- 幼兒園教師培訓(xùn)研修制度
- 教學(xué)查房-子宮內(nèi)膜息肉
- 關(guān)于婚內(nèi)協(xié)議書(shū)范本
- 漢服文化介紹(精選)課件
- 婦產(chǎn)科學(xué)(第9版)第三章 女性生殖系統(tǒng)生理
- GB/T 17626.4-1998電磁兼容試驗(yàn)和測(cè)量技術(shù)電快速瞬變脈沖群抗擾度試驗(yàn)
- 深圳大學(xué)圖書(shū)城管理中心大樓項(xiàng)目標(biāo)底及投標(biāo)報(bào)價(jià)測(cè)算分析報(bào)告4200字
- 提高輸液執(zhí)行單簽字規(guī)范率品管圈匯報(bào)書(shū)模板課件
- 新生兒家庭訪視課件
- 振動(dòng)試驗(yàn)報(bào)告模板
- 廠家授權(quán)委托書(shū)(2篇)
- 發(fā)散性思維與寫作講解課件
評(píng)論
0/150
提交評(píng)論