2023年河北工業大學匯編實驗報告_第1頁
2023年河北工業大學匯編實驗報告_第2頁
2023年河北工業大學匯編實驗報告_第3頁
2023年河北工業大學匯編實驗報告_第4頁
2023年河北工業大學匯編實驗報告_第5頁
已閱讀5頁,還剩38頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

匯編實驗

實驗一順序與分支程序設計

-'實驗目的

1)掌握順序程序設計方法。

2)掌握分支程序的結構及分支程序的設計,調試方法。

2)學習數據傳送及算術和邏輯運算指令的用法。

3)熟悉在PC機上建立、匯編、連接、調試和運營匯編語言程序的過程。

二、實驗內容

1)有一字變量BUF1是以原碼表達的有符號數,規定將其轉換為反碼和補

碼,分別存入BUF2和BUF3單元,并在屏幕上顯示出來。

2)有兩個兩字節無符號數分別放在存儲單元A、B起始的緩沖器中,求其

和,結果放在A起始的緩沖區并在屏幕上顯示。相加若有進位不存入存儲單元。

。3)在BUF和BUF+1、BUF+2單元分別放有一個無符號字節型數,編程序將

其中最大數存入MAX單元,并在屏幕上顯示。

。4)規定同上,只是比較的數為有符號數。

5)將1000H單元開始的10個字節數,采用奇偶校驗,將奇數在前偶數在后

仍存回原數據區。本實驗規定在DEBUG調試狀態下進行,涉及匯編程序、運營

程序、檢查結果。

6)從鍵盤上接受一位十進制數X,計算Y值,并以十六進制形式顯示出來,

Y按下列公式計算。

-X?+XQX=3)

_X2-2X(X=4)

-1X2(X=5)

X2/2(X=6)

7)從鍵盤上接受兩個一位十六進制數X和Y,然后再輸入一個A-D之間的

一個字符,按下列規定計算。

a)當輸入字符為A,則計算X+Y,并以十六進制形式顯示出來

b)當輸入字符為B,則計算|X-Y|,并以十六進制形式顯示出來

c)當輸入字符為C,則計算X*Y,并以十六進制形式顯示出來

d)當輸入字符為D,則計算X/Y,并以十六進制形式顯示出來

三'實驗設備

PC機一臺

四'實驗準備

1)分析題目,將程序中的原始數據和最終結果的存取方法擬定好。

2)畫出流程圖。

3)寫出源程序。

4)對程序中的結果進行分析,并準備好上機調試與用匯編程序及匯編調試

的過程。

五、實驗環節

1)輸入源程序。

2)匯編、連接程序,生成.EXE文獻,執行文獻,檢查結果。

六'實驗報告的規定

1)列出源程序,說明程序的基本結構,涉及程序中各部分的功能。

2)說明程序中各部分所用的算法。

3)說明重要符號和所用到寄存器的功能。

。4)總結為什么在設計分支程序時必須解決三個問題:判斷、轉向和定標號。

5)說明標志位CF、SF和OF的意義。

6)上機調試過程中碰到的問題是如何解決的。

7)對調試源程序的結果進行分析。

Exami:

DATASEGMENT;數據段

BUF1DW7898H

BUF2DW4DUP(0),0AH,ODH,7$'

BUF3DW4DUP(0),'$'

DATAENDS;數據段結束

CODESEGMENT;代碼段

ASSUMECS:CODE,DS:DATA;段寄存器關聯說明

偽指令

BEGIN:MOVAX,DATA

MOVDS,AX;將數據段的基地址裝入數據

段寄存器DS

MOVAX,BUF1;將字型變量BUF1的值裝入AX

寄存器

ADDAX,0;AX寄存器里的數據加0,以便進行轉移

測試

JSNEXT;判斷(AX)

的正負,若為負則轉到NEXT,為正則往下順序執行。

MOVBUF2,AX;為正,反碼與原碼

