匯編語言上機試驗指導_第1頁
匯編語言上機試驗指導_第2頁
匯編語言上機試驗指導_第3頁
匯編語言上機試驗指導_第4頁
匯編語言上機試驗指導_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、匯編語言實驗指導5作實驗2【1】.有空加作實驗【4】(1).實驗2算術及位串處理程序【1】.在數據段預先存放16個十六進制數的ASCII碼,把BX中的四位十六進制 數,從左到右用查表的方法找到對應數位的ASCII碼,并取出顯示出來。要求見書:參考程序:datasegme ntasc db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39hdb 41h,42h,43h,44h,45h,46hdataendscodesegme ntassume cs:code,ds:datasta比movax,datamovds,axmovcl,4rolbx,clmovsi,bxand

2、si,0fhmov dl,asc+simovah,2int21hrolbx,clmovsi,bxandsi,0fhmov dl,asc+simovah,2int21hmovah,4chint21hcodeendsendstart【2】用字符串處理指令編制程序,處理字符串的比較和查找,顯示結果。 要求:(1)字符串的比較程序中,一個字符串在數據段定義,另一個字符串 在程序執行時從鍵盤輸入,必須定義鍵盤緩沖區。并指出不相等的位置。參考書上例3.51,題目改為MESS2定義為從鍵盤輸入緩沖區,鍵盤輸入緩 沖區定義:mess2 DB9,?,9 DUP(?)例3.51 在數據段中有一個長度為19的字符串

3、MESS,1在附加段中有一個 長度為19的字符串MESS2比較它們是否相等。若相等顯示 Y,否則顯 示 N'。編制程序如下所示。datasegme ntmess1 db computersoftware $'dataendsextsegme ntmess2 db comkutersoftware $'extendscodesegme ntassume cs:code,ds:data , es:extsta比movax,datamovds,axmovax,extmoves,axleasi,mess1leadi,mess2movcx,19cldrepecmpsbjzyes;

4、如果zf=1跳轉到標號yesmovdl ,njmpdisp;跳轉到標號dispyes:movdl ,ydisp:movah,2int21hmovah,4chint21hcodeendsend start實驗3分支程序設計實驗目的:掌握分支與循環程序等基本編程方法。熟悉數制轉換。用LOOP旨令、條件轉移指令和跳躍表法實現程序轉移。實驗內容:【1】分離字數組ARRAY中的正、負數,把其中的正數復制到 PDATA數組;負數 復制到NDAT做組,并分別統計正、負數個數。要求:三個數組的占用單元數應一致。通過 DEBUGS蹤程序的執行,檢查運 行結果:是否完成分離。參考程序:data segme nta

5、rray dw 2,-2,3,-3,4,-4,5,0,0org 10hpdata dw 7 dup (?)org 20hndata dw 7 dup (?)org 30hp db 0n db 0data endscodesegme ntassume cs:code,ds:datastart:mov ax,datamov ds,axlea bx,arraylea si,pdatalea di, ndatamov cx,7kk:mov ax,bxtest ax,8000hjz zs0 0 0 0 0 0jmp n extzs:0 0 0 0 0 0n ext:add bx,2loop kkmov

