8086汇编语言程序设计.docx

上传人:b****5 文档编号:4544099 上传时间:2022-12-06 格式:DOCX 页数:22 大小:18.75KB
下载 相关 举报
8086汇编语言程序设计.docx_第1页
第1页 / 共22页
8086汇编语言程序设计.docx_第2页
第2页 / 共22页
8086汇编语言程序设计.docx_第3页
第3页 / 共22页
8086汇编语言程序设计.docx_第4页
第4页 / 共22页
8086汇编语言程序设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

8086汇编语言程序设计.docx

《8086汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《8086汇编语言程序设计.docx(22页珍藏版)》请在冰豆网上搜索。

8086汇编语言程序设计.docx

8086汇编语言程序设计

实验1简单汇编语言程序设计

一、实验目的与要求

1.熟悉汇编语言运行、调试环境及方法。

2.掌握简单汇编语言程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容

根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。

1.若X、Y、R、W是存放8位带符号数字节单元的地址,Z是16位字单元的

地址。

试编写汇编程序,完成Z((WX)5Y)(R2)o

2.试编写一个程序,测试某数是否是奇数。

如该数是奇数,则把DL的第0

位置1,否则将该位置00

三、实验报告要求

1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

实验2分支及循环程序设计

一、实验目的与要求

1.熟悉汇编语言运行、调试环境及方法。

2.掌握分支程序和循环程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容

根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。

1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。

2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。

参考加密方法是:

每个数乘以2。

(说明:

本题的加密方法,同学们可以自己拟定)

三、实验报告要求

1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

实验3子程序程序设计

一、实验目的与要求

1.熟悉汇编语言运行、调试环境及方法。

2.掌握子程序的设计方法。

3,熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容

根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。

1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。

2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并

调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。

请编程完成此功能。

数据缓冲区参考数据定义如下:

EXAMSCOREDB01;学号

DB89,76,54,77,99;单科成绩

DW?

;该学生的总分

DB02;学号

DB79,88,64,97,92;单科成绩

DW?

;该学生的总分

三、实验报告要求

1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

实验4综合程序设计

一、实验目的与要求

1.熟悉汇编语言运行、调试环境及方法。

2.掌握汇编语言程序的设计方法。

3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。

二、实验内容

根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。

1.编写汇编程序接收用户从键盘键入的月份数,在终端上显示该月的英文缩写名。

当用户按下ESC键时,程序退出,返回DOS。

参考程序执行过程如下:

month?

5/MAYmonth?

9/SEPmonth?

2.按15行X16列的表格形式显示ASCII码为10H〜FFH的所有字符。

每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII码为0)分隔。

3.在第2题程序的基础上进行修改。

将显示表格的行、列数由固定的15行16列改

为由用户从键盘输入。

然后,按用户输入的行列值进行显示。

4.编写汇编程序将内存数据区保存的若干个带符号16位数据按从大到小的顺序排列后,以十进制真值的形式在屏幕上显示。

三、实验报告要求

1.程序算法流程图。

2.源程序清单。

3.程序运行结果。

4.调试过程中遇到的问题和解决的方法。

1.1******************************************************************DATASEGMENT

xDB3

yDB1zdw?

wdb23

rdb6

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATAMOVDS,AXmoval,wsubal,[x]cbwmovbl,5idivblsubal,[y]movbl,raddbl,2imulblmov[z],ax

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

1.2******************************************************************DATASEGMENT

xdb63

ydb?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATAMOVDS,AXmoval,[x]shrdl,1shral,1

rcldl,1

mov[y],dl

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.1******************************************************************

DATASEGMENT

STRINGDB'g3tRfdtfTR34'

MESSAGEONEDB'Pleaseinputthenumberofstring(<10):

$

MESSAGETWODB'Thenumberofstringis:

$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

movah,9

movdx,offsetmessageoneint21h

MOVAH,1

INT21H

MOVBL,AL

MOVDL,10

MOVAH,2

INT21H

SUBBL,30H

CBW

MOVCX,BX

MOVAL,0

MOVBX,OFFSETSTRING

BEGIN:

MOVDL,[BX]

CMPDL,'a'

JBRE

CMPDL,'z'

JARE

INCAL

RE:

INCBX

LOOPBEGIN

ADDAL,30H

movbl,al

movah,9

movdx,offsetmessagetwoint21h

MOVDL,BL

MOVAH,2

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.2******************************************************************DATASEGMENT

MAXLENDB32

ACTLENDB?

STRINGONEDB32DUP⑺

STRINGTWODB32DUP⑺

MESSAGEONEDB'Pleaseinputthestring(<31):

$'

MESSAGETWODB'Theencrypticstringis:

