合工大匯編語言程序的設(shè)計實驗報告_第1頁
合工大匯編語言程序的設(shè)計實驗報告_第2頁
合工大匯編語言程序的設(shè)計實驗報告_第3頁
合工大匯編語言程序的設(shè)計實驗報告_第4頁
合工大匯編語言程序的設(shè)計實驗報告_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、工業(yè)大學(xué)計算機(jī)與信息學(xué)院實驗報告課 程:匯編語言程序設(shè)計專業(yè)班級:*學(xué) 號:*姓 名: *目錄實驗一·········································

2、3;·3實驗二············································7實驗三···&#

3、183;·······································12實驗四·········

4、83;·································22實驗一 Debug程序的使用一. 實驗?zāi)康?、熟悉DEBUG程序中的命令,學(xué)會在DEBUG下調(diào)試運行匯編語言源程序。2、掌握8086/8088的尋址方式及多字節(jié)數(shù)據(jù)的處理方法。二. 實驗容1、利

5、用DEBUG程序中的“E”命令,將兩個多字節(jié)數(shù)“003F1AE7H”和“006BE5C4H”分別送入起始地址為DS:0200H和DS:0204H兩個單元中。2、分別用直接尋址方式和寄存器間接尋址方式編寫程序段,實現(xiàn)將DS:0200H單元和DS:0204H單元中的數(shù)據(jù)相加,并將運算結(jié)果存放在DS:0208H單元中。要求:本次實驗的容均在DEBUG下完成,實現(xiàn)數(shù)據(jù)的裝入、修改、顯示;匯編語言程序段的編輯、匯編和反匯編;程序的運行和結(jié)果檢查。三. 實驗過程和程序 實驗容一: e ds:0200 E7 1A 3F 00 e ds:0204 C4 E5 6B 00 實驗容二:(1) 直接尋址方式MOV

6、AX,0200MOV BX,0202ADD AX,0204ADC BX,0206MOV 0208,AXMOV 020A,BX(2)寄存器間接尋址方式MOV SI,0200HMOV DI,0204HMOV BX,0208H MOV AX,SI MOV DX,SI+2 ADD AX,DI ADC DX,DI+2 MOV BX,AX MOV BX+2,DX四. 實驗結(jié)果(包括必要的截圖)實驗容一:輸入數(shù)據(jù):顯示數(shù)據(jù):實驗容二:(1)直接尋址方式程序段編輯:反匯編:運行:結(jié)果在DS:0208 單元中 為00AB00ABH(2)寄存器間接尋址方式程序段編輯:反匯編:運行:結(jié)果高字存放在dx中,低字存放在

