汇编实验报告安工大陆勤老师.docx
《汇编实验报告安工大陆勤老师.docx》由会员分享,可在线阅读,更多相关《汇编实验报告安工大陆勤老师.docx(26页珍藏版)》请在冰豆网上搜索。
汇编实验报告安工大陆勤老师
汇编语言实验报告
学院:
计算机学院
姓名:
学号:
班级:
实验一汇编运行环境及方法、简单程序设计
1.程序说明:
本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。
再代码段比较字符串string1和string2,通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
2.程序代码(比较两字符串):
;PROGRAMTITLEGOESHERE--Comparestring
;**************************************************************************
datareasegment;definedatasegment
string1db'Movethecursorbackward.'
string2db'Movethecursorbackward.'
;
mess1db'Match.',13,10,'$'
mess2db'Nomatch!
',13,10,'$'
datareaends
;**************************************************************************
prognamsegment;definecodesegment
;--------------------------------------------------------------------------
mainprocfar
assumecs:
prognam,ds:
datarea,es:
datarea
start:
;startingexecutionaddress
;setupstackforreturn
pushds;saveolddatasegment
subax,ax;putzeroinAX
pushax;saveitonstack
;setDSregistertocurrentdatasegment
movax,datarea;datareasegmentaddr
movds,ax;intoDSregister
moves,ax;intoESregister
;MAINPARTOFPROGRAMGOESHERE
leasi,string1
leadi,string2
cld
movcx,25
repzcmpsb
jzmatch
leadx,mess2
jmpshortdisp
match:
leadx,mess1
disp:
movah,09
int21h
ret;returntoDOS
mainendp;endofmainpartofprogram
;-------------------------------------------------------------------------
prognamends;endofcodesegment
;*************************************************************************
endstart;endassembly
3.截图:
该程序是用来判断两字符串string1和string2是否相同,相同则显示match。
实验二用DEBUG编程:
使用堆栈段将AX和BX的内容进行交换等
1.程序说明:
(1)设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX的内容进行交换。
请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。
(2)设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。
2.程序代码:
MOVAX,BX
MOVAX,0304H
MOVAX,[0304H]
MOVAX,[BX]
MOVAX,0001[BX]
MOVAX,[BX][SI]
MOVAX,0001[BX][SI]
HLT
三、实验要求:
1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
2、本实验只要求在DEBUG调试程序状态下进行,包括汇编程序、调试程序和执行程序。
四、实验报告:
1、程序说明。
说明程序的功能、结构。
2、调试说明。
包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3、写出源程序清单和执行结果。
3.截图:
先使用-r设置sp,ax,bx,在使用-a输入指令然后再-t单步调试
刚开始ax3000,bx5000debug调试后ax,5000bx3000
首先用-r设置bx,si然后再用-e将a,b,c,d,e分配到指定的内存中,-a输入指令最后-t单步调试
执行单步调试后ax的值一直变化从000E,0B0A,0C0B,0D0C,0E0D
实验三存储器块清零和内存块移动
1.程序说明:
第一个程序是存储块清零。
程序流程大概为首先设置起始地址,然后设置块长度,然后将当前地址内容清零,地址加1,然后查看是否清除完全,若没有则回到当前地址清零,然后再查看,直到地址内容清除完,结束程序。
第二个程序是内存块移动。
程序流程框图为:
首先设置块的源地址,然后设置筷的目的地址,然后再设置移动长度,然后按长度重复传送数据,然后结束。
2.调试及截图:
第一个程序进入debug先用-u指令查看程序代码然后-d查看内存的情况再执行-g讲程序执行完在用-d查看内存
第二个程序进入debug后先用-u查看程序然后-g运行到指令repmovsd之前再用–d查看内存的内容
-g前
-g后
实验四将键盘输入的小写字母用大写字母显示出来
1.程序说明:
本程序用来将小写字母转变为大写,并在屏幕上显示出来。
先利用DOS功能调用INT21H的1号功能从键盘输入字符,然后判断输入的是否是小写字母,若不是小写字母,则显示输入出错,重新输入。
若输入的是小写字母,则通过将其减去20h,从而变为大写字母。
在通过DOS功能调用INT21H的2号功能显示出来。
若输入的是Enter键,则结束程序。
2.程序代码:
TITLESHIYAN
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,01H
INT21H
CMPAL,61H
JLSTART
SUBAL,20H
MOVDL,AL
MOVAH,02H
INT21H
CODEENDS
ENDSTART
2.截图:
gsm
实验五循环程序设计
1.程序说明:
第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。
第二个程序是用来判别键盘上输入的字符:
若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。
首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。
1-9字符,则显示之。
若是若小于0,则重新等待输入。
若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’。
2.程序代码:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,3EH
PUSHAX
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H
POPAX
MOVDL,AL
ANDDL,0FH
CMPDL,9
JBENEXT2
ADDDL,7
NEXT2:
ADDDL,30H
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.截图:
4.程序代码:
codesegment
assumecs:
code
start:
movah,1
int21h
cmpal,0dh
jzdone
cmpal,'0'
jbnext
cmpal,'9'
jacharup
movdl,al
movah,2
int21h
jmpstart
charup:
cmpal,41h
jbnext
cmpal,5ah
jachrdn
dispc:
movdl,'c'
movah,2
int21h
next:
jmpstart
chrdn:
cmpal,61h
jbnext
cmpal,7ah
janext
jmpdispc
done:
movah,4ch
int21h
codeends
endstart
5.截图:
实验六分支程序设计
1.程序说明:
第一个程序是用来显示AL寄存器中的两位十六进位制数,通过DOS功能调用INT21H的2号功能显示出来。
第二个程序是用来判别键盘上输入的字符:
若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,z则结束程序,若为其他字符则不显示,继续等待新的字符输入。
首先输入一个字符,将其和回车字符比较,若是回车字符,则结束程序。
1-9字符,则显示之。
若是若小于0,则重新等待输入。
若大于9,则跳转到和‘A’、Z’比较,若小于’A’,则重新等待输入,若大于’Z’,则跳转到和’a’、’z’比较处,若小于a或大于z,则重新等待输入,否则输出‘c’
2.程序代码:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAL,3EH
PUSHAX
MOVDL,AL
MOVCL,4
SHRDL,CL
CMPDL,9
JBENEXT1
ADDDL,7
NEXT1:
ADDDL,30H
MOVAH,2
INT21H
POPAX
MOVDL,AL
ANDDL,0FH
CMPDL,9
JBENEXT2
ADDDL,7
NEXT2:
ADDDL,30H
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.截图:
可以对ax的值进行修改为00ad
4.程序代码
codesegment
assumecs:
code
start:
movah,1
int21h
cmpal,0dh
jzdone
cmpal,'0'
jbnext
cmpal,'9'
jacharup
movdl,al
movah,2
int21h
jmpstart
charup:
cmpal,41h
jbnext
cmpal,5ah
jachrdn
dispc:
movdl,'c'
movah,2
int21h
next:
jmpstart
chrdn:
cmpal,61h
jbnext
cmpal,7ah
janext
jmpdispc
done:
movah,4ch
int21h
codeends
endstart
5.截图:
实验七统计不同成绩段学生的人数
1.程序说明:
本程序用来统计在不同分数段的学生人数并显示出来。
有三个子程序,分别用来统计各分数段的学生人数、输出相关内容、换行回车。
子程序一中,先将每个学生的分数从100、90、80、70、60逐个比较,在哪一分数段,则将其个数加一。
直到所有分数都完成比较。
子程序二则利用DOS功能调用INT21H的9号功能在显示器上显示一个字符串和2号功能在显示器上显示一个字符来实现输出相关内容。
子程序三通过DOS功能调用INT21H的2号功能在显示器上显示一个字符实现换行和回车的。
2.程序框图:
3.程序代码:
datasegment
gradedb72,69,83,90,75,80,87,99,63,100
adb'<60renshu','$'
bdb0ah,0dh,'60~70renshu:
','$'
cdb0ah,0dh,'70~80renshu:
','$'
ddb0ah,0dh,'80~90renshu:
','$'
edb0ah,0dh,'90~100renshu:
','$'
fdb0ah,0dh,'100renshu:
','$'
countdb10
dataends
stackssegment
stacksends
codesegment
assumecs:
code,ds:
data,ss:
stacks
mainprocfar
start:
movax,data
movds,ax
xorax,ax
xorbx,bx
xorcx,cx
xordh,dh
callcountgrade
calloutput
movah,4ch
int21h
mainendp
countgradeprocnear
movdi,0
io:
cmpgrade[di],60
jbl1
cmpgrade[di],70
jbl2
cmpgrade[di],80
jbl3
cmpgrade[di],90
jbl4
cmpgrade[di],100
jbl5
incal
jmpcontinue
l1:
incbh
jmpcontinue
l2:
incbl
jmpcontinue
l3:
incch
jmpcontinue
l4:
inccl
jmpcontinue
l5:
incdh
jmpcontinue
continue:
incdi
deccount
jnzio
ret
countgradeendp
outputprocnear
movah,0
pushax
pushdx
pushcx
pushbx
leadx,a;分数小于60的人数
movah,9
int21h
popbx
movdl,bh
adddl,30h
movah,2
int21h
leadx,b;分数60至69的人数
movah,9
int21h
movdl,bl
adddl,30h
movah,2
int21h
leadx,c;分数70至79的人数
movah,9
int21h
popbx
movdl,bh
adddl,30h
movah,2
int21h
leadx,d;分数80至89的人数
movah,9
int21h
movdl,bl
adddl,30h
movah,2
int21h
leadx,e;分数90至99的人数
movah,9
int21h
popbx
movdl,bh
adddl,30h
movah,2
int21h
leadx,f;分数100的人数
movah,9
int21h
popbx
movdl,bl
adddl,30h
movah,2
int21h
ret
outputendp
codeends
endstart
4.截图:
实验总结:
汇编语言的上机实验主要是在DOS环境下完成的,用link编译链接,之后运行,还有Debug来调试,总体来说实验的操作步骤都差不多,link后执行exe文件,最后看实验的结果了。
通过这几次汇编语言的上机实验,我知道要好好学好这门能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
特别是那些存储速度很快的寄存器以及寻址等等,我发现它们的作用很大,这样只有利用好这门语言才能加强我的专业技能,学会计算机的各种指令。