$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATASTART:

MOVAX,DATA

MOVDS,AXmovah,9movdx,offsetmessageoneint21h

MOVDX,OFFSETMAXLEN

MOVAH,0AH

INT21H

SUBCH,CH

MOVCL,ACTLEN

ADDDX,2

MOVBX,DX

MOVBP,OFFSETSTRINGTWO

MOVDL,10

MOVAH,2

INT21H

BEGIN:

MOVDL,[BX]

SUBDL,20HMOV[BP],DL

INCBX

INCBP

LOOPBEGIN

movAL,'$'

MOV[BP],AL

movah,9

movdx,offsetmessagetwoint21h

MOVAH,9

MOVDX,OFFSETSTRINGTWO

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

3.1******************************************************************

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,0101111010010101B

CALLDISPDEC

CALLCRLF

CALLDISPHEX

RET

MAINENDP

DISPDECPROCNEAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHF

MOVBX,AX

MOVCX,10000D

CALLDEC_DIV

MOVCX,1000D

CALLDEC_DIV

MOVCX,100D

CALLDEC_DIV

MOVCX,10D

CALLDEC_DIVMOVCX,1DCALLDEC_DIVPOPFPOPDXPOPCXPOPBXPOPAXRET

DEC_DIVPROCNEARMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRET

DEC_DIVENDPDISPDECENDP

DISPHEXPROCNEAR

PUSHAXPUSHBXPUSHCXPUSHDXPUSHFMOVBX,AXMOVCH,4MOVCL,4

ROTATE:

ROLBX,CLMOVAL,BLANDAL,0FHADDAL,30HCMPAL,3AHJLPRINTITADDAL,7H

PRINTIT:

MOVDL,ALMOVAH,2INT21H

DECCH

JNZROTATE

POPF

POPDX

POPCX

POPBX

POPAX

RETDISPHEXENDP

CRLFPROCNEARPUSHAXPUSHDXMOVDL,0AHMOVAH,2INT21HPOPDX

POPAXRET

CRLFENDP

CODEENDS

ENDSTART

3.2******************************************************************

DATASEGMENT

EXAMSCOREDB01

DB89,76,54,77,99

DB02

DB79,88,64,97,92

DB03

DB43,45,67,87,98

DB04

DB76,65,27,76,98

DB05

DB67,78,23,87,87

DATAENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVCX,5

MOVBX,OFFSETEXAMSCORE

RE:

INCBX

CALLSUM

CALLDISPDEC

CALLCRLF

ADDBX,2

LOOPRE

RET

MAINENDP

SUMPROCNEAR

PUSHCX

PUSHDX

PUSHF

MOVAX,0

MOVCX,5

BEGAIN:

MOVDL,[BX]

MOVDH,0

ADCAX,DX

INCBX

LOOPBEGAIN

MOV[BX],AX

POPF

POPDX

POPCX

RET

SUMENDP

DISPDECPROCNEAR

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHF

MOVBX,AX

MOVCX,10000D

CALLDEC_DIV

MOVCX,1000D

CALLDEC_DIV

MOVCX,100D

CALLDEC_DIV

MOVCX,10D

CALLDEC_DIV

MOVCX,1D

CALLDEC_DIV

POPF

POPDX

POPCX

POPBX

POPAX

RET

DEC_DIVPROCNEAR

MOVAX,BX

MOVDX,0

DIVCX

MOVBX,DX

MOVDL,AL

ADDDL,30H

MOVAH,2

INT21H

RET

DEC_DIVENDP

DISPDECENDP

CRLFPROCNEAR

PUSHAX

PUSHDX

MOVDL,0AH

MOVAH,2

INT21H

POPDX

POPAX

RET

CRLFENDP

CODEENDS

ENDSTART

实验3扩展************************************************************

.**********************************

datasegment

string。

db'error!

$'

stringldb'inputdecnumber:

$'string2db'inputhexnumber:

$'string301db'outputdecnumber

(1):

$string302db'outputdecnumber

(2):

$XDB5DUP⑺

string4db'outputhexnumber:

$'dataends

.***********************************;

;***********************************;

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATASTART:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DATA

MOVDS,AX

CALLKEY_DEC

CALLCRLF

CALLDISPDEC

CALLCRLF

CALLDISPDECZ

CALLCRLF

CALLDISPHEX

CALLCRLF

CALLKEY_HEX

CALLCRLF

CALLDISPDEC

CALLCRLF

CALLDISPDECZ

CALLCRLF

CALLDISPHEX

RET

MAINENDP

.********************************;

:

********************************

;输入十进制数并用二进制存储在BX^KEY_DECPROCNEAR

PUSHAX

PUSHCX