同樣

MOVBUF3,AX;為正,補碼與

原碼同樣

JMPEEE

NEXT:ANDAX,7FFFH;將符號位變為0

NOTAX;求

反碼

MOVBUF2,AX;WB

UF1的反碼裝入BUF2

INCA

X;求補碼

MOVBUF3,AX;將補碼

裝入BUF3

EEE:MOVCX,0004H;將0004H裝入CX

計數器寄存器中

MOVDI,OFFSETBUF2;將口1指向

變量BUF2開始的存儲單元

MOVDX,[DI]:^DI

所指的數據裝入DX寄存器中

ADDDI,03;將。1指

針下移三個字

BBB:MOVAX,DX;將口X中的內容裝

入AX寄存器中

ANDAX,00OFH;即使B

UF2的低四位不變,其余均變為0

CMPAL,0AH;比較[AL]與

OAH的大小,以便能對的轉換為0-9的ASCH值

JBQQQ;若[AL]<0

AH,則轉到QQQ,否則,順序執行

ADDAL,07H;由于[ALD0AH,

所以[AL]+07H,使得AL能轉換成相應數字的ASCH值

QQQ:ADDAL,30H;將將L]轉換成相

應數字的ASCH值

MOV[DI],AL;將人!,中的內容裝

入以DS中的內容為段基地址,以DI的內容為偏移地址的存儲單元中

DECDI;DI=DI-1,即將

DI指向前一個存儲單元

PUSHCX;保存CX寄存器的內容

MOVCL,04H;給?L寄存器賦值為0

4H

SHRDX,CL;將皿(]邏輯

右移四位

POPCX;恢復CX寄存器的內容

LOOPBBB;循環判斷語句,CX=CX-

1,若CX不等于0,則轉到BBB,將下一個低四位存入存儲單元中,否則循環結

MOVCX,0004H;給。*寄存器賦值為0004H

MOVSI,OFFSETBUF3;將51指向變量BUF3開

始的存儲單元

MOVDX,[SI];將$1所指的數據裝入DX

寄存器中

ADDSI,03H;將DI指針下移三個字

CCC:MOVAX,DX;將DX中的內容裝入AX寄存器中

ANDAX,OOOFH;即使BUF3的低四位不變,其余

均變為0

CMPAL,0AH;比較[AL]與0AH的大小,以便

能對的轉換為0-9的ASCH值

JBDDD則轉到DDD,否貝1

順序執行

ADDAL,07H;由于[AL]>0AH,所以[AL]

+07H,使得AL能轉換成相應數字的ASCII值

DDD:ADDAL,30H;將[AL]轉換成相應數字的ASCH

MOV[SI],AL;將AL中的內容裝入以DS

中的內容為段基地址,以SI的內容為偏移地址的存儲單元中

DECSI;SI=SI-1,即將SI指向前一個

存儲單元

PUSHCX;保存CX寄存器的內容

MOVCL,04H;給CL寄存器賦值為()

4H

SHRDX,CLM等[DX]邏輯右移四位

POPCX;恢復CX寄存器的內容

LOOPCCC;循環判斷語句,CX=CX-1,若

CX不等于0,則轉到CCC,將下一個低四位存入存儲單元中,否則循環結束

MOVDX,OFFSETBUF2;將BUF2的偏移地址裝

入DX寄存器中

MOVAH,09H

INT21H;在屏幕上顯示BUF1的反碼

MOVDX,OFFSETBUF3

MOVAH,09H

INT21H;在屏幕上顯示BUF1

的補碼

MOVAH,4CH

INT21H;帶返回碼終止

CODEENDS

ENDBEGIN

c\C:\IIHD0IS\systeB32\cBd.exe日回口

Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserued.

Objectfilename[a.OBJ]:

SourcelistingCNUL.LST]:

Cross-reference[NUL.CRF]:

50672?415568Bytessymbolspacefree

0WarningErrors

