計算機組成原理與匯編語言程序設(shè)計實驗報告_第1頁
計算機組成原理與匯編語言程序設(shè)計實驗報告_第2頁
計算機組成原理與匯編語言程序設(shè)計實驗報告_第3頁
計算機組成原理與匯編語言程序設(shè)計實驗報告_第4頁
計算機組成原理與匯編語言程序設(shè)計實驗報告_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學(xué)號:221000116計算機組成原理與匯編語言程序設(shè)計實驗報告姓名:郭海南計算機組成原理與匯編語言程序設(shè)計實驗報告實驗一實驗內(nèi)容:查看cpu和內(nèi)存,用機器指令和匯編指令編程。實驗任務(wù):(1)了解并熟悉window中debug工具.debug的命令及功能如下:*r【register】命令用于查看、改變寄存器的內(nèi)容;rr ax*d【不懂為什么叫d】查看內(nèi)存的內(nèi)容;d 段地址:偏移地址,段地址可以用cs,ds,ss,es代替*e 【edit】改寫內(nèi)存的內(nèi)容e 段地址:偏移地址 依次填入要賦值的數(shù)字,每個字節(jié)檢用空格間隔開*a 【asm,嘿嘿,我自己猜的,】以匯編的形式向內(nèi)存寫入東西a 段地址:偏移

2、地址如果沒有指定,一開始是cs:ip,其他的時上一次修改的末尾。*u 【英文不好,不懂,估計是un-ooxx反匯編吧】將內(nèi)存中的機器碼以匯編指令顯示出來格式和a命令一樣*t 【真不懂】執(zhí)行cs:ip指向的命令(2)用a、e命令向2000:0內(nèi)存中寫入以下命令,并執(zhí)行mov ax,1add ax,axjmp 2000:0003計算機組成原理與匯編語言程序設(shè)計實驗報告實驗二實驗內(nèi)容:用機器指令和匯編指令編程實驗任務(wù):(1)預(yù)備知識:了解debug是如何執(zhí)行d命令的在e,a,u命令中使用段寄存器 mov ss,ax mov sp,100(2)使用debug執(zhí)行一段程序-a13b4:0100 mov

3、ax,ffff13b4:0103 mov ds,ax13b4:0105 mov ax,220013b4:0108 mov ss,ax13b4:010a mov sp,010013b4:010d mov ax,013b4:0110 add ax,213b4:0114 mov bx,413b4:0118 add bx,613b4:011c push ax13b4:011d push bx13b4:011e pop ax13b4:011f pop bx13b4:0120 push 413b4:0124 push 613b4:0128計算機組成原理與匯編語言程序設(shè)計實驗報告實驗三實驗內(nèi)容:編程、編譯、

4、鏈接、跟蹤實驗任務(wù):(1) 編譯一個簡單的匯編程序assume cs:codecode segmentmov ax,1000hmov ss,axmov sp,0100hmov ax,1001hmov ds,ax;swap(ds:0,ds2)push ds:0push ds:2pop ds:0pop ds:2mov ax,4c00hint 21hcode endsend編譯:masm.exe code.txtlink.exe code.objpause運行:debug.exe code.exepause計算機組成原理與匯編語言程序設(shè)計實驗報告實驗四實驗內(nèi)容:【bx】和loop的使用實驗任務(wù):(1

5、) 編程,向內(nèi)存0:200 0:23f一次存入數(shù)據(jù)0 63assume cs:codecode segmentmov ax,0hmov ds,axmov bx,200h;start from 0:200mov cx,64h;loop for 64h timesmov ax,0h;0h to 63hlp:mov bx,axinc ax;add the numberinc bx,;move the addressloop lpmov ax,4c00hint 21hcode endsend(2) 編程,向內(nèi)存0:200 0:23f一次存入數(shù)據(jù)0 63,程序中只能9條指令(3) 下面的程序師將“mov

