合肥工業(yè)大學(xué)匯編程序設(shè)計(jì)試驗(yàn)報(bào)告完整代碼_第1頁
合肥工業(yè)大學(xué)匯編程序設(shè)計(jì)試驗(yàn)報(bào)告完整代碼_第2頁
合肥工業(yè)大學(xué)匯編程序設(shè)計(jì)試驗(yàn)報(bào)告完整代碼_第3頁
合肥工業(yè)大學(xué)匯編程序設(shè)計(jì)試驗(yàn)報(bào)告完整代碼_第4頁
合肥工業(yè)大學(xué)匯編程序設(shè)計(jì)試驗(yàn)報(bào)告完整代碼_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——合肥工業(yè)大學(xué)匯編程序設(shè)計(jì)試驗(yàn)報(bào)告完整代碼

合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院

試驗(yàn)報(bào)告

課程:匯編語言程序設(shè)計(jì)

專業(yè)班級(jí):信息安全13-1

學(xué)號(hào):2023211869

姓名:馬駿

試驗(yàn)一Debug程序的使用

一.試驗(yàn)?zāi)康?/p>

1、熟悉DEBUG程序中的命令,學(xué)會(huì)在DEBUG下調(diào)試運(yùn)行匯編語言源程序。2、把握8086/8088的尋址方式及多字節(jié)數(shù)據(jù)的處理方法。

二.試驗(yàn)內(nèi)容

1、利用DEBUG程序中的“E〞命令,將兩個(gè)多字節(jié)數(shù)“003F1AE7H〞和“006BE5C4H〞分別送入起始地址為DS:0200H和DS:0204H兩個(gè)單元中。2、分別用直接尋址方式和寄放器間接尋址方式編寫程序段,實(shí)現(xiàn)將DS:0200H單元和DS:0204H單元中的數(shù)據(jù)相加,并將運(yùn)算結(jié)果存放在DS:0208H單元中。要求:

本次試驗(yàn)的內(nèi)容均在DEBUG下完成,實(shí)現(xiàn)數(shù)據(jù)的裝入、修改、顯示;匯編語言程序段的編輯、匯編和反匯編;程序的運(yùn)行和結(jié)果檢查。

三.試驗(yàn)過程和程序

試驗(yàn)將〞12345678H〞和〞FEDCBA98H〞分別送入起始地址為DS:200H和DS:204H的兩個(gè)單元中。還包含兩個(gè)附加題,一是從DS:0000H開始的5個(gè)16位帶符號(hào)數(shù)分別記為x,y,z,v,w,E命令初始化為:540,1,-1,1080,0,試求w=(v-(x*y+z-540))/x,二是統(tǒng)計(jì)bx中1的個(gè)數(shù)四.試驗(yàn)結(jié)果(包括必要的截圖)

將兩個(gè)多字節(jié)數(shù)“003F1AE7H〞和“006BE5C4H〞分別送入起始地址為DS:0200H和DS:0204H兩個(gè)單元中。

直接尋址方式實(shí)現(xiàn)數(shù)據(jù)相加

寄放器間接尋址實(shí)現(xiàn)數(shù)據(jù)相加

附加題一:

從DS:0000H開始的5個(gè)16位帶符號(hào)數(shù)分別記為x,y,z,v,w,用E命令初始化為:540,1,-1,1080,0,試求w=(v-(x*y+z-540))/x

附加題二:完成BX中1的個(gè)數(shù)的統(tǒng)計(jì)。

五.試驗(yàn)體會(huì)

通過本次試驗(yàn),了解了使用debug的各種指令。同時(shí)在debug下進(jìn)行編程,比較麻煩。由于是第一次編寫匯編程序,還是需要多練習(xí)。

試驗(yàn)二匯編語言程序設(shè)計(jì)(順序、循環(huán))

一.試驗(yàn)?zāi)康?/p>

1、把握順序和循環(huán)程序結(jié)構(gòu)和設(shè)計(jì)方法;

2、熟悉在PC機(jī)上建立、匯編、連接、調(diào)試和運(yùn)行8086/8088匯編語言程序的過程。

二.試驗(yàn)內(nèi)容

1、X、Y、Z、V均為字變量,在X、Y、Z、V字單元中存放是16位帶符號(hào)數(shù)。試編寫匯編語言程序完成以下功能:①計(jì)算表達(dá)式值(V–(X*Y+Z-720))/X;