0SeuereErrors

D:Xhuibian>linka

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.

RunFile[A.EXE]:

ListFileCNUL.MAP]:

Libraries[.LIB]:

Warning:nostacksegment

D:\huibian>a.exe

ECB7

ECB8

D'htiibiant__________________________________________________________________________________

Exam2:

DATASEGMENT;數據段

ADB34H,18H,2DUP(0),$';定義字節型變

量,其后的每操作數都占有一個字節

BDB56H,83H;定義字節型變量,其后的每操

作數都占有一個字節

DATAENDS;數據段結束

CODESEGMENT;代碼段

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX;將數據段基地址裝入數據段寄存器DS

MOVAL,A;將A所指的數裝入AL寄存器中

MOVBL,B;將8所指的數裝入BL寄存器中

ADDAL,BL;AL+BL->AL

MOVAH,A+l;將A所指的下一個字節的數據裝

入AH

MOVBH,B+l;將B所指的下一個字節的數據裝入

ADCAH,BH;AH與BH進行帶進位加法

MOVA,AL;將第一個無符號數的相加結果放在以A起

始的緩沖區

MOVA+1,AH;將第二個無符號數的相加結果放在以A+1起

始的緩沖區

MOVCX,0014H;以下是將數據轉換為相應的ASCH值

MOVDIOFFSETA

MOVDX,[DI]

ADDDI,03

NEXT:MOVAX,DX

ANDAX,OOOFH

CMPAL,0AH

JBQQQ

ADDAL,07H

QQQ:ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,14

SHRDX,CL

POPCX

LOOPNEXT

MOVDX,OFFSETA

MOVAH,09H

INT21H;在屏幕上顯示結果

MOVAH,4CH

INT21H;帶返回碼終止

CODEENDS

ENDSTART

C<C:\IIID0¥S\systeB32\cBd.exe日日日

Microsoft<R>MacroAssemblerUersion5.00

Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.

Objectfilename[b.OBJ]:

Sourcelisting[NUL.LST]:

Cross-referenceCNUL.CRF]:

50672+415568Bytessymbolspacefree

0WarningErrors

0SeuereErrors

D:\huibian>linkb

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserued.

RunFile[B.EXE]:

ListFile[NUL.MAP]:

Libraries[.LIB]:

Uarning:nostacksegment

D:\huibian>b.exe

9B8A

D'huibian)

Exam3:

STACKSEGMENTSTACK;堆棧段

DB1000DUP(0);定義其后的每個操作數都占有一個字節

STACKENDS;堆棧段結束

DATASEGMENT;數據段

BUFDB72H,34H,1FH;定義字節型變量,其后的每

操作數都占有一個字節

MAXDB2DUP(?),;定義字節型變量,其后

的每操作數都占有一個字節

DATAENDS;數據段結束

CODESEGMENT;代碼段

ASSUMECS:CODE,DS:DATA,SS:STACK

BEGIN:MOVAX,DATA

MOVDS,AX;將數據段基地址裝入數據段寄存

器DS

MOVAL,BUF;將BUF所指向的一個字節數據裝入

AL

CMPAL,BUF+1;比較BUF與BUF+1大小

JNBLP1;假如BUF不小于BUF+1,則轉到Ipl,否

則順序向下執行

MOVAL,BUF+1;將8詼+1所指向的一個字節數據裝入

AL

LP1:CMPAL,BUF+2JWBUF^HBUF1

中較大的一個和BUF+2比較大小

JAELP2;假如BUF2小,則轉到lp2,否則執行順序向下

執行

MOVAL,BUF+2;此時BUF2為三個數中最大的一個,將最

大數裝入AL寄存器中

LP2:MOVCX,04H;以下是將輸出的最大數轉換為相應的A

SCH值MOVDI,OFFSETMAX

MOVDL,AL

INCDI

LP3:ANDAL,OFH

CMPAL,OAH

JBLP4

