当前位置:文档之家› ARM处理器9种基本寻址方式

ARM处理器9种基本寻址方式

ARM处理器9种基本寻址方式
ARM处理器9种基本寻址方式

寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9 种基本寻址方式。

1.寄存器寻址

操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。

例如指令:

MOV R1,R2 ;R1←R2

SUB R0,R1,R2 ;R0←R1- R2

2.立即寻址

在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。立即数要以“#”为前缀,表示16进制数值时以“0x”表示。

例如指令:

ADD R0,R0,#1 ;R0←R0 + 1

MOV R0,#0xff00 ;R0←0xff00

3.寄存器移位寻址

寄存器移位寻址是ARM指令集特有的寻址方式。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。

例如指令:

MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即R0=R2 * 8

ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1

可采用的移位操作如下:

LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0。

LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0。

ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1

ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位

RRX:带扩展的循环右移(Rotate Right extended by 1 place),操作数右移一位,高端空出的位用原C 标志值填充。

各移位操作过程如图所示。

4.寄存器间接寻址

指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,操作数存放在存储器中。

例如指令:

LDR R0,[R1] ;R0←[R1](将R1中的数值作为地址,取出此地址中的数据保存在R0中)STR R0,[R1] ;[R1] ←R0

5.变址寻址

变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,变址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。

例如指令:

LDR R2,[R3,#4] ;R2←[R3 + 4](将R3中的数值加4作为地

址,取出此地址的数值保存在R2 中)

