微机原理第一次实验
微机原理实验报告册(3篇)
第1篇一、实验目的1. 理解和掌握微机的基本组成和工作原理;2. 熟悉微机硬件设备和实验仪器的使用方法;3. 提高动手实践能力,培养解决实际问题的能力;4. 深入理解微机原理课程内容,为后续课程学习奠定基础。
二、实验内容1. 微机系统认识实验2. 微机硬件组成实验3. 微机指令系统实验4. 微机寻址方式实验5. 微机程序设计实验6. 微机接口技术实验三、实验仪器与设备1. 微机原理实验箱2. 示波器3. 数字万用表4. 计算机一台5. 实验指导书四、实验步骤与内容1. 微机系统认识实验(1)观察实验箱的结构,了解各个模块的功能;(2)熟悉实验箱的电源、复位、运行等按钮的使用方法;(3)学习微机系统的工作流程,包括加电、复位、启动等过程;(4)观察微机系统启动后的运行状态,了解各个模块的协同工作。
2. 微机硬件组成实验(1)观察实验箱的CPU、内存、I/O接口等硬件模块;(2)学习CPU的内部结构,包括寄存器、控制单元、运算单元等;(3)学习内存的存储原理,了解ROM、RAM等存储器的特点;(4)学习I/O接口的工作原理,了解中断、DMA等传输方式。
3. 微机指令系统实验(1)学习微机指令系统的基本格式,包括操作码、地址码等;(2)掌握微机指令系统的寻址方式,包括立即寻址、直接寻址、间接寻址等;(3)编写简单的汇编语言程序,实现加、减、乘、除等运算;(4)学习微机中断处理过程,了解中断向量表、中断服务程序等概念。
4. 微机寻址方式实验(1)学习微机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等;(2)编写程序,实现不同寻址方式下的数据访问;(3)观察不同寻址方式对程序执行速度的影响。
5. 微机程序设计实验(1)学习汇编语言程序设计的基本方法,包括数据定义、指令编写、程序结构等;(2)编写简单的程序,实现数据交换、排序等操作;(3)学习微机程序的调试方法,包括单步执行、断点设置等。
6. 微机接口技术实验(1)学习微机接口技术的基本概念,包括并行接口、串行接口等;(2)观察实验箱中的并行接口、串行接口等模块,了解其工作原理;(3)编写程序,实现数据在并行接口、串行接口之间的传输;(4)学习微机中断处理在接口技术中的应用。
西安交通大学微机原理第一次实验报告
微型计算机原理与接口技术第一次实验报告实验者姓名:实验者学号:所在班级:报告完成日期:20年月日实验二分支程序的设计一、实验目的1.学习提示信息的显示及键盘输入字符的方法。
2.掌握分支程序的设计方法。
二、实验内容在提示信息下,从键盘输入原码表示的二位十六进制有符号数。
当此数大于0时,屏幕显示此数为正数;当此数小于0时,屏幕显示此数为负数;当此数等于0时,屏幕显示此数为零。
三、实验调试过程利用-u命令进行反汇编,结果如下。
三个CMP语句运行完的地址如图所示,第一个CMP运行完的是29H输出结果的地址如下图所示:首先对输入为负数时进行验证:输入FFH,设置一个断点在29H,利用-t命令观察跳转,结果如图:可以看到,程序最终正确的转入输出负的分支。
再输入正数11H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出正的分支。
最后输入00H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出0的分支。
四、实验框图及程序代码实验框图:程序代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENT;定义结果信息MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DA TABUF DB 3 ;定义最大可输入字符长度ACTLEN DB ? ;实际输入字符长度STRING DB 3 DUP(?) ;输入字符缓冲区DA TA ENDSSSEG SEGMENT PARA STACK 'STACK'DB 50 DUP(0)SSEG ENDSCODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV AX,SSEGMOV SS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET DATABUFINT 21HCRLFMOV AL,STRINGCMP AL,38HJAE ISNEGCMP AL,30HJNZ ISPOSMOV AL,[STRING+1]CMP AL,30HJNZ ISPOSJMP ISZEROISPOS:MOV DX,OFFSET MESS2MOV AH,09HINT 21HJMP DONEISNEG:MOV DX,OFFSET MESS3MOV AH,09HINT 21HJMP DONEISZERO:MOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP DONEDONE:MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果及分析编写的汇编程序EX2.ASM经过汇编MASM与链接LINK生成可执行文件EX2.EXE,测试如下:可见,程序能够正确判断输入数据的正、负、零情况。
北航微机原理实验一报告
微机原理第一次实验报告一、实验目的1. 了解Keil uVision4.0集成开发环境的使用方法。
2. 掌握ARM7TDMI汇编指令的格式和用法,编写ARM汇编语言程序。
3. 完成调试教材第四章例子。
二、实验设备PC计算机,Windows XP操作系统和ARM开发环境。
三、实验步骤用Keil uVision4.0集成开发环境编译、调试汇编语言程序的大致步骤如下:(1)运行软件,打开示例工程;(2)编写或修改程序代码,一定要注意每个工程内只能包含一个源文件;(3)点击“Build”编译工程,修改至无错误;(4)单步调试程序,观察每一步的变量变化情况和最终结果,并思考每一步的结果与预期结果是否相同。
四、实验内容1.例4-2程序代码:课本112-113页,其中有两处改动,一是存储结果的语句“ADD R0,0X4”改为“LDR R0,=Result”,因为程序运行时存储器的地址不确定,按书上的代码可能会取不到正确的地址;二是数据部分“Value DCB #0x59”改为“Value1 DCB 0x59”,应该属于书中印刷错误。
调试结果:2.例4-5程序代码:课本116页,其中有一处改动,把数据段开始的语句“AREA Data1,DATA”向后移动两行或直接去掉,否则输出结果不正确。
调试结果:几个关键步骤执行后的变量值表示如下:3.例4-11程序代码:课本124-125页,其中有几处类似于“LDR R0,[R7+#4]!”改为“LDRR0,[R7,#4]!”,同样把数据段开始的语句“AREA Data1,DATA”向后移动两行或直接去掉。
调试结果:4.习题11程序代码:AREA Reset,CODE,READONLYENTRYMainLDR R1,=ValueLDR R2,=NumberLDR R3,[R2] ;use R3 to countLDR R7,=OneLDR R4,[R7]LDR R7,=TwoLDR R5,[R7]LDR R7,=ThreeLDR R6,[R7]CMP1LDR R0,[R1],#4 ;load number in R0CMP R0,#0BGT ONEBEQ TWOBLT THREEB CMP2ONEADD R4,R4,#1B CMP2TWOADD R5,R5,#1B CMP2THREEADD R6,R6,#1CMP2SUBS R3,R3,#1BNE CMP1LDR R0,=OneSTR R4,[R0]LDR R0,=TwoSTR R5,[R0]LDR R0,=ThreeSTR R6,[R0] ;store resultsHere B HereValue DCD 0x00Number DCD 100One DCD 0Two DCD 0Three DCD 0END调试结果:由于100个数据较多,为了验证程序的正确性,调试时进行了前几个数据的测试。
微机原理与应用第一次实验报告
微机原理与应用实验一、实验二实验报告电92 雷云泽2009010941 实验一简单计算机系统基本模块设计1一、实验目的1.掌握简单计算机系统的指令系统2.掌握简单计算机基本模块的设计方法3.巩固EDA电路仿真和调试的方法二、实验任务包括练习指令编码设计寄存器组模块、设计RAM模块、设计I/O端口及其映射模块、设计和检测ROM模块1.练习指令编码阅读项目任务书的简单计算机指令系统,理解其中的7条R型指令AND、OR、ADD、SUB、ADDC、SUBC、SLT,和2条I型指令的LW、SW。
写出表1-1指令的编码和功能说明。
表1-1 指令编码练习2.设计寄存器组模块(1)任务要求在R类型指令中有3个操作数,其中2个操作数来自寄存器组,作为算术逻辑模块ALU的输入,另1个操作数是ALU 的输出,需写回寄存器组中。
所以,寄存器组模块需要1个写通道、2个读通道。
在寄存器组读操作时,需给出要读寄存器的寄存器号,寄存器组将该寄存器号对应的内容从输出端口输出;在寄存器组写操作中,需给出要写入寄存器的寄存器号和要写入的数据,寄存器组模块将在控制信号的作用下把数据写到指定的寄存器中。
寄存器组模块的封装图见1-1,包含2个异步读通道、1个同步写通道,内部包含4个8位寄存器(分别称为R0、R1、R2、R3,对应的二进制编号分别为00、01、10、11),1个2-4译码器和2个8位4选1多路选择器,其中每个寄存器都是带时钟使能和异步复位端口的8位D 触发器。
可利用QuartusII的MegaWizard下LMP_FF、LMP_DECODE、LPM_MUX进行设计。
寄存器组模块信号说明:输入信号:N1[1..0]:读通道1的寄存器号N2[1..0]:读通道2的寄存器号ND[1..0]:写通道的寄存器号DI[7..0]:写通道的输入数据CLK:时钟脉冲信号,上升沿有效REG_WE:写允许,为1时,在CLK上升沿,将数据DI写入ND指定的寄存器;为“0”时,禁止对寄存器阵列进行写操作。
东南大学微机原理第一次实验报告
《微机实验及课程设计》实验报告实验一汇编语言与程序调试基础姓名:学号:专业:仪器科学与工程学院实验室:计算机硬件技术实验时间: 2014年04月17日报告时间: 2014年04月23日评定成绩:审阅教师:一、实验目的1、了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点2、掌握汇编语言程序指令编辑、宏汇编、连接和运行的基本概念3、熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程序,修改环境4、学会利用DEBUG或TD检查认识指令功能的正确方法二、实验内容1、必做内容(1)要求计算两个多字节十六进制数之差:3B74AC60F8-20D59E36C1=?式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。
试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。
(2)以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。
2、选做内容(1)两个字符串的长度均为10,首地址分别为STRING1和STRING2,比较两个字符串是否完全相同,如果相同,将BL寄存器置为00H;如果不完全相同,将BL寄存器置为FFH,并将第一个字符串中的第一个不相同字符的地址放在SI寄存器中。
三、实验原理1、实验基本步骤(1)用任意一种文本编辑器(EDIT、NOTEPAD、UltraEDIT等)建立编辑汇编源程序,并将其保存为文件名.asm文件,将其放入带汇编工具的文件夹中(d:\tasm)。
注:文件名不要起的过长,在连接时可能会出现can’t find file的问题。
(2)开始菜单,点运行条目,打入cmd命令进入DOS调试环境。
(3)进入该文件夹(cd d:\tasm) ,键入如下命令开始编辑程序:d:\zxj>edit 文件名.asm(4)将程序保存后返回DOS进行汇编,键入如下命令:d:\zxj>tasm 文件名.asm如果汇编通过,进行下一步,如果出现error,返回3步骤,根据错误的行数进行修改,然后重新汇编,直到不产生error为止。
浙大 微机原理实验一 实验报告
实验报告课程名称:微机原理实验指导老师:_彭勇刚_ _成绩:__________________ 实验名称:上机操作及实验环境熟悉实验类型:同组学生姓名:__________一、实验目的和要求(必填) 二、实验内容和原理(必填)三、主要仪器设备(必填) 四、操作方法和实验步骤五、实验数据记录和处理 六、实验结果与分析(必填)七、讨论、心得实验一上机操作及实验环境熟悉一、实验目的和要求:认识了解单片机程序编译的方式及设备使用方式。
初步学会使用相应软件的操作方式为之后的实验做好准备。
二、主要仪器设备:主要由计算机、仿真器、实验系统板及仿真软件等组成。
计算机:源程序的编辑、编译以及将编译通过后所生成的后缀名为HEX 的机器码文件,通过RS-232串行口下载给仿真器,同时也可在计算机上直接模拟运行源程序来进行调试,包括单步执行、设置断点、跟踪显示、连续运行及查看各种寄存器内容等等。
在联机调试软件的支持下还可对单片机及仿真器内部的各种寄存器,存储器,PC 指针和特殊功能寄存器直接进行修改或赋值。
仿真器:采用M ICETEK 公司的EasyProbe8052F 仿真器,该仿真器是目前较为常用且功能较强的一种开发装置。
仿真软件:WAVE 的编辑软件及MICETEK 公司的EasyProbe8052F 仿真软件组成(codecruiser )。
上述软件均在WINDOWS 环境下运行。
三、操作方法和实验步骤:1. WAVE 开发环境介绍(1)双击桌面图标,进入下图。
(2)点击文件菜单,可选择新建文件OR打开原有文件,保存文件注意扩展名.asm保存。
(3)可导入TXT文本格式文件,如实验一中导入C:\Documents and Settings\Administrator\My Documents\单片机实验相关软件及指导书目录下的MC51_6.TXT,并点击“项目”菜单中“全部编译”项,左下角显示全部编译通过,若出错,双击该项,将提示出错行,回到相应行修改代码,直至全部通过。
微机原理的实验报告
微机原理的实验报告一、实验目的本实验旨在深入理解微机原理的相关知识,并通过实践操作,掌握微机原理的实验方法与技巧。
二、实验内容1. 搭建微机实验系统:根据实验所需,搭建适当的微机实验系统,包括各种硬件设备的连接与设置。
2. 硬件接口的实验:通过连接不同的硬件接口,进行实验操作,学习硬件接口的使用方法和原理。
3. 程序设计与调试实验:使用相应的汇编语言或高级语言,编写程序并进行调试,观察程序的执行结果。
4. 中断实验:通过调用不同的中断服务例程,进行实验操作,学习中断的使用原理和应用场景。
三、实验步骤与结果1. 实验步骤:(1) 搭建微机实验系统:按照实验指导书的要求,连接各种硬件设备,确保能够正常工作。
(2) 硬件接口的实验:选择一个硬件接口,例如并行口,通过编写相应的程序,实现读取和输出数据的功能。
观察实验现象并记录。
(3) 程序设计与调试实验:根据实验要求,选择适当的编程语言,编写相应的程序,并进行调试。
观察程序的执行结果,并记录相关数据。
(4) 中断实验:选择一个中断服务例程,例如键盘中断,通过编写相应的程序,实现对键盘输入的响应。
观察实验现象并记录相关数据。
2. 实验结果:(1) 硬件接口的实验结果:通过编写程序并连接硬件接口,成功读取和输出数据,实现了相应的功能。
(2) 程序设计与调试实验结果:编写的程序能够正确执行,并得到了预期的结果。
(3) 中断实验结果:编写的程序能够响应相应的中断信号,并实现了对键盘输入的处理。
四、实验分析与讨论1. 实验分析:通过本次实验,我们深入了解了微机原理的相关知识,并通过实践操作,掌握了微机原理的实验方法和技巧。
2. 实验讨论:在实验过程中,我们遇到了一些困难和问题,例如硬件接口的连接和调试,程序的编写和调试等。
但通过彼此的合作与讨论,我们最终解决了这些问题,并成功完成了实验。
五、实验总结通过本次实验,我们对微机原理有了更深入的理解,并通过实践操作,掌握了微机原理的实验方法和技巧。
微机原理实验报告
微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。
⼆、实验要求1.掌握DEBUG的使⽤,调试程序。
2.读懂程序中各条指令,说明程序功能。
三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。
100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。
2.加深对指令的理解。
⼆、实验要求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中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。
三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。
微机原理实验一
微机原理实验一
实验目的:
通过本实验,学生将掌握微机原理的基本知识,了解微机的组成结构和工作原理,掌握微机的基本操作方法。
实验内容:
1. 掌握微机的基本组成结构。
2. 了解微机的工作原理。
3. 学习微机的基本操作方法。
实验仪器和设备:
1. 微机主机。
2. 显示器。
3. 键盘。
4. 鼠标。
实验步骤:
1. 打开微机主机电源,启动计算机。
2. 通过鼠标和键盘操作,进入操作系统界面。
3. 了解微机的基本组成结构和工作原理。
4. 学习并掌握微机的基本操作方法。
实验注意事项:
1. 在操作微机时,要注意避免静电干扰,避免损坏微机设备。
2. 操作过程中要注意操作方法,避免误操作导致系统崩溃。
3. 学习微机原理时,要认真听讲,理解每个步骤的操作原理。
4. 实验结束后,要及时关闭微机电源,做好设备的保养工作。
实验总结:
通过本次实验,我对微机的基本组成结构和工作原理有了更深入的了解,掌握了微机的基本操作方法。
这对我今后的学习和工作都有很大的帮助。
同时,我也意识到了学习微机原理的重要性,希望在今后的学习中能够更加努力,不断提高自己的专业技能。
结语:
微机原理实验一是我们学习过程中的重要一环,通过实际操作,我们更深入地了解了微机的组成结构和工作原理,也掌握了微机的基本操作方法。
希望大家能够认真对待实验,加强对微机原理的学习,为以后的学习和工作打下坚实的基础。
西安交大微机原理第一次实验报告(共10页)
微机(wēi jī)原理第一次实验报告一.实验(shíyàn)目的(1) 学习8086/8088指令系统中一些基本(jīběn)指令的用法和程序设计的基本方法。
(2) 熟悉PC机上建立、汇编、连接(liánjiē)、调试和运行8086、8088汇编语言程序的全过程。
(3) 学习提示信息的显示及键盘输入字符的方法。
(4) 掌握分支程序的设计方法。
二.实验内容(1) 设a,b,c,d四个数分别以单字节压缩BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d)并将结果放在Y1单元中,将结果在屏幕上显示出来。
在debug中不断改变a,b,c,d内容并查看结果。
1. a=09, b=06, c=04, d=072. a=38, b=41, c=29, d=343. a=70, b=23, c=42, d=414. a=63, b=73, c=62, d=50(2) 在提示信息下,从键盘输入原码表示的二位十六进制有符号数,当此数大于0时,屏幕上显示此数为正数;当此数小于0时,屏幕上显示此数为负数;当此数为0时,屏幕上显示此数为零。
三.实验调试过程3.1 题目一调试过程C:\<DEBUG ONE.EXE-U 反汇编-R 查看(chákàn)寄存器变量值观察(guānchá)到0005时已完成(wán chéng)数据初始化,利用(lìyòng)g 5追踪到此处利用-d0指令查看内存单元,在偏移地址为0,1,2,3的地方有9,6,4,7,正是我们在代码中赋的初值。
-g d,观察(guānchá)到此时AL已赋值a=15H-g 16,计算(jì suàn)出a+b的值并赋给AL,值为0b,正确(zhèngquè)-g 19,DAA调整后AL变为11,计算(jì suàn)正确-g 1b,cl=04H成功赋值给AL,正确-g 1f,计算出(a+b)-(c+d)结果为04H,正确题目(tímù)二程序调试过程-U0, 反汇编-g 5,程序执行到此处时,完成(wán chéng)DS寄存器赋值DS=0B5EH-g a,程序执行到此处时,完成(wán chéng)SS寄存器赋值SS=0B69H-g 24,程序执行到此处,实现提示信息输出(shūchū)INPUT DATA:,手动输入C9-U-g 2f,程序执行到此处,成功(chénggōng)跳转,显示信息“THIS DATA IS –“四.程序(chéngxù)及框图4.1 题目(tímù)一程序DSEG SEGMENT ;定义数据段NUM DB 13H,27H,11H,12H ;定义(dìngyì)a,b,c,dY1 DB ?DSEG ENDS ;数据段定义结束SSEG SEGMENT PARA STACK ;定义堆栈段DB 20 DUP(?)SSEG ENDS ;堆栈段定义结束CSEG SEGMENT ;定义代码段ASSUME CS:CSEG,DS:DSEG,SS:SSEG ;各段定义(dìngyì) START: MOV AX,DSEGMOV DS,AX ;数据段段(duàn duàn)地址送DSMOV AX,SSEGMOV SS,AX ; 堆栈段段(duàn duàn)地址送SSMOV AL,[NUM]ADD AL,[NUM+1] ;计算(jì suàn)a+bDAA ;压缩BCD码加法调整DAAMOV CL,AL ; 保存a+bMOV AL,[NUM+2]ADD AL,[NUM+3] ;计算c+dDAA ;压缩BCD码加法调整DAASUB CL,AL ;计算(a+b)-(c-d)MOV AL,CLDAS ;DAS调整MOV [NUM+4],AL ;保存结果AND AL,0F0H ;取AL中高四位MOV CL,4SHR AL,CL ;BCD码高位移至低位ADD AL,30H ;AL加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示DLMOV AL,[NUM+4] ; 恢复ALAND AL,0FH ;取AL低四位ADD AL,30H ;AL加30H得ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示DLMOV AX,4C00HINT 21H ;返回DOSCSEG ENDSEND START ;程序结束4.2 题目二程序CRLF MACRO ;宏定义MOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21H ;显示换行ENDM ;宏结束DATA SEGMENT ;定义数据段MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DDH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DATABUF DB 3 ;定义(dìngyì)最大可输入字符长度 ACTLEN DB ? ;实际(shíjì)输入字符长度STRING DB 3 DUP(?) ;输入(shūrù)字符缓冲区DATA ENDS ;数据(shùjù)段结束SSEG SEGMENT PARA STACK 'STACK' ;定义堆栈段 DB 50 DUP(0)SSEG ENDS ;堆栈段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE,SS:SSEG,DS:DATA ;各段定位START: MOV AX,DATAMOV DS,AX ;DS段寄存器赋值MOV AX,SSEGMOV SS,AX ;SS段寄存器赋值MOV DX,OFFSET MESS1MOV AH,09HINT 21H ;显示提示信息MOV AH,0AHMOV DX,OFFSET DATABUFINT 21H ;接收键入的字符串CRLF ;回车换行MOV AL,STRING ;接收字符高位CMP AL,38H ;比较高位和38H的大小JGE FUSHU ; 若高位>=38H?,跳至FUSHU处执行 CMP AL,30H ;比较高位和30H的大小JE ZERO ;若高位=30H?,跳至ZERO处执行ZHENGSHU: MOV DX,OFFSET MESS2 ;显示输出为正数 MOV AH,09HINT 21HJMP OVERFUSHU: MOV DX,OFFSET MESS3 ;显示输出为负数MOV AH,09HINT 21HJMP OVERZERO: MOV AL,[STRING+1] ;显示输出为0CMP AL,30HJNE ZHENGSHUMOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP OVEROVER: HLTCODE ENDS ;代码段结束(jiéshù)END START ;程序(chéngxù)结束五.实验(shíyàn)结果5.1 题目(tímù)一实验结果1. a=09, b=06, c=04, d=07时,计算结果为042. a=38, b=41, c=29, d=34时,计算结果为163. a=70, b=23, c=42, d=41时,计算结果为104. a=63, b=73, c=62, d=50时,计算结果为245.2 题目二实验结果键盘输入c9,输出“THIS DATA IS-“键盘输入17,输出“THIS DATA IS +”键盘输入00,输出”THIS DATA IS ZERO’六.必要的分析6.1 题目一分析1. 压缩BCD码需要用到压缩BCD码的调整指令2. 程序末尾显示要利用DOS功能调用3.显示单个字符,要先将其转化为ASCII 码,再利用DOS功能调用的02H功能。
微机原理上机实验报告
微机原理上机实验报告实验一基本输入/输出实验:本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。
用一组开关信号接入端口A,端口B输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入/输出功能。
8255基本输入/输出实验参考接线图如图所示。
流程图:操作步骤:按图示连好线路,在TDPIT中输入如下程序,编译、连接、运行。
DATA SEGMENTCS0 EQU 300OHMY8255_A EQU CS0+00HMY8255_B EQU CS0+01HMY8255_C EQU CS0+02HMY8255_MODE EQU CS0+03HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV DX,3003HMOV AL,10000010BOUT DX,ALTEST_IT:MOV DX,3001HIN AL,DXMOV DX,3000HOUT DX,ALJMP TEST_ITCODE ENDSEND START实验现象:闭合开关,对应控制灯泡发光。
实验二流水线指示灯显示实验:首先分别将A口和B口写入7FH和FEH,然后分别将该数右移和左移一位,在送到端口上,这样循环下去,从而实现流水灯的显示。
8255流水灯显示实验参考接线图如图所示。
流程图:操作步骤:按图示连好线路,在TDPIT中输入如下程序,编译、连接、运行。
DATA SEGMENTCSO EQU 3000HA EQU CSO+0000HB EQU CSO+0001HC EQU CSO+0002HM EQU CSO+0003HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXXOR AX,AXMOV AL,10000000BMOV DX,MOUT DX,AL;MOV DX,B;IN AL,DXL1:MOV AL,00001000BMOV DX,AOUT DX,ALMOV AL,00000001BMOV DX,BOUT DX,ALMOV CX,00FFHC1: MOV BX,CXMOV CX,0FFFFHD1:LOOP D1MOV CX,BXLOOP C1MOV AL,00000100BMOV DX,AOUT DX,ALMOV AL,00000010BMOV DX,BOUT DX,ALMOV CX,00FFHC2: MOV BX,CXMOV CX,0FFFFHD2:LOOP D2MOV CX,BXLOOP C2MOV AL,00000010BMOV DX,AOUT DX,ALMOV AL,00000100BMOV DX,BOUT DX,ALMOV CX,00FFHC3: MOV BX,CXMOV CX,0FFFFHD3:LOOP D3MOV CX,BXLOOP C3MOV AL,00000001BMOV DX,AOUT DX,ALMOV AL,00001000BMOV DX,BOUT DX,ALMOV CX,00FFHC4: MOV BX,CXMOV CX,0FFFFHD4:LOOP D4MOV CX,BXLOOP C4JMP L1MOV AX,4C00HINT 21HCODE ENDSEND START实验现象:灯泡如流水般从左至右依次流动发光,并始终保持在同一时间只有一个灯亮着。
微机原理第一次实验
.汇编语言程序设计实验报告班级:通信1306 姓名:张金志学号:U201313788一.实验目的1.掌握QTSPIM的调试技术;2.了解MIPS汇编语言与机器语言之间的对应关系;3.掌握MIPS汇编程序设计;4.了解C语言语句与汇编指令之间的关系;5.熟悉常见的MIPS汇编指令;6.掌握程序的内存映像;二.实验内容用汇编程序实现以下伪代码:要求采用移位指令实现乘除法运算。
int main(){int K, Y ;int Z[50] ;Y = 56;for(K=0;K<50;K++)Z[K] = Y - 16 * ( K / 4 + 210) ;. }三.实验流程图四.实验原理为数组开辟一个内存空间,然后对变量赋初值,运算中乘法用左移操作,除法用右移操作,利用bne不等于时就跳转来实现循环。
五.实验代码.datak: .space 4y: .space 4z: .space 200 #开辟内存空间.textmain:la $s0,kla $t0,yla $s4,zli $t0,0x38li $s0,0x0 #分别赋初值loop:slti $s2,$s0,50bne $s2,$0,content #循环条件判断j done #不满足,则跳转到done content:srl $s3,$s0,2 #除以4addi $s3,$s3,210 #加上210sll $s3,$s3,4sub $s3,$t0,$s3 #t0是Ysll $s5,$s0,2add $a3,$s4,$s5 #a3是z[k]sw $s3, 0($a3)addi $s0,$s0,1j loopdone:li $v0, 10syscall #结束六.实验结果七.实验小结通过本次从c语言转换到汇编语言的实验,我第三次实践论了汇编语言进行简单的操作,学会了(1)汇编语言如何开辟地址空间,(2)如何用汇编语言实现数组的创建和存储,(3)初步尝试了for条件语句的汇编语言的实现步骤教训:由于忘记了$a0和$v0等的特殊性,误用了这些寄存器,导致实验结果迟迟不正确,后来发现并改正后,实现正确结果。
微机原理第一次实验讲解
微机原理第一次实验电气310 张端鸿 2130401287注:为了适配win8.1 64bit系统,采用masm for Windows软件,初始化过程有些许不同。
实验一顺序程序的设计一、实验目的1.学习8086/8088指令系统中一些基本指令的用法和程序设计的的基本方法2熟悉在PC机上建立、汇编、连接、调试与运行8086/8088汇编语言程序的全过程;二、实验内容设a、b、c、d四个数分别以单字节压缩BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d)并将结果放在Y1单元,将结果在屏幕上显示出来。
在DEBUG中,不断改变a,b,c,d的内容并查看结果。
这里给出几组数据:1.a=09,b=06,c=04,d=072.a=38,b=41,c=29,d=343.a=70,b=23,c=42,d=414.a=63,b=73,c=62,d=50三、实验程序DATA SEGMENTNUM DB 13H,27H,11H,12HY1 DB?DATA ENDSSTACK SEGMENTDB 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AL,NUMADD AL,NUM+1 ;把a+b的结果保存在AL中DAA;BCD码调整MOV CL,AL ;把a+b的结果复制到CL中MOV AL,NUM+2ADD AL,NUM+3 ;把c+d的结果保存在AL中DAA;BCD码调整SUB CL,AL ;把(a+b)-(c+d)的结果保存在CL中MOV AL,CLDAS;减法BCD码调整MOV Y1,AL ;结果保存于YI中MOV BL,AL ;保存AL中的内容MOV CL,4ROR AL,CLAND AL,0FH ;取AL中的高四位ADD AL,30H ;转换为ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示高位ASCII码MOV AL,BL ;恢复AL的内容AND AL,0FH ;取低四位ADD AL,30H ;转换为ASCII码MOV DL,ALMOV AH,02HINT 21H ;显示高位ASCII码MOV AH,4CHINT 21HCODE ENDSEND START调试过程:1.反汇编2.查看初始时寄存器与内存中的内容3.a=09,b=06,0c=04,d=07时,在偏移地址为0011H(DAA)处设置断点,AL保存的即是经过未经DAA操作后的a+b的结果0FH4.在偏移地址为0011H(DAA)处设置断点,AL保存的即是经过未经DAA操作后的c+d 的结果0BH5.在偏移地址为0020H(DAS)处设置断点,AL保存的即是经过未经DAS操作后的(a+b)-(c+d)的结果04H6.在偏移地址为0021H(DAS)处设置断点,AL保存的即是经过经DAS操作后的(a+b)-(c+d)的结果04H7. 在40H设置断点,得到输出结果1修改abcd,a=38,b=41,c=29,d=34结果为16同理,当a=70,b=23,c=42,d=41结果为10a=63,b=73,c=62,d=50结果为24实验一思考题1.可改变abcd的值的DEBUG命令:E可查看abcd的值的DEBUG命令:D2.断点设置在每一次运算后,即c+d、a+b、与(a+b)-(c+d)后以便验证结果是否与期望相同;还将断点设置在每一位的显示后以观察是否正常显示。
微机原理实验报告
微机原理实验报告实验目的,通过本次实验,掌握微机原理的基本知识,了解微机系统的组成和工作原理,掌握微机系统的组装和调试方法。
实验一,微机系统组成及工作原理。
1.1 微机系统的组成。
微机系统由中央处理器(CPU)、内存、输入设备、输出设备和外部设备等组成。
其中,CPU是微机系统的核心部件,负责控制整个系统的运行。
1.2 微机系统的工作原理。
微机系统的工作原理是通过CPU对内存中的指令进行解释和执行,从而实现各种功能。
CPU通过总线与内存、输入输出设备进行数据传输和控制信号的交换,实现对整个系统的控制和管理。
实验二,微机系统的组装和调试。
2.1 微机系统的组装。
在组装微机系统时,首先要选择合适的主板、CPU、内存、硬盘等配件,然后按照正确的安装顺序和方法进行组装。
组装完成后,还需连接电源、显示器、键盘、鼠标等外部设备。
2.2 微机系统的调试。
组装完成后,需要对微机系统进行调试,检查各个部件是否连接正确,是否能够正常工作。
通过BIOS设置和操作系统的安装,完成对微机系统的调试和配置。
实验三,微机系统的应用。
3.1 微机系统的应用领域。
微机系统广泛应用于各个领域,如办公、教育、科研、娱乐等。
在办公领域,微机系统可以用于文字处理、表格制作、图像处理等;在教育领域,微机系统可以用于多媒体教学、网络教学等。
3.2 微机系统的发展趋势。
随着科技的不断发展,微机系统也在不断更新换代,性能不断提升,体积不断缩小,功耗不断降低。
未来,微机系统将更加智能化、便携化,成为人们生活、工作不可或缺的一部分。
结论,通过本次实验,我对微机原理有了更深入的了解,掌握了微机系统的组成和工作原理,了解了微机系统的组装和调试方法,对微机系统的应用和发展趋势也有了一定的认识。
这对我今后的学习和工作将有很大的帮助。
微机原理-实验一-汇编语言-冒泡排序
微机原理实验报告班级:XXXXX姓名:XXXX学号:20XXXXXXXXX大学信息科学与技术学院信息工程系实验一汇编语言程序设计-(具体题目)一、实验目的(根据实际情况修改):1、熟悉MASM编译环境,了解程序的汇编方法;2、熟悉常用汇编指令,学习汇编程序设计方法;3、学习汇编语言的调试过程,通过调试过程认识CPU执行程序的方式;4、了解冒泡法原理,学习多重循环的编程方法。
二、实验内容:编写程序,用冒泡法实现将数据段内9,8,7,6,5,4,3,2,1按照由小到大的顺序重新排列。
三、程序流程图和程序代码1、流程图2、代码与注释(代码不能和指导书完全一样,写出注释,写出寄存器尤其是DS的值)data segmentbuf1 db 8,7,6,5,4,3,2,1data endscode segmentassume cs:code,ds:datastart: mov ax,data //传送数据段datamov ds,axmov dx,7 //dx放外循环7次L3: mov cx,dx //cx放内循环7次lea si,buf1 //将db里的数据传送到siL2: mov al,[si]cmp al,[si+1] //比较[si]与[si+1]jb L1 //[si]<[si+1],跳转到L1xchg al,[si+1] //[si]>[si+1],两两交换mov [si],alL1: inc si //si减1loop L2 //循环L2dec dx //外循环减1,没减到0则跳转到L3 jnz L3 //入内循环,计数初值mov ah,4chint 21hcode endsend start四、调试过程及遇到的问题1、程序执行截图2、调试用到的命令-U命令:查看数据段地址;-d命令:查看运行前后存储器内容;-g命令:运行程序;-t命令:查看运行前后寄存器和存储器内容。
3、遇到的问题及解决办法问题:运行程序后,数据1在存储器地址末尾没变。
微机原理实验一8086清零实验
Before After
清零 写入值55h
目标地址增1
已循环256次?
yes
结束
可能用到的指令
MOV 值传送 INC 增加1 LOOP 循环 no LEA 地址传送命令
谢谢观赏
定义在数据段中定义一片长为256字节的空 间,并将此段空间写入数据
提示:可以定义初值为00h,也可定义初值 为ffh,写入数据与初值不同即可
实验环境介绍
• 实验箱的配套软件
• 如果不小心错过了,可以在这里找到
菜单栏、工具栏 asm格式
保存
新建程序文档
知识补充
• DOS基础知识 符合DOS标准的文件(夹)名
• 选择文件夹时要双击文件夹,选中后文件 夹呈打开的样子 否则会无法正常选中相应文件夹
编在译这、里重编新写编程译序 在这里会出现错误提示信息
知识补充
• 8086汇编程序基础格式
stack segment stack ……
stack ends 堆栈段
data segment ‘data’ ……
data ends 数据段
8.3格式文件名
文件夹名长度小于8个字符
符合标准的字符为数字、字母等ASCII字符 且不能为 / \ * : < > | 引号
注意事项
• 不要选择某个盘的根目录 若选择某个盘的根目录,则本次所建立 的所有文件会自动跳到C:\XingYan\下
• 不要使用不符合标准的文件名、文件夹名 否则会无法编译并报错
微机原理实验一8086 清零实验
实验前言
约法三章
• 带课本、带实验指导书! • 按时签到、按时交实验报告! • 请自重,不要在课堂上玩游戏!
关于做程序
第1次上机实验
作业调试[选做] 作业调试[选做]
作业:编写完整的源程序,实现下面功能: 作业:编写完整的源程序,实现下面功能: 完整的源程序 不用乘法指令实现A× 不用乘法指令实现 ×25→RESULT 已知A为字节类型 赋初值为30; 为字节类型, (已知 为字节类型,赋初值为 ;RESULT 为字类型) 为字类型)
绪论
微机实验内容安排
第1次:汇编程序设计及调试 接口检测, 获取PCI 设备配置资源 基本输入/ 设备配置资源, 第 2 次 : 接口检测 , 获取 PCI设备配置资源, 基本输入 / 输出接口设计,译码器设计。 输出接口设计,译码器设计。 第3次:矩阵式键盘,七段数码显示器接口设计。★键 矩阵式键盘,七段数码显示器接口设计。 显示器接口设计。 盘/显示器接口设计。 ,A/D转换接口设计 延时方式,查询方式) 转换接口设计( 第4次:D/A ,A/D转换接口设计(延时方式,查询方式)。 中断控制器8259及中断服务程序设计 及中断服务程序设计(A/D中 第 5次 : 中断控制器 8259及中断服务程序设计(A/D中 断 )。 8255并行接口设计 方式0 方式1 并行接口设计( 第6次: 8255并行接口设计(方式0,方式1)。 综合设计。 第7次:综合设计。 硬件考试。 第8次:硬件考试。
td debug
程序内存映像图
根据: 根据: DS/ES最初都为 最初都为PSP的段地址 的 最初都为 察看EXE程序运行时相应寄存器的值 察看 程序运行时相应寄存器的值 可以画出EXE程序的内存映像图: 可以画出 程序的内存映像图: 程序的内存映像图 PSP固定大小为 固定大小为256B; ; 固定大小为 堆栈区、数据区、程序区的大小依赖于程序具体设计。 堆栈区、数据区、程序区的大小依赖于程序具体设计。 大小依赖于程序具体设计
微机原理实验报告
微机原理实验报告
一、实验目的
本次实验的主要目的是了解微机原理、学习微机的基础知识、技能和操作方法,还有熟悉微机实验室的使用方法。
二、实验过程
在实验室中,我们首先进行了掌握微处理器的基本指令集和编程技巧的实验。
通过对微处理器的学习,我们了解到了微处理器的组成结构和工作原理,同时也了解了微处理器的基础指令集,包括数据的传送、算术、逻辑、分支、循环指令等等。
接着我们进行了CPU总线实验。
通过对CPU总线的学习,我们了解了CPU读写内部和外部存储器的方法和原理。
同时,我们学习了编写程序来控制CPU读写存储器等。
最后,我们进行了8255并行接口控制实验。
通过学习并实践8255并行接口控制实验,我们了解了接口及其编程。
三、实验结果
在实验中,我们成功地掌握了微处理器的基本指令集和编程技巧,了解了微处理器的组成结构和工作原理,同时掌握了CPU总
线实验和8255并行接口控制实验。
在实验中不仅增长了专业知识,而且也培养了我们的实验能力,并进一步增强了我们的实践能力。
四、实验心得
通过这次实验,我们意识到,要想成为一名优秀的计算机专业
人才,必须首先打牢微机原理的基础,通过大量的实践和实验,
来应用理论知识,深入了解计算机底层的数据处理方式以及处理
器和存储器的工作原理。
只有这样才能够在日后工作中运用自如,并且在以后的学习和研究中更具备竞争力。
在以后的学习中,我将持续学习和实践,不断探索和发现,提
升自身的能力,为未来的发展做好充分的准备。
微机原理第一次实验
C中调用汇编函数
3.在C中调用汇编的函数 在C中调用汇编文件中的函数,要做的主要工作有两 个:
一:是在C中声明函数原型,并加extern关键字; 二:是在汇编中用EXPORT导出函数名,并用该函数名作为汇 编代码段的标识,最后用mov pc,lr返回。然后,就可以 在C中使用该函数了。
EXPORT伪指令用于在程序中声明一个全局的标号, 该标号可在其他的文件中引用。
10
C中调用汇编函数
/*C file*/ extern void fun (int *p); 声明函数原型 int main() { int i; fun(&i); printf("%d\n", i); return 0; } /*ASMFILE*/ AREA asmfile, CODE, READONLY EXPORT fun 导出函数名 fun MOV R1,#1 STR R1,[R0] MOV PC,LR 返回语句 END
11
RVDS简单使用介绍
12
创建新工程
点击CodeWarrior for RVDS进入CodeWarrior IDE主窗口,选择File->New进入新建工程/文件 选项卡,在选项卡中选择ARM Executable Image ,并在Project name中输入新建工程的 名字,在Location中选择工程文件的存放地址, 如图35所示,按下确定后,RVDS将生成用户 指定名称的工程。
R0暂存累加和
RO=R0+R1 YES
结果溢出?
SUM_END YES
NO R1>=N NO R1=R1+1
R1自增1
34
实验二
3、理解C和汇编,并用汇编程序实现字符串拷贝, 并在C程序中调用该汇编程序。 在汇编文件testfile1.s中添加两行汇编代码,分别实 现: 拷贝源字符串的一个字节到R2中 将拷贝的字节复制到目标空间 注意事项: 1.C文件和汇编文件都必须加到工程中去,否则编 译会报错。 2.C文件和汇编文件要拷贝到工程目录下。
微机原理第1、2次实验
微机原理第1、2次实验
3.1 IO口读写实验(245、373)
1、实验内容
利用板上集成电路上的资源,扩展一片74HC245,用来读入开关状态;扩展一片74HC373,用来作来输出口,控制8 个LED 灯。
2、实验目的
(1)了解CPU 常用的端口连接总线的方法。
(2)掌握74HC245、74HC373 进行数据读入与输出。
3、实验电路
4、实验流程图
5、实验说明
一般情况下,CPU 的总线会挂有很多器件,如何使这些器件不造成冲突,这就要使用一些总线隔离器件,例如74HC245、74HC373。
74HC245 是三态总线收发器,本实验用它做输入,片选地址为0D0000H-0DFFFFH。
就是用于读入开关值。
74HC373 是数据锁存芯片,通过它作数据的锁住输出。
6、发现的问题
(1)实验指导书中译码器上的连线与代码中的地址不对应,在CPU的输出状态时译码器的Y0为低电平,其他位为高电平,应将原先连接在Y9的线改接到Y0上。
如图:
如果不想改电路,把代码中的OUT373 EQU 8000H改为OUT373 EQU 0E000H,也能使CPU在输出状态时Y9呈现低电平。
如图:
(2)元件与元件直接必须用导线相连,两个元件挨在一起是不算作导通的
否则会出现比如下面这种即使两端有电势差LED灯也不亮的情况
如图,只需将右边改为下图这样即可
添加三极管的目的是为了在8个开关都闭合(向74HC245输入低电平)的情况下,使七段数码管的第一根管脚断路,七段数码管不发光,避免了在8个开关都
闭合时显示数字8。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
一、实验目的
1.掌握ARM汇编指令 2.学习掌握C与汇编混合编程基础 3.熟练使用ARM调试工具RVDS进行调试操作
2
二、实验内容
1.熟悉ARM汇编 2.用ARM汇编实现1+2+...+N 3.C调用汇编实验(实现字符串拷贝功能) 4.汇编调用C实验
5.ARM汇编实现冒泡算法(选做)
15
图36
16
设置工程配置选项
选择Edit->Debug Settings或是按“ALT+F7”进入工程配置界面,如图37 所示
图37
17
设置工程配置选项
选择配置界面下的Language Setting->Realview Assembler对RVDS下的 汇编器进行配置,主要选择Architecture
37
冒泡排序算法流程图(参考) -----较小的数值排放到后面
38
七、思考题
1、add替换成adds ,sub替换成subs有什么影响。 2、mov替换成movne有什么影响? 3、STMIA换成STMIB ,STMIA换成STMDA有什么 区别。 4、思考用ARM汇编实现1+3+5+….+(2n+1)或者 2+4+6+…..+2n。 5、实验4中如果去除汇编代码中的“EXPORT strcopy”会有什么现象,为什么? 6、实验5中如果去除汇编代码中的“IMPORT …..” 会有什么现象,为什么?
R0暂存累加和
RO=R0+R1 YES
结果溢出?
SUM_END YES
NO R1>=N NO R1=R1+1
R1自增1
34
实验二
3、理解C和汇编,并用汇编程序实现字符串拷贝, 并在C程序中调用该汇编程序。 在汇编文件testfile1.s中添加两行汇编代码,分别实 现: 拷贝源字符串的一个字节到R2中 将拷贝的字节复制到目标空间 注意事项: 1.C文件和汇编文件都必须加到工程中去,否则编 译会报错。 2.C文件和汇编文件要拷贝到工程目录下。
图47
27
六、实验内容
1、运行RVDS,建立工程文件,单步运行演示示例程序 (/我的文档/实验一 汇编实验/熟悉ARM汇编目录下) 深刻理解每一条指令,观察寄存器,内存空间的变化。 此处提供六个示例实验: ARM数据处理指令寻址方式实验和ARM内存访问指令 寻址方式实验为必做实验。
ARM堆栈指针寄存器实验、ARM程序计数器实验、 ARM程序状态寄存器实验、ARM工作模式切换实验为 选做部分,剩余时间或课后完成此部分选做内容。
图44
24
图45
25
单步调试和运行
选择Debug->Step Into或是“F11”即可选择单步运行,可以对源程序进行 单步调试,选择Debug->Run或是“F5”选择直接运行该程序。
图46
26
观察寄存器和内存
选择View->Registers就可以调用ARM寄存器界面,可以在调试过程中随 时查看ARM寄存器的值;选择View->Memory可以调用内存界面,可以在调 试过程中随时查看内存中的值。
35
实验三
4、在汇编中调用C函数。 在汇编文件testfile2.s中相应位置添加汇编代码, 通过调用c函数g()实现1+2+3+glovb1,结果存在R8 中。
36
实验四(选做)
5、用ARM汇编实现冒泡算法。(选做) 这种方法的基本思想:是将待排序的元素看作是竖 着排列的“气泡”,较大的元素比较重,从而要往下 沉。在冒泡排序算法中我们要对这个“气泡”序列处 理若干遍。所谓一遍处理,就是自上向下检查一遍这 个序列,并时刻注意两个相邻的元素的顺序是否正确。 如果发现两个相邻元素的顺序不对,即“轻”的元素 在下面,就交换它们的位置。显然,处理一遍之后, “最重”的元素就沉到了最低位置;处理二遍之后, “次重”的元素就沉到了次低位置。在作第二遍处理 时,由于最低位置上的元素已是“最重”元素,所以 不必检查。一般地,第i遍处理时,不必检查第i低位置 以下的元素,因为经过前面i-1遍的处理,它们已正确 地排好序。
7
汇编中调用C函数
2.在汇编中调用C的函数 要在汇编中调用C文件中定义的函数,主要做两方面 的工作:
首先:需要在汇编中IMPORT 对应的C函数名。 其次:在调用该C函数之前还需要通过汇编语言传递该函数的 参数。
C和汇编之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。 简单的说就是如果函数有不多于四个参数,对应的用 ARM寄存器R0-R3来进行传递,多于4个时借助栈。函 数的返回值通过R0来返回。
图38
18
设置工程配置选项
选择配置界面下的Language Setting->Realview Compiler对RVDS下的C 编译器进行配置,主要选择Architecture
图39
19
设置工程配置选项
选择配置界面下的Linker->Realview Linker对RVDS下的连接器进行配置, 主要配置RO Base,设置生成的可执行程序的下载地址
13
图35
14
添加文件到工程
选择File->New进入新建工程/文件选项卡,点击选 项卡中的File选项,选择Text File,在File name 中填写要添加的文件名,在Location中选择源文 件的存放目录,并选择Add to Project 选项,接 着在下面的Project选项中选择上一步新建的工 程,并在Targets选项中选择Debug和Release ,具体如图36所示
3
三、预备知识
1. ARM汇编、 C语言
2. RVDS工具
4
四.实验设备与工具
硬件:PC 机Pentium100 以上 软件:Windows操作系统,RVDS软件5五、实验原理
ARM中的C和汇编混合编程:
1.在汇编中使用C定义的全局变量 2.在汇编中调用C的函数 3.在C中调用汇编的函数
6
汇编语言中使用C定义的全局变量
图40
20
设置工程配置选项
选择配置界面下的Debugger->Realview Debugger对RVDS下的调试器进行配置,主要配置 是选择RVD还是ADS环境下的调试器AXD进行调试
图41
21
编译并连接
选择Project->Make或是快捷键“F7”对工程中的源文件进行编译并连接, 生成带调试信息的可执行文件.axf文件
30
内存读写实例
写内存,STMIA指令执行前
写内存,STMIA指令把 R1-R3写到R0开始的地址
31
寄存器读写实例
双击该位置, 输入地址,查 看对应地址存 储值
寄存器赋值前
寄存器赋值后
32
内存读写实例
LDMIA指令执行前
把R0(0x210000)开始的6个字读到R1-R5,R7
33
实验一
2、用ARM汇编实现1+2+….n的运算。 在sum.s文件中,用汇编实现算法核心部分,需添加 的代码参考流程图如下:
39
8
/*asmfile */ AREA asmfile, CODE, READONLY IMPORT cFun
ENTRY MOV R0, #22 MOV R1, #11 BL cFun MOV R4,R0 (函数返回值保存在R0中) END
/*C file, called by asmfile */ int cFun(int a,int b) { return a-b; }
10
C中调用汇编函数
/*C file*/ extern void fun (int *p); 声明函数原型 int main() { int i; fun(&i); printf("%d\n", i); return 0; } /*ASMFILE*/ AREA asmfile, CODE, READONLY EXPORT fun 导出函数名 fun MOV R1,#1 STR R1,[R0] MOV PC,LR 返回语句 END
28
寄存器读写实例
R0
LDR指令执行前R0存放00000000
LDR指令执行后R0存放001000000
29
大端模式与小端模式
小端模式:
CPU对操作数的存放 采用低地址存放 低字节,高地址存放高字节。
大端模式
CPU对操作数的存放 采用低地址存放 高字节,高地址存放低字节。 本实验采用小端模式。
11
RVDS简单使用介绍
12
创建新工程
点击CodeWarrior for RVDS进入CodeWarrior IDE主窗口,选择File->New进入新建工程/文件 选项卡,在选项卡中选择ARM Executable Image ,并在Project name中输入新建工程的 名字,在Location中选择工程文件的存放地址, 如图35所示,按下确定后,RVDS将生成用户 指定名称的工程。
9
C中调用汇编函数
3.在C中调用汇编的函数 在C中调用汇编文件中的函数,要做的主要工作有两 个:
一:是在C中声明函数原型,并加extern关键字; 二:是在汇编中用EXPORT导出函数名,并用该函数名作为汇 编代码段的标识,最后用mov pc,lr返回。然后,就可以 在C中使用该函数了。
EXPORT伪指令用于在程序中声明一个全局的标号, 该标号可在其他的文件中引用。
图42
22
调试
选择Project->Debug或是快捷键“F5”启动RVD调试器,并调 用生成带调试信息的可执行文件.axf文件