②將上述表達(dá)式運(yùn)算結(jié)果整數(shù)放在SUM1單元,余數(shù)放在SUM2單元。2、求一個(gè)班50名學(xué)生成績(jī)的平均值(附加題:最大值和最小值,并將結(jié)果顯示出來)

3、從鍵盤讀入一個(gè)字符串,以Enter終止,字符串不超過50個(gè)字符,并打印該字符串(附加題:查找中間是否有‘a(chǎn)sm’子串。假使有,輸出‘Yes’;否則,輸出‘No’)。

三.試驗(yàn)過程和程序

1、計(jì)算表達(dá)式值(V–(X*Y+Z-720))/X;datasegmentxdw021chydw0001hzdw0ffffhvdw0438hwdw0000hsum1dw?sum2dw?dataends

assumecs:code,ds:datacodesegmentstart:movax,datamovds,ax

MOVAX,xIMULY;x*yMOVCX,AX

MOVBX,DXMOVAX,ZCWD

ADDCX,AX

ADCBX,DX;x*y+zSUBCX,540;?

SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CX

SBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x

movsum1,axmovsum2,dx

movax,4c00hint21hcodeendsendstart

2、求一個(gè)班50名學(xué)生成績(jī)的平均值(附加題:最大值和最小值,并將結(jié)果顯示出來)datasegmentdb7,49dup(6)maxdb?mindb?resultdb0dataends

assumecs:code,ds:datacodesegmentstart:movax,datamovds,ax

movax,0movcx,50movdi,0again:movbl,[di]

movbx,0

adddi,1addax,bxloopagainmovbl,50divblmovresult,al

movdi,50max2:subdi,1movcx,50movsi,0moval,[di]max1:cmpal,[si]jbmax2addsi,1loopmax1movmax,al

movdi,50min2:subdi,1movcx,50movsi,0moval,[di]min1:cmpal,[si]jnbmin2addsi,1loopmin1movmin,al

movax,4c00hint21hcodeendsendstart

3、從鍵盤讀入一個(gè)字符串,以Enter終止,字符串不超過50個(gè)字符,并打印該字符串(附加題:查找中間是否有‘a(chǎn)sm’子串。假使有,輸出‘Yes’;否則,輸出‘No’)。datasegment

data2db50,?,50dup('$')stringdb'yes$'string1db'no$'dataends

assumecs:code,ds:datacodesegmentstart:movax,datamovds,ax

movdx,offsetdata2+2movah,09hint21h

movah,2hmovdl,0ahint21h

movah,2h

movah,0ahmovdx,offsetdata2int21h

movah,2hmovdl,0ahint21h

movah,2hmovdl,0dhint21h

movdl,0dhint21h

moval,0hmovcx,47movdi,0

again:moval,[di+2]cmpal,61h

next:adddi,1loopagain

movdx,offsetstring1movah,09hint21h

jmpendcode

movdx,offsetstring

yes:

jnznextmoval,[di+3]cmpal,73hjnznextmoval,[di+4]cmpal,6dhjnznextjmpyes

movah,09hint21h

endcode:movax,4c00hint21hcodeendsendstart

四.試驗(yàn)結(jié)果(包括必要的截圖)

1、計(jì)算表達(dá)式值(V–(X*Y+Z-720))/X;

2、求一個(gè)班50名學(xué)生成績(jī)的平均值(附加題:最大值和最小值,并將結(jié)果顯示出來)

0030地址為平均值的商0032地址為最大值0034地址為最小值

3、從鍵盤讀入一個(gè)字符串,以Enter終止,字符串不超過50個(gè)字符,并打印該字符串(附加題:查找中間是否有‘a(chǎn)sm’子串。假使有,輸出‘Yes’;否則,輸出‘No’)。

五.試驗(yàn)體會(huì)

通過此次試驗(yàn),了解了符號(hào)擴(kuò)展指令的使用。其次程序中,以及在輸出時(shí),輸入的字符串末尾要注意加終止標(biāo)志’$’,還有在輸出字符串前要先輸出個(gè)回車換行,否則回車后看不到輸出結(jié)果。

試驗(yàn)三匯編語言子程序設(shè)計(jì)(分支、子程序)

一.試驗(yàn)?zāi)康?/p>

1、把握分支和子程序結(jié)構(gòu)和設(shè)計(jì)方法;