STR R1,[R0,#-2] ;[R0-2] ← R1(将R0中的数值减2 作为地址,把R1中的内容保存到此地址位置)

6.多寄存器寻址

采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送,这种寻址方式用一条指令最多可以完成16个寄存器值的传送。

例如指令:

LDMIA R0,{R1,R2,R3,R5} ;

7.堆栈寻址

堆栈是一种数据结构,堆栈是特定顺序进行存取的存储区,操作顺序分为“后进先出”和“先进后出”,堆栈寻址时隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元就是堆栈的栈顶。存储器生长堆栈可分为两种:

向上生长:向高地址方向生长,称为递增堆栈(Ascending Stack)。

向下生长:向低地址方向生长,称为递减堆栈(Decending Stack)。

堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈(Full Stack);堆栈指针指向下一个要放入的空位置,称为空堆栈(Empty Stack)。

这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方式,即:(LDM、STM : ; F、E 表示满堆栈、空堆栈 ; A、D 表示递增、递减堆栈)

满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。如指令LDMFA,STMFA 等。

满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。如指令LDMFD,STMFD 等。

空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。如指令LDMEA,STMEA 等。

空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。如指令LDMED,STMED 等。

8.块复制寻址

块复制寻址用于把一块从存储器的某一位置复制到另一位置,是一个多寄存器传送指令。例如指令:

STMIA R0!,{R1-R7} ;将R1~R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,增长方向为向上增长。

STMDA R0!,{R1-R7} ;将R1~R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,增长方向为向下增长。

9.相对寻址

相对寻址是变址寻址的一种变通,由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。

例如指令:

BL ROUTE1 ;调用到ROUTE1子程序

BEQ LOOP ;条件跳转到LOOP标号处

LOOP MOV R2,#2

实验7 寻址方式在结构化数据访问中的应用

计算机学院实验报告 课程汇编语言 实验名称实验7 寻址方式在结构化数据访问中的应用 专业计算机科学与技术 2018年 12 月 24 日 一、实验目的 1.定位内存单元的寻址方式汇总 2.寻址方式的综合应用

3.转移指令的分类和原理 4.熟悉在显存中编程的方法 二、实验内容及要求 ( 一) 寻址方式的汇总及综合应用 1.定位内存单元的寻址方式有几种,并举例说明。 2.寻址方式在结构化数据访问中的应用。 Power idea 公司从 1975 年成立一直到 1995 年的基本情况如下。 年份收入 ( 千美元 )雇员人均收入 ( 千美元 ) 1975163? 1976227? 19773829? 1978135613? 1979239028? 1980800038? 1995593700017800? 下面的程序中,已经定义好了这些数据: assume cs:codesg data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995' ;年份 dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ; 公司总收入 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 ;公司雇员人数 data ends table segment db 21 dup('year summ ne ??') table ends

汇编实验报告一 熟悉7种寻址方式

电子信息工程学系实验报告——适用于计算机课程课程名称:IBM-PC汇编语言程序设计 实验项目名称:熟悉7种寻址方式实验时间: 班级:姓名:学号: 一、实验目的: 掌握debug命令,熟悉7种寻址方式。 二、实验环境: ASM轻松汇编 三、实验内容: 1、上机输入以下程序: data segment x db 01,02 y db ?,? z db ?,? w dw 1234h data ends code segment main proc far assume cs:code,ds:data start: push ds xor ax,ax push ax mov ax,data mov ds,ax mov dx,1234h -----无有效地址 mov cl,ds:[0000h] -----0000h mov si,0000h mov di,0002h mov al,[si] ----0000h mov [di],al ----无有效地址 add si,1 add di,1 mov al,[si] mov [di],al mov si,0000h mov di,0000h mov al,x[si] mov y[di],al 成绩: 指导教师(签名):

add si,1 add di,1 mov al,x[si] -----0001h mov y[di],al mov si,0000h mov di,0000h mov bx,0000h mov bp,0004h mov al,[bx][si] ----0000h mov ds:[bp][di],al add si,1 add di,1 mov al,[bx][si] mov ds:[bp][di],al ret main endp code ends end start 2、写出上面汇编程序中字体为红色的指令的源操作数的寻址方式以及源操作数的有效地址。 指令寻址方式有效地址mov dx,1234h立即寻址方式无有效地址mov cl,ds:[0000h]直接寻址方式0000h mov al,[si]寄存器间接寻址方式0000h mov [di],al寄存器寻址方式无有效地址 mov al,x[si] 寄存器相对寻址方式0001h mov al,[bx][si]基址变址寻址方式0000h 画图说明数据段中变量所分配的存储空间及初始化的数据值。 14F2:0000 0001 0002 0003 0004 0005 0006 0007 01 02 01 02 00 00 34 12

实验2 指令系统、寻址方式及源程序结构

实验二指令系统、寻址方式及源程序结构 实验目的: 1. 熟悉8088/8086的数据传送和算术运算指令的书写格式、功能。 2. 熟悉各种寻址方式。 3. 掌握汇编语言源程序结构,熟悉常用伪指令,编写完整的源程序。 4. 掌握汇编、连接、运行汇编源程序的全过程;使用DEBUG调试和运行汇编源程序。实验内容: 安装MASM WINDOWS 集成实验环境 2011 在硬盘F中建立自己的文件夹,以“班级姓名”命名(比如计科1111张三),实验文件以“实验次数-序号”命名,比如sy2-1.asm。 1、验证指令格式 用A命令写入汇编指令,使用寄存器、段寄存器、存储器和立即数等作为操作数,验证mov、add指令的格式并得出结论。 2、理解不同的寻址方式 假设(DS)=2000H, (BX)=0100H, (SI)=0002H, (20100)=12H, (20101)=34H, (20102)=56H, (20103)=78H, (21200)=2AH, (21201)=4CH, (21202)=B7H, (21203)=65H.,请分析下列7条指令的源操作数各自使用何种寻址方式以及每条指令执行后AX的值。 然后使用Debug命令设置上述寄存器及存储单元的内容,再用汇编(A)、单步执行(T)等命令验证每条指令执行后AX的值。 (1)MOV AX,1200H (2) MOV AX,BX (3) MOV AX,[1200H] (4) MOV AX,[BX] (5) MOV AX,1100[BX] (6) MOV AX,[BX][SI] (7) MOV AX,1100[BX][SI] 3、编写源程序 假设有3个数x, ,y z,其中x=1234h,y=0c3f6h,z=10c5h,分别保存在内存单元X、Y、Z。请编写源程序,计算x+ 2z -y,结果保存在Z单元中,并用debug调试运行,查看每条指令的执行结果,观察标志位变化情况。其中X、Y、Z单元在数据段定义。 程序结构如下:

实验三(ARM编程环境的熟悉及寻址方式实验)

实验三ARM编程环境熟悉及寻址方式实验 注意:本实验在模拟环境下进行!! 一、实验目的: 1、进一步熟悉ARM的编程工具MDK; 2、深刻理解ARM汇编指令中标号的本质; 3、熟悉ARM寻址方式(寄存器寻址、寄存器间接寻址等); 二、实验步骤: 1、参照实验二的步骤,建立工程exp 2、设置工程、建立源文件 exp2.s并将其添加到工程,在exp2.s中输入如下代码(可复制):;广州大学华软软件学院 ;文件名:exp2.s ;功能: ;作者: ;日期: ;修改: area init,code,readonly entry ldr r0,=data1;将标号data1的值送给r0 ldr r1,=data2; ldr r2,=data3 ldr r0,[r0]

ldr r1,[r1] add r0,r0,r1 str r0,[r2] b .;相当于while(1) data1 dcd 12;定义一个字,初值为12 data2 dcd 13;定义一个字,初值为13 data3 dcd 0;定义一个字,初值为0 end 2、编译正确后调试(可参照实验二),注意Ro_Base设置为 0x30000000,点击下图菜单中的菜单项,调出内存单元观察窗口。

会弹出如下界面:

点击current,就会看到当前模式下的寄存器 按F10进行单步调试,同时观察寄存器中的变化; 反汇编界面: 出现如下界面:鼠标右键,如图选中,即可看到源代码的反汇编窗口。

我们发现data1代表的地址是0x30000020,data2代表的地址是0x30000024,data3代表的地址是0x30000028。好,我们现在通过memory窗口来查看这些内存单元的内容: 在存储单元窗口输入0x30000020(如下图所示),观察存储单元中的 值,是不是我们程序所运行的结果呢?

实验三 汇编数据寻址的方法

实验三汇编数据寻址的方法(2学时)实验目的 通过实验掌握下列知识: 1、DEBUG命令:G,N,W,L及Q。 2、8086系统中数据在内存中的存放方式和内存操作数的几种寻址方式。 3、8086指令:INC,DEC,LOOP,INT 3,INT 20H,寄存器SI,DI。 4、8086汇编语言伪操作:BYTE PTR,WORD PTR。 5、求累加和程序和多字节加减法程序。 实验类型:验证 实验内容和步骤 一、内存操作数及各种寻址方式使用 程序内容: MOV AX,1234 MOV [1000],AX MOV BX,1002 MOV BYTE PTR[BX],20 MOV DL,39 INC BX MOV [BX],DL DEC DL MOV SI,3 MOV [BX+SI],DL MOV [BX+SI+1],DL MOV WORD PTR[BX+SI+2],2846 操作步骤 一、内存操作数及各种寻址方式使用 程序内容: MOV AX,1234 MOV [1000],AX MOV BX,1002 MOV BYTE PTR[BX],20 MOV DL,39 INC BX MOV [BX],DL

DEC DL MOV SI,3 MOV [BX+SI],DL MOV [BX+SI+1],DL MOV WORD PTR[BX+SI+2],2846 操作步骤 1)用A命令键入上述程序,并用T命令逐条运行。 2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。 注意D命令显示结果中右边的ASCII字符及双字节数存放法。 思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

