基于arm的汇编实验报告.docx

上传人:b****9 文档编号:25562027 上传时间:2023-06-09 格式:DOCX 页数:10 大小:20.31KB
下载 相关 举报
基于arm的汇编实验报告.docx_第1页
第1页 / 共10页
基于arm的汇编实验报告.docx_第2页
第2页 / 共10页
基于arm的汇编实验报告.docx_第3页
第3页 / 共10页
基于arm的汇编实验报告.docx_第4页
第4页 / 共10页
基于arm的汇编实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于arm的汇编实验报告.docx

《基于arm的汇编实验报告.docx》由会员分享,可在线阅读,更多相关《基于arm的汇编实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

基于arm的汇编实验报告.docx

基于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、这个程序虽然短小,却是五脏俱全,让我对于一个完整汇编程序的框架

  有了一个基本的了解,为后面的更为复杂的实验奠定了基础;

  电子科技大学计算机学院实验中心

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1