2、熟悉在PC機(jī)上建立、匯編、連接、調(diào)試和運(yùn)行8086/8088匯編語言程序的過程。3、通過匯編語言了解高級(jí)語言的參數(shù)傳遞等知識(shí)。

二.試驗(yàn)內(nèi)容

1、BL中的只有一位為1。編寫程序測(cè)試,并輸出提醒信息“TheXBitis1〞,要求:地址表和轉(zhuǎn)移表。

2.編寫一個(gè)子程序計(jì)算z=f(x,y)=x*y+x-y(x,y,z有符號(hào)數(shù)內(nèi)存數(shù))。要求通過堆棧(寄放器、內(nèi)存)傳送所有參數(shù)。3.實(shí)踐C?Asm的轉(zhuǎn)換過程。

三.試驗(yàn)過程和程序

1、BL中的只有一位為1。編寫程序測(cè)試,并輸出提醒信息“TheXBitis1〞,要求:地址表和轉(zhuǎn)移表。;blhaveone1cout

cbwadddx,axmovax,[bp+4]cbwsubdx,axpopbpret

movah,4ch

quit:

int21h

codeendsendstart

二、使用寄放器傳值

datasegmentxdb03hydb0ffhzdw0000hdataendsstacksegmentdw100dup(?)

stackends

assumeds:data,cs:code,ss:stackcodesegmentstart:movax,datamovds,ax

movax,stackmovss,axmoval,xmovbl,ycallprogrammovz,dxjmpquit

program:

movcl,alimulblmovdx,axmoval,clcbwadddx,axmoval,blcbwsubdx,ax

3.實(shí)踐C?Asm的轉(zhuǎn)換過程。#includeintmain(){

return0;}

}

_asmmovax,0088h;_asm{

ret

movah,4ch

quit:

int21h

codeendsendstart

四.試驗(yàn)結(jié)果(包括必要的截圖)

1、BL中的只有一位為1。編寫程序測(cè)試,并輸出提醒信息“TheXBitis1〞,要求:地址表和轉(zhuǎn)移表。

2.編寫一個(gè)子程序計(jì)算z=f(x,y)=x*y+x-y(x,y,z有符號(hào)數(shù)內(nèi)存數(shù))。要求通過堆棧(寄放器、內(nèi)存)傳送所有參數(shù)。使用堆棧:dx及0002中為f(3,-1)=1

二、使用寄放器傳值dx及0002中為f(3,-1)=1

3.實(shí)踐C?Asm的轉(zhuǎn)換過程。

TITLED:\\c++documents\\huibian.cpp.386P

includelisting.incif@Versiongt510.modelFLATelse

_TEXTSEGMENTPARAUSE32PUBLIC'CODE'_TEXTENDS

_DATASEGMENTDWORDUSE32PUBLIC'DATA'_DATAENDS

CONSTSEGMENTDWORDUSE32PUBLIC'CONST'CONSTENDS

_BSSSEGMENTDWORDUSE32PUBLIC'BSS'_BSSENDS

$$SYMBOLS$$SYMBOLS

SEGMENTBYTEUSE32'DEBSYM'ENDS

$$TYPESSEGMENTBYTEUSE32'DEBTYP'$$TYPESENDS

_TLSSEGMENTDWORDUSE32PUBLIC'TLS'_TLSENDS;

COMDAT_main

_TEXTSEGMENTPARAUSE32PUBLIC'CODE'_TEXTENDS

FLATGROUP_DATA,CONST,_BSS

ASSUMECS:FLAT,DS:FLAT,SS:FLAT

endifPUBLIC

_main

EXTRN__chkesp:NEAR;

COMDAT_main

_TEXTSEGMENT_mainPROCNEAR

;3:{

pushmov

ebpebp,esp

;00000040H

;COMDAT

subesp,64pushpushpush

ebxesiedi

leaedi,DWORDPTR[ebp-64]movmov

ecx,16

;00000010H

;ccccccccH

eax,-858993460

repstosd

2、掛接1CH中斷,正計(jì)時(shí)60秒后退出。要求屏幕顯示0-59的秒數(shù)。

--按a鍵后,保存舊時(shí)間,重新另起一行開始計(jì)時(shí);使用21H的0BH功能檢查按鍵是否按下

3、VC++中編寫內(nèi)聯(lián)匯編,將字節(jié)數(shù)組的每個(gè)元素高低四位互換。chardbyte[]={0x34,0x45,0x56,0x67,0xaf};

五.試驗(yàn)體會(huì)

在時(shí)間計(jì)數(shù)試驗(yàn)中,按a鍵假使使用1號(hào)功能則會(huì)輸出一個(gè)a。但使用7號(hào)功能

則是無回顯過濾的字符輸入,就不會(huì)再有a輸出啦

;4:;5:_asmmovax,0088h;

mov

ax,136

;6:_asm;7:{

;8:;9:;10:;11:};12:

;13:return0;xoreax,eax

;14:}popedipopesipopebxaddesp,64

cmpebp,espcall__chkespmovesp,ebp

popebp

ret0

_mainENDP_TEXTENDS

;00000088H

;00000040H

END

五.試驗(yàn)體會(huì)

通過本次試驗(yàn)使我了解了如何使用地址表和轉(zhuǎn)移表,以及怎樣通過堆棧(寄放器、內(nèi)存)傳送所有參數(shù)調(diào)用子程序。最終實(shí)踐了C?Asm的轉(zhuǎn)換過程,使我對(duì)C和匯編有了更多的認(rèn)識(shí)。

試驗(yàn)四匯編語言高級(jí)編程專題

一.試驗(yàn)?zāi)康?/p>