实验一 指令与寻址方式认知实验(Keil)

实验一指令与寻址方式认知实验 一、实验目的 1.了解单片机基本指令及其寻址方式; 2.掌握在μVision环境中查看指令操作结果的技巧。 二、实验仪器和设备 Keil软件;THKSCM-2综合实验装置; 三、实验原理及实验内容 1.示例及相关设置 (1)建立一个文件夹:lx31。 (2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx31.asm文件名存盘到lx31文件夹中。 ORG 0000H MAIN:MOV R7,#16 MOV A,#00H MOV R0,#30H LP:MOV @R0,A INC R0 INC A DJNZ R7,LP SJMP $ END (3)在lx31文件夹下建立新工程,以文件名lx31存盘(工程的扩展名系统会自动添加)。 (4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置: ○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。 ○2晶振频率设为11.0592MHz。 ○3Output标签下的Create HEX File前小框中要打钩。

○4在Debug标签选择Use Simulator(软件模拟)。 (5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。利用单步、执行到光标处两种方法运行程序,观察程序运行的结果。 (6)分析程序的功能,研究观察以下指令的寻址方式及其操作效果。 2.示例及相关设置 (1)建立一个文件夹:lx32。 (2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx32.asm文件名存盘到lx32文件夹中。 ORG 0000H MOV R0,#20H MOV R1,#22H MOV A,@R0 ADD A,@R1 MOV 24H,A INC R0 INC R1 MOV A,@R0 ADDC A,@R1 MOV 25H,A SJMP $ END (3)在lx32文件夹下建立新工程,以文件名lx32存盘(工程的扩展名系统会自动添加)。 (4)在Project菜单的下拉选项中,单击Options for Target ‘Target1’,在弹出的窗口中要完成一下设置: ○1单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。 ○2晶振频率设为11.0592MHz。 ○3Output标签下的Create HEX File前小框中要打钩。 ○4在Debug标签选择Use Simulator(软件模拟)。

寻址方式与基本指令-微机原理实验报告

西安郵電大學 微型计算机原理 课内实验报告书 院系名称:计算机学院 实验题目:寻址方式与基本指令学生姓名: 专业名称:软件工程 班级:软件1003班 学号: 指导教师:葛茂

1 实验目的 1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。 2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计打好基础。 3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法 2 实验预习要求 1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。 2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。 3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。 4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题除外),以便在实验时进行验证。 3 实验内容 1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ 文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 (1)程序装入后,代码段寄存器CS的内容为0893H,代码段第一条可执行指令MOV AX, DATA对应的机器代码为B80E08H,它是一个3字节指令, 注意观察执行该指令时IP值的变化情况,该指令源操作数DATA的寻址 方式是立即数寻址,其值为1425。 (2)执行完MOV DS, DATA指令后,数据段寄存器DS的内容为8629H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地 址分别为86290H、86291H和86292H。 (3)程序中第一条ADD AL, [BX] 指令对应的机器代码为0207H,它是一个2字节指令,注意观察执行该指令时IP值的变化情况;该指令中源 操作数的寻址方式为寄存器间接寻址,该操作数所在存储单元的逻辑地 址(DS): (BX)为8629:0001,其物理地址为86291H;执行完该指令后 (AL)=EAH,CF=0,OF=0,ZF=0,SF=1,AF=0,PF=0;若两操作数为无符 号数,计算结果是否正确是?若两操作数为带符号数,计算结果是否正 确错误? (4)执行完第二条“ADD AL, [BX]”指令后(AL)=72H,CF=1,OF=1,ZF=0,SF=0,AF=1,PF=1;若两操作数为无符号数,计算结果是否正确 错误?若两操作数为带符号数,计算结果是否正确错误? (5)指令MOV SUM, AL中目的操作数的寻址方式为寄存器寻址。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元的值变为72H。 DATA SEGMENT NUM DB 82H, 68H, 88H SUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA

1_寻址方式与基本指令实验

2.1 寻址方式与基本指令实验 2.1.1 实验目的 1、熟悉80x86寻址方式及基本指令的功能,进一步理解和巩固课堂学习内容。 2、掌握汇编语言程序设计上机过程, 掌握汇编语言源程序结构,为后续汇编语言程序设计打好基础。 3、熟悉Microsoft的DEBUG或Borland的Turbo DEBUG调试工具的使用方法 2.1.2 实验预习要求 1、认真阅读本书第一部分第1章,熟悉汇编语言程序设计上机步骤。 2、认真阅读本书第三部分,熟悉DEBUG调试工具的使用方法。 3、复习80x86操作数寻址方式及基本指令(数据传送、算术运算和逻辑运算等)。 4、了解实验内容,并在实验前根据课堂所学知识回答有关问题(个别取决于程序实际运行环境的问题除外),以便在实验时进行验证。 2.1.3 实验内容 1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成EX11.OBJ文件和EX11.LST 文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 (1)程序装入后,代码段寄存器CS的内容为__0981__H,代码段第一条可执行指令MOV AX, DA TA对应的机器代码为__B88009______H,它是一个____3____字节指令,注意观察执行该指令时IP值的变化情况,该指令源操作数DATA的寻址方式是___立即数寻址_______,其值为___0980_______。 (2)执行完MOV DS, AX指令后,数据段寄存器DS的内容为__0980______H,源程序在数据段中定义的数据82H、68H和88H被装入的存储单元的物理地址分别为__09800______H、__09801______H和_09802_______H。 (3)程序中第一条ADD AL, [BX] 指令对应的机器代码为___0207_______H,它是一个_____2___字节指令,注意观察执行该指令时IP值的变化情况;该指令中源操作数的寻址方式为__寄存器间接寻址方式________,该操作数所在存储单元的逻辑地址DS: BX为__0980: 0001________,其物理地址为___09801_______H;执行完该指令后(AL)=__EA___H,CF=___NC (0)___,OF__NV(0)____,ZF__NZ(0)____,SF___NG(1)___,AF___NA(0)___,PF__PO(0)____;若两操作数为无符号数,计算结果是否正确___正确____?若两操作数为带符号数,计算结果是否正确___正确___?若计算结果正确,结果是正数还是负数___负数___? (4)执行完第二条ADD AL, [BX] 指令后(AL)=___72___H,CF=__CY(1)____,OF___OV(1)___,ZF_NZ(0)_____,SF___PL(0)___,AF__AC(1)____,PF__PE(1)____;若两操作数为无符号数,计算结果是否正确___错误____?若两操作数为带符号数,计算结果是否正确____不正确____? (5)指令MOV SUM, AL中目的操作数的寻址方式为___直接寻址_______。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单元的值变为___72_____H。 DA TA SEGMENT NUM DB 82H, 68H, 88H SUM DB ? DA TA ENDS CODE SEGMENT

实验一 基本程序

实验一基本程序 一、实验目的 1. 熟悉汇编语言的汇编、连接和差错基本方法 2. 熟练掌握Debug的常用命令,学会用Debug调试程序; 3. 深入了解数据在存储器钟的存取方法; 二、实验内容 1、补充并完成下列程序 DATA SEGMENT X DD 453921F0H Y DD 123A6825H Z DW 0A86CH A DW ? B DW ? DATA ENDS CODE SEGMENT ……… MOV AX,WORD PTR X MOV DX,WORD PTR X+2 SUB AX,WORD PTR Y SBB DX,WORD PTR Y2 SUB AX,29 SBB DX,0 DIV Z MOV A,AX MOV B,DX ……… CODE ENDS 2、写出出变量A和变量B的值。 三、实验仪器 微型计算机,汇编器 四、实验要求 1. 实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,对程序结果的分析等。 2. 了解汇编语言程序的书写开头一般规范和结束的一般方法。 3.本实验要求在PC机上进行。 4. 本实验只要求在DEBUG调试状态下进行,包括汇编程序,调试程序,执行程序。 五、编程思路与提示

(1)实验内容1 C:>EDIT MYCODE.ASM C:>MASM MYCODE.ASM C:>LINK MYCONDE.OBJ C:>DEBUG MYCODE.EXE -U ;反汇编 -G ;运行 -R ;查看寄存器 -D ;查看内存单元 -Q ;退出debug 六、实验报告要求 实验目的,程序流程图、程序清单(附有注释),Debug调试中的问题及解决方案 实验二寻址方式 一、实验目的 1、复习微机实验环境安装和环境配置 2、练习寻址方式、重点内存寻址方式 3、单步运行程序,通过观察窗口观察指令对寄存器中数据的影响 二、实验内容 程序是指令的集合。指令就是计算机可以识别的命令 程序=数据结构+算法。 数据不能凭空产生和凭空存在,必须有其存在的硬件环境。 计算机硬件系统包括CPU、内存、系统总线、接口。所以数据(操作数)只能存放在CPU、内存、接口中,产生几种寻址方式。寻址方式是指寻找指令操作数所在地址的方式(为确定数据的来源和去处)。四种寻址方式 a、立即数寻址:操作数代码中例如: mov bx,1234H b、寄存器寻址:操作数在CPU中的某个寄存器例如: mov ax, bx c、外设寻址:操作数在外设中(即接口电路中)例如: IN ax,23H d、内存寻址:操作数在内存中。例如: mov ax,[bx] 根据偏移地址求法内存寻址划分为5种: ●直接寻址:偏移地址在指令[ ]中可以看到。 ●寄存器间接寻址:偏移地址在CPU寄存器中。 ●寄存器相对寻址:偏移地址由CPU寄存器中数值和另外数值的叠加得到。 ●基址变址寻址:偏移地址由CPU中基址寄存器(BX、BP)中的数值和变址寄存器(SI、 DI)中数值得到。 ●相对基址变址寻址:偏移地址由CPU中基址寄存器BX、BP)中的数值和变址寄存器 (SI、DI)中数值得到。 举例说明

实验五 指令格式和寻址方式

实验五指令格式和寻址方式 一.实验目的 1.了解汇编语言的编辑、汇编、连接、运行的过程。 2.掌握指令格式和寻址方式。 二、实验环境 1.PC机一台。 2.MASM软件。 三、实验内容: 1.开机 进入MS-DOS方式(从开始>运行>cmd ) 2.在DOS 提示符下进行汇编、连接、动态调试等操作。 例如: 对源文件EXAMPLE.ASM 进行的操作 E:\MASM5 >EDIT EXAMPLE.ASM 编辑(输入)源程序操作 E:\MASM5\MASM EXAMPLE 汇编源程序操作 E:\MASM5\LINK EXAMPLE 连接并生成扩展名为.EXE 的可执行文件 E:\MASM5\DEBUG EXAMPLE.EXE 对可执行文件进行调试 3.调试命令(在DEBUG 中使用的命令) a: U - 反汇编命令 用法: -U 代码段地址:起始偏移地址 b: D - 显示内存中的数据命令 用法: -D 数据段地址:存放数据的偏移地址如:-D DS:00 20 c: T - 单步执行程序命令 用法: -T 要执行的指令条数如:-T 3 d: G - 连续执行程序命令 用法: -G=代码段地址:指令的起始偏移地址指令的结束偏移地址 如: -G=CS:100 106 注意: 结束地址一定要是操作码的所在地址 e: R - 查看和修改寄存器数据命令 用法: -R 回车如:-R AX Q - 退出”DEBUG“ 应用程序命令 4. 应用例子-EXAMPLE 源程序: X、Y为字节数,把它们相加,结果放在Z中。 编辑(输入)源程序 E:\MASM5\EDIT EXAMPLE.ASM DATA SEGMENT X DB 12H

微机原理实验 实验二 寻址方式

实验二寻址方式 一、实验目的 1、复习微机实验环境安装和环境配置 2、练习寻址方式、重点内存寻址方式 3、单步运行程序,通过观察窗口观察指令对寄存器中数据的影响 二、实验内容 程序是指令的集合。指令就是计算机可以识别的命令 程序=数据结构+算法。 数据不能凭空产生和凭空存在,必须有其存在的硬件环境。 计算机硬件系统包括CPU、内存、系统总线、接口。所以数据(操作数)只能存放在CPU、内存、接口中,产生几种寻址方式。寻址方式是指寻找指令操作数所在地址的方式(为确定数据的来源和去处)。四种寻址方式 a、立即数寻址:操作数代码中例如: mov bx,1234H b、寄存器寻址:操作数在CPU中的某个寄存器例如: mov ax, bx c、外设寻址:操作数在外设中(即接口电路中)例如: IN ax,23H d、内存寻址:操作数在内存中。例如: mov ax,[bx] 根据偏移地址求法内存寻址划分为5种: ●直接寻址:偏移地址在指令[ ]中可以看到。 ●寄存器间接寻址:偏移地址在CPU寄存器中。 ●寄存器相对寻址:偏移地址由CPU寄存器中数值和另外数值的叠加得到。 ●基址变址寻址:偏移地址由CPU中基址寄存器(BX、BP)中的数值和变址寄存器(SI、 DI)中数值得到。 ●相对基址变址寻址:偏移地址由CPU中基址寄存器BX、BP)中的数值和变址寄存器 (SI、DI)中数值得到。 举例说明 mov ax,[1234h] ;内存寻址方式中的直接寻址 (偏移地址在指令[ ]中可以看到) mov ax,[bx] ;内存寻址方式中的寄存器间接寻址(偏移地址在CPU寄存器中) mov ax,[bx+12H] ;内存寻址方式中的寄存器相对寻址 mov ax,[bx+si] ;内存寻址方式中的基址变址寻址 mov ax,[bx+si+12H];内存寻址方式中的相对基址变址寻址 三、实验步骤 1)完成微机实验环境配置 2)新建文件 a、选中菜单栏\文件\新建文件,建立空白文件 b、编辑文件,输入以下代码 data segment ;数据段开始 block1 dw 1234h,5678h,9abch,0def0h data ends ;数据段结束end segment

