汇编实验报告5235.docx
《汇编实验报告5235.docx》由会员分享,可在线阅读,更多相关《汇编实验报告5235.docx(21页珍藏版)》请在冰豆网上搜索。
汇编实验报告5235
(此文档为word格式,下载后您可任意编辑修改!
)
实验三循环程序设计
1、预习内容
1.多重循环程序和排序程序设计方法。
2.带符号数的比较转移指令:
JL,JLE,JG,JGE
二、目的要求
1.掌握多重循环程序和排序程序设计方法。
2.掌握带符号数的比较转移指令:
JL,JLE,JG,JGE
3、实验内容
建立学生名次表,以grade为首地址的数组中保存了学生的成绩,其中grade+i保存学号为i+1的学生的成绩。
要求建立一个10个字的rank数组,并根据grade中的学生成绩将学生名次填入rank数组中,其中rank+i的内容是学号为i+1学生的名次(提示:
一个学生的名次等于成绩高于该学生的人数加1).
4、程序流程图
5、程序
DSEGSEGMENT
gradedw90,60
rankdw10dup(?
)
DSEGENDS
CSEGSEGMENT
assumecs:
CSEG,ds:
DSEG
start:
movax,dseg
movds,ax
movdi,10
movbx,0
leabp,rank
l:
leasi,grade
movdx,1
movcx,10
movax,[si+bx]
next:
cmpax,[si]
jgeno_count
incdx
no_count:
addsi,2
loopnext
mov[bp],dx
addbp,2
addbx,2
decdi
subdi,0
jnel
movax,4c00h
int21h
CSEGENDS
endstart
6、实验结果
JGE情况下的排序结果
转移指令为JG时的排序结果:
转移指令为JL时的排序结果:
转移指令为JLE时的排序结果:
实验四分支程序设计
一、预习内容
1.分支程序设计方法。
2.利用转移指令jl、jmp实现多岔分支的方法。
二、目的要求
1.掌握分支程序设计方法。
2.掌握利用转移指令jl、jmp实现多岔分支的方法。
三、实验内容
统计学生成绩result。
设有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单元中
四、实验程序
DSEGSEGMENT
gradedw100,80
s5dw0
s6dw0
s7dw0
s8dw0
s9dw0
s10dw0
DSEGENDS
CSEGSEGMENT
assumecs:
CSEG,ds:
DSEG
start:
movax,dseg
movds,ax
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
change_addr:
addbx,2
loopcompare
movax,4c00h
int21h
CSEGENDS
endstart
每次执行转移指令时寄存器csip的值
最终运行结果
五、程序流程图
实验五子程序设计
一、预习内容
1.子程序调用方法和参数传递方式。
2.过程调用伪指令:
PROC,ENDP和NEAR。
3.子程序调用中堆栈的用法。
4.简化格式程序设计方法。
二、目的要求
1.掌握子程序调用方法和参数传递方式。
2.掌握过程调用伪指令:
PROC,ENDP和NEAR。
3.理解子程序调用中堆栈的用法。
4.熟悉简化格式程序设计方法。
三、实验内容
显示学生名次表rank。
要求接收从键盘输入的一个班的学生成绩,并存放于10字的grade数组中,其中grade+i保存学号为i+1的学生的成绩。
然后根据grade中的学生成绩,把学生名次填入10字的rank数组中,其中rank+i的内容是学号为i+1学生的名次。
再按学号把名次从终端显示出来。
4、流程图
1、Input
2、output
3、rankp
5、实验程序
.modelsmall
.stack
.data
gradedw10dup(?
)
rankdw10dup(?
)
countdw?
mess1db'Grade?
','$'
mess2db13,10,'IputError!
''$'
mess3db'Rank:
','$'
.code
mainprocfar
start:
movax,@data
movds,ax
callinput
callrankp
calloutput
movah,1
int21h
movax,4c00h
int21h
mainendp
inputprocnear
movdx,offsetmess1
movah,09
int21h
movsi,0
movcount,0
enter:
calldecibin
inccount
cmpdl,','
jestore
cmpdl,13;isit'return'?
jeexit2
jneerror
store:
movgrade[si],bx
addsi,2
jmpenter
error:
leadx,mess2
movah,09
int21h
exit2:
movgrade[si],bx
callcrlf
ret
inputendp
rankpprocnear
movdi,count
movbx,0
loop1:
movax,grade[bx]
movwordptrrank[bx],0
movcx,count
leasi,grade
next:
cmpax,[si]
jgno_count
incwordptrrank[bx]
no_count:
addsi,2
loopnext
addbx,2
decdi
jneloop1
ret
rankpendp
outputprocnear
leadx,mess3
movah,09
int21h
movsi,0
movdi,count
next1:
movbx,rank[si]
callbinidec
movdl,','
movah,02
int21h
addsi,2
decdi
jnznext1
callcrlf
ret
outputendp
decibinprocnear
s:
movah,1
int21h
cmpal,30h
jaba1
moval,8h
movdl,al
movah,2
int21h
jmps
ba1:
cmpal,39h
jbba2
moval,8h
movdl,al
movah,2
int21h
jmps
ba2:
subal,30h
movbl,10
mulbl
movbl,al
s1:
movah,1
int21h
cmpal,30h
jaba11
moval,8h
movdl,al
movah,2
int21h
jmps1
ba11:
cmpal,39h
jbba21
moval,8h
movdl,al
movah,2
int21h
jmps1
ba21:
subal,30h
addbl,al
movah,1
int21h
movdl,al
ret
decibinendp
binidecprocnear
pushbx
pushcx
pushsi
pushdi
movcx,100d
calldec_div
movcx,10d
calldec_div
movcx,1
calldec_div
popdi
popsi
popcx
popbx
ret
binidecendp
dec_divprocnear
movax,bx
movdx,0
divcx
movbx,dx
movdl,al
adddl,30h
movah,02h
int21h
ret
dec_divendp
crlfprocnear
movdl,0dh
movah,02h
int21h
moval,10
movdl,al
movah,2
int21h
ret
crlfendp
endmain
实验结果
观察callinput,callrankp,calloutput三条指令后sp,bp以及[sp]的值
Input
Rank
Output
实验六综合程序设计
一、预习内容
1.DOS中断,字符输入输出的方法.
2.综合程序设计方法
二、目的要求
1.熟悉DOS中断,掌握字符输入输出的方法.
2.继续熟悉基本程序设计方法,包括循环程序设计,分支程序设计和子程序设计等.
3.练习综合程序设计方法
三、实验内容
数据区存放有10个正数,要求自己编写一个完整的程序实现这10个数的排序,具体要求如下:
1.显示未排序的10个数据;
2.提示输入排序方法,是按从大到小还是从小到大;
3.从键盘输入‘H’或者‘L’决定数据是按从大到小还是从小到大的顺序排列,如果从键盘输入‘H’,则按从大到小顺序排列,如果输入‘L’,则按从小到大顺序排列,否则提示输入错误,请重新输入;
4.显示最后的排序结果。
四、实验步骤
1.认真阅读实验要求,编写源程序;
2.编译,链接,生成可执行文件,记录编译过程中的错误,并分析原因;
3.编译通过后,调式程序,直至得到正确的结果。
五、程序流程图
6、实验程序
DSEGSEGMENT
string1db'smalltolargepressL,largetosmallpressH','$'
string2db'inputerror,tryitagain','$'
mess1dw90,80
codw10
mess2dw10dup(?
)
DSEGENDS
CSEGSEGMENT
assumecs:
CSEG,ds:
DSEG,es:
DSEG
start:
movax,dseg
movds,ax
moves,ax
movcx,10
callsh
leabx,mess1
leabp,mess1
leadx,string1
jmpinput
lop:
leadx,string2
input:
movah,9
int21h
moval,13
movdl,al
movah,2
int21h
MOVAL,10
movdl,al
movah,2
int21h
movah,1
int21h
cmpal,48h
jepah
cmpal,4ch
jnelop
leabx,mess1
leasi,mess1
pal:
movcx,co
movax,[bx]
movsi,bx
ll:
cmpax,[si]
jbnextl
xchgax,[si]
nextl:
addsi,2
loopll
mov[bx],ax
addbx,2
ADDSI,2
decco
movcx,co
addcx,1
looppal
JMPKK
movax,10
movco,ax
pah:
movcx,co
movax,[bx]
movsi,bx
hh:
cmpax,[si]
janexth
xchgax,[si]
nexth:
addsi,2
loophh
mov[bx],ax
addbx,2
decco
movcx,co
addcx,1
looppah
KK:
moval,10
movdl,al
movah,2
int21h
callsh
moval,13
movdl,al
movah,2
int21h
moval,10
movdl,al
movah,2
int21h
MOVAH,1
INT21H
movax,4c00h
int21h
shprocnear
leabx,mess1
movcx,10
show:
movax,[bx]
movdl,10
divdl
addal,30h
movdl,al
moval,ah
pushcx
pushax
movah,2
int21h
popax
addal,30h
movdl,al
movah,2
int21h
movdl,','
movah,2
int21h
addbx,2
popcx
loopshow
ret
shendp
CSEGENDS
endstart
实验结果