7、ax中(結(jié)果為00AB00ABh)五. 實驗體會通過本實驗,實踐debug程序中的命令,并在debug下調(diào)試運行匯編語言源程序。在實踐過程中,解決如何把數(shù)據(jù)錄入存儲單元、debug命令如何使用等問題后,知道存數(shù)據(jù)例如1234進(jìn)存儲單元時 要34 12存,還有掌握了寄存器的尋址方式。實驗二 匯編語言程序設(shè)計(順序、循環(huán))一. 實驗?zāi)康?、掌握順序和循環(huán)程序結(jié)構(gòu)和設(shè)計方法;2、熟悉在PC機(jī)上建立、匯編、連接、調(diào)試和運行8086/8088匯編語言程序的過程。二. 實驗容1、X、Y、Z、V均為字變量,在X、Y、Z、V字單元中存放是16位帶符號數(shù)。試編寫匯編語言程序完成以下功能:計算表達(dá)式值(V(X*Y

8、+Z-720)/X;將上述表達(dá)式運算結(jié)果整數(shù)放在SUM1單元,余數(shù)放在SUM2單元。2、求一個班50名學(xué)生成績的平均值(附加題:最大值和最小值,并將結(jié)果顯示出來)3、從鍵盤讀入一個字符串,以Enter結(jié)束,字符串不超過50個字符,并打印該字符串(附加題:查找中間是否有asm子串。如果有,輸出Yes;否則,輸出No)。三. 實驗過程和程序(注:附加題沒有做)實驗容一:X、Y、Z、V均為字變量,在X、Y、Z、V字單元中存放是16位帶符號數(shù)。試編寫匯編語言程序完成以下功能:計算表達(dá)式值(V(X*Y+Z-720)/X;將上述表達(dá)式運算結(jié)果整數(shù)放在SUM1單元,余數(shù)放在SUM2單元。Data segme

9、ntx dw ?y dw ?z dw ?v dw ?sum1 dw ?sum2 dw ?Data endsCode segmentassume cs:code,ds:datastart: mov ax,data mov ds,ax mov ax,x imul y mov cx,ax mov bx,dx mov ax,z cwd add cx,ax adc bx,dx sub cx,720 sbb bx,0 mov ax,v cwd sub ax,cx sbb dx,bx idiv x mov sum1,ax mov sum2,dx mov ah,4ch int 21hCode ends end

10、 start實驗容二:求一個班50名學(xué)生成績的平均值(為了方便,只設(shè)置了5個學(xué)生數(shù)據(jù))data segment grade dw 90,80,80,70,60;平均數(shù)76data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax xor ax,ax mov cx,5 mov bx,offset grade again: add ax,bx add bx,2 loop again mov cx,5 cwd idiv cx mov ah,4ch int 21hcode endsend start實驗容三:從鍵盤讀

11、入一個字符串,以Enter結(jié)束,字符串不超過50個字符,并打印該字符串data segmentbuffer db 50 db ? db 50 dup('$')cr db 0ah,0dh,"$"data endscodes segment assume cs:codes,ds:datastart: mov ax,data mov ds,axinput: mov ah,10 lea dx,buffer int 21h lea dx,cr mov ah,9 int 21houtput: lea dx,buffer+2 mov ah,9 int 21h mov ah

12、,4ch int 21hcodes endsend start四. 實驗結(jié)果(包括必要的截圖)實驗容一:設(shè)x=156,y=10,z=220,v=2000,則sum1=0006h,sum2=0004h在ax中看sum1,在dx中看sum2 實驗容二:預(yù)先設(shè)置的數(shù)據(jù)求得平均數(shù)為76,在ax中查看,即ax=004Ch實驗容三:五. 實驗體會通過本實驗,將課本上學(xué)到的算術(shù)運算類指令、變量定義偽指令、存儲單元、DOS 0AH號功能(字符串輸入)和DOS 09H功能(字符串輸出)等在實驗中實現(xiàn)。在實現(xiàn)過程中,解決遇到的問題(符號擴(kuò)展、定義的數(shù)組存儲空間地址、字符串如何輸入輸出等)后,對上述知識有了更深的了

13、解,并掌握實現(xiàn)它。實驗三 匯編語言子程序設(shè)計(分支、子程序)一. 實驗?zāi)康?、掌握分支和子程序結(jié)構(gòu)和設(shè)計方法;2、熟悉在PC機(jī)上建立、匯編、連接、調(diào)試和運行8086/8088匯編語言程序的過程。3、通過匯編語言了解高級語言的參數(shù)傳遞等知識。二. 實驗容1、BL中的只有一位為1。編寫程序測試,并輸出提示信息“The X Bit is 1”,要求:地址表和轉(zhuǎn)移表。2. 編寫一個子程序計算z=f(x,y)=x*y+x-y(x,y,z有符號數(shù)存數(shù))。要求通過堆棧(寄存器、存)傳送所有參數(shù)。3. 實踐CàAsm的轉(zhuǎn)換過程。三. 實驗過程和程序?qū)嶒炄菀唬築L中的只有一位為1。編寫程序測試,并輸出

14、提示信息“The X Bit is 1”(1)轉(zhuǎn)移表;轉(zhuǎn)移表,bl 左到右1-8位DATAS SEGMENT str1 db 'the 1 bit is 1',0dh,0ah,'$' str2 db 'the 2 bit is 1',0dh,0ah,'$' str3 db 'the 3 bit is 1',0dh,0ah,'$' str4 db 'the 4 bit is 1',0dh,0ah,'$' str5 db 'the 5 bit is 1',

