汇编实验报告.docx
《汇编实验报告.docx》由会员分享,可在线阅读,更多相关《汇编实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
汇编实验报告
南华大学
计算机科学与技术学院
实验报告
(2012~2013学年度第二学期)
课程名称
汇编语言与接口技术
实验名称
汇编实验
姓名
Xx
学号
Xx
专业
软件工程
班级
11软卓01班
地点
八教
教师
Xx
实验一用表格形式显示字符
1、 题目
用表格形式显示ASCII字符
2、 实验要求
按15*16的表格形式显示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白字符(ASCII码为0)隔开。
3、 提示:
⑴ 显示每个字符可使用功能号为2的显示输出功能调用
MOV AH,2
MOV DL,10H;字符从10H开始,每显示一个DL+1产生下一个字符
INT 21H
⑵ 显示空白符时DL=00H;
⑶ 每行显示结束时需要显示回车(ASCII码为0DH)和换行(ASCII码为0AH),本行显示结束后可另起一行显示。
4、源代码
2.1.asm
DATASSEGMENT
;此处输入数据段代码
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
;此处输入代码段代码
MOVDL,10H
MOVCX,15
C1:
PUSHCX
MOVCX,16
C2:
MOVAH,02H
INT21H
INCDL
PUSHDX
MOVDL,20H
MOVAH,02H
INT21H
POPDX
LOOPC2
PUSHDX
MOVDL,0DH
MOVAH,02H
INT21H
MOVDX,0AH
MOVAH,02D
INT21H
POPDX
POPCX
LOOPC1
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
5、实验结果
6、实验总结
这是从接触到汇编到自己开始写的第一个汇编程序,开始时不知如何下手,参考了别人的程序后,自己重新整理思路,才写出了这个程序,是一个开始。
实验二查找匹配字符串
1、题目
查找匹配字符串SEARCH
2、实验要求
程序接收用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“No Match!
”;如果句子中包含关键字则显示“Match”,且把该字在句子中的位置用十六进制数显示出来。
要求程序的执行过程如下:
Enter keyword:
abc
Enter sentence:
We are studying abc.
Match at location:
11H of the sentence. Enter keyword:
xyz
Enter sentense:
We are studying abc No match!
Enter keyword:
^C
3、提示:
程序可由三部分组成:
1).输入关键字和一个句子,分别存入相应的缓冲区中。
可用DOS功能调用0AH,使用方法如下:
① 字符缓冲区定义格式如下:
maxlen db 32 actlen db ?
string db 32 dup(?
)
缓冲区的第一个字节定义字符的最大个数;第二个字节为实际输入的字符个数,该数据由OAH功能根据用户实际输入自动计算并填入。
在这两个字节后,存放输入的字符串,字符串以回车(0DH)结束,但回车符不作实际输入字符的个数。
② 输入字符串程序段如下:
LEA DX,MAXLEN
MOV AH,0AH
INT 21H
2).在句子中查找关键字
4、源代码
2.2.asm
DATASEGMENT
mess1db'Enterkeyword:
','$'
mess2db'EnterSentence:
','$'
mess3db'Nomatch!
',13,10,'$'
mess4db'Matchatlocation:
','$'
mess5db'Hofthesentence.',13,10,'$'
changedb13,10,'$'
sen1labelbyte
max1db14
act1db?
stokn1db14dup(?
)
sen2labelbyte
max2db100
act2db?
stokn2db100dup(?
)
DATAENDS
CODESEGMENT
mainprocfar
assumecs:
code,ds:
data,es:
data
START:
movax,data
movds,ax
moves,ax
leadx,mess1
movah,09h
int21h
leadx,sen1
movah,0ah
int21h
leadx,change
movah,09h
int21h
subcx,cx
a10:
leadx,mess2
movah,09h
int21h
leadx,sen2
movah,0ah
int21h
leadx,change
movah,09h
int21h
cmpact2,0
jeexit
movbx,0
a20:
movcl,[act1]
leasi,stokn1
leaax,stokn2
addal,bl
movdi,ax
cld
repcmpsb
jza30
incbl
cmpbl,act2
jea40
jmpa20
a30:
leadx,mess4
movah,09h
int21h
movah,02h
addbl,1
movcl,4
moval,bl
rolal,cl
movcl,2
jmpa50
a1:
leadx,mess5
movah,09h
int21h
jmpa10
a40:
leadx,mess3
movah,09h
int21h
jmpa10
a50:
deccl
andal,0fh
cmpal,10
jnba60
addal,'0'
a2:
movdl,al
movah,02h
int21h
cmpcl,0
jea1
moval,bl
jmpa50
a60:
subal,10
addal,'a'
jmpa2
exit:
ret
mainendp
CODEENDS
ENDSTART
5、实验结果
6、实验总结
这个实验比较难,查了好多东西,差不多懂了个大概,至少能把这个程序读懂,能够单独编写出来,自己的汇编水平真是提高了不少!
实验三统计学生成绩result
1、题目
统计学生成绩result。
2、实验要求
设有10个学生的成绩分别为56、69、84、82、73、88、99、63、100和80分。
试编制程序分别统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并分别存放到s5、s6、s7、s8、s9及s10单元中。
3、源代码
2.3.asm
DATASSEGMENT
;此处输入数据段代码
GRADEDW56,69,84,83,73,88,99,63,100,80
S5DB0
S6DB0
S7DB0
S8DB0
S9DB0
S10DB0
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
PUSHDS
SUBAX,AX
PUSHAX
MOVAX,DATAS
MOVDS,AX
MOVS5,0
MOVS6,0
MOVS7,0
MOVS8,0
MOVS9,0
MOVS10,0
MOVCX,10
MOVBX,OFFSETGRADE
COMPARE:
MOVAX,[BX]
CMPAX,60
JLFIVE
CMPAX,70
JLSIX
CMPAX,80
JLSEVEN
CMPAX,90
JLEIGHT
CMPAX,100
JNENINE
INCS10
JMPSHORTCHANGE_ADDR
NINE:
INCS9
JMPSHORTCHANGE_ADDR
EIGHT:
INCS8
JMPSHORTCHANGE_ADDR
SEVEN:
INCS7
JMPSHORTCHANGE_ADDR
SIX:
INCS6
JMPSHORTCHANGE_ADDR
FIVE:
INCS5
JMPSHORTCHANGE_ADDR
CHANGE_ADDR:
ADDBX,2
LOOPCOMPARE
SUBAX,AX;输出S5<60
ADDAL,S5
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVDL,0
MOVAH,02H
INT21H
SUBAX,AX;输出S6<70
ADDAL,S6
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVDL,0
MOVAH,02H
INT21H
SUBAX,AX;输出S7<80
ADDAL,S7
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVDL,0
MOVAH,02H
INT21H
SUBAX,AX;输出S8<90
ADDAL,S8
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVDL,0
MOVAH,02H
INT21H
SUBAX,AX;输出S9<100
ADDAL,S9
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVDL,0
MOVAH,02H
INT21H
SUBAX,AX;输出S10=100
ADDAL,S10
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
MOVDL,0DH
MOVAH,02H
INT21H
MOVDX,0AH
MOVAH,02D
INT21H
MOVAH,4CH
INT21H
RET
CODESENDS
ENDSTART
4、实验结果
5、实验总结
这是一个比较简单的实验,通过简单的语句就可以实现题目所需的功能。
实验四十六进制转二进制
1、题目
十六进制转换为二进制。
2、实验要求
试编写一汇编程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。
3、源代码
5.9.asm
DATASSEGMENT
;此处输入数据段代码
SENDB'Enternum:
','$'
RESULTDB'Theresult:
','$'
NEXTLINEDB13,10,'$'
DATASENDS
STACKSSEGMENT
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
;此处输入代码段代码
LEADX,SEN
MOVAH,09H
INT21H
MOVBX,0
MOVCH,4
MOVCL,4
GETIN:
SHLBX,CL
MOVAH,1
INT21H
CMPAL,30H
JBGETIN
CMPAL,39H
JAJUDGEAF
ANDAL,0FH
JMPBINARY
JUDGEAF:
ANDAL,11011111B
CMPAL,41H
JBGETIN
CMPAL,46H
JAGETIN
ANDAL,0FH
ADDAL,9
BINARY:
ORBL,AL
DECCH
JNZGETIN
LEADX,NEXTLINE
MOVAH,09H
INT21H
LEADX,RESULT
MOVAH,09H
INT21H
DISPN:
MOVCX,16
DISP:
MOVDL,0
ROLBX,1
RCLDL,1
ORDL,30H
MOVAH,2
INT21H
LOOPDISP
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
4、实验结果
5、实验总结
这个实验是老师在实验课堂上布置的,记得当初在做实验时,自己没能在规定的时间内做完,这个实验是在课后自己慢慢弄出来的,实验虽然简单,但好多逻辑问题必须得想清楚才能继续做下去。