6、 ax,40cch之前的指令復(fù)制到內(nèi)存中去,assume cs:codecode segmentmov ax,csmov ds,axmov ax,0020hmov es,axmov bx,0mov cx,16hs:mov al,bxmov es:bx,alinc bxloop smov ax,4c00hint 21hcode endsend-d cs:0 16142d:0000 8c c8 8e d8 b8 20 00 8e-c0 bb 00 00 b9 16 00 8a . .142d:0010 07 26 88 07 43 e2 f8 .&.c.-d es:0 160020:0000 8c

7、 c8 8e d8 b8 20 00 8e-c0 bb 00 00 b9 16 00 8a . .0020:0010 07 26 88 07 43 e2 00 .&.c.計算機組成原理與匯編語言程序設(shè)計實驗報告實驗五實驗內(nèi)容:編寫,調(diào)試具有多個段的程序?qū)嶒炄蝿?wù):(4) 編譯,調(diào)試下面程序assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0acbh,0defh,0fedh,0cbah,0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0stack endscode segments

8、tart:mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:0push ds:2pop ds:2pop ds:0mov ax,4c00hint 21hcode endsend加載后:-r cscs 142f:-u142f:0000 b82e14 mov ax,142e142f:0003 8ed0 mov ss,ax142f:0005 bc1000 mov sp,0010142f:0008 b82d14 mov ax,142d142f:000b 8ed8 mov ds,ax142f:000d ff360000 push 00001

9、42f:0011 ff360200 push 0002142f:0015 8f060200 pop 0002142f:0019 8f060000 pop 0000142f:001d b8004c mov ax,4c00程序返回前:-d ds:0 16142d:0000 23 01 56 04 89 07 cb 0a-ef 0d ed 0f ba 0c 87 09 #.v.142d:0010 00 00 2d 14 2d 14 2d .-.-.-r cscs 142f:-r dsds 142d:-r ssss 142e(5) 編譯,調(diào)試下面程序assume cs:code,ds:data,ss:

10、stackdata segmentdw 0123h,0456hdata endsstack segmentdw 0,0stack endscode segmentstart:mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:0push ds:2pop ds:2pop ds:0mov ax,4c00hint 21hcode endsend start加載后:-d ds:0 4142d:0000 23 01 56 04 00 #.v.-r cscs 142f:-r dsds 142d:-r ssss 142e:程序返回前:-r ds

11、ds 142d:-r ssss 142e:-r cscs 142f:(6) 編譯,調(diào)試下面程序assume cs:code,ds:data,ss:stackcode segmentstart:mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:0push ds:2pop ds:2pop ds:0mov ax,4c00hint 21hcode endsdata segmentdw 0123h,0456hdata endsstack segmentdw 0,0stack endsend start-r cscs 142d:-r dsd

12、s 1430:-r ssss 1431:-d ds:0 41430:0000 23 01 56 04 00 #.v.(7) 編程,實現(xiàn)將a,b段數(shù)據(jù)相加,結(jié)果保留到c段中assume cs:codea segmentdw 7fffh dup(0fffh)a endsb segmentdw 7fffh dup(0eeeh)b endsc segmentdw 7fffh dup(0h)c endscode segmentstart:mov ax,amov ss,ax;get the a segmentmov ax,bmov es,ax;get the b segmentmov ax,cmov ds

13、,ax;get the c segmentmov cx,0fff0h;add the a and b ,length is the whole segmentmov bx,0h;from 0mov ax,0h;init the axmov dx,0h;init the dxlp:mov dl,ss:bx;get the byte from a segmentadd ax,dxmov dl,es:bx;get the byte from b segmentadd ax,dxmov ds:bx,al;save the answermov al,ah;shift the axmov ah,0;ini