15、0dh,0ah,'$' str6 db 'the 6 bit is 1',0dh,0ah,'$' str7 db 'the 7 bit is 1',0dh,0ah,'$' str8 db 'the 8 bit is 1',0dh,0ah,'$'DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX mov bl,00010000b mov cx,8 mov si,0again: shl

16、 bl,1 jc next add si,3 loop againnext: add si,offset jmptable jmp sijmptable: jmp near ptr l1 jmp near ptr l2 jmp near ptr l3 jmp near ptr l4 jmp near ptr l5 jmp near ptr l6 jmp near ptr l7 jmp near ptr l8 l1: lea dx,str1 jmp outputl2: lea dx,str2 jmp outputl3: lea dx,str3 jmp outputl4: lea dx,str4

17、jmp outputl5: lea dx,str5 jmp outputl6: lea dx,str6 jmp outputl7: lea dx,str7 jmp outputl8: lea dx,str8 output: mov ah,9 int 21h MOV AH,4CH INT 21HCODES ENDSEND START(2)地址表;地址表,bl左到右依次是第1-8位DATAS SEGMENT str1 db 'the 1 bit is 1',0dh,0ah,'$' str2 db 'the 2 bit is 1',0dh,0ah,&#

18、39;$' str3 db 'the 3 bit is 1',0dh,0ah,'$' str4 db 'the 4 bit is 1',0dh,0ah,'$' str5 db 'the 5 bit is 1',0dh,0ah,'$' str6 db 'the 6 bit is 1',0dh,0ah,'$' str7 db 'the 7 bit is 1',0dh,0ah,'$' str8 db 'the 8 bit is

19、 1',0dh,0ah,'$' addrtable dw show1,show2,show3,show4,show5,show6,show7,show8DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX mov bl,00001000b mov cx,8 mov si,0again: shl bl,1 jc next add si,2 loop againnext: jmp addrtablesi show1: lea dx,str1 jmp outputshow2:

20、 lea dx,str2 jmp outputshow3: lea dx,str3 jmp outputshow4: lea dx,str4 jmp outputshow5: lea dx,str5 jmp outputshow6: lea dx,str6 jmp outputshow7: lea dx,str7 jmp outputshow8: lea dx,str8 jmp output output: mov ah,9 int 21h MOV AH,4CH INT 21HCODES ENDSEND START實驗容二:編寫一個子程序計算z=f(x,y)=x*y+x-y(x,y,z有符號數(shù)

21、存數(shù))(1)堆棧傳遞參數(shù);z=x*y+x-y,x、y、z為有符號數(shù),堆棧傳遞DATAS SEGMENTx dw 5y dw 2z dw ?DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX sub sp,2 push y push x call cal pop z mov bx,z MOV AH,4CH INT 21Hcal proc push bp mov bp,sp push ax push bx mov ax,bp+4 mov bx,bp+6 imul bx add ax,bp+4 a

22、dc dx,0 sub ax,bp+6 sbb dx,0 mov bp+8,ax pop bx pop ax pop bp ret 4cal endpCODES ENDS END START(2)寄存器傳遞參數(shù);z=x*y+x-y,x、y、z為有符號數(shù),寄存器傳遞DATAS SEGMENT x dw 5 y dw 2 z dw ?DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX mov ax,x mov bx,y call cal mov z,ax MOV AH,4CH INT 21H c

23、al proc mov cx,ax imul bx add ax,cx adc dx,0 sub ax,bx sbb dx,0 ret cal endpCODES ENDS END START(3)存?zhèn)鬟f參數(shù);z=x*y+x-y,x、y、z為有符號數(shù),存?zhèn)鬟fDATAS SEGMENTx dw 5y dw 2z dw ?DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX call cal MOV AH,4CH INT 21H cal proc mov ax,x imul y add ax,x

24、adc dx,0 sub ax,y sbb dx,0 mov z,ax ret cal endpCODES ENDS END START實驗容三:實踐C>ASM的轉(zhuǎn)換過程_TEXTSEGMENT_c$ = -32; size = 2_b$ = -20; size = 2_a$ = -8; size = 2_mainPROC; COMDAT; 4 : void main()pushebpmovebp, espsubesp, 228; 000000e4Hpushebxpushesipushedileaedi, DWORD PTR ebp-228movecx, 57; 00000039Hmov

