西安交通大学汇编实验报告副本.docx

上传人:b****5 文档编号:5856306 上传时间:2023-01-01 格式:DOCX 页数:18 大小:44.04KB
下载 相关 举报
西安交通大学汇编实验报告副本.docx_第1页
第1页 / 共18页
西安交通大学汇编实验报告副本.docx_第2页
第2页 / 共18页
西安交通大学汇编实验报告副本.docx_第3页
第3页 / 共18页
西安交通大学汇编实验报告副本.docx_第4页
第4页 / 共18页
西安交通大学汇编实验报告副本.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

西安交通大学汇编实验报告副本.docx

《西安交通大学汇编实验报告副本.docx》由会员分享,可在线阅读,更多相关《西安交通大学汇编实验报告副本.docx(18页珍藏版)》请在冰豆网上搜索。

西安交通大学汇编实验报告副本.docx

西安交通大学汇编实验报告副本

 

汇编语言第二次实验报告

 

计算机43班

2016年4月23日

 

80X86汇编语言程序设计课内实验报告

班级

计算机43

实验时间

2016

姓名

学号

实验内容概述

实验一

数据段中已定义了一个有n个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中

实验二

设计一程序,接收从键盘输入的(1-5),并对每个数字的输入次数进行记数,记数结果存在以count为首地址的数组中

实验三

设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。

试编制一个子程序统计60~69分,70~79分,80~89分,90~99分和100分的人数并分别存放到S6,S7,S8,S9和S10单元中。

实验四

试编写一段程序,完成以下功能:

若给定名为X的字符串长度大于5时,下列指令将汇编10次。

ADDAX,AX

(要求:

使用条件汇编,编译过程中生成LST文件,查看宏展开情况)

实验三

编写程序,使类型1CH的中断向量指向中断处理程序COUNT,COUNT统计1CH中断次数并存入单元M中。

实验四

编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。

加密表为:

输入数字:

0,1,2,3,4,5,6,7,8,9

密码数字:

7,5,9,1,3,6,8,0,2,4

 

实验步骤

第一题:

在主程序中判断是否为负,如果是负数,就将它改成正的,并与第一个数比较(放在ax中了),并随时记录最大值的地址,存在寄存器中,做完所有的数字以后,把最大值给M+2n,把地址给M+2n+2中就好了

第二题:

调用movah,02h,int21h的指令从键盘读入一个字符,判断是否为1-5,不是则继续输入,是就让count的计数开始工作,如输入的是a,怎count[a]+1,就可以了,结束的标志是回车,及0ah.

第三题:

在主程序中调用子函数count,完成将每个在数组mark里的成绩一一取出,分别判定其大小而放入统计60~69分,70~79分,80~89分,90~99分和100分的人数的S6,S7,S8,S9和S10单元中,在屏幕上依次显示出S6,S7,S8,S9和S10中的数。

第四题:

使用条件汇编和重复汇编。

判断当给定名为X的字符串长度大于5时,重复ADDAX,AX10次。

第五题:

使类型1CH的中断向量指向中断处理程序COUNT,COUNT中1CH中断每调用一次则给num加一,计算出num最后的值后存入单元M中。

第六题:

接收从键盘输入的10个十进制数字,输入回车符则停止输入,

在bx里存入数组7,5,9,1,3,6,8,0,2,4的符号地址,每键入一个数后都存入al,调用xlat使得(al)<—((al)+(bx))

al中为译码后的数,存入string并一次输出所有的数。

实验中遇到的问题及其解决方法

1、问题

主程序与子程序之间,参数的传递问题,搞了好久才明白,在不太懂子程序的情况,我觉得可以将两个程序写在一个代码段中,省的把自己弄晕了。

2、问题

Xlat转换问题,上课可能是没有太认真听吧,做题的时候懵了,这是什么东西,后来XX以后才发现原来就是调用xlat使得(al)<—((al)+(bx))的简便表达,这是一个加密的好方法。

3、问题

List表一开始怎么也找不到,后来翻书才发现要给它取名字(asm文件名),它才会出现,果然还是上课没有认真听讲。

4、问题

实验五的list表查看,明白了原来宏展开是这个意思,直接在代码中“翻译”了一下,但是在我们自己编程序的时候却减少了许多不必要的麻烦。

实验结果

一.

二.

三.

四.

五.

六.

 

2016年4月23日

建议

1、可以考虑增加实验时间。

汇编语言不是很难,就是学生不好熟悉这种语言,熟悉以后就好多了,因此可以多次实验,让学生快速理解汇编语言。

2、可以考虑设计一些更加有趣的题目。

3、老师课堂可以互动就更好了,提问题,让学生来解答,增加同学们上课的认真度,增加课堂活跃的范围。

