实验01 汇编指令实验——作业1
- 格式:doc
- 大小:1.13 MB
- 文档页数:15
实验一查看cpu和内存,用机器指令和汇编指令编程姓名:高久凤班级:计算机一班学号:2010131122
一、实验步骤如下:
1、用E命令将指令写入内存
(1)用R命令查看、改变CPU寄存器的内容,使CS:IP指向DOS中的一段安全的空间(0:200——0:2ff)
(2)用E命令将机器码写入内存
(3)用T命令执行内存中的机器码,用R命令观察CPU中相关寄存器的内容变化如下:
2、用A命令将指令写入内存
(1)用R命令查看、改变CPU寄存器的内容,使CS:IP指向DOS中的一段安全的空间(0:200——0:2ff)
(2)用A命令将机器码写入内存
(3)用T命令执行内存中的机器码,用R命令观察CPU中相关寄存器的内容变化如下:
二、实验步骤如下:
1、用R命令修改CPU寄存器中内容使CS:IP指向2000:0;用a命令将计算2的
8次方的指令写入2000:0开始的内存单元中。
2、用T命令执行输入到2000:0内存中的指令,观察寄存器ax中内容的变化
三、查看内存中的内容(PC机主板上的ROM中的生产日期并试图改变它):
结论和分析:ROM寄存器为只读寄存器只能读不能写所以修改生产日期并未成功
四、向内存从b8100h开始的单元中填写数据
1、地址不变只改变写入内存中的数据:
2、下面写入内存中的数据不变,改变地址:
结论与分析:显示出一些符号,改变数据则符号也变,改变地址则显示的地址也跟着变。
实验一 MASM for Windows 环境下的汇编语言编程环境使用一、实验目的(1)掌握MASM for Windows 环境下的汇编语言编程环境使用;(2) 掌握汇编语言程序设计的基本流程;(3) 掌握8086/8088基本指令的使用方法和功能;(4) 熟练掌握DEBUG的使用方法。
二、实验基本原理运行“调试”命令,在提示符“-”下才能输入命令,在按“回车”后该命令才开始执行;命令是单个字母,命令和参数的大小写可混合输入:(1) DEBUG 使用的数以十六进制来表示;(2) DEBUG 中的命令不区分大小写。
1、R命令格式1:R功能1:显示所有寄存器中的内容。
格式2:R 寄存器名功能2:显示修改寄存器的内容。
2、D命令用 DEBUG 的 D 命令查看内存的内容;功能: 显示内存单元内容。
格式一:D起始位置DEBUG从起始位置显示128个字节的内容。
输入命令D 0C0B:100格式二:D 起始位置结束位置DEBUG 从起始位置一直显示到结束位置格式三: D 起始位置 L 长度DEBUG 从起始位置开始显示指定长度的内容3、E命令用 DEBUG 的 E 命令改写内存的内容。
格式一:E 起始地址字节值表功能:用字节值表中的值替换从“起始地址”开始的内存单元内容。
格式二:E 起始地址功能:采用提问的方式一个一个地改写内存单元的内容4、A命令功能:输入汇编指令。
格式:A 起始地址首先用A命令以汇编语言的形式输入程序,以D命令显示内存,输入的是汇编指令,DEBUG 把它们翻译成机器指令,以机器码写入内存。
5、U命令功能:反汇编,显示机器码所对应的汇编指令。
格式1:U[地址]功能1:从指定地址开始反汇编格式2:U 地址范围功能2:对指定的地址范围进行反汇编。
6、T命令格式:T[=地址]功能:从指定地址起执行一条语句后停下来,显示所有寄存器的内容及标志位的值与下一条将要执行的指令。
格式:T[=地址][x]功能:从指定的地址开始跟踪x 条指令。
实验一查看CPU和内存,用机器指令和汇编指令编程一.实验目的:掌握DEBUG 的基本命令及其功能二.实验内容:1. 预备知识:Debug的使用(1) 什么是Debug?Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。
使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
(2) 我们用到的Debug功能●用Debug的R命令查看、改变CPU寄存器的内容;●用Debug的D命令查看内存中的内容;●用Debug的E命令改写内存中的内容;●用Debug的U命令将内存中的机器指令翻译成汇编指令;●用Debug的T命令执行一条机器指令;●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。
(3) 进入DebugDebug是在DOS方式下使用的程序。
我们在进入Debug前,应先进入到DOS方式。
用以下方式可以进入DOS:①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。
②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。
(4) 用R命令查看、改变CPU寄存器的内容1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名若要修改一个寄存器中的值,比如AX中的值,可用R命令后加寄存器名来进行,输入“r ax”后按Enter键,将出现“:”作为输入提示,在后面输入要写入的数据后按Enter 键,即完成了对AX中内容的修改。
若想看一下修改的结果,可再用R命令查看(5) 用Debug的D命令查看内存中的内容1)格式:-d 段地址:偏移地址,Debug将列出从指定内存单元开始的128个内存单元的内容。
使用D命令,Debug将输出3部分内容,如图2.34所示。
中间是部分从指定地址开始的128个内存单元的内容,用十六进制的格式输出,每行的输出从16的整数倍的地址开始,最多输出16个单元的内容。
大连理工大学软件学院《嵌入式系统原理与设计》实验报告(每组一份,打印)姓名:刘华一学号:201492405 班级:软1411姓名:李军学号:201493076 班级:软日1401实验时间:16年9月30日实验室:嵌入式实验室指导教师:邱铁成绩:实验一:ARM汇编指令一、实验目的和要求1. 熟悉ARM Developer Suite v1.2集成开发环境2.ARM汇编语言指令功能训练二、实验原理和内容RAM是32位体系结构,每个内存单元是32位的,对于64位的数需要两个字才能存储。
题目:熟悉ARM Developer Suite v1.2集成开发环境逐条试验ARM汇编语言指令功能,并观寄存器\存储器的变化三、主要仪器设备及软件编程环境硬件:PC机软件:ARM Developer Suite v1.2集成开发环境,Windows 98/2000/NT/XP四、实验步骤与编程1.打开软件ARM Developer Suite v1.2,选择file中的新建,在project中选择第一个,输入project name2.在同一个界面选择file,建立一个.s文件,打开此文件后就可以在里面进行编写汇编指令3.输入示例代码后,在原有的project对话框中鼠标右键连接到你所建的工程文件下的.s文件,再点击编译。
4.在新弹出的界面中,打开左边的寄存器列表,再点击单步调试,就可以看到每条指令执行时相应寄存器的变化以及相应要执行的下一条指令。
五、实验数据与结果分析数据传送类指令:算数运算类指令:逻辑运算类指令:比较指令:乘法指令:六、讨论、建议由于对于软件尚未熟悉,且windows系统兼容性原因,在开始配置阶段浪费了较多时间,由于时间有限,只是大体练习了一遍,在批量读取及存储方面仍存在较大问题,需要回去后勤加练习。
汇编指令实验报告汇编指令实验报告汇编指令是计算机中非常重要的一部分,它们直接操作着计算机的硬件,实现各种功能。
在本次实验中,我们学习了汇编指令的基本知识,并通过实践掌握了它们的使用方法。
本文将对我们的实验过程进行详细的总结和分析。
实验一:汇编指令的基本概念和使用方法在实验的第一部分,我们首先了解了汇编指令的基本概念和使用方法。
汇编指令是一种低级语言,它直接操作计算机的寄存器和内存单元。
我们通过学习不同的指令集和指令格式,了解了如何使用汇编指令来实现各种功能。
在实验中,我们使用了一款常见的汇编语言工具,例如MASM(Microsoft Macro Assembler)和NASM(Netwide Assembler)。
通过这些工具,我们可以将汇编代码转换成可执行的机器码,并在计算机上运行。
实验二:汇编指令的应用实例在实验的第二部分,我们通过一些实际的应用实例,进一步加深了对汇编指令的理解和掌握。
我们学习了如何使用汇编指令来实现字符串处理、数学运算、条件判断等常见的功能。
例如,我们学习了如何使用汇编指令来实现字符串的反转功能。
通过对字符串的每个字符进行逆序排列,我们可以实现字符串的反转。
这个实例不仅帮助我们理解了汇编指令的基本操作,还锻炼了我们的逻辑思维能力。
实验三:汇编指令的性能优化在实验的第三部分,我们探讨了如何通过优化汇编指令来提升程序的性能。
通过对程序的瓶颈进行分析,我们可以找到一些可以改进的地方,并通过修改和优化汇编指令来提升程序的执行效率。
例如,我们学习了如何通过使用SIMD(Single Instruction Multiple Data)指令集来实现并行计算。
通过同时对多个数据进行操作,我们可以大大提高程序的运行速度。
这个实例不仅帮助我们理解了汇编指令的高级应用,还培养了我们的优化思维能力。
实验四:汇编指令的错误处理和调试技巧在实验的第四部分,我们学习了如何处理汇编指令中的错误,并掌握了一些常用的调试技巧。
汇编作业实验⼀顺序与分⽀程序设计⼀、实验⽬的1)掌握顺序程序设计⽅法。
2)掌握分⽀程序的结构及分⽀程序的设计,调试⽅法。
2) 学习数据传送及算术和逻辑运算指令的⽤法。
3) 熟悉在PC机上建⽴、汇编、连接、调试和运⾏汇编语⾔程序的过程。
⼆、实验内容1) 有⼀字变量BUF1是以原码表⽰的有符号数,要求将其转换为反码和补码,分别存⼊BUF2和BUF3单元,并在屏幕上显⽰出来。
2)有两个两字节⽆符号数分别放在存储单元A、B起始的缓冲器中,求其和,结果放在A起始的缓冲区并在屏幕上显⽰。
相加若有进位不存⼊存储单元。
3) 在BUF和BUF+1、BUF+2单元分别放有⼀个⽆符号字节型数,编程序将其中最⼤数存⼊MAX单元,并在屏幕上显⽰。
4) 要求同上,只是⽐较的数为有符号数。
5) 将1000H 单元开始的10个字节数,采⽤奇偶校验,将奇数在前偶数在后仍存回原数据区。
本实验要求在DEBUG 调试状态下进⾏,包括汇编程序、运⾏程序、检查结果。
6) 从键盘上接收⼀位⼗进制数X ,计算Y 值,并以⼗六进制形式显⽰出来,Y 按下列公式计算。
===-=+=)6(2/)5()4(2)3(2222X X X X X X X X X X Y 7) 从键盘上接收两个⼀位⼗六进制数X 和Y ,然后再输⼊⼀个A-D 之间的⼀个字符,按下列要求计算。
a) 当输⼊字符为A ,则计算X+Y ,并以⼗六进制形式显⽰出来b) 当输⼊字符为B ,则计算|X-Y|,并以⼗六进制形式显⽰出来c) 当输⼊字符为C ,则计算X*Y ,并以⼗六进制形式显⽰出来d) 当输⼊字符为D ,则计算X/Y ,并以⼗六进制形式显⽰出来三、实验步骤1) 输⼊源程序。
2) 汇编、连接程序,⽣成.EXE⽂件,执⾏⽂件,检查结果。
源程序⼀:DATA SEGMENTBUF1 DW 9348HBUF2 DW 4 DUP(0),0AH,0DH,’$’BUF3 DW 4 DUP(0),’$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATAMOV DS,AXMOV AX,BUF1ADD AX,0JS NEXTMOV BUF2,AXMOV BUF3,AXJMP EEENEXT:AND AX,7FFFHNOT AXMOV BUF2,AXINC AXMOV BUF3,AX EEE: MOV CX,0004H MOV DI,OFFSET BUF2MOV DX,[DI]ADD DI,03BBB:MOV AX,DXAND AX,000FHCMP AL,0AHJB QQQADD AL,07HQQQ:ADD AL,30HMOV [DI],ALDEC DIPUSH CXMOV CL,04HSHR DX,CLPOP CXLOOP BBBMOV CX,0004HMOV SI, OFFSET BUF3CCC: MOV AX,DXAND AX,000FHCMP AL,0AHJB DDDADD AL,07HDDD:ADD AL,30HMOV [SI],ALDEC SIPUSH CXMOV CL,04HSHR DX, CLPOP CXLOOP CCCMOV DX,OFFSET BUF2MOV AH,09HINT 21HMOV DX,OFFSET BUF3MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND BEGIN运⾏结果为:ECB7 ECB8源程序⼆:DATA SEGMENTA DB 34H,18H,2 DUP(0),’$’B DB 56H,83HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AXADD AL,BLMOV AH,A+1MOV BH, B+1ADC AH, BHMOV A, ALMOV A+1, AHMOV CX, 0004HMOV DI, OFFSET AMOV DX, [ DI]ADD DI,03NEXT: MOV AX, DXAND AX,000FHCMP AL,0AHJB QQQADD AL, 07HQQQ: ADD AL, 30HMOV [DI], ALDEC DIPUSH CXMOV CL, 04SHR DX, CLPOP CXLOOP NEXTMOV DX, OFFSET A MOV AH, 09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START运⾏结果为:9B8A源程序三:STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDATA SEGMENTBUF DB 70H,35H,1FHMAX DB 2 DUP(?),’$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK BEGIN: MOV AX, DATA MOV DS, AXMOV AL, BUFCMP AL, BUF+1JNB LP1MOV AL, BUF+1LP1: CMP AL, BUF+2JAE LP2MOV AL, BUF+2LP2: MOV CX, 02HMOV DI, OFFSET MAXMOV DL, ALINC DILP3: AND AL, 0FHCMP AL, 0AHJB LP4ADD AL, 07HLP4: ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL, 04SHR DL, CLPOP CXMOV AL, DLLOOP LP3MOV DX, OFFSET MAXMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN运⾏结果为:70源程序四:STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDATA SEGMENTBUF DB 98H,75H,32HMAX DB 2 DUP(?),’$’DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK BEGIN:MOV AX, DATA MOV DS, AXMOV AL, BUFCMP AL, BUF+1JG LP1XCHG AL, BUF+1LP1: CMP AL, BUF+2JG LP2XCHG AL, BUF+2LP2: MOV MAX, ALMOV CX, 02HMOV DI, OFFSET MAXMOV DL, [DI]INC DILP3: MOV AL, DLAND AL, 0FHCMP AL, 0AHJB LP4ADD AL, 07HLP4: ADD AL, 30HMOV [DI],ALDEC DIPUSH CXMOV CL, 04SHR DX, CLPOP CXLOOP LP3MOV DX, OFFSET MAXMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND BEGIN运⾏结果为:75源程序五:ORG 2000H2000 BE0010 MOV SI, 1000 2003 BF0910 MOV DI, 10092006 8A14 MOV DL, [SI]2008 80C200 ADD DL, 00200B 7B0B JPO 2018200D 8615 XCHG DL, [DI]200F 8814 MOV [SI], DL2011 4F DEC DI2012 39FE CMP SI, DI2014 7407 JE 201D2016 EBF0 JMP 20082018 46 INC SI2019 8A14 MOV DL, [SI]201B EBF5 JMP 2012201D F4 HLT四、实验报告的要求1) 列出源程序,说明程序的基本结构,包括程序中各部分的功能。
成绩单片机原理及应用实验报告实验名称汇编语言指令实验班级姓名学号(后两位)指导教师实验日期实验一汇编语言指令一、实验目的1、掌握WAVE软件的使用,初步掌握程序的调试方法,包括跟踪、单步运行和断点设置等。
2、熟悉MCS-51单片机的指令系统。
二、实验内容完成以下内容:1、假定外部数据存储器2000H单元的内容为80H,执行下列指令后,累加器A中的内容是( 80H ):MOV DPTR,#2000HMOVX A,@DPTR注意:完成本实验,需完成题目的“假定”条件,将外部数据存储器2000H单元预先赋值,如何实现?2、执行下列指令后,(SP)的内容是(07H ),61H单元的内容是(25H ),62H单元的内容是( 80H).MOV SP,#60HMOV ACC,#25HMOV B,#80HPUSH ACCPUSH B3、执行下列指令后,A的内容是(85H),CY的内容是(1),AC的内容是(1),OV的内容是(1)。
MOV A,#85HMOV R0,#20HMOV 20H,#0AFHADD A,@R04、假定(A)=0FFH,执行下列指令后,A的内容是(86H ),R3的内容是(10H ),30H的内容是(OF1H或241),40H的内容是(01H )。
MOV R3,#0FHMOV 30H,#0F0HMOV R0,#40HMOV 40H,#00HINC AINC R3INC 30HINC @R05、假定(A)=059H,(R5)=73H,执行下列指令:ORG 0000HMOV A,#059HMOV R5,#73HADD A,R5DA AEND后,A的内容是(),CY的内容是()。
6、程序如下:MOV A, #0BFHMOV 20H, #85HSETB CADDC A, 20H结果为:(A)= 45H CY=1 AC=1 OV=1 P=17、程序如下:MOV A, #0BFHMOV 20H, #85HSETB CSUBB A, 20H结果为:(A)= CY= AC= OV= P=8、假定(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行下列指令:ORG 0000HMOV A,#0FHMOV R7,#19HMOV 30H,#00HMOV R1,#40HMOV 40H,#0FFHDEC ADEC R7DEC 30HDEC @R1END后,A的内容是(),R7的内容是(),30H的内容是(),40H的内容是()。
实验一汇编语言基本指令操作练习一、实验目的:1、掌握8086/8088基本指令的使用方法和功能。
2、初步了解汇编语言程序设计的基本结构和利用DEBUG调试程序的方法。
3、进一步熟悉汇编语言的上机过程。
二、上机实验指导:(一)利用DEBUG的A命令输入指令,做如下实验。
1、比较下面指令的区别:①MOVAX,2000H②MOVBX,[2000H]-D2*******;显示字存储单元DS:2000的内容3ADC:20005A58ZX-R;显示指令执行前AX,BX的内容AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=3ADCES=3ADCSS=3ADCCS=3ADCIP=0100NVUPEIPLNZNAPONC3ADC:0100858CFFF3TESTCX,[SI+F3FF]DS:F3FF=74C0-A;利用A命令输入汇编指令3ADC:0100MOVAX,20003ADC:0103MOVBX,[2000]3ADC:0107INT3;此中断为断点中断,使程序执行暂停3ADC:0108-G;不指定地址,从当前CS:IP处执行AX=2000BX=585ACX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=3ADCES=3ADCSS=3ADCCS=3ADCIP=0107NVUPEIPLNZNAPONC3ADC:0107CCINT3;指令执行后,AX=2000H,BX=585AH2、以寄存器BX作为地址指针,从BX所指的存储单元开始起,连续存放着两个无符号数(字操作数),编程求它们的和,并将结果存放在这两个数之后。
-RBX;显示BX寄存器中的内容(BX=0000h)BX0000:;回车-D0*******;显示DS:0000到DS:0005的内容(BX所指的三个字操作数),如BX不为0000H,自己修改范围。
汇编实验⼀实验报告汇编语⾔程序设计实验报告课程名称汇编语⾔程序设计班级姓名学号指导教师汇编语⾔程序设计实验⼀DEBUG 程序使⽤技巧1.寄存器和内存开始Debug 程序。
输⼊“Q ” 退出程序。
再次启动Debug。
输⼊“r ”来显⽰CPU的当前状态和寄存器中的当前内容。
输⼊“r AX ”和“1234”,AX 寄存器中的内容变为1234。
输⼊“r DS ”和“2000”,DS 寄存器中的内容变为2000。
输⼊“d DS:1000 ”来显⽰数据段中80H 字节数据,把数据抄在这⾥:输⼊“f DS:1000 1100 77 ”再显⽰⼀次这80H 字节。
判断这条指令的作⽤是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输⼊“d 2000:1000 ”来显⽰数据段中80H 字节数据。
观察与前⾯的数据有⽆不同。
输⼊“d 1900:0100 ”和“d 1ff0:0100 ”来显⽰两个存储段中的内容。
⽐较其中2000:0000 段中的数据。
相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以⽤不同的段起始地址和偏移量组合,把不容内容存⼊相同的内存段中。
答:相同段落中的数据相同, 程序员可以⽤不同的段起始地址和偏移量组合,把不容内容存⼊相同的内存段中。
2.输⼊机器码,使⽤单步和断点退出Debug,再重新启动Debug。
输⼊“r ”观察CPU 的状态,下⼀条指令是什么?答:下⼀条指令是ADD [BX+SI],AL使⽤两种⽅式输⼊⼀段程序,第⼀种⽅式:直接输⼊机器码。
输⼊“u ”来显⽰程序段中的指令序列。
然后输⼊“d CS:100 ” 来显⽰代码段中的数据。
观察显⽰内容。
“u CS:100 106 ”做反汇编,就是显⽰出汇编语句。
将这⼏句汇编语句记录下来:使⽤输⼊“r ”观察CPU 的状态,使⽤“t ”来跟踪程序,直⾄最后⼀条指令执⾏完毕。
注意,跟踪程序前,要让IP 寄存器中的值是100H。
汇编作业《汇编语⾔》上机实验实验⼀DEBUG的应⽤及指令系统练习⼀、类别:验证型实验⼆、实验⽬的:掌握常⽤DOS命令、DEBUG常⽤命令、基本指令和伪指令三、实验内容:1.复习DOS命令:CD, DIR, DEL, RENAME, COPY。
2.熟悉DEBUG命令:A, D, E, F, H, R, T, U, G, N, W, L及Q的使⽤⽅法。
3.利⽤DEBUG理解:8086/8088常⽤指令的功能。
4.利⽤DEBUG掌握:内存操作数及其⼏种寻址⽅式。
5.利⽤DEBUG进⾏简单的编程:求累加和程序和多字节加减法程序练习。
四、要求:1.熟悉DEBUG的操作界⾯;2.能够进⾏DEBUG环境下的基本操作;3.理解8086指令的基本指令和伪指令操作意义和格式;4.完成实验报告。
五、仪器设备:微型计算机六、注意事项:DEBUG操作时,防⽌破坏系统熟练运⽤DOS常⽤命令进⾏⽂件操作。
实验内容及步骤(⼀)DOS常⽤命令练习1、开机后,切换到命令提⽰符窗⼝下,出现提⽰符后键⼊命令DIR, 查看此⽬录下⽂件。
2、键⼊命令CD..进⼊上级⽬录,再查看此⽬录下所有⽂件。
3、将⼀个u盘插到u盘驱动器中,⽤DIR命令查看盘上⽂件。
4、⽤命令 COPY /doc/854bf052effdc8d376eeaeaad1f34693daef1084.html BUG 复制⼀个⽂件。
5、⽤命令 RENAME BUG BG 将BUG ⽂件改为BG。
6、⽤命令 DEL BG 将⽂件BG删除。
在操作时要注意提⽰信息,并按提⽰操作。
(⼆)DEBUG 命令使⽤1、键⼊ DEBUG 进⼊ DEBUG 控制状态,显⽰提⽰符 '- '。
2、⽤命令 F100 10F 'A' 将'A'的ASCII码填⼊内存。
3、⽤命令 D100 10F 观察内存中的⼗六进制码及屏幕右边的ASCII字符。
4、⽤命令 F110 11F 41 重复上⼆项实验,观察结果并⽐较。
实验一汇编指令实验一、实验目的1、初步掌握开发环境及ARM软件模拟器。
2、掌握简单的ARM、THUMB汇编指令的使用方法。
3、通过实验观察不同类型指令的工作原理。
二、实验步骤(一)、掌握ARM程序开发环境RealView MDK。
1、在“我的电脑”中新建一个目录,比如:“Exp01”。
(注意:目录尽量建立在自带的U盘上,以防实验工程被还原)2、打开Keil uVision软件,点击菜单中的“File->Project->New uVision Project”选项,启动新建工程向导程序,新建一个uVision工程。
工程文件保存在第1步创建的目录中,工程命名为:“Exp01”。
图1 新建工程向导启动图2 向导开始首先为新建工程命名为:Exp013、新建工程向导的第一步是:选择设备即处理器的选择(Select Device for Target ‘Target1’)。
在对话框的左下方有一个列表,列表中选择“NXP->LPC2138”。
注:LPC2138是实验箱采用的ARM芯片型号。
图3 向导第1步,设置处理器类型点击确定按钮后,向导程序会弹出一个“提示框”。
这个提示框是询问你是否要向工程中添加LPC2000系列处理器的启动代码。
这里可以点击“否”按钮。
注:启动文件在生成可下载的运行文件时是必须的,这里只是测试汇编程序所以不需要启动文件。
图4 添加启动代码4、工程建立完成后,uVision软件的主窗口左边就是工程空间浏览器窗口。
可以看到已经建立好的工程默认处理器名:“Target 1”,默认源文件组名:“Source Group 1”。
图5 新建工程后的主窗口右键列表中的“Target 1”,在弹出菜单中选择“Manage Components”选项。
可以打开“Components, Enviromentand Books”窗口。
这里可以对默认处理器和源文件组重新命名。
图6 “Components, Environment and Books”窗口5、在软件主窗口的工具条上点击“新建图标”,就会新建一个文本文件用于编辑源程序代码。
图7 新建文本文件6、新建的文本文件需要保存,点击菜单“File->Save AS”选项,弹出的对话框中为文件命名,并保存在工程目录中。
注意:文件的后缀名必须是“.s”,这是汇编源程序的文件类型。
图8 保存并命名文本文件7、新建并保存后的源程序文件还要导入到工程中。
右键点击列表的“Source Group ASM”选项,在弹出菜单中选择“Add Files to Group ‘Source Group ASM’”选项。
在弹出的文件浏览对话框中选择Asm01.s文件并点击“Add”按钮。
之后,程序文件被加入到源程序组中。
图9 添加程序文件8、源程序文件添加程序代码如下:;********************************************************************** ; NAME: Asm01.s*; Author: FeiXiang / TCU Computer and Information Project College*; Desc: ARM instruction examples*; History: 2015.9.15*;********************************************************************** ;/*------------------------------------------------------------------ */;/* constant define*/;/*---------------------------------------------- --------------*/x EQU 45 ; x=45y EQU 64 ; y=64/;/*---------- ----------------------------------------------*/;/* code */;/*-------------------------------------------------------- */AREA text,CODE,READONL Y ; code start */startmov r0, #x ; put x value into R0ldr sp, =0x40000000 ;put imme 0x40000000 value into SPstr r0, [sp] ; save the value of R0 into stacksmov r0, #y ; put y value into R0ldr r1, [sp] ; read the data from stack,and put it into R1add r0, r0, r1 ;R0=R0+R1str r0, [sp]stopb stop ; end the code ?cyclingend9、程序编辑完成后,在进行Build之前,我们需要对工程的选项进行设置。
通过鼠标右键点击工程列表中的“Target”可以打开“Options for Target ‘LPC2138’”窗口。
图10 工程选项设置10、在工程选项窗口,选择“Linker”选项卡,点击取消“Use Memory Layout from Target Dialog”前的对勾,同时删除“Scatter File”中的内容。
注意:因为没有下载程序,这里对内存地址空间没有明确的使用要求,所以才做出如下设置。
11、点击工具栏上的“Build”按钮进行编译。
编译后,可以点击“Debug”按钮启动调试对话界面,进行单步调试,并观测寄存器中的数值。
图11 编译和调试图12 Debug 对话界面(二)、对应汇编程序练习。
1、为了更好的理解汇编指令和程序技巧,本实验设计了几组代码。
同时,为了节省时间,后续实验可以不用建立新的工程,只需要将上面实验环节中建立的工程Exp01中的Asm01.s 文件做替换就可以了。
每个程序都要编译并仿真运行,观测寄存器和存储器空间的变化,理解汇编指令的作用。
1)间接寻址方式的验证。
下面的程序中,指令“ldr r2, [r11,#0x10]!”后加了“!”,表示通过“R11+0x10”间接取得地址后,还要将新的寄存器仿真机器指令区存储器仿真。
地址从0x40000000开始单步调试按钮地址值写回到R11寄存器。
;**********************************************************************; NAME: Asm02.s*; Author: FeiXiang / TCU Computer and Information Project College*; Desc: ARM instruction examples*; History: 2015.9.15*;**********************************************************************;/*------------------------------------------------------------------ */;/* constant define*/;/*---------------------------------------------- --------------*/x EQU 45 ; x=45y EQU 64 ; y=64/;/*---------- ----------------------------------------------*/;/* code */;/*-------------------------------------------------------- */AREA text,CODE,READONL Y ; code start */startmov r0, #x ; put x value into R0ldr sp, =0x40000010 ;put imme 0x40000010 value into SPldr r12,=0x40000000 ;put imme 0x40000000 value into R12ldr r11,=0x40000000 ;put imme 0x40000000 value into R11str r0, [r12,#0x10] ; save the value of R0 into NO.0x40000010 memory spaceldr r1, [sp] ; read the data from stack,and put it into R1ldr r2, [r11,#0x10]! ; load the value of the NO.0x40000010 memory space into R0 and write back the addressstopb stop ; end the code cyclingend2)运算类指令对CPSR的影响。
下面的程序中,指令“sub r2, r0, r1”对CPSR没有影响,指令“subs r2, r0, r1”会影响CPSR的Z标志位。
;**********************************************************************; NAME: Asm03.s*; Author: FeiXiang / TCU Computer and Information Project College*; Desc: ARM instruction examples*; History: 2015.9.17*;**********************************************************************;/*------------------------------------------------------------------ */;/* constant define*/;/*---------------------------------------------- --------------*/x EQU 45 ; x=45y EQU 45 ; y=45/;/*---------- ----------------------------------------------*/;/* code */;/*-------------------------------------------------------- */AREA text,CODE,READONL Y ; code start */startmov r0, #x ; put x value into R0mov r1, #y ; put y value into r1sub r2, r0, r1subs r2, r0, r1stopb stop ; end the code cyclingend3)堆栈操作指令。