1、匯編語言宏程序設(shè)計(jì);

2、把握中斷服務(wù)子程序的編寫。3、匯編語言與高級(jí)語言的混編。

二.試驗(yàn)內(nèi)容

1、編寫一個(gè)宏,求三個(gè)數(shù)的最小數(shù),原型為:MIN3x,y,z,min2、掛接1CH中斷,正計(jì)時(shí)60秒后退出。要求屏幕顯示0-59的秒數(shù)。3、VC++中編寫內(nèi)聯(lián)匯編,將字節(jié)數(shù)組的每個(gè)元素高低四位互換。chardbyte[]={0x34,0x45,0x56,0x67,0xaf};

三.試驗(yàn)過程和程序

1、編寫一個(gè)宏,求三個(gè)數(shù)的最小數(shù),原型為:MIN3x,y,z,minminmacrox,y,zmovax,xcmpax,y

jlnext;jc看的是cf是當(dāng)成無符號(hào)數(shù)比較的?movax,ynext:cmpax,zjlfinalmovax,zfinal:nopendm

codesegmentassumecs:codestart:min4-63movax,4c00hint21hcodeendsendstart

2、掛接1CH中斷,正計(jì)時(shí)60秒后退出。要求屏幕顯示0-59的秒數(shù)。;addresequ1chdatasegment

piandw?duandw?stringdb48dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,ax

begin:movax,351chint21h

movpian,bxmovduan,espushds

movdx,offsetmyprocmovax,segmyprocmovds,axmovax,251chint21hpopdsmovcx,0movbx,0

next:cmpcx,1080;60*18jnznext

movdx,pianmovax,duanmovds,axmovax,251chint21hmovax,4c00hint21h

myprocprocsti

inccxincbxcmpbx,18

jzprintjmpovermovbl,stringjcp0subal,48movah,00hmovdl,10divdlmovbl,ahmovdl,al

movah,02hint21hmovdl,bladddl,48movah,02hint21hjmpp1

movdl,stringmovah,02hincstringmovah,02h

print:

cmpbl,58

moval,bl

adddl,48

p0:

int21hp1:

movdl,0dhint21h

movbx,0

;movdl,0dh;int21h

over:

iret

;msg:

;stringdb'onesecond$'

myprocendp

codeendsendstart

--按a鍵后,保存舊時(shí)間,重新另起一行開始計(jì)時(shí);使用21H的0BH功能檢查按鍵是否按下

datasegmentpiandw?duandw?stringdb48dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,ax

movax,351chint21h

movpian,bxmovduan,espushds

movdx,offsetmyprocmovax,segmyprocmovds,axmovax,251chint21hpopds

begin:movcx,0

movbx,0

next:cmpcx,1080;60*18jnznext

movdx,pianmovax,duanmovds,axmovax,251chint21hmovax,4c00hint21h

myprocprocsti

pushaxpushbxpushcxpushsi

movah,0bhint21hsubal,00hjzokmovah,07hint21hcmpal,61hjzcrazyjmpok

crazy:popsipopcx

popbxpopax

movah,0ch;清空輸入緩存區(qū)int21hmovah,02hmovdl,0ah

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論