备注

源代码见附录

附录

实验一:

0000DATASEGMENT

00000000FFFF00020003ARRAY1DW0,-1,2,3,4,-5,6,-7,8,9

-10

0004FFFB0006FFF9

00080009FFF6

=0016COUNTEQU$-ARRAY1

00160014[ARRAY2DW20DUP(?

);求绝对值?

蟠嫒氲男率?

?

?

?

?

]

003E?

?

?

?

LENDW?

;新数组长?

?

00400D0A4265666F72MSG1DB13,10,'BeforeSort:

$'

652020536F7274

203A2024

00520D0A4166746572MSG2DB13,10,'AfterSort:

$'

202020536F7274

203A2024

0064DATAENDS

0000CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

0000START:

0000B8----RMOVAX,DATA

00038ED8MOVDS,AX

0005B409MOVAH,09H

00078D160040RLEADX,MSG1

000BCD21INT21H;显示提示字符串MSG1

000D8D360000RLEASI,ARRAY1

0011E8006CRCALLOUTPUT;调用输出数组子程序OUTPU

T,显示原始数据

0014E8004BRCALLAbsolute;调用求绝对值子程序Absol

ute,求绝对值

0017E8002DRCALLSORT;调用排序子程序SORT对数?

榕判?

001AB409MOVAH,09H

001C8D160052RLEADX,MSG2

0020CD21INT21H;显示提示字符串MSG2

00228D360016RLEASI,ARRAY2

0026E8006CRCALLOUTPUT;调用输出数组子程序OUTPU

T,显示求绝对值后的数据

0029EXIT:

0029B44CMOVAH,4CH

002BCD21INT21H;主程序返回DOS

;----------------------------------------------

-

;子程序名:

SORT

;功能:

002DSORTPROCNEAR

;此处请增添代码

002DB90016MOVCX,COUNT

0030D1E9SHRCX,1

003249DECCX

003351S0:

PUSHCX

00348BFEMOVDI,SI

00368B05S1:

MOVAX,[DI]

00383B4502CMPAX,[DI+2]

003B7705JAS3

003D874502XCHGAX,[DI+2]

00408705XCHGAX,[DI]

004283C702S3:

ADDDI,2

0045E2EFLOOPS1

004759POPCX

0048E2E9LOOPS0

004AC3RET

004BSORTENDP

;----------------------------------------------

--

;子程序名:

Absolute

;功能:

求绝对值

004BAbsolutePROCNEAR

;此处请增添代码

004B8D360000RLEASI,ARRAY1

004F8D3E0016RLEADI,ARRAY2

0053B90016MOVCX,COUNT

0056D1E9SHRCX,1

0058ABS:

1.ASM(60):

warningA4016:

Reservedwordusedassymbol:

ABS

00588B04MOVAX,[SI]

005A3D0000CMPAX,0

005D7D02JGEABS2

005FF7D8NEGAX

0061ABS2:

00618905MOV[DI],AX

006383C602ADDSI,2

006683C702ADDDI,2

0069E2EDLOOPABS

006BC3RET

006CAbsoluteENDP

;---------------------------------------------

---

;子程序名:

OUTPUT

;功能:

输出数组

006COUTPUTPROCNEAR

;此处请增添代码

006CB402MOVAH,2

006EB20DMOVDL,13

0070CD21INT21H

0072B20AMOVDL,10

0074CD21INT21H

0076B90016MOVCX,COUNT

0079D1E9SHRCX,1

007BZH3:

007B8B04MOVAX,[SI]

007D3D0000CMPAX,0

00807D0AJGEZH0

0082F7D8NEGAX

Microsoft(R)MacroAssemblerVersion5.004/23/1615:

17:

35

Page1-3

 

00848904MOV[SI],AX

0086B402MOVAH,2

0088B22DMOVDL,'-'

008ACD21INT21H

008C8B04ZH0:

MOVAX,[SI]

008EBB000AMOVBX,10

009151PUSHCX

0092B90000MOVCX,0

0095BA0000ZH1:

MOVDX,0

0098F7F3DIVBX

009A80C230ADDDL,'0'

009D52PUSHDX

009E41INCCX

009F3D0000CMPAX,0

00A275F1JNZZH1

00A4B402MOVAH,2

00A65AZH2:

POPDX

00A7CD21INT21H

00A9E2FBLOOPZH2

00AB59POPCX

00ACB220MOVDL,''

00AECD21INT21H

00B083C602ADDSI,2

00B3E2C6LOOPZH3

00B5C3RET

00B6OUTPUTENDP

;----------------------------------------------

---

00B6CODEENDS

ENDSTART