ADDAL,07H

LP4:ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,03H

SHRDL,CL

POPCX

MOVAL,DL

LOOPLP3

MOVDX,OFFSETMAX

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

仔,命令提示符!

Microsoft<R>MacroAssemblerUersion5.00

Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.

Objectfilename[a.OBJ]:

Sourcelisting[NUL.LST]:

Cross-reference[NUL.CRF1:

50652+415812Bytessymbolspacefree

0WarningErrors

0SeuereErrors

D:\huibian>1inka

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984.1985.Allrightsreserued.

RunFile[A.EXE]:

ListFile[NUL.MAP]:

Libraries[.LIB]:

D:\huibian>a.exe

70

D:\huibian>_

Exam4:

STACKSEGMENTSTACK

DB1000DUP(0)

STACKENDS

DATASEGMENT

BUFD

B98H,75H,

32H

MAXDB4DUP(?),'$'

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

BEGIN:MOVAX,DATA

MOVDS,AX

MOVAL,BUF

CMPAL,BUF+1

JGLP1;JG為比較兩個有帶符號數的

大小,比較BUF和BUF1的大小,若BUF>BUF1,則跳轉到1p1繼續執行,

否則順序向下執行

XCHGAL,BUF+1;互換AL寄存

器中的內容和BUF1,使AL寄存器中存放BUF和BUF1中較大的一個

LP1:MOVMAX,AL

JGElp2。;比較兩個帶符號數,假如BUF2小,則轉到lp2,否則執行

順序向下執行

MOVAL,BUF+2。

Lp2:MOVMAX,AL*以下是將輸出的最大數轉換為相應的ASCII值,

與1)題相同

MOVCX,04H

MOVDI,OFFSETMAX

MOVDL,[DI]

INCDI

LP3:MOVAL,DL

ANDAL,OFH

CMPAL,0AH

JBLP4

ADDAL,07H

LP4:ADDAL,3OH

MOV[DI],AL

DECDI

PUSHex

MOVCL,02

SHRDX,CL

POPCX

LOOPLP3

MOVDX,OFFSETMAX

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

京命令提示符-Inix

D:\huibian>masna

Microsoft<R>MacroAssenblerUersion5.00

Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserued.

Objectfilename[a.OBJ]:

Sourcelisting[NUL.LST]:

Cross-reference[NUL.CRF]:

50652?415812Bytessymbolspacefree

0WarningErrors

0SeuereErrors

D:\huibian>linka

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.

RunFile[A.EXE]:

ListFile[NUL.MAP3:

Libraries[.LIB]:

D:\huibian>a.exe

75

D:\huibian>_

實驗二循環與子程序程序設計

一'實瞼目的

1)加深對循環結構的理解。

2)掌握循環程序的設計方法。

3)學習子程序的定義和調用方法。

4)掌握子程序、子程序的嵌套、遞歸子程序的結構。

5)掌握子程序設計、編制及調試。

6)純熟掌握DEBUG的常用命令,學會用DEBUG調試程序。

二'實驗內容

1)編制程序計算S=1+2?3+3?4+4?5+.......+N(N+1)+...

直到N(N+1)大于200為止,并將結果由屏幕上顯示出來。

2)將從3000H內存單元開始的100個字節存儲單元所有清0。

3)編制在屏幕上顯示九九乘法表的程序。

4)編制在屏幕上顯示用*組成的三角形的程序。

5)設有五個字數據存放在以BUF為首地址的內存單元中,規定采用調用多個

字數據相加的子程序方法編程,和的低位字放在RESULT單元,和的高位字放在

RESULT+2單元,并將結果顯示在屏幕上。

6)編寫一個遞歸子程序,計算指數函數X"的值,其中X,n從鍵盤輸入。

三'實驗設備

PC機一臺

四、實驗環節

1)按程序流程圖編制實驗程序。

2)輸入源程序。

3)匯編、連接程序,執行程序,檢查結果。

