中南民族大学汇编语言实验报告Word文件下载.docx
《中南民族大学汇编语言实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《中南民族大学汇编语言实验报告Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。
实
验
目
的
或
要
求
1.
题目:
输入一个字符,找出它的前导字符和后续字符,并按顺序显示这三个字符。
2.实验要求:
程序从键盘接收用户输入的一个字符后,然后分别找出它的前导字符和后续字符,再按顺序显示这三个字符。
在用户输入和显示字符之前都要有相应的提示信息。
3.提示:
从AL寄存器得到它的ASCII码,它的前导字符和后续字符的ASCII码分别比它的ASCII码少1或多1。
然后分别显示这三个字符。
原
理
(
算
法
流
程
)
.386
.MODELFLAT
ExitProcessPROTONEAR32stdcall,dwExitCode:
DWORD
INCLUDEio.h;
headerfileforinput/output
crEQU0dh;
carriagereturncharacter
LfEQU0ah;
linefeed
.STACK4096;
reserve4096-bytestack
.DATA
prompt1BYTE"
Thisprogramwilloutputthreecharacter"
cr,lf
BYTE"
Enteracharacter:
"
0
label1BYTEcr,Lf,"
Thethreecharacteris"
char3BYTE?
BYTEcr,Lf
char1BYTE?
BYTEcr,lf
char2BYTE?
BYTEcr,lf,0
char4byte5dup(?
.CODE
_start:
outputprompt1
inputchar4,3;
readASCIIcharacters
moval,char4
movchar1,al
incal
movchar2,al
decal
movchar3,al
outputlabel1
INVOKEExitProcess,0;
exitwithreturncode0
PUBLIC_start
END
组
内
分
工
可
选
结
果
析
及
心
得
体
会
实验截图
心得体会
通过本次试验,我掌握的汇编语言的基本操作,及通过ASCII码对字符进行操作。
成
绩
评
定
教师签名:
年月日
计算函数值
计算给定函数值
编制程序,计算下面函数值
其中,从键盘输入x,y,输出数据为a。
输入输出时候都要求有提示信息。
这个给出两种方法如下:
(1)先输入x和y,然后用嵌套的IF结构来分别判断并给a赋值。
(2)分别为x和y设置一个标志变量,当值大于等于0时该变量等于1,当值小于0时该变量等于0。
然后用这两个变量进行异或操作,结果赋值给a。
(这个需要用到xor指令)。
prompt1byte"
pleaseinputx:
"
0
prompt2byte"
pleaseinputy:
stringbyte10dup(?
outstr1bytecr,lf,"
a="
avaluebyte6dup(?
),cr,lf,0
inputstring,10
atoistring
movbx,ax
outputprompt2
movcx,0
cmpbx,0
jgeL1
cmpax,0
jlL2
L1:
jgeL3
jmpL4
L2:
movcx,-1
L3:
movcx,1
L4:
itoaavalue,cx
outputoutstr1
在试验中,根据提示输入两个整数,通过与0比较进行跳转,最后赋值输出。
用表格形式显示字符
1.
用表格形式显示ASCII字符
2.实验要求:
按15行×
16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符或空格符(ASCII码为0或20H)隔开。
.DATA;
reservestoragefordata
promotBYTE"
TheprogramistoprintAsciifrom10hto100h"
cr,Lf,0
lineDWORD?
rowDWORD?
ccfBYTE"
crlfBYTEcr,Lf,0
charBYTE1DUP(?
.CODE;
startofmainprogramcode
outputpromot
movrow,0
movline,0
movchar,0Fh
doFirstWhile:
incline
cmpline,15
jgendFirstWhile
doSecondWhile:
incrow
cmprow,16
jgendSecondWhile
addchar,1
outputchar
outputccf
jmpdoSecondWhile
endSecondWhile:
outputcrlf
jmpdoFirstWhile
endFirstWhile:
PUBLIC_start;
makeentrypointpublic
END;
endofsourcecode
在试验中,通过两个循环控制输出字符的行和列;
程序用记事本打开,运行后只能输出部分字符,想查看完整输出需用编辑器打开。
求X的阶乘
求X的阶乘值
输入一个整型数(不超过10),求出其阶乘值后输出,求阶乘的算法用子程序来实现。
可以用递归来实现,也可以用简单的循环来实现。
.STACK40960;
prompt1BYTE'
Thisprogramistocalculateanumbersfactorial'
BYTE'
Pleaseinputanumberthatisfrom0to10'
cr,lf,0
stringBYTE20DUP(?
resultBYTE'
Theansweris'
valueBYTE11DUP(?
inputstring,11
atodstring
cmpeax,0
jlL1
cmpeax,10
jgL1
pusheax
callFACT
FACTPROCNEAR32
pushebp
movebp,esp
moveax,[ebp+8]
movecx,eax
jeL2
cmpeax,1
dececx
forcount:
mulecx
loopforcount
jmpL3
L2:
moveax,1
L3:
dtoavalue,eax
outputresult
popebp
ret4
FACTENDP
通过本试验,我进一步了解了子程序的设计与调用。
查找字符串中某字符的位置
1.题目:
设有一字符串已存放在STRBUF为首址的数据区中,编一程序找出其中的′.′字符,并将其存放地址输出。
输入字符串,查找字符’.’所在的位置,并输出。
(1)如果字符串中不存在’.’字符则应该输出“Notfound”。
(2)如果字符串中存在多个’.’字符,则先试着输出第一个’.’的位置,然后设法输出所有的’.’的位置。
.DATA
Thisprogramwillchecka.fromastring,andoutputthepositionofthe."
Enterastring:
cr,Lf,0
stringBYTE80DUP(?
answer1BYTE"
Thestringnotexistthecharacter."
answer2BYTEcr,lf,"
Thepostionofthe.is:
PosBYTE6DUP(?
),0
.CODE
inputstring,80;
readstring
leaeax,string
callstrpos
strposPROCNEAR32
pushedi
movedi,[ebp+8]
movebx,-1
moval,'
.'
movecx,0
cld
Forcount:
cmpBYTEPTR[edi],0
jeendfor
incecx
scasb
jneForcount
Found:
movebx,ecx
dtoaPos,ebx
outputanswer2
jmpForcount
endfor:
cmpebx,0
jgL2
L1:
outputanswer1
L2:
popedi
strposENDP
PUBLIC_start
END
通过本次试验,我基本掌握了串的操作,以及对源串和目标串的处理。