14、t the ahinc bx;add bxloop lpadd ax,4c00hint 21hcode endsend start計算機組成原理與匯編語言程序設(shè)計實驗報告實驗六實驗內(nèi)容:更靈活定位內(nèi)存地址實驗任務(wù):(8) 實驗課程的程序大寫轉(zhuǎn)小寫assume cs:code,ds:datedata segmentdb unixdb forkdata endscode segmentstart:mov ax,datamov ds,axmov bx,0hmov cx,8hlp:mov al,bxor al,20hmov bx,alinc bxloop lpmov ax,4c00hint 21hco

15、de endsend start使用bx+idata,si、di等定位assume cs:code,ds:datadata segmentdb welcome to masm!db .data endscode segmentstart:mov ax,datamov ds,axmov di,10hmov si,0hmov cx,8hlp:mov ax,simov di,axadd si,2add di,2loop lpmov ax,4c00hint 21hcode endsend startassume cs:code,ds:datadata segmentdb welcome to masm

16、!db .data endscode segmentstart:mov ax,datamov ds,axmov si,0hmov cx,8hlp:mov ax,simov 10hsi,axadd si,2loop lpmov ax,4c00hint 21hcode endsend start編程實現(xiàn)將每個單詞前4個字母改為大寫字母assume cs:code,ds:data,ss:stackstack segmentdw 20h dup(0h)stack endsdata segmentdb 1. display db 2. brows db 3. replace db 4. modify d

17、ata endscode segmentstart:mov ax,datamov ds,axmov ax,stackmov ss,axmov sp,10hmov bx,0hmov cx,4lp1:push cxmov cx,4mov si,3lp2:mov al,bx+siand al,11011111bmov bx+si,alinc siloop lp2pop cxadd bx,10hloop lp1mov ax,4c00hint 21hcode endsend start計算機組成原理與匯編語言程序設(shè)計實驗報告實驗七實驗內(nèi)容:尋址方式在結(jié)構(gòu)化的數(shù)據(jù)訪問中的應(yīng)用實驗任務(wù):assume cs:

18、code,ds:datadata segmentdb 1970,1971,1972,1973,1974db 1975,1976,1977,1978,1979db 1980,1981,1982,1983,1984db 1985,1986,1988,1988,1989db 1990;21個年份dd 23,2134,343342,4334235,3dd 2332,23414,33432,43235,32dd 233,43214,3432,43235,33dd 23433,2144,3432,43235,323244,333342;21年份的公司收入 dword類型dw 2,3,6,778,711dw

19、 127,137,176,178,197dw 273,372,276,728,171dw 732,337,367,378,3117,1000;21年份的公司員工數(shù)7data endstable segmentdb 21 dup(year summ ne ?!)table endscode segmentstart:mov ax,datamov ds,axmov ax,tablemov es,axmov cx,21;21 timesmov bx,0hmov bp,0hmov di,84;4*21 byte ;summov si,168;84+84;numberlp:mov ax,bxmov es

20、:bp,axmov ax,bx+2mov es:bp+2,ax;copy the yearmov ax,simov es:bp+10,ax;copy the number of workersmov ax,bx+dimov es:bp+5,axmov dx,bx+di+2mov es:bp+7,dx;copy the sumdiv word ptr simov es:bp+13,ax;save the answaeradd bx,4hadd bp,10hadd si,2hloop lpmov ax,4c00hint 21hcode endsend start計算機組成原理與匯編語言程序設(shè)計實驗

21、報告實驗八實驗內(nèi)容:分析一個奇怪的程序?qū)嶒炄蝿?wù):(9) 編程,向內(nèi)存0:200 0:23f一次存入數(shù)據(jù)0 63assume cs:codecode segmentmov ax,4c00hint 21hstart:mov ax,0s:nopnopmov di,offset smov si,offset s2mov ax,cs:simov cs:di,axs0:jmp short ss1:mov ax,0int 21hmov ax,0s2:jmp short s1;編譯的時候只是指明ip偏移的相對地址nopcode endsend start計算機組成原理與匯編語言程序設(shè)計實驗報告實驗九實驗內(nèi)容:

22、根據(jù)材料編程實驗任務(wù):(10) 編程,向內(nèi)存0:200 0:23f一次存入數(shù)據(jù)0 63assume cs:codedata segmentdb nice to meet you!;17個字符db 00000111b;黑底白字db 01110000b;白底黑字db 00010100b;藍底紅字db 10001010b;ooxx.db 11011001b;ooxx.db 00010110b;ooxx.db 00000000b;一片漆黑db 01110111b;白白的;8 種樣式data endscode segmentstart:mov ax,0b800hmov ds,ax;set the buf

23、mov ax,datamov es,ax;set the datamov bx,0h;bx=行號mov bp,17;the style setlp:mov si,0h; with ds add step=2mov di,0h; with es add step=1mov cx,17;17個字節(jié)lp2:mov al,es:dimov bx+si,al;copy the lettermov al,es:bpmov bx+si+1,al;copy the styleadd si,2hinc diloop lp2inc bp;next styleadd bx,160; next linemov cx,

24、bpsub cx,25;25-17=8 linesloop lpmov ax,4c00hint 21hcode endsend start計算機組成原理與匯編語言程序設(shè)計實驗報告實驗十實驗內(nèi)容:編寫子程序?qū)嶒炄蝿?wù):(11) 編程實現(xiàn)顯示字符串a(chǎn)ssume cs:code,ds:data,ss:stackdata segmentdb nice to meet you!db 0db 哇哈哈,wuwuwuuw! heiheihei !db 0data endsstack segmentdb 100h dup(0);the stackstack endscode segmentstart:mov ax

25、,stackmov ss,axmov sp,100h;stackmov ax,datamov ds,ax;datamov dl,2mov dh,1mov cl,00101101b;set the style of the lettermov si,0call show_strmov dl,4mov dh,0add si,18call show_strmov ax,4c00hint 21h;end of the exec;/子過程定義 show_strshow_str:;顯示字符串;字符串以0結(jié)束;dh=行 dl=列 cl=樣式 ds:si=字符串首地址;無返回值push axpush bxpu

26、sh cxpush dxpush espush si;寄存器入棧mov ax,0b800hmov es,ax;get the bufmov al,160mul dh;get the first pos of the line dhmov bx,0;mov bl,dladd bl,bladd bx,ax;es:bx the first show placemov al,clmov cx,0;init cxshow_str_lp:mov cl,ds:simov es:bx,clmov es:bx+1,alinc siadd bx,2inc cxloop show_str_lp;loop until

27、 ds:si=0pop sipop espop dxpop cxpop bxpop ax;寄存器出棧ret;show_str 返回;/子過程定義 show_strcode endsend start(12) 解決除法溢出問題assume cs:code,ss:stackstack segmentdb 100h dup(0);the stackstack endscode segmentstart:mov ax,stackmov ss,axmov sp,100h;stackmov ax,0b0f0hmov dx,0201hmov cx,1hcall divdwmov ax,4c00hint 21

28、h;end of exec;/函數(shù)程定義 divdwdivdw:;divdw dword / word = dword;參數(shù)ax 低16位、dx高16位 cx除數(shù);返回值 ax,低16位、dx高16位 cx余數(shù)jcxz divdw_ret;處理除數(shù)為零的情況push bx;寄存器入棧push axmov ax,dxmov dx,0div cxmov bx,axpop axdiv cxmov cx,dxmov dx,bxpop bx;寄存器出棧divdw_ret:ret;函數(shù)返回;/子過程定義 divdwcode endsend start(13) 數(shù)值顯示assume cs:code,ds:d

29、ata,ss:stackdata segmentdb 100h dup(0)data endsstack segmentdb 100h dup(0);the stackstack endscode segmentstart:mov ax,stackmov ss,axmov sp,100h;stackmov ax,datamov ds,ax;datamov si,0mov ax,0hcall btodmov dl,2mov dh,1mov cl,00101101b;set the style of the lettercall show_strmov ax,4c00hint 21h;end of

