基于arm的汇编实验报告.docx
《基于arm的汇编实验报告.docx》由会员分享,可在线阅读,更多相关《基于arm的汇编实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
![基于arm的汇编实验报告.docx](https://file1.bdocx.com/fileroot1/2023-6/9/c8671445-c093-41ee-bec8-d17b4fdcd36d/c8671445-c093-41ee-bec8-d17b4fdcd36d1.gif)
基于arm的汇编实验报告
竭诚为您提供优质文档/双击可除
基于arm的汇编实验报告
篇一:
汇编实验报告
实验一
(1)熟悉汇编语言程序调试环境及顺序程序设计
一、实验目的及要求:
1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用eDIT、mAsm、LInK、Debug等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境
1.汇编语言源程序的建立
本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为Abc。
DATAsegmenT
buFDb23h,16h,08h,20h,64h,8Ah,91h,35h,2bh,7Fh
cneQu$-buF
DATAenDs
coDesegmenT
Assumecs:
coDe,Ds:
DATA
sTART:
pushDs
xoRAx,Ax
pushAx
moVAx,DATA
moVDs,Ax
moVbx,oFFseTbuF
moVcx,cn
Deccx
moVAL,[bx]
Incbx
Lp:
cmpAL,[bx]
JbenexT
moVAL,[bx]
nexT:
Incbx
Deccx
JnZLp
moVAh,4ch
InT21h
coDeenDs
enDsTART
键入以下命令:
c:
\>eDITAbc.Asm
此时屏幕的显示状态如图1所示。
1
图1用eDIT编辑Abc.Asm程序窗口
程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件
一般情况下,mAsm汇编程序的主要功能有以下3点:
(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.obJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在Dos状态下,采用宏汇编程序mAsm对源程序文件进行汇编,其操作过程如图2所示。
图2mAsm宏汇编程序工作窗口
汇编过程的错误分警告错误(warningerrors)和严重错误(severeerrors)两种。
其中警告错误是指汇编程序认为的一般性错误;严重错误是指汇编程序认为无法进行正确汇编的错误,并给出错误的个数、错误的性质。
这时,就要对错误进行分析,找出原因和问题,然后再调用屏幕编辑程序加以修改,修改以后再重新汇编,一直到汇编无错误为止。
3.用连接程序生成可执行程序文件
经汇编以后产生的目标程序文件(.obJ文件)并不是可执行程序
文件,必须经过连接以后,才能成为可执行文件(即扩展名为.exe)。
2
连接过程如图3所示。
图3LInK连接程序工作窗口
上述提示行回答以后,连接程序开始连接,如果连接过程中出现错误,则显示出错误信息,根据提示的错误原因,要重新调入编辑程序加以修改,然后重新汇编,再经过连接,直到没有错误为止。
连接以后,便可以产生可执行程序文件(.exe文件)。
4.程序的执行
当我们建立了正确的可执行文件以后,就可以直接在Dos状态下执行该程序。
如:
c:
\>Abc
本程序当中没有用到Dos中断调用指令,所以在屏幕上看不到程序执行的结果。
实验二
(2)分支及循环程序设计
一、实验目的及要求
熟练掌握转移指令,掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成条件和判断条件的方法和技巧。
掌握循环程序设计的方法(单重循环结构和两重循环结构),正确分配与使用寄存器,根据实际问题选择控制循环的方法(循环次数已知和循环次数未知)。
二、实验内容
编写下列程序并调试通过。
1.通过键盘输入一个小写字母,找出对应的前导字母和后续字母,再按顺序显示这三个字母。
2.编写一个程序,要求比较数组ARRAY中的三个16位补码,并根据比较结果在终端上显示如下信息:
1)如果三个数都不相等,显示0;
2)如果三个数都两个相等,显示1;
3)如果三个数都相当,显示2。
3
3.编写一个程序,要求通过键盘接收一个个位数n,然后显示n个字母‘$’。
4.从键盘上输入一个8位二进制数,在显示器上显示其相应的十六进制数。
(教材p170习题5)
5.要求从键盘上接收一个4位十六进制数,然后再显示器上显示其对应的16位二进制数。
6.用15行*16列的表格形式显示AscII码为10h-FFh的所有字符。
三、实验设计方案说明
实验1
流程图:
实验完整代码:
DATAssegmenT
;此处输入数据段代码
DATAsenDs
sTAcKssegmenT
;此处输入堆栈段代码
sTAcKsenDs
coDessegmenT
Assumecs:
coDes,Ds:
DATAs,ss:
sTAcKs
;告诉汇编程序哪个是代码段,哪个是数据段,哪个是堆栈段
sTART:
moVAx,DATAs
moVDs,Ax;初始化数据段的段地址
moVcL,3
L:
moVAh,01h;输入一个小写字母,常用Dos功能调用,入口参数为Ah
InT21h
cmpAL,61h
JbL
cmpAL,7Ah
JAL
moVbL,AL
moVDL,0Dh;回车
moVAh,02h;常用Dos功能调用,入口参数为
Ah
4
;对输入进行判断,确保输入的字符为a~z
InT21h
moVDL,0Ah;换行
moVAh,02h
InT21h
subbL,01h;按顺序输出三个字母
cmpbL,61h;判断前导字母是否合法
JnbL1ADDbL,1AhmoVDL,bLmoVAh,02h
InT21h
subbL,19hJmpL2
L1:
moVDL,bL;输出录入字母的前导字母
moVAh,02hInT21hIncbL
L2:
moVDL,bL;输出录入字母本身
moVAh,02hInT21hIncbLcmpbL,7Ah;判断后续字母是否合法JnAL3subbL,1Ah
L3:
moVDL,bL;输出录入字母的后续字母
moVAh,02h;常用Dos功能调用,入口参数为AhInT21h
moVAh,4ch
InT21h
coDesenDs
enDsTART
5
篇二:
汇编实验报告终
实验一汇编语言源程序的输入
一、实验目的
1.通过实验了解和熟悉微机系统的配置。
2.学习在Debug状态下输入汇编源程序的方法。
3.初步掌握调试(在Debug状态下)的过程。
二、实验原理
1.本实验要求在Debug状态下输入汇编源程序,并用Debug命令
进行调试。
用单步跟踪的方法验证指令的功能。
2.以下是给定的参考程序,并在实验时在每条指令的“;”符号右边
按要求填写指令的执行结果。
注:
⑴微机进入Debug状态下之后,一切立即数和地址数据均被默
认为十六进制数,在输入时数的后面不加后缀“h”;
⑵在Debug状态下执行程序时,“InT20h”指令可使系统执行完该
指令前的程序时返回到“-”提示符状态,并且恢复cs和Ip寄存器原来的
值。
参考程序:
moVAx,2000;AL=00h
moVDs,Ax;Ds=2000h
noTAx;Ax=DFFFh
xoRAx,Ax;Ax=0000h
DecAx;Ax=FFFFh
IncAx;Ax=0000h
moVbx,2030;bh=20h
moVsI,bx;sI=2030h
moV[sI],bL;[2030h]=30h
moVwoRDpTR[sI],10F;[2030h]=0Fh[2031h]=01h
moVDI,sI;DI=2030h
moV[DI+50],bh;[DI+50h]=20h
moVbh,[sI];bh=0Fh
moVbL,[DI+50];bL=20h
moVsp,5000
pushAx;Ax=0000h[ss:
4FFeh]=00h
[ss:
4FFFh]=00h
pushbx;bx=0F20h[ss:
4FFch]=20h
[ss:
4FFDh]=0Fh
popAx;Ax=0F20h
popF;F=00000000
negbx;bx=F0e0h
xchgbx,Ax;bx=0F20h
sTD;F=01010001
sTI;F=01110001
cLD;F=00110001
cLI;F=00010001
ADcDI,2050;DI=4081hF=00000010//执行过程中考虑上一条指令的进位标志2030【bI】+2050+1(上一
条指令的进位标志)
ADcsp,DI;sp=9081hF=10010010
ADcAx,1500;Ax=05e0hF=00000001
subAx,bx;Ax=F6c0hbx=0F20h
shLAh,1;Ah=ech
RcLAx,1;Ax=D981h
shRbh,1;bh=07h
RcRbL,1;bL=90h
moVcL,4
moVDx,80F0
RoLDx,cL;Dx=0F08hcL=04h
InT20;cs=00A7hIp=1072h
实验二数据的建立与传送程序
一、实验目的
1.继续学习Debug命令。
2.验证指令的功能。
二、实验原理
在Debug状态下,分别输入下面各程序段,每输入完一个程序段,用
g命令进行连续方式执行程序,在连续执行时,要记录程序的执行结果。
参考程序:
1.在内存10000h单元开始,建立00h~0Fh~00h31个数,要求
00h~0Fh数据逐渐增大,0Fh~00h逐渐减小。
该程序从内存cs:
0100h
地址开始输入。
moVAx,1000h
moVDs,Ax
moVsI,0
moVcL,0Fh
xoRAx,Ax
ppe1:
moV[sI],AL
IncsI
IncAL
DeccL
JnZppe1
moVcx,10h
ppe2:
moV[sI],AL
IncsI
DecAL
Loopppe2//每执行一次Loop指令,cx减1,判断cx
是否为0,不为0,转移到指定的标号处继续执行,否则,顺序执行
InT20h
注:
转移指令的符号地址直接用绝对偏移地址,该地址在用A命令汇
编输入时,可以看到程序全部运行完之后,可用Debug的Dump命令查
看建立的数据块内容。
例如:
-D1000:
001e(31个数)
1000:
00000102030405060708090A0b0c0D0e
1000:
100e0D0c0b0A09080706050403020XX0
2.把上一个程序的执行结果(建立的31个字节数据块,其首地址在
10000h),分几种方式传送到以下指定的区域。
(a)该程序从内存cs:
0150h开始输入。
把数据块传送到15050h开
始的存贮区域中。
参考程序:
moVAx,1000h
moVDs,Ax
moVsI,0
moVDI,5050h
moVcx,1Fh;数据块长度是31
ppeA:
moV
AL,[sI]
moV[DI],AL
IncsI
IncDI
LoopppeA
InT20h
检查内存数据块的传送情况,可用“D”命令。
1000:
5050000102030405060708090A0b0c0D0e0F1000:
50600e0D0c0b0A09080706050403020XX0
(b)用串传送指令moVsb,把数据块传送到15150h开始的区域,该程序从内存cs:
0200h开始输入。
检查程序最后的执行结果,可用“D”命令,例如:
-D1000:
5150↙
moVAx,1000
moVDs,Ax
moVes,Ax
moVsI,0
moVDI,5150
moVcx,1F
篇三:
汇编语言实验报告
计算机专业类课程
实验报告
课程名称:
汇编程序语言设计
学院:
计算机科学与工程
专业:
计算机科学与技术
学生姓名:
林怡
学号:
20XX060020XX3
指导教师:
胡建
日期:
20XX年12月15日
电子科技大学计算机学院实验中心
电子科技大学
实验报告
实验一
一、实验名称:
汇编源程序的上机调试操作基础训练
二、实验学时:
4
三、实验内容和目的:
实验内容:
1.Debug命令的使用
2.程序的调试与运行
3.编写程序计算以下表达式:
Z=(5x+2Y-7)/2
设x、Y的值放在字节变量VARx、VARY中,结果存放在字节单元VARZ中。
实验目的:
1.掌握Debug的基本命令及其功能
2.学习数据传送和算术运算指令的用法
3.熟悉在pc机上编辑、汇编、连接、调试和运行汇编语言程序的过程。
四、实验原理:
1.编辑源程序,建立一个以后缀为.Asm的文件.
2.汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。
无错时继续第3步。
3.连接目标程序,产生可执行程序。
4.用Debug程序调试可执行程序,记录数据段的内容。
五、实验器材(设备、元器件)
pc、window7平台、masm5开发环境
六、实验步骤:
1、在数据段中分别用两个单元varx和vary存放变量x和y;另一个单元varz用来存放运算结果Z;
2、由于是字节变量,所以用al存放变量x的值,然后将al左移两位得到4*x,再把al加上x,进而得到5*x;
3、再用bl存放变量y的值,用add命令得到2*y,之后把al与bl相加,再用sub命令减去7,得到(5*x+2*y-7)的值,并保存到al中;
4、最后将al右移一位,得到最后的z=(5*x+2*y-7)/2,并把al的值送入varz单元;
5、运行程序,使用-d命令查看内存单元的信息;
七、实验数据及结果分析:
实验代码如下:
电子科技大学计算机学院实验中心
实验结果如下图:
1、编译连接后执行程序:
2、查看内存单元变量的值
varx=05h,vary=07h,(5x+2y-7)/2=(25d+14d-7d)/2d=16d=10h
可以看到上图中内存单元的值与手工计算的结果相符,说明程序是正确的。
八、实验结论、心得体会和改进建议:
1、本次实验让我掌握debug调试软件的一些基本命令,也学会了如何查看
寄存器变量和内存单元;
2、这个程序虽然短小,却是五脏俱全,让我对于一个完整汇编程序的框架
有了一个基本的了解,为后面的更为复杂的实验奠定了基础;
电子科技大学计算机学院实验中心