汇编实验报告电子科技大学.docx
- 文档编号:9951588
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:36
- 大小:994.89KB
汇编实验报告电子科技大学.docx
《汇编实验报告电子科技大学.docx》由会员分享,可在线阅读,更多相关《汇编实验报告电子科技大学.docx(36页珍藏版)》请在冰豆网上搜索。
汇编实验报告电子科技大学
计算机专业类课程
实验报告
课程名称:
汇编语言程序设计
学 院:
计算机
专 业:
计算机工程
学生姓名:
周乃彬
学 号:
2012060020005
指导教师:
唐勇
日 期:
2014年11月20日
电子科技大学
实验报告
实验一
一、实验名称:
汇编源程序的上机调试操作基础训练
二、实验学时:
4
三、实验内容和目的:
内容:
1.DEBUG命令的使用
2.程序的调试与运行
3.编写程序计算以下表达式:
Z=(5X+2Y-7)/2
设X、Y的值放在字节变量VARX、VARY中,结果存放在字节单元VARZ中。
目的:
1.掌握DEBUG的基本命令及其功能
2.学习数据传送和算术运算指令的用法
3.熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
四、实验原理:
1.DEBUG.EXE是DOS提供的可用于调试可执行程序的一个工具软件,也是可用于汇编语言程序设计的一种调试工具
2.在DOS的提示符下,可如下键入Debug启动调试程序:
DEBUG [路径\文件名] [参数1] [参数2]
3.运行命令G(Go)从指定地址处开始运行程序,直到遇到断点或者程序正常结束。
格式为:
G [=地址] [断点地址1,断点地址2,...,断点地址10]
4.追踪命令T(Trace),也称为单步命令,每执行一条指令就显示运行结果,使程序员可以细致地观察程序的执行情况。
有两种格式:
1)逐条指令追踪:
-T[=地址]
该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
2)多条指令追踪:
-T[=地址][值]
该命令从指定地址起执行n条命令后停下来,n由[值]确定
5.继续命令P(Proceed),格式为:
-P[=地址] [数值]
类似T命令,逐条执行指令、显示结果。
但是当遇到子程序调用、中断功能调用和循环指令等时,不在子程序、中断服务程序或循环体中单步执行,而是直接执行完成子程序、中断服务程序或循环体,然后显示结果。
6.显示内存单元内容的命令D(Dump)命令显示主存单元的内容,格式为:
-D[地址]或-D[范围]
-d100 ;显示数据段100h开始的主存单元
-dcs:
0 ;显示代码段的主存内容L3;显示三个变量
-d2f0L20;显示ds:
2f0h开始的20h个主存数据
7.汇编程序以汇编语言程序文件作为输入,并由它产生两种输出文件——目标程序文件和源程序列表,如图所示:
其中,目标程序文件(.OBJ)经连接定位后交给机器执行;源程序列表文件(.LST)将列出源程序、目标程序和机器语言代码及符号表。
其中,符号表是汇编程序所提供的一种诊断手段,它包括程序中所用的所有符号和名字,以及这些符号和名字所指定的地址值。
如果程序出错,可以比较容易地从这个符号表中检查出错误。
五、实验器材(设备、元器件)
windowsXP,Masm50
六、实验步骤:
1.编辑源程序,建立一个以后缀为.ASM的文件.
2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
无错时继续第3步。
3.连接目标程序,产生可执行程序。
4.用DEBUG程序调试可执行程序,记录数据段的内容。
七、实验数据及结果分析:
实验代码:
DATASEGMENT
VARXDB1
VARYDB2
VARZDB?
DATAENDS
STACK1SEGMENTPARASTACK
DW20HDUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
MOVAL,0H
MOVAL,VARX
MOVCL,2H
SHLAL,CL;4*x
ADDAL,VARX;5*x
MOVBL,VARY
SHLBL,CL;2*y
ADDAL,BL;5*X+2*Y
SUBAL,7H;5*X+2y-7
SARAL,1H;(5x+2y-7)/2
MOVVARZ,AL;
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验截图:
八、实验结论、心得体会和改进建议:
1.通过实验使我知道了和熟悉了汇编程序设计的步骤
2.建立数学模型:
遇到一个题目,首先要进行全面的分析,根据问题提出的条件特点,找出规律,找出问题的数学模型或者制定解决问题的规律。
3.合理分配存储空间和寄存器
电子科技大学
实验报告
实验二
一、实验名称:
分支程序与循环程序设计
二、实验学时:
4
三、实验内容和目的:
内容:
1.根据输入的字母进行大小写转换(若是输入小写字母则转换成为大写字母,反之),若输入的不是字母则提示出错并重新输入。
2.显示九九表
目的:
1.掌握分支程序的结构。
2.掌握分支程序的设计与调试方法。
3.掌握循环程序设计与调试方法
4.掌握正确分配与使用寄存器。
四、实验原理:
1.预留存储器空间RES1、RES2和RES3。
RES1DB0
RES2DB0
RES3DB0
2.按照顺序正确取出要判定的数据
LEABX,BUF
LL:
MOVAL,[BX];要注意正确选用间址寄存器
INCBX
判定语句及其相应的跳转语句
JMPLL
3.正确存放数据到指定的空间
MOVDL,0;存放数据个数,初值为0
INCDL
MOVRES1,DL
4.从键盘输入字符中断
Movah,1
Int21h;结果是al←输入字符的ASCII码
5.显示一个字符中断
Movah,2
Movdl,要显示字符的ASCII码
Int21h;
6.屏幕显示字符串(9号功能调用)
格式:
MOVDX,字符串的偏移地址
MOVAH,09H
INT21H
在使用9号功能调用时,应当注意以下问题:
①待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。
②应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。
7.部分需要注意的指令
ADC带进位加法----将进位标志CF的值加在和中
·INC加1.
·SUB减法.
·SBB带借位减法----连着借位CF一起减去
·DEC减1.
·NEC求补----变反加1
·CMP----比较执行两操作数相减,影响标志位OF、SF、ZF、PF和CF,即通过标志位的状态进行两数大小的比较。
·MUL无符号乘法
·IMUL整数乘法
以上两条,结果如下:
对字节操作数,(AX)←(AL)*src;对字操作数,(DX,AX)←(AX)*src
·DIV无符号除法.
·IDIV整数除法.
以上两条,结果回送:
商回送AL,余数回送AH,(字节运算);
或商回送AX,余数回送DX,(字运算).
五、实验器材(设备、元器件)
windowsXP,Masm50,Windows7,MasmforWindows(一个集成软件,运行、链接、调试全包括)
六、实验步骤:
1.编写源程序文件;
2.汇编,若发现语法错误或者格式错误则修改;
3.链接,形成可执行文件;
4.画流程图:
5运行程序,得到正确结果;
6撰写实验报告
七、实验数据及结果分析:
1.根据输入的字母进行大小写转换流程图
根据输入的字母进行大小写转换源程序
datasegment
promotedb'pleaseinputacharacter:
$'
errorhintsdb'inputerror!
onlycharacterplease!
$'
outputdb?
dataends
stack1segmentparastack
dw20hdup(0)
stack1ends
codesegsegment
assumeds:
data,ss:
stack1,cs:
codeseg
start:
movax,data
movds,ax
leadx,promote
movah,9
int21h
movah,1
int21h
cmpal,41h
jaelowercasebuf
jberrorhint
lowercasebuf:
cmpal,5ah
jbelowercase
jauppercasebuf
uppercasebuf:
cmpal,61h
jberrorhint
jaeuppercase
lowercase:
addal,32
movoutput,al
jmpdone
uppercase:
subal,32
movoutput,al
jmpdone
errorhint:
leadx,errorhints
movah,0ah
int21h
movah,4ch
int21h
done:
movah,2
movdl,output
int21h
movah,4ch
int21h
codesegends
endstart
根据输入的字母进行大小写转换截图:
2.九九乘法表流程图:
九九乘法表源程序
codesegment;数据段开始
mainprocfar;子程序调用时使用的参数
assumecs:
code;设定数据放入cs寄存器
pushds;DS寄存器入栈
movax,0;ax寄存器赋值0
pushax;ax寄存器入栈
movbl,1;乘数赋值为1
lop2:
movbh,1;被乘数赋值为1
lop1:
moval,bh;被乘数存放如al寄存器当中
mulbl;将bl与bh相乘结果送到ax中
aam;乘法调整指令
addbh,30h;变为ASCII的值
addbl,30h
movcx,ax
movdl,bh;用21中断显示被乘数
movah,2
int21h
movdl,'*';显示乘号
movah,2
int21h
movdl,bl;显示乘数
movah,2
int21h
movdl,'=';显示等号
movah,2
int21h
cmpch,0;查看高位有没有值
jetu;等于转移
addch,30h;若有则显示
movdl,ch
movah,2
int21h
tu:
addcl,30h;否则显示低位
movdl,cl
movah,2
int21h
movdl,'';显示空格movah,2
int21h
subbh,30h;将ASCII还原为BCD数
subbl,30h
incbh;将被乘数加一
cmpbh,bl;比较看是不是要换行
jnalop1;不高于转移
movdl,0ah;换行与置首位显示
movah,2
int21h
movdl,0dh;置于首位置并显示
movah,2
int21h
incbl;否则乘数加一
cmpbl,9;比较乘数与9的大小,是不是要结束
jnalop2
movah,4ch;返回dos
int21h
mainendp
codeends
endmain
九九乘法表截图:
实验分析:
打印九九乘法表时,需注意换行问题,以及循环时的下标变换。
八、实验结论、心得体会和改进建议:
1通过本次实验过程.掌握分支程序的结构,认识到汇编语言和其他语言一样丰富,有着多种分支结构,汇编语言从底层支持语句的跳转这样在实现一些分支语句时既有效率有简洁直观。
2.通过本次实验过程还还掌握分支程序的设计与调试方法;
3.通过本次实验过程还掌握循环程序设计与调试方法;
4.通过本次实验过程还掌握正确分配与使用寄存器;
5.回答思考:
思考:
LOOP指令是先循环再减CX还是先减CX后判定再循环?
答:
先减去CX
电子科技大学
实验报告
实验三
一、实验名称:
数制、码制和子程序的编程与调试
二、实验学时:
4
三、实验内容和目的:
内容:
1、从键盘输入两个2位十进制正数,相加,结果以十六进制数形式显示在屏幕上。
(要求结果显示完整的算式)
2、从键盘输入两个2位十进制正数转换成组合BCD码后,相加,结果以十进制形式显示在屏幕上。
(要求结果显示完整的算式)
目的:
1.熟练掌握编写汇编语言原程序的基本方法和基本框架。
2.熟练使用DEBUG调试程序。
3.掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。
4.掌握用DOS功能调用,实现字符的输入和显示。
5.掌握子程序的编程与调试方法。
四、实验原理:
1.字符串输入功能调用(0AH号功能调用)
格式:
MOVDX,已定义缓冲区的偏移地址
MOVAH,0AH
INT21H
功能:
从键盘接收字符,并存放到内存缓冲区。
①执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,该个数包括回车符0DH在内。
第二个字节保留,在执行程序完毕后存入输入的实际字符个数(不含回车)。
从第三个字节开始存入从键盘上接收字符的ASCII码。
若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。
若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,一直到输入回车键为止。
②应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。
2.组合BCD码是用4个二进制位表示一个十进制位,如:
MOVAL,68H
MOVBL,28H
ADDAL,BL ;AL=68H+28H=90H
DAA ;十进制调整:
AL=96H
4.十进制数加法调整指令DAA
功能:
用于对组合BCD码相加的结果进行调整,使结果仍为组合的BCD码。
分析:
二进制加法是逢二进一,而BCD码≤9时逢二进一,BCD码>9时将逢十进一。
因此,对于>9的BCD码要进行调整,才能得到正确的运算结果。
具体的调整方法是:
加6调整。
五、实验器材(设备、元器件)
Windows7,MasmforWindows(一个集成软件,运行、链接、调试全包括)
六、实验步骤:
1.编写源程序文件;
2.汇编,若发现语法错误或者格式错误则修改;
3.链接,形成可执行文件;
4.画流程图:
5运行程序,得到正确结果;
6撰写实验报告
七、实验数据及结果分析:
1.从键盘输入两个2位十六进制数,相加,结果以十进制形式显示在屏幕上
流程图:
源程序:
DATASEGMENT
MSG1DB13,10,'Pleaseinputnumber_1:
$'
MSG2DB13,10,'Pleaseinputnumber_2:
$'
CRLFDB13,10,'$'
NNDB?
?
MMDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEADX,MSG1
MOVAH,9
INT21H
CALLIN_CHAR
MOVMM,AL
LEADX,MSG2
MOVAH,9
INT21H
CALLIN_CHAR
MOVNN,AL
LEADX,CRLF
MOVAH,9
INT21H
MOVAL,MM
CALLOUT_NUM
MOVDL,'+'
MOVAH,2
INT21H
MOVAL,NN
CALLOUT_NUM
MOVDL,'='
MOVAH,2
INT21H
MOVAL,NN
ADDAL,MM
MOVAH,0
ADCAH,0
CALLOUT_1
EXIT:
MOVAH,4CH
INT21H;返回DOS
IN_CHAR:
LEABX,NN
MOVCX,2
IN_1:
MOVAH,1
INT21H
CMPAL,'0'
JBIN_1
CMPAL,'F'
JAIN_1
CMPAL,'9'
JBE_09
CMPAL,'A'
JBIN_1
SUBAL,7
_09:
SUBAL,30H
MOV[BX],AL
INCBX
LOOPIN_1
XCHGAL,NN
MOVBL,16
MULBL
ADDAL,NN
RET
OUT_NUM:
MOVAH,0
OUT_1:
MOVDX,0
MOVBX,100
DIVBX
XCHGAX,DX
CALLOUT_CHAR
MOVDX,0
MOVBX,10
DIVBX
XCHGAX,DX
CALLOUT_CHAR
MOVDL,AL
CALLOUT_CHAR
RET
OUT_CHAR:
PUSHAX
ADDDL,30H
MOVAH,2
INT21H
POPAX
RET
CODEENDS
ENDSTART
截图:
2、从键盘输入两个2位十进制正数转换成组合BCD码后,相加,结果以十进制形式显示在屏幕上。
流程图:
源程序:
datasegment
hint1db'pleaseinputthefirstnumber:
$'
hint2db'pleaseinputthesecondnumber:
$'
opt1db3,?
3dup(?
),'$'
opt2db3,?
3dup(?
),'$'
hint3db'?
?
+'
hint4db'?
?
='
hint5db'$'
dataends
stack1segmentparastack
dw20hdup(0)
stack1ends
codesegment
assumeds:
data,ss:
stack1,cs:
code
start:
movax,data
movds,ax
movah,9
leadx,hint1
int21h
movah,0ah
leadx,opt1
int21h
leadx,opt2
int21h
moval,opt1+2
movhint3,al
moval,opt1+3
movhint3+1,al
moval,opt2+2
movhint4,al
moval,opt2+3
movhint4+1,al
moval,opt1+2
movcl,4
salal,cl
movbl,opt1+3
subbl,30h
addal,bl
movbl,opt2+2
movcl,4
salbl,cl
movcl,opt2+3
subcl,30h
addbl,cl
addal,bl
jcset0
jncset1
set0:
movbl,30h
jmpdone
set1:
movbl,31h
jmpdone
done:
movhint5,bl
daa
movbl,al
movcl,4
saral,cl
addal,30h
movhint5+1,al
andbl,0fh
addbl,30h
movhint5+2,bl
movah,9
leadx,hint3
int21h
movah,4ch
int21h
codeends
endstart
截图:
八、实验结论、心得体会和改进建议:
1.通过本次实验熟练掌握编写汇编语言原程序的基本方法和基本框架。
2.通过本次实验已经熟练使用DEBUG调试程序。
3.通过本次实验掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换,从数码变换的角度入手,着重强调了子程序的调用以及跳转指令的使用,并且使数码在计算机内部的表示方法深入人心。
4.通过本次实验还掌握用DOS功能调用,实现字符的输入和显示。
5.通过本次实验还掌握子程序的编程与调试方法。
6.思考:
上例中,bcdbuf预留的空间是否可以缩减?
程序是否可以精简?
(假定我们转换的都是带符号数)
上例用加乘的方式实现了转换,如果用乘加的方式是否可行?
答:
不能。
电子科技大学
实验报告
实验四
一、实验名称:
串操作指令及其应用程序的设计与调试运行
二、实验学时:
4
三、实验内容和目的:
内容:
.从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。
要求在屏幕上以右边对齐的形式显示出来。
目的:
1.熟悉串操作指令的基本格式和使用方法。
2.掌握常用的串操作程序的设计方法。
3.熟悉串操作程序的调试运行过程。
四、实验原理:
1.需要用到9号DOS功能调用显示字符串,以实现人机对话。
比如:
在数据段中设置两个存放提示信息的字符串,一个是提示用户输入,另一个是指示显示结果:
massage1DB‘pleaseinputastring:
’,0AH,0DH,‘$’
massage2DB‘Right-adjustingofstring:
’,0AH,0DH,‘$’
2.需要用到10号DOS功能调用输入连续的字符串,并为这些字串预留存储空间,比如:
NUMEQU25
STRING1DBNUM,0,NUMDUP(‘‘),0AH,0DH,‘$’
STRING2DBNUM,0,NUMDUP(‘‘),0AH,0DH,‘$’
3.需要用到的串操作指令有:
1)串传送指令MOVSB/MOVSW
功能:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告 电子科技大学