汇编语言——7种寻址方式

电子信息工程学系实验报告——适用于计算机课程 课程名称:汇编语言程序设计Array实验项目名称:熟悉debug命令,以mov指令为例掌握不同的寻址方式 实验时间: 2012.9.20 班级:姓名:学号: 实验目的: 掌握debug命令,熟悉7种寻址方式。 实验环境: Win7,masm,link 实验内容及过程: 输入给出的程序,通过对程序的调试和运行了解指令操作数的寻址方式以及它的有效地址。 实验结果及分析: 2. 代码寄存器的值寻址方式有效地址 --------------------------------------------------------------------------------------------------------- mov dx,1234h (dx)=1234h 立即寻址无 mov cl,ds:[0000h] (cl)=01h 直接寻址 0000h mov al,[si] (al)=01h 寄存器间接寻址 0000h mov [di],al [di]=01h 寄存器寻址无 mov al,x[si] (al)=01h 寄存器相对寻址 0001h mov al,[bx][si] (al)=01h 基址变址寻址 0000h 3. 初始化: 程序执行后:

实验心得: 通过此次实验。掌握了debug的基本使用方法,知道了几个常用的命令及其结果代表的含义,了解从源代码到可执行文件会经过编译跟链接阶段。明白了编写汇编程序及其调试的步骤和方法。 附录: data segment x db 01,02 y db ?,? z db ?,? w dw 1234h data ends code segment main proc far assume cs:code,ds:data start: push ds xor ax,ax push ax mov ax,data mov ds,ax mov dx,1234h mov cl,ds:[0000h] mov si,0000h mov di,0002h mov al,[si] mov [di],al add si,1 add di,1 mov al,[si] mov [di],al mov si,0000h mov di,0000h mov al,x[si] mov y[di],al add si,1 add di,1 mov al,x[si] mov y[di],al mov si,0000h mov di,0000h mov bx,0000h mov bp,0004h mov al,[bx][si] mov ds:[bp][di],al add si,1 add di,1 mov al,[bx][si] mov ds:[bp][di],al ret main endp code ends end start 备注:以上各项空白处若填写不够,可自行扩展