实验二

0000DATASSEGMENT

00000005[COUNTdb5dup(0)

00

]

0005DATASENDS

0000CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS

0000START:

00001Epushds

00012BC0subax,ax

000350pushax

0004B8----RMOVAX,DATAS

00078ED8MOVDS,AX

0009next:

0009B401movah,01h

000BCD21int21h

000D3C31cmpal,'1'

000F7413jzbijiao1

00113C32cmpal,'2'

0013741Cjzbijiao2

00153C33cmpal,'3'

00177428jzbijiao3

00193C34cmpal,'4'

001B7434jzbijiao4

001D3C35cmpal,'5'

001F7440jzbijiao5

0021EB4E90jmpexit

0024bijiao1:

00248A0E0000Rmovcl,COUNT

002880C101addcl,1

002B880E0000RmovCOUNT[0],cl

002FEBD8jmpnext

0031bijiao2:

0031BB0001movbx,1

00348A8F0000Rmovcl,COUNT[bx]

003880C101addcl,1

003B888F0000RmovCOUNT[bx],cl

003FEBC8jmpnext

0041bijiao3:

0041BB0002movbx,2

00448A8F0000Rmovcl,COUNT[bx]

004880C101addcl,1

004B888F0000RmovCOUNT[bx],cl

004FEBB8jmpnext

0051bijiao4:

0051BB0003movbx,3

00548A8F0000Rmovcl,COUNT[bx]

005880C101addcl,1

005B888F0000RmovCOUNT[bx],cl

005FEBA8jmpnext

0061bijiao5:

0061BB0004movbx,4

00648A8F0000Rmovcl,COUNT[bx]

Microsoft(R)MacroAssemblerVersion5.004/23/1615:

23:

29

Page1-2

 

006880C101addcl,1

006B888F0000RmovCOUNT[bx],cl

006FEB98jmpnext

0071exit:

00718A160000Rmovdl,COUNT[0]

007580C230adddl,30h

0078B402movah,02

007ACD21int21h

007C8A160001Rmovdl,COUNT[1]

008080C230adddl,30h

0083B402movah,02

0085CD21int21h

00878A160002Rmovdl,COUNT[2]

008B80C230adddl,30h

008EB402movah,02

0090CD21int21h

00928A160003Rmovdl,COUNT[3]

009680C230adddl,30h

0099B402movah,02

009B8A160004Rmovdl,COUNT[4]

009F80C230adddl,30h

00A2B402movah,02

00A4CD21int21h

00A6CD21int21h

00A8B44Cmovah,4ch

00AACD21int21h

00ACCODESENDS

ENDSTART

实验三

0000datasegsegment

00000D0A7468652072butdb0DH,0AH,'theresult$'

6573756C742020

2024

0010004C00450054005Agradedw76,69,84,90,73,88,99,63,100,80

004900580063003F

00640050

002400s6db0

002500s7db0

002600s8db0

002700s9db0

002800s10db0

0029datasegends

0000csegsegment

0000mainprocfar

assumecs:

cseg,ds:

dataseg

0000start:

00001Epushds

00012BC0subax,ax

000350pushax

0004B8----Rmovax,dataseg

00078ED8movds,ax

0009B9000Amovcx,10

000CE80017Rcallcount

000FE80038Rcalldisp

0012B401movah,1

0014CD21int21h

0016CBret

0017mainendp

0017countprocnear

0017BE0000movsi,0

001A8B840010Rnext:

movax,grade[si]

001EB30Amovbl,10

0020F6F3divbl

00228AD8movbl,al

0024B700movbh,0

002683EB06subbx,6

002983FB00cmpbx,0

002C7300jaenext1

002Enext1:

002EFE870024Rincs6[bx]

003283C602addsi,2

0035E2E3loopnext

0037C3ret

0038countendp

0038dispprocnear

00388D360024Rleasi,s6

003CB90005movcx,5

003Floop1:

003FBA0000Rmovdx,OFFSETbut

0042B409movah,9

0044CD21int21h

00468A14movdl,[si]

004880C230adddl,30h

004BB402movah,2

004DCD21int21h

004F46incsi

0050E2EDlooploop1

0052C3ret

0053dispendp

0053B44Cmovah,4ch

0055CD21int21h

0057csegends

endstart

实验四

0000codesegment

0000start:

0000313233343536xdb'123456'

if($-x)GT5

rept10

addax,ax

endm

000603C01addax,ax

000803C01addax,ax

000A03C01addax,ax

000C03C01addax,ax

000E03C01addax,ax

001003C01addax,ax

001203C01addax,ax

001403C01addax,ax

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

当前位置:首页 > 医药卫生 > 基础医学

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

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