30、 the exec;/子過程定義 show_strshow_str:;顯示字符串;字符串以0結(jié)束;dh=行 dl=列 cl=樣式 ds:si=字符串首地址;無返回值push axpush bxpush cxpush dxpush espush si;寄存器入棧mov ax,0b800hmov es,ax;get the bufmov al,160mul dh;get the first pos of the line dhmov bx,0;mov bl,dladd bx,ax;es:bx the first show placemov al,clmov cx,0;init cxshow_str

31、_lp:mov cl,ds:simov es:bx,clmov es:bx+1,alinc siadd bx,2inc cxloop show_str_lp;loop until ds:si=0pop sipop espop dxpop cxpop bxpop ax;寄存器出棧ret;show_str 返回;/子過程定義 show_str;/子過程定義 btodbtod:;將一個二進制轉(zhuǎn)化為十進制;參數(shù) ax=word型數(shù)據(jù);ds:si為目標(biāo)字符串首地址;無返回值push axpush bxpush cxpush dxpush si;寄存器入棧mov bx,0btod_lp1:mov dx,0

32、mov cx,10div cxadd dx,30hpush dxinc bxmov cx,axinc cxloop btod_lp1;get the string and push into stackmov cx,bxbtod_lp2:pop siinc siloop btod_lp2;write the answer into the memorymov ax,0mov si,ax;set the end of the stringpop sipop dxpop cxpop bxpop ax;寄存器出棧ret;btod過程返回;/子過程定義 btodcode endsend start課程

33、設(shè)計1assume cs:code,ds:data,ss:stackdata segmentdb 1970,1971,1972,1973,1974db 1975,1976,1977,1978,1979db 1980,1981,1982,1983,1984db 1985,1986,1988,1988,1989db 1990;21個年份dd 23,2134,343342,4334235,3dd 2332,23414,33432,43235,32dd 233,43214,3432,43235,33dd 23433,2144,3432,43235,1321324411,300000000;21年份的公

34、司收入 dword類型dw 2,3,6,778,711dw 127,137,176,178,197dw 273,372,276,728,171dw 732,337,367,378,1,10033;21年份的公司員工數(shù)7data endstable segmentdb 21 dup(year summ ne ?!)table endsbuffer segmentdb 100h dup(0)buffer endsstack segmentdb 1000h dup(0)stack endscode segmentstart:mov ax,datamov ds,axmov ax,tablemov es

35、,ax;試驗七代碼 =mov cx,21;21 timesmov bx,0hmov bp,0hmov di,84;4*21 byte ;summov si,168;84+84;numberlp:mov ax,bxmov es:bp,axmov ax,bx+2mov es:bp+2,ax;copy the yearmov ax,simov es:bp+10,ax;copy the number of workersmov ax,bx+dimov es:bp+5,axmov dx,bx+di+2mov es:bp+7,dx;copy the sum;對以前代碼的修改div word ptr sip

36、ush cxmov cx,sicall divdwpop cx;對以前代碼的修改mov es:bp+13,axmov es:bp+15,dx;save the answaeradd bx,4hadd bp,12hadd si,2hloop lp;試驗七代碼 =mov ax,buffermov ds,ax;set the buffermov bx,0mov di,0;the di linemov si,0mov cx,21lp2:push cx;/=show the yearmov ax,es:bxmov ds:si,axmov ax,es:bx+2mov ds:si+2,axmov al, ;

37、output the spacemov ah,0h;set the end of stringmov ds:si+4,axmov dl,0mov ax,dimov dh,al;set the linemov cl,00011101b;set the style of the lettercall show_str;show the year;/=show the year;/=show the summov ax,es:bx+5mov dx,es:bx+7call dw_btodmov ax,10;字符串長度10call format_str;格式化字符串mov dl,5mov ax,dimo