4)對內存單元3000H開始的100個存儲單元用E命令輸入任意數。

5)程序的執行可用DEBUG的G命令,也可用T命令單步跟蹤執行。

6)用D命令檢查執行結果。

五、實驗報告的規定

1)列出源程序。

2)對程序中用到的寄存器說明其功能。

3)總結計數控制循環程序的設計方法。

。4)說明如何使用DEBUG進行程序調試的。調試過程中所碰到的問題是如何

解決的。

、Examl:

DATASEGMENT

BUFDB,S=l+2X3+3X4+4X5+???+N(N+1)+…,S'

RESDW4DUP(0),芍'

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVDX,0FFSETBUF

MOVAH,09H

INT21H

MOVDX,1

MOVBL,2

NEXT:MOVAL,BL

INCBL

MULBL

ADDDX,AX

CMPAX,200

JNANEXT

MOVCX,0004H

MOVDI,OFFSETRES

ADDDI,03H

NEXT1:MOVAX,DX

ANDAX,000FH

CMPAL,0AH

JBNEXT2

ADDAL,07

NEXT2:ADDAL,3OH

MOV[DI],AL

DECDI

PUSHex

MOVCL,04

SHRDX,CL

POPex

LOOPNEXT1

MOVDX,OFFSETRES

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

|Bv|C:\TIin)OTS\syste?32\c?d.exe日回Q

Microsoft<R>MacroAssemblerUersion5.00

Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.