微机原理寻址方式试实验报告

微机原理寻址方式试实验报告

————————————————————————————————作者:————————————————————————————————日期:

寻址方式练习实验报告 一、实验目的 1. 熟练掌握8086/8088的各种寻址方式及应用。 2. 掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础。 二、实验仪器 586微机1台 三、实验内容及程序 1.关于数据的寻址方式练习 8086/8088 提供多种方式实现操作数寻址,大体可分为7种: a. 立即寻址 b. 寄存器寻址 c. 直接寻址 d. 寄存器间接寻址 e. 寄存器相对寻址 f. 基址变址寻址 g. 基址变址且相对寻址 2.实验程序 STACK SEGMENT STACK DB 0B0H, 0B1H, 0B2H, 0B3H, 0B4H, 0B5H, 0B6H, 0B7H DB 0B8H, 0B9H DB 0BAH, 0BBH, 0BCH, 0BDH, 0BEH, 0BFH DB 10H DUP(00) STACK ENDS DATA1 SEGMENT DB 0A0H, 0A1H, 0A2H, 0A3H

TABLE DW 0A5A4H DB 0A6H, 0A7H, 0A8H, 0A9H, 0AAH, 0ABH DB 0ACH, 0ADH, 0AEH, 0AFH DATA1 ENDS DATA2 SEGMENT DB 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H, 0C6H, 0C7H DB 0C8H ,0C9H, 0CAH, 0CBH, 0CCH, 0CDH, 0CEH, 0CFH DATA2 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA1, ES:DATA2, SS:STACK START:MOV AX, DATA1 MOV DS, AX MOV AX, DATA2 MOV ES, AX MOV BX, 0004H MOV CX, 0005H MOV BP, 0003H MOV SI, 0002H MOV DI, 0001H MOV AX, CX ;以下指令按后表要求完成 MOV AX, 500H MOV AX, TABLE MOV AX, ES:[BX] MOV AX, [BX+05H] MOV AX, SS:[BX]+03H MOV AX, TABLE [BX] MOV AX, 07H [BX] MOV AX, [BP] MOV AX, TABLE [BP] MOV AX, 08H [BP] MOV AX, [BP+06H] MOV AX, DS:[BP+03H] MOV AX, [BP]+05H MOV AX, ES: [SI+03H] MOV AX, [DI+06H] MOV AX, [DI]+05H MOV AX, TABLE [SI] MOV AX, [SI] MOV AX, TABLE [DI]