PUSHDX

PUSHF

REERR:

MOVDX,OFFSETSTRING1

MOVAH,9

INT21H

MOVBX,0

DEC_RE:

MOVAH,1

INT21H

CMPAL,0DH

JEDEC_EXIT

SUBAL,30H

JLDEC_ERR

CMPAL,9

JGDEC_ERR

CBW

XCHGAX,BX

MOVCX,10

MULCX

XCHGAX,BX

ADDBX,AX

JMPDEC_RE

DEC_ERR:

CALLERROR

JMPREERR

DEC_EXIT:

POPF

POPDX

POPCX

POPAX

RET

KEY_DECENDP

.**********************************;

;**********************************

;输入十六进制数并用二进制存储在B>e

KEY_HEXPROCNEAR

PUSHAX

PUSHCX

PUSHDX

PUSHF

HEX_REERR:

MOVDX,OFFSETSTRING2

MOVAH,9

INT21H

MOVBX,0HEX_RE:

MOVAH,1

INT21H

CMPAL,0DH

JEHEX_EXIT

SUBAL,30H

JLHEX_ERR

CMPAL,0AHJLNEXTSUBAL,7CMPAL,0AHJLHEX_ERRCMPAL,10HJLNEXTSUBAL,20HCMPAL,0AHJLHEX_ERRCMPAL,10HJNLHEX_ERRNEXT:

MOVCL,4

SHLBX,CL

MOVAH,0

ADDBX,AX

JMPHEX_REHEX_ERR:

CALLERROR

JMPHEX_REERRHEX_EXIT:

POPF

POPDX

POPCX

POPAXRETKEY_HEXENDP.********************************;

;********************************;

;用十进制输出BX^二进制的数方法

DISPDECPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHF

MOVDX,OFFSETSTRING301MOVAH,9INT21H

MOVCX,10000DCALLDEC_DIVMOVCX,1000DCALLDEC_DIVMOVCX,100DCALLDEC_DIVMOVCX,10DCALLDEC_DIVMOVCX,1DCALLDEC_DIVPOPF

POPDXPOPCXPOPBXPOPAXRETDEC_DIVPROCNEAR

MOVAX,BX

MOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRET

DEC_DIVENDPDISPDECENDP.**********************************;

;**********************************;用十进制输出BX^二进制的数方法二DISPDECZPROCNEAR

PUSHAXPUSHBX

PUSHCX

PUSHDX

PUSHF

MOVDX,OFFSETSTRING302

MOVAH,9

INT21H

MOVAX,BX

movBX,0dispdecz_re:

MOVDX,0

MOVCX,10D

DIVCX

MOVX[BX],DL

INCBX

cmpax,0

JNEDISPDECZ_REdispdecz_next:

CMPBX,0

JEDISPDECZ_EXIT

DECBX

MOVDL,X[BX]

ADDDL,30H

MOVAH,2

INT21H

JMPDISPDECZ_NEXTDISPDECZ_EXIT:

POPF

POPDX

POPCX

POPBX

POPAX

RET

DISPDECZENDP.******************************;

;*******************************;

;用十六进制输出BX^二进制数DISPHEXPROCNEAR

PUSHAX

PUSHCX

PUSHDX

PUSHF

MOVDX,OFFSETSTRING4

INT21H

MOVCH,4

MOVCL,4

ROTATE:

ROLBX,CL

MOVAL,BL

ANDAL,0FH

ADDAL,30H

CMPAL,3AH

JLPRINTIT

ADDAL,7H

PRINTIT:

MOVDL,AL

MOVAH,2

INT21H

DECCH

JNZROTATE

POPF

POPDX

POPCX

POPAX

RET

DISPHEXENDP

.******************************;

;******************************;

;输出换行符

CRLFPROCNEAR

PUSHAX

PUSHDX

MOVDL,0AH

MOVAH,2

INT21H

MOVDL,0DH

MOVAH,2

INT21H

POPDX

POPAX

RET

CRLFENDP

.********************************;

;********************************;

;输出错误提示

ERRORPROCNEAR

PUSHAX

PUSHDX

PUSHF

CALLCRLF

MOVDX,OFFSETSTRING0

MOVAH,9INT21H

CALLCRLF

POPF

POPDX

POPAX

RET

ERRORENDP

.********************************;

;********************************;

CODEENDS

ENDSTART

4.1******************************************************************

DATASEGMENT

MONTHDB

'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'

NUMDB2DUP⑺

STRONEDB'month?

',10,$

STRTWODB'monthERROR!

',10,'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

BEGIN:

MOVDX,OFFSETSTRONE

MOVAH,9

INT21H

MOVBX,0

MOV[NUM],BL

M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1