西安交通大学汇编实验报告副本.docx
《西安交通大学汇编实验报告副本.docx》由会员分享,可在线阅读,更多相关《西安交通大学汇编实验报告副本.docx(18页珍藏版)》请在冰豆网上搜索。
![西安交通大学汇编实验报告副本.docx](https://file1.bdocx.com/fileroot1/2023-1/1/829d22e8-c7be-4da3-bcd9-0b2c5550a044/829d22e8-c7be-4da3-bcd9-0b2c5550a0441.gif)
西安交通大学汇编实验报告副本
汇编语言第二次实验报告
计算机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