6、dl,padd dl,30hmov ah,2int 21hmov dl,nadd dl,30hmov ah,2int 21hmov ah,4chint 21hcode endsend start【2】在數據段定義分支地址表,通過鍵盤輸入數字18,實現轉移。要求:(1) 分支表定義如下:PTABLE DW P1, P2, P3, P4, P5, P6, P7, P8(2) P1P8為標號,如果鍵盤輸入數字3,則從分支地址表PTABLE取出P3 的地址,實現間接轉移,標號處的指令只是顯示一個信息。參看例5.3例5.3根據鍵盤輸入的一位數字(03,使程序轉移到4個不同的分支中去。算法分析:建立一個地

7、址表,集中存放4個分支的偏移地址,因偏移地址為 16位,所以每兩個字節存放一個偏移地址。根據輸入的數字指向地址表,從地 址表中取出對應分支的偏移地址,以間接尋址方式轉向對應分支。例5.3程序如下:code segme ntassume cs:code , ds:codesta比movax,code;ds=csmovds,axmovah,7;鍵盤輸入無回顯int21hcmpal,30hjlexit;非法輸入cmpal,33hjgexit;非法輸入movdl,al;放入dl,待顯示movah,2subal,30h;轉換ascii碼為數值shlal, 1;(al) x 2,指向地址表中某地址movb

8、l,almovbh,0jmpbran chbx;轉向分支routO :int21h;顯示鍵盤輸入的數字jmpexitrout1 :int21hjmpexitrout2 :int21hjmpexitrout3 :int21hjmpexitexit :movah, 4ch;程序終止并退出int21hbranchdwrout0dwrout1dwrout2dwrout3codeendsendstart該程序在代碼段的最后定義了地址表, 匯編程序進行匯編時,各標號的有效 地址可以確定,地址表首地址 BRANC的有效地址可以確定,其后定義的 4個字 的值就是四個分支標號的有效地址。 該程序也可以定義一個數

9、據段,并把地址表 BRANC定義在數據段。用地址表方法處理多分支程序,可以簡單直接地實現分支的轉移,避免了大量的比較和條件轉移指令,使程序顯得簡潔緊湊 實驗4循環程序設計 實驗目的:掌握和提高循環程序編程技巧,熟悉鍵盤輸入、顯示輸出等基本人機交互。【1】從鍵盤輸入7位二進制數,顯示對應的字符,回車鍵退出循環,終止程序 參考程序:code segmentassume cs:codestart:mov cx,7mov dl,0n ext:shl dl,1mov ah,1int 21h0 0 0loop nextmov ah,2int 21hmov ah,4chint 21hcode endsend

10、 start【2】從鍵盤輸入一個單個字符,顯示該字符的ASCII碼(十六進制),回車鍵退出循環,終止程序。DEBU(下跟蹤,注意結果。參看例5.7,程序的核心是斜體部分,要求修改程序中的斜體部分,當然其它關 聯部分也需修改。例5.7 從鍵盤輸入一個單個字符,顯示該字符的 ASCII碼(十六進制),回 車鍵退出循環,終止程序。算法分析:用1號功能調用從鍵盤輸入一個單個字符時,該字符ASCII碼在AL中,為兩位十六進制數,而要顯示這兩位十六進制數,則要把每位十六進制 數位轉換成ASCII碼才能用2號功能調用顯示。高位十六進制數位為數字,低位 十六進制數位為數字或 AF。該循環程序的循環終止條件是輸

11、入回車鍵。流程圖如圖5.7所示:匯編語言實驗指導6匯編語言實驗指導7把2位十六進制數轉換成的2個ASCII碼顯示ASCII碼1圖5.7 例5.7流程圖codesegme ntassumecs:codesta比movah,1int21hcmpal,13jeexitmovbl,almovcl,4shlbx.clandbx.OfOOhaddbh,30handal,0fhaddal,30hmovah,0cmpax,39hjlel211:addax,712:addbx,axmovdl,bhmovah,2int21hmovdl,blmovah,2int21hjmpstartexit:movah,4chin

12、t21hcodeendsendstart例5.7程序如下:實驗5子程序設計;輸入字符;回車鍵則退出循環;保存到BL;把2位十六進制數轉換成的2個ascii碼;顯示高位ascii 碼; 顯示低位 ascii 碼;轉循環入口匯編語言實驗指導12實驗目的:掌握通用子程序的設計方法,合理劃分子程序功能和正確進行子程序的參數 傳遞。【1】采用通過地址表傳遞參數地址的方法,求數組元素累加和的通用子程序。 該通用子程序能處理字節類型或字類型的數組元素。參看例6.5例6.5 采用通過地址表傳遞參數地址的方法, 求數組元素累加和的通用子 程序(不考慮溢出)。datasegme ntarydw 100 dup;設

13、元素值是4numdw 100;設元素個數是100sumdw ?tabledw 3 dup;地址表3個字dataendscodesegme ntassume cs:code,ds:datamai nprocfarpushdsxorax,axpushaxmovax,datamovds,axmovtable, offset ary;ary地址送tablemovtable+2, offset num;元素個數的地址送table+2movtable+4, offset sum;存放和的地址送table+4leabx, table;table的首地址送bxcallprosumretmai nendppro

14、sumprocn earmovsi,bx;ary地址送simovdi,bx+2;取元素個數的地址movcx,di;元素個數送cxmovdi,bx+4;存放和的地址送dixorax,axn ext:addax,siaddsi,2loopnextmovdi,axretprosumendpcodeendsendmai n程序中在數據段建立一個三個字的地址表 TABLE主程序把數組ARY勺三個 參數的地址依此放入地址表TABLE中,并把地址表TABLE的首地址放入BX寄存 器。子程序PROSU通過BX寄存器間接取得數組ARY勺首地址、元素個數和存放 累加和的地址,實現數組元素的累加。由于子程序中沒有出

15、現具體的數組參數, 所以對其它數組求和也是可行的。但該程序只能處理字類型的數組元素,如果希望子程序PROSU也能處理字節類型的數組元素,那么可以增加一個公用的類型參數, 類型參數可用一個變量 也可用一個常量說明。在調用子程序前對類型參數賦值 (如1表示字節,2表示 字)。子程序要依據類型參數ATYPE的值作相應處理。實驗6模塊化程序設計實驗目的:結合數制轉換程序學會多模塊程序設計方法,正確使用PUBLIC EXTRh實現參數傳遞。【1】從鍵盤輸入一個十六進制數(不超過四位),顯示輸出該數的十進制形式。 要求:輸入和輸出不在同一個程序文件中。參看例6.13例6.13 從鍵盤輸入一個十六進制數(不

16、超過四位),顯示輸出該數的十進 制形式。算法分析:輸入的十六進制數轉換為十進制顯示可以分為兩步實現。第一步,把輸入的十六進制數轉成二進制。 子程序接收鍵盤輸入的十六進制數,只考慮以 下情況為合法:為數字(30H39H)和大寫AF(41H46H)。其它輸入則為非法 輸入,退出程序。當輸入為數字時,減 30H,當輸入為大寫AF時,減37H把 四次的輸入拼裝成四位十六進制數存放在BX寄存器中。這在第5章例5.5中已詳細介紹。第二步,把二進制數用十進制形式顯示。 這可以通過輾轉相除法得到 該數的十進制數各數位。這兩步的功能相對獨立,可以分別用子程序實現,HTOB 子程序把輸入的十六進制數轉成二進制,B

17、TOD子程序把二進制數用十進制形式 顯示。BX寄存器用來在子程序間傳遞參數。為了避免顯示的重疊,另外用一個 子程序CRLF實現輸出回車換行。程序結構框圖如圖6.5所示:圖6.5 例6.13程序結構框圖主程序文件HTOD.AS如下:extrnhtob:far,crlf:far,btod:farcodesegme ntassumecs:codemai nprocfarpushdsxorax, axpushaxcallhtobcallcrlfcallbtodretmai nendpcodeendsendmai n子程序文件htob.asm如下: public htobcodelsegme ntass

18、ume cs:code1htobprocfarsta比movbx,0;初始化movch,4movcl,4inchr :movah,1;鍵盤輸入int21hcmpal,30hjlexit;非法輸入cmpal,39hjledig;輸入是數字09cmpal,41hjlexit;非法輸入cmpal,46hjgexit;非法輸入subal,37h;輸入是大寫AFjmpls4dig :subal,30hls4 :shlbx,claddbl,aldecchjnzinchrexit:rethtobendpcode1endsend子程序文件btod.asm如下:publicbtodcode2segme ntassume cs:code2btodprocfarmovcx,100

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論