微机原理寻址方式练习 实验报告

寻址方式练习实验报告 一、实验目的 1. 熟练掌握8086/8088的各种寻址方式及应用。 2. 掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础。 二、实验仪器 586微机1台 三、实验内容及程序 1.关于数据的寻址方式练习 8086/8088 提供多种方式实现操作数寻址,大体可分为7种: a. 立即寻址 b. 寄存器寻址 c. 直接寻址 d. 寄存器间接寻址 e. 寄存器相对寻址 f. 基址变址寻址 g. 基址变址且相对寻址 2.实验程序 STACK SEGMENT STACK DB 0B0H, 0B1H, 0B2H, 0B3H, 0B4H, 0B5H, 0B6H, 0B7H DB 0B8H, 0B9H DB 0BAH, 0BBH, 0BCH, 0BDH, 0BEH, 0BFH DB 10H DUP(00) STACK ENDS DATA1 SEGMENT DB 0A0H, 0A1H, 0A2H, 0A3H

TABLE DW 0A5A4H DB 0A6H, 0A7H, 0A8H, 0A9H, 0AAH, 0ABH DB 0ACH, 0ADH, 0AEH, 0AFH DATA1 ENDS DATA2 SEGMENT DB 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H, 0C6H, 0C7H DB 0C8H ,0C9H, 0CAH, 0CBH, 0CCH, 0CDH, 0CEH, 0CFH DATA2 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA1, ES:DATA2, SS:STACK START:MOV AX, DATA1 MOV DS, AX MOV AX, DATA2 MOV ES, AX MOV BX, 0004H MOV CX, 0005H MOV BP, 0003H MOV SI, 0002H MOV DI, 0001H MOV AX, CX ;以下指令按后表要求完成 MOV AX, 500H MOV AX, TABLE MOV AX, ES:[BX] MOV AX, [BX+05H] MOV AX, SS:[BX]+03H MOV AX, TABLE [BX] MOV AX, 07H [BX] MOV AX, [BP] MOV AX, TABLE [BP] MOV AX, 08H [BP] MOV AX, [BP+06H] MOV AX, DS:[BP+03H] MOV AX, [BP]+05H MOV AX, ES: [SI+03H] MOV AX, [DI+06H] MOV AX, [DI]+05H MOV AX, TABLE [SI] MOV AX, [SI] MOV AX, TABLE [DI]