Objectfilename[a.OBJ1:

Sourcelisting[NUL.LST]:

Cross-reference[NUL.CRFJ:

50664+415608Bytessymbolspacefree

0WarningErrors

0SeuereErrors

C:\huibian>linka

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.

BunFile[A.EXEJ:

ListFile[NUL.MAP3:

Libraries[.LIB]:

Uarning:nostacksegment

C:\huibian>a.exe

K=1+2*3+3*4+4?5+£i+N<N+l>+ii=045F

C:\huibian>

Exam3:

DATASEGMENT

ATADDB?,2AH,?,3DH,?,?,2OH,$

ATAD1DB?,2AH,?,3DH,?,?,ODH,0AH,f$'

DATAENDS

STACKSEGMENTSTACK

DB2OHDUP(O)

STACKENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCL,09H

MOVBL,OOH

OKL:

MOVAL,OOH

INCBL

OK1:

INCAL

PUSHAX

CMPBL,AL

JZOK

MOVBH,AL

MULBL

MOVDI,OFFSETATAD

CALLOKP

POPAX

JMPOKI

OK:

MOVBH,AL

MULBL

MOVDI,OFFSETATAD1

CALLOKP

POPAX

LOOPOKL

MOVAH,4CH

INT21H

OKPPROC

PUSHAX

PUSHBX

PUSHCX

ADDBX,3030H

MOV[DI],BH

MOVIDI+02HJ,BL

MOVCX,0AH

MOVDH,OOH

OKL2:

CMPAX,CX

JS0K2

ADDCX,OAH

INCDH

JMPOKL2

OK2:

SUBCX,OAH

SUBAX,CX

MOVAH,DH

ADDAX,3030H

MOV[DI+04H],AH

MOVIDI+O5HJ,AL

MOVDX,DI

MOVAH,09H

INT21H

POPCX

POPBX

POPAX

RET

OKPENDP

CODEENDS

ENDSTART

C:\¥INDO¥S\systeB32\od.exeBBX

0WarningErrors

0SeuereErrors

:\huiblan>1inka

licrosoft<R>8086ObjectLinkerUersion3.05

:opyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserued.

UnFi1e

F[A.EXE]:

ist1?1

ibi[NUL.MAP]:

rare[.LIB]:

:\nuiblanza.exe

2*2=04

2*3=063*3=09

2*4=083*4=124*4=16

2*5=103*5=154*5=205*5=25

2*6=123*6=184*6=245*6=306*6=36

2*7=143*7=214*7=285*7=356*7=427*7=49

2*8=163*fi=244*8=325*8=406*8=487*8=568*8=64

2*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81

Exam4:

CODESSEGMENT

ASSUMECS:CODES

START:

XORBX,BX

MOVDL,2AH

MOVCX,9

LOP:PUSHCX

INCBL

MOVCL,BL

MOVDL,2AH

LOP2:MOVAH,02H

INT21H

LOOPLOP2

POPCX

MOVDL,OAH

MOVAH,02H

INT21H

MOVDL,ODH

MOVAH,02H

INT21H

CMPBL,9

JZENDPRO

LOOPLOP

ENDPRO:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

?C:\¥Iin)OTS\syste>32\c>d.exeHEIE3

0WarningErrors

0SeuereErrors

C:\huibian>linka

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.

RunFile[A.EXE]:

ListFile[NUL.MAP]:

Libraries[.LIB]:

Warning:nostacksegment

C:\huibian>a.exe

M

M-M

M-M-M

xxxxx

jexxxxxx

C:\huibian>

Exam5:

STACKSEGMENTSTACK

DB1024DUP(0)

STACKENDS

DATASEGMENT

BUFDWOFIOIHJIODH,52H,1OOH,456H

COUNT=($-BUF)/2

RESULTDW4DUP(?):$'

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

WDADDPROC

PUSHDI

MOVAX,0

MOVDX,0

MOVDI,OFFSETBUF

NEXT2:ADDAX,[Di]

JNCNEXT1

INCDX

NEXT1:ADDDI,2

LOOPNEXT2

POPDI

RET

WDADDENDP

SHOWPROC

PUSHCX

PUSHDI

MOVex,04H

MOVDI,OFFSETRESULT

MOVBX,AX

ADDDI,07H

BBB:MOVAX,BX

ANDAX,OOOFH

CMPAL,OAH

JBQQQ

ADDAL,07H

QQQ:ADDAL,30H

MOV[DI],AL

DECDI

PUSHCX

MOVCL,04

SHRBX,CL

POPCX

LOOPBBB

MOVex,0004H

ccc:MOVAX,DX

ANDAX,OOOFH

CMPAL,,0AH

JBDDD

ADDAL,07H

DDD:ADDAL,3OH

MOV[DI],AL

DECDI

PUSHex

MOVCL,04H

SHRDX,CL

POPex

LOOPCCC

POPDI

POPex

RET

SHOWENDP

BEGIN:MOVAX,DATA

MOVDS,AX

MOVex,COUNT

CALLWDADD

CALLSHOW

MOVDX,OFFSETRESULT

MOVAH,09H

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDBEGIN

五C:\¥IMD01S\syste>32\cBd.exeBSB

C:\huibian>nasna

Microsoft<R>MacroAssemblerUersion5.00

Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.

ObjectFilename[a.OBJ]:

Sourcelisting[NUL.LST]:

Cross-referenceINUL.CRF]:

50588?415684Bytessymbolspacefree

0WarningErrors

0SeuereErrors

C:\huibian>linka

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserved.

RunFile[A.EXE]:

ListFileENUL.MAP]:

Libraries[.LIB]:

C:\huibian>a.exe

000107B6

C:\huibian>

實驗三算術運算與代碼轉換程序設計

一、實驗目的

1)掌握算術運算程序的設計方法。

2)掌握代碼轉換程序的設計方法。

3)進一步掌握各種程序結構。

4)純熟掌握和使用用DEBUG調試程序。

二'實瞼內容

1)編制兩個多字節整數加法和減法程序,并將結果按十六進制形式顯示在

屏幕上。

2)編制程序實現二進制定點數與十進制數的ASCII碼串之間轉換,并將結果

顯示在屏幕上。

3)編寫程序計算從鍵盤輸入兩個不超過四位的十進制數的和、差、積、商,