38、v dh,al;set the linemov cl,00101101b;set the style of the lettercall show_str;show the year;/=show the sum;/=show the numbermov ax,es:bx+10call btodmov ax,6;字符串長度6call format_str;格式化字符串mov dl,16mov ax,dimov dh,al;set the linemov cl,00110101b;set the style of the lettercall show_str;show the year;/=s

39、how the number;/=show the averagemov ax,es:bx+13mov dx,es:bx+15call dw_btodmov ax,10;字符串長度10call format_str;格式化字符串mov dl,22mov ax,dimov dh,al;set the linemov cl,01000101b;set the style of the lettercall show_str;show the year;/=show the averageadd bx,12h;mov to next yearinc dipop cxloop lp2mov ax,4c

40、00hint 21h;實驗十的代碼=;/子過程定義 show_strshow_str:;顯示字符串;字符串以0結(jié)束;dh=行 dl=列 cl=樣式 ds:si=字符串首地址;無返回值push axpush bxpush cxpush dxpush espush si;寄存器入棧mov ax,0b800hmov es,ax;get the bufmov al,160mul dh;get the first pos of the line dhmov bx,0;mov bl,dladd bx,bx;這個是以前的bug,現(xiàn)在已經(jīng)修改了 !add bx,ax;es:bx the first show

41、placemov al,clmov cx,0;init cxshow_str_lp:mov cl,ds:simov es:bx,clmov es:bx+1,alinc siadd bx,2inc cxloop show_str_lp;loop until ds:si=0pop sipop espop dxpop cxpop bxpop ax;寄存器出棧ret;show_str 返回;/子過程定義 show_str;/子過程定義 btodbtod:;將一個二進制轉(zhuǎn)化為十進制;參數(shù) ax=word型數(shù)據(jù);ds:si為目標(biāo)字符串首地址;無返回值push axpush bxpush cxpush dx

42、push si;寄存器入棧mov bx,0btod_lp1:mov dx,0mov cx,10div cxadd dx,30hpush dxinc bxmov cx,axinc cxloop btod_lp1;get the string and push into stackmov cx,bxbtod_lp2:pop siinc siloop btod_lp2;write the answer into the memorymov ax,0mov si,ax;set the end of the stringpop sipop dxpop cxpop bxpop ax;寄存器出棧ret;bt

43、od過程返回;/子過程定義 btod;/函數(shù)程定義 divdwdivdw:;divdw dword / word = dword;參數(shù)ax 低16位、dx高16位 cx除數(shù);返回值 ax,低16位、dx高16位 cx余數(shù)jcxz divdw_ret;處理除數(shù)為零的情況push bx;寄存器入棧push axmov ax,dxmov dx,0div cxmov bx,axpop axdiv cxmov cx,dxmov dx,bxpop bx;寄存器出棧divdw_ret:ret;函數(shù)返回;/子過程定義 divdw;實驗十的代碼=;/子過程定義 dw_btod btod的擴充dw_btod:;將

44、一個二進制轉(zhuǎn)化為十進制;參數(shù) ax=low word dx=hight word;ds:si為目標(biāo)字符串首地址;無返回值push axpush bxpush cxpush dxpush si;寄存器入棧mov bx,0dw_btod_lp1:mov cx,10call divdw;dx_ax /10 =dx_ax .cxadd cx,30hpush cxinc bxmov cx,axor cx,dxinc cxloop dw_btod_lp1;get the string and push into stackmov cx,bxdw_btod_lp2:pop siinc siloop dw_btod_lp2;write the answer into the memorymov ax,0mov si,axpop sipop dxpop cxpop bxpop ax;寄存器出棧ret;btod過程返回;/子過程定義 dw_btod;/子過程定義format_strformat_str:;如果ds:si指定的字符串不足ax位,則用 補滿;無返回值push axpush sipush cx;寄存器入棧mov cx,axformat_str_lp:mov

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論