单片机实验-寻址方式和指令系统实验指导书

实验6. 寻址方式和指令系统 一.实验目的 1.了解MSP430G2xxx汇编格式指令和常用寻址方式 2.了解C语言函数调用过程 3.通过反汇编了解C编译器实现初始化变量的方法 4.掌握计算机中数的表示和编码 二. 实验任务 1.汇编格式指令和寻址方式的学习(可在simulator下完成) L6_1.c源程序见下,建立C项目,进入DEBUG状态,点击view/disassembly,在反汇编窗口得到L6_1.c汇编格式指令的程序代码,如图6-1和图6-2,阅读该程序的汇编格式代码,思考: 1) 程序用到了哪些指令? 2) 程序用到了哪几种寻址方式? 3)用单步执行命令F11,跟踪函数delay的调用和返回,用view/register和view/ memory查看堆栈指针SP和堆栈内的内容,记录堆栈指针SP和堆栈内容的变化; 4) 修改l6_1.C,将变量i定义为全局变量,通过反汇编的代码,比较与定义为局部变 量的不同; 5) 修改L6_1.C, 将变量i的类型从 unsigned int 类型,改为unsigned long 类型, 反汇编看看函数delay的代码发生了什么变化?程序执行的结果有什么不同?为什么?(需在实验板上运行)。 L66__1.c程序清单(提供电子版)