25、eax, -858993460; ccccccccHrep stosd; 5 : ; 6 : short a,b,c; 7 : a=1;moveax, 1movWORD PTR _a$ebp, ax; 8 : b=a+1;movsxeax, WORD PTR _a$ebpaddeax, 1movWORD PTR _b$ebp, ax; 9 : c=a+b;movsxeax, WORD PTR _a$ebpmovsxecx, WORD PTR _b$ebpaddeax, ecxmovWORD PTR _c$ebp, ax; 10 : ; 11 : ; 12 : xoreax, eaxpopedi

26、popesipopebxmovesp, ebppopebpret0_mainENDP_TEXTENDS四. 實驗結(jié)果(包括必要的截圖)實驗容一:(1) 轉(zhuǎn)移表:設(shè)bl=00010000b(2)地址表:設(shè)bl=00001000b實驗容二:設(shè)x=5,y=2,則z=13(000D),結(jié)果在ax(1) 堆棧傳遞參數(shù)(結(jié)果在bx中查看)(2)寄存器傳遞參數(shù)(結(jié)果在ax中查看)(3)存?zhèn)鬟f參數(shù)(結(jié)果在ax中查看)五、實驗體會 通過本實驗,讓我更加深入了解地址表和轉(zhuǎn)移表、子程序和從C輸出匯編文件等知識,通過實現(xiàn)地址表與轉(zhuǎn)移表加深了對匯編尋址方式的了解;實現(xiàn)子程序,掌握主程序如何調(diào)用子程序,及子程序與主程序之

27、間的參數(shù)傳遞方式;用VS實現(xiàn)C->ASM后,對C或C+有了新的認(rèn)識。實驗四 匯編語言高級編程專題一. 實驗?zāi)康?、匯編語言宏程序設(shè)計;2、 掌握中斷服務(wù)子程序的編寫。3、 匯編語言與高級語言的混編。二. 實驗容1、編寫一個宏,求三個數(shù)的最小數(shù),原型為:MIN3 x,y,z,min2、掛接1CH中斷,正計時60秒后退出。要求屏幕顯示0-59的秒數(shù)。3、VC+中編寫聯(lián)匯編,將字節(jié)數(shù)組的每個元素高低四位互換。 char dbyte = 0x34,0x45,0x56,0x67,0xaf;三. 實驗過程和程序1. 編寫一個宏,求三個數(shù)的最小數(shù),原型為:MIN3 x,y,z,minmin3 macr

28、o x,y,z,min mov ax,xcmp ax,yjbe nextmov ax,ycmp ax,zjbe donenext:cmp ax,zjbe donedone:mov min,axendmDATAS SEGMENTx dw 2y dw 4z dw 3min dw ?DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX min3 x,y,z,min MOV AH,4CH INT 21HCODES ENDS END START2、掛接1CH中斷,正計時60秒后退出。要求屏幕顯示0-59

29、的秒數(shù)。INTNO EQU 1CHDATA SEGMENT OLDISR DW ?,? TIMER DB 100 COUNTER DW 0 ISDONE DB 0DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,0 MOV ES,AX xor cx,cx ;PROTECT MOV AX, ES:INTNO*4 MOV OLDISR0,AX MOV AX,ES:INTNO*4+2 MOV OLDISR2, AX ;SET NEW ISR MOV WORD PTR ES:INTNO*4,

30、 OFFSET ISR MOV WORD PTR ES:INTNO*4+2,SEG ISR ;WAIT HEREWAITHERE: CMP ISDONE,1 JNZ WAITHERE EXIT: ;RESTORE MOV AX,OLDISR0 MOV ES:INTNO*4,AX MOV AX,OLDISR2 MOV ES:INTNO*4+2,AX MOV AX,4C00H INT 21H ISR PROC FAR PUSH DX PUSH AX MOV AX,DATA MOV DS,AX STI ;便于中斷嵌套 INC TIMER;-判斷是否輸入a- mov ah,0bh int 21h or al,al jz next MOV AH,8;不顯示輸入的字符 INT 21H CMP AL,'a&

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論