并以十進制形式輸出。

4)寫程序把從鍵盤輸入的四位十六進制數轉換為壓縮的BCD碼,并顯示輸出。

5)編寫一通用過程用來將十進制數(從鍵盤輸入)轉換為P(從鍵盤輸入)進

制數。

三'實驗設備

PC機一臺

四'實驗環節

1)按程序流程圖編制實驗程序。

2)輸入源程序。

3)匯編、連接程序,執行程序,檢查結果。

4)程序的執行可用DEBUG的G命令,也可用T命令單步跟蹤執行。

5)用D命令檢查執行結果。

五、實驗報告的規定

1)列出源程序。

2)對程序中用到的寄存器說明其功能。

3)總結算術運算和代碼轉換程序的設計方法。

4)說明如何使用DEBUG進行程序調試的。調試過程中所碰到的問題是如

何解決的。

Eaxml:

DATASEGMENT

oADB82H,34H,56H,78H,2AH,OBCH,0EFH,00H

BDB34H,56H,78H,9AH,0BCH.0EFHJ6H

LENBEQU$-B

LEN2EQU(B-A)*2

RESDBLEN2DUP(?),

DATAENDS

STACKSEGMENTPARASTACK

DW20DUP(?)

STACKENDS

CODESEGMENT

ASSUMEDS:DATA,CS:CODE,SS:STACK

START:OMOVAX,DATA

oMOVDS,AX;多字節相加

oMOVSI,0

CLC

oMOVCX,LENB

LOP1:MOVAL,AISI]

oADCAL,B[SI1

oMOVA[SI],AL

oINCSI

LOOPLOP1

ADCBYTEPTRA[SI],0;輸出

oMOVSI,0

oADDSLLENB

MOVDL0

MOVCX,LENB+1

LOP2:PUSHCX

MOVAL,A[SI];高位轉換

oMOVBL,AL

oMOVCL,4

oSHRBL,CL

oCMPBL,0AH

oJBNEXT1

oADDBL,07H

NEXT1:ADDBL,30H

oMOVRES[DI],BL

INCDI;低位轉換

oMOVBL,AL

ANDBL,0FH

CMPBL,OAH

oJBNEXT2

ADDBL,07H

NEXT2:ADDBL,30H

MOVRES[DI],BL

INCDI

oDECSI

POPCX

LOOPLOP2

MOVAH,09H

oMOVDX,OFFSETRES

INT21II

oMOVAH,4CH

INT21II

CODEENDS

ENDSTART

c:\C:\WIND0¥S\systeB32\cBd.exeBSD

C:\huibian>nasna

Microsoft<R>MacroAssenblei*Uersion5.00

Copyright<C>MicrosoftCorp1981-1985,1987.Allrightsreserved.

Objectfilename[a.OBJ]:

Sourcelisting(NUL.LST]:

Cross-reference[NUL.CRF]:

50512+415760Bytessymbolspacefree

0WarningErrors

0SeuereErrors

C:\huibian>linka

Microsoft<R>8086ObjectLinkerUersion3.05

Copyright<C>MicrosoftCorp1983,1984,1985.Allrightsreserued.

RunFile[A.EXE]:

ListFile[NUL.MAP]:

Libraries[.LIB]:

C:\huibian>a.exe

0106ABE712CE8AB6

C:\huibian>—

Exam5:

DATASEGMENT

STRING1DBINPUTYOURM=7$'

STRING2DBINPUTYOURP=',,$*

REDB8DUP(3OH)

DATAENDS

STACK1SEGMENTSTACK

DW60HDUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACKI

START:MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETSTRING1

MOVAH,09H

INT21H

MOVAH,01H

INT21H

ANDAX,0000FH

MOVDL,10

MULDL

MOVBX,AX

MOVAH,0IH

INT21H

ANDAL,OFH

C

溫馨提示

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

評論

0/150

提交評論