图6-1 L6-1.c程序中main函数的反汇编代码 图6-2 L6_1.c程序中delay函数的反汇编代码 2. 了解C语言程序的执行过程(可在simulator 方式下完成) 指令计数寄存器PC决定CPU取指令的地址,所以PC寄存器的内容决定了程序的流程。已知MSP430G2xxx单片机复位后, PC寄存器从存储器0xFFFE~0xFFFFH单元获取一个字内容作为执行第一条指令的地址。以L4_1.C的项目为例,请问实验中查看到该地址的值是多少?程序执行的第一条指令是什么指令?main函数的入口是单片机上电就被执行的第一条语句吗? 说明:如图6-3,可在项目设置option/Debugger/set up中,去除对run to前的选项,再将程序下载到单片机中,观察当前上电复位PC的值与0xFFFE~0xFFFF存储单元内容的关系,对比不去除run to前的选项的不同。 图6-3 C语言程序下载后程序运行的停止处设置(注意Run to 的选项)

寻址方式与基本指令实验

寻址方式与基本指令实验 班级:软件工程1102班 姓名:水雪利 学号: 04113068 日期:2013年5月13日

一、试验目的 (1)熟悉80x86寻址方式及基本指令的功能。 (2)掌握汇编语言程序设计上机过程和汇编语言源程序结构,为后续汇编语言程序设计打好基础。 (3)熟悉Microsoft的DEBUG使用方法。 二、实验内容 1、读懂下列源程序,使用EDIT生成名为EX11.ASM的源程序,汇编生成 EX11.OBJ文件和EX11.LST文件,连接生成EX11.EXE文件;用EDIT打开EX11.LST文件,了解.LST文件包含的信息;使用DEBUG调试工具单步执行EX11.EXE程序,注意观察IP值的变化,并回答下列问题。 (1)程序装入后,代码段寄存器CS的内容为_0771____H,代码段第一条可执行指令MOV AX, DATA对应的机器代码为b87007___H, 它是一个_3__字节指令,注意观察执行该指令时IP值的变化情况,该 指令源操作数DATA的寻址方式是___立即数寻址___,其值为 __0770h___。 (2)执行完MOV DS, DATA指令后,数据段寄存器DS的内容为_0770___H,源程序在数据段中定义的数据82H、68H和88H被装入的 存储单元的物理地址分别为___07700__H、07701__H和 ____07702____H。 (3)程序中第一条ADD AL, [BX] 指令对应的机器代码为 _____0207_____H,它是一个_2_字节指令,注意观察执行该指令时IP 值的变化情况;该指令中源操作数的寻址方式为__直接寻址___,该操 作数所在存储单元的逻辑地址(DS): (BX)为_0771:000b___,其物理地址 为_0771b___H;执行完该指令后(AL)=____0001__H,CF=_0_____, OF_0_____,ZF___1___,SF__1____,AF 0______,PF_0_____;若 两操作数为无符号数,计算结果是否正确___是____?若两操作数为带 符号数,计算结果是否正确__是______?若计算结果正确,结果是正数 还是负数__负____? (4)执行完第二条ADD AL, [BX] 指令后(AL)=_0002_____H,CF=__1____,OF_1_____,ZF__1____,SF_0_____,AF__1____, PF_1_____;若两操作数为无符号数,计算结果是否正确___是____? 若两操作数为带符号数,计算结果是否正确___否_____? (5)指令MOV SUM, AL中目的操作数的寻址方式为__寄存器间接寻址__。该指令执行完后,注意观察(DS):0003H单元中值的变化,该单 元的值变为0000__H。 DATA SEGMENT NUM DB 82H, 68H, 88H SUM DB ? DATA ENDS

汇编语言实验报告2 - 寻址方式的综合应用及转移指令的原理

一、实验目的 1.定位内存单元的寻址方式汇总 2.寻址方式的综合应用 3.转移指令的分类和原理 4.熟悉在显存中编程的方法 二、实验内容及要求 (一)寻址方式的汇总及综合应用 1. 定位内存单元的寻址方式有几种,并举例说明。 2. 寻址方式在结构化数据访问中的应用。 Power idea公司从1975年成立一直到1995年的基本情况如下。 年份收入(千美元) 雇员人均收入(千美元) 1975 16 3 ? 1976 22 7 ? 1977 382 9 ? 1978 1356 13 ? 1979 2390 28 ? 1980 8000 38 ? M 1995 5937000 17800 ? 下面的程序中,已经定义好了这些数据: assume cs:codesg data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987','1988','1989','1990','1991','1992' db '1993','1994','1995' ;年份 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;公司总收入 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 dw 11542,14430,15257,17800 ;公司雇员人数 data ends table segment db 21 dup('year summ ne ??') table ends

相关主题
文本预览
相关文档 最新文档