浅析汇编语言中寻址方式的区别
- 格式:doc
- 大小:28.00 KB
- 文档页数:3
汇编中的各种寻址方式(2011-11-18 11:41:32)转载▼标签:杂谈1,立即寻址方式操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段,这种操作数成为立即数。
例:mov al,5 执行完指令后al的值为05h2,寄存器寻址方式操作数在寄存器中,指令指定寄存器号。
例:mov ax,bx3,直接寻址方式操作数的有效地址包含位移量的一种成分,其值就存放在中指令的操作码之后。
例:mov ax,[2000h]在汇编语言指令中,可以用符号地址代替数值地址。
如:mov ax,valuevalue为存放操作数单元的符号地址。
如:mov ax,[value]4,寄存器间间接寻址操作数的有效地址只包含基址寄存器内容或变址寄存器内容的一种成分。
例:mov ax,[bx]如果(DS)=2000h,(bx)=1000h则物理地址=20000+1000=21000h5,寄存器相对寻址方式(或称直接变址寻址方式)操作数的有效地址为基址寄存器或变址寄存器的内容和指令中指定的位移量之和,所以有效地址由两种成分组成。
例:mov ax,count[si](也可以表示为mov ax,[count+si])6,基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,所以有效地址由两种成分组成。
例:mov ax,[bx][di](或写为:mov ax,[bx+di])此类寻址方式使用段跨越前缀的格式为:mov ax,es:[bx][di]7,相对基址变址寻址方式操作数得意偶小弟值基址寄存器和一个变址寄存器的内容和指令中指定的位移量之和,所以有效地址由三种成分组成。
例:mov ax,mask[bx][si](也可写为mov ax,mask[bx+si]或者mov ax,[mask+bx+si])8,比例变址寻址方式操作数的有效地址是变址寄存器的内容乘以指令中指定的比例银子再加上位移量之和,所以由三种成分组成。
汇编的7种寻址⽅式
今天⼤三第⼀次写汇编的博客,希望读者,热爱计算机技术的兄弟姐妹们多多⽀持。
另外⼤家有什莫不懂得可以留⾔哦,哈哈哈
我们今天来讲讲汇编的7种寻址⽅式,今天讲前两类
主体分为三类:⽴即寻址,寄存器寻址,存储器寻址(存储器寻址有专门的寄存器,基址寄存器bx,bp;变址寄存器si,di
汇编的主要原理:1.寻址⽅式,2.⼀切问题⽤内存的原理去分析,就是忽略语⾔,去考虑怎末设计解决问题,
并判断问题的对错与否。
1.⽴即寻址:操作数在指令中直接给出
eg:
mov DST,SRC (DST是⽬的操作数,SRC是源操作数)
此时⽴即寻址的话,SRC应写成⽴即数
举例:mov ax,3 mov bx,45
注:DST,SRC的字长是⼀样的
2.寄存器寻址:把操作数放在寄存器中进⾏运算
eg:
mov ax,bx ;解释把(bx)之中的内容放到(ax)之中去,且bx中的内容是数字,这⾥“()”表⽰取内容的意思
练习和思考题
判断语句是否正确?为什莫?
1.mov al,-234
不正确,因为8进制带符号数能表⽰的范围是-128~127,⽽al是8为的寄存器,所以错误2.mov al,23
mov dx,al
第⼆条语句不正确,因为类型不匹配,dx是16位,al是8位的。
第二章寻址方式在8086微处理器中,一条指令通常由操作码加上操作数构成。
指令形式为:操作码[操作数1], [操作数2]; 注释其中,操作码指明执行的动作,操作数指明操作的对象。
由于寄存器数量有限,操作数不可能都放在寄存器中,实际上,操作数既可以放在寄存器中,也可以放在主存贮器中,这样就涉及到操作数的寻址问题。
我们将寻址操作数存放地址的方式称为寻址方式。
本章的内容包括:主存储器和物理地址的形成寻址方式常量与变量的定义2.1 主存贮器和物理地址的形成一、主存贮器计算机存贮系统分为:主存贮器(内存)、辅助存贮器(外存)。
●主存容量小、存取速度快、价格高;●辅存容量大、存取速度慢、价格低。
主存贮器的基本存贮单位是“位”(bit ),每8位组合成一个“字节”;每相邻的两个字节称为“字”;相邻的四个字节称为“双字”。
为了区别各个存贮单元,给每个单元编号,称为地址。
地址:字节单元的编号,也称为物理地址。
低字节放低位,高字节放高位。
例如:0004单元存放内容为1234H 。
0 10FFFFFH 低地址 高地址 从0~0FFFFFH ,共有220个单元,20根地址线。
表示:(0004)字=1234H二、存储器物理地址的形成早期的8086微处理器,有20根地址线,寻址范围2^20 = 1M 字节。
但是,8086内部为16位结构,与地址相关的寄存器均为16位,从而导致可寻址范围为64K。
因此,设计成为将主存分段使用,每段最大为64K字节。
用CS、DS、SS、ES保存当前可用段的段首地址。
规定:段首地址只能从任一“小段”的首地址开始,也就是必须最低4位为0,如果所有的段首地址都是这样,则可以忽略最低4位,而只将高16位放到段寄存器中。
因此,计算物理地址时,应将段寄存器内容左移4位,恢复段首址原值,然后再与本段中待访问单元的偏移地址相加,得到访问单元的物理地址。
因此,被访问单元物理地址PA = 段首址*16+偏移地址。
在汇编语言中,寻址方式指的是指令如何访问内存中的操作数或数据。
不同的处理器体系结构支持不同的寻址方式。
以下是一些常见的寻址方式:立即寻址(Immediate Addressing):操作数直接包含在指令中。
例如:MOV AX, 5 ; 将寄存器AX 设置为立即数5寄存器寻址(Register Addressing):操作数位于寄存器中。
例如:MOV AX, BX ; 将寄存器BX 的值移动到寄存器AX直接寻址(Direct Addressing):操作数的地址直接指定在指令中。
例如:MOV AX, [1234] ; 将内存地址1234 处的数据移动到寄存器AX寄存器间接寻址(Register Indirect Addressing):指令中包含一个寄存器,该寄存器包含操作数的地址。
例如:MOV AX, [BX] ; 将寄存器BX 中存储的地址处的数据移动到寄存器AX基址寻址(Base Addressing):使用基址寄存器加上一个偏移量来计算内存地址。
例如:MOV AX, [BX + 10] ; 将寄存器BX 加上偏移量10 后的地址处的数据移动到寄存器AX相对寻址(Relative Addressing):操作数的地址是相对于当前指令位置的偏移量。
例如:JMP label_name ; 无条件跳转到标签label_name 处变址寻址(Indexed Addressing):使用一个寄存器的值作为基址,另一个寄存器的值作为偏移量。
例如:MOV AX, [SI + DI] ; 将寄存器SI 和DI 中的值相加,然后将结果作为地址处的数据移动到寄存器AX相对基址寻址(Relative Base Addressing):使用基址寄存器和相对偏移量的组合。
例如:MOV AX, [BX + 10] ; 将寄存器BX 加上偏移量10 后的地址处的数据移动到寄存器AX这只是一些基本的寻址方式,具体的汇编语言和处理器架构可能会有其他特定的寻址方式。
汇编语⾔-寻址⽅式⼀ 定义 在指令中,指定操作数或操作数存放位置的⽅法称为寻址⽅式⼆ 分类(16位cpu) 1 ⽴即数寻址 2 寄存器寻址 3 存储器寻址 (1) 直接寻址 操作数存放在内存中,在指令中直接给出该操作数的有效地址 例: mov ax, [100] (2) 寄存器间接寻址 操作数在存储器中,操作数的有效地址⽤SI、DI、BX和BP等四个寄存器之⼀来指定 (3) 寄存器相对寻址 操作数在存储器中,其有效地址是⼀个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。
若有效地址⽤SI、DI和BX等之⼀来指定,则其缺省的段寄存器为DS; 若有效地址⽤BP来指定,则其缺省的段寄存器为SS。
(4) 基址变址寻址 操作数在存储器中,其有效地址是⼀个基址寄存器(BX、BP)和⼀个变址寄存器(SI、DI)的内容之和。
(5) 相对基址变址寻址 操作数在存储器中,其有效地址是⼀个基址寄存器(BX、BP)的值、⼀个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。
三 32位cpu寻址⽅式在32位微机系统中,除了⽀持前⾯的七种寻址⽅式外,⼜提供了⼀种更灵活、⽅便,但也更复杂的内存寻址⽅式,从⽽使内存地址的寻址范围得到了进⼀步扩⼤。
在⽤16位寄存器来访问存储单元时,只能使⽤基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的⼀部分,但在⽤32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的⼀个组成部分。
当⽤32位地址偏移量进⾏寻址时,内存地址的偏移量可分为三部分:⼀个32位基址寄存器,⼀个可乘1、2、4或8的32位变址寄存器,⼀个8位/32位的偏移常量,并且这三部分还可进⾏任意组合,省去其中之⼀或之⼆。
32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。
一汇编入门精髓(转)寄存器和寻址方式2010-03-20 13:01寄存器和寻址方式寄存器,在8086/8088里,有三组共13个16位寄存器.寄存器,从名字上看,可以知道,它就象书店的行包寄存处,寄存器的名字就象寄存处发给用户取回自已物件的标志牌子,表示物件的存放地址.寄存器的内部给构都相同,只不过是一个二字节或一字节的存储空间,别看他们小,作用可大了,所有电脑的运算,都要从他们过关,因为他们的处理速度快嘛.为了区分和准确运用,就要给他们进行科学的分组和起名.第一组,数据寄存器,AX,BX,CX,DX.其中,X表示一个未知数,那么这些寄存器都可以用来存放数据,ABCD,虽说都可以理解为一个顺序号,但是,A还是加法ADD的简称,所以AX叫累加器,B是基地址的简称,所以BX可以叫基地址寄存器,C是计数器的简称,所以CX可以叫做计数器.D是数据DATA的简称,所以DX可以叫数据寄存器.这四个寄存都可以按高八位和低八位分成两个寄存器:AH,AL,BH,BL,CH,CL,DH,DL.第二组,地址指示和变址寄存器,SI,DI,BP,SP.它们用来表示一个地址偏移,或用来表示一个地址的变化状况.SI,DI都可以表示变址,在串操作中,SI和DI表示源和目的操作数的指示器,快速记忆方法:SI联想饮水思源的思(谐音SI),DI联想目的(谐音DI).BP,SP的P表示堆栈专用,BP表示基地址专用,SP则是堆栈顶指示器.其中,BP,SI,DI还可以兼作数据寄存器.SP则只能和堆栈绑定.第三组,段寄存器,CS,SS,DS,ES.它们用来存放CPU可以直接访问的四个当前段的段首地址.CS代码段,SS堆栈段,DS数据段,ES附加段.其中,在表示地址时,CS和指令指示器IP绑定使用,SS 和BP绑定.DS为SI,DI,BX共用.第四组,指令指示器,IP,这是CPU自动引用的,表示下一次要从主存取出的指令的偏移.寻址方式寻址方式分为六种,(这是教材里讲的).1,立即寻址, 数据的本身在代码段.用于赋初值.2,直接寻址, 数据的偏移在代码段,用于变量名.3,寄存器寻址, 数据的本身在寄存器.用寄存器名表示.4,寄存器相对寻址, 数据的偏移在寄存器.注意:BP和SS绑定.DS为SI,DI,BX 共用.5,变址寻址, 数据的偏移在一个寄存器里,并要加上一个偏移量.注意:BP和SS绑定.DS为SI,DI,BX共用.6,基址加变址寻址, 数据的偏移放在两个寄存器中,并要加上一个偏移量.注意:BP和SS绑定.DS为SI,DI,BX共用.BX为DS段的基址专用.寻址方式是汇编语言的重点和难点。
谈《汇编语言》中寻址方式的对比学习法
汇编语言是一种低级语言,它也是最原始的计算机编程语言。
在汇编语言中,数据与代码都用地址形式表示,这种“寻址”方式比较重要,它能够决定程序的运行结果。
当涉及到寻址时,汇编语言中有两种:直接寻址和间接寻址。
直接寻址方式是指机器码使用操作数的物理地址作为目的地址,即在操作指令中明确指出了操作数的地址,直接将操作数放置在指定的存储单元中,执行相应的指令,再由操作数取出正确结果。
由于直接寻址是一种简单快捷的寻址方式,因此它通常被认为是在低级程序设计语言上的一种优势。
而间接寻址,则是指机器指令不使用物理地址,而是使用某个特殊的地址作为目的地址。
这种地址叫做指针地址,指针就是指向操作数的指针,它可以指向任意的存储单元,从而可以方便快捷地访问操作数,相同的程序指令可以在不同位置执行,因此可以更加灵活和不受限制,这是间接寻址所具有的优势所在。
因此,可以说,直接寻址方式和间接寻址方式是汇编语言中的两种重要寻址方法。
在学习汇编语言时,需要认真比较和分析这两种方式,尽可能深入地了解它们的区别,勤加思考,从而加深对汇编语言的理解,提高代码的运行效率。
汇编语⾔-寻址⽅式-地址和数据相关的寻址⽅式数据相关的寻址⽅式1 ⽴即寻址⽅式直接使⽤⽴即数来处理mov al,5mov ax,3064H2 寄存器寻址⽅式操作数在寄存器中,直接使⽤寄存器赋值来读取内部的操作数。
另外的⽅式的简介:在8086中把操作数的偏移地址称为有效地址,以下的操作都是取得有效地址(EA)的不同途径。
有效地址可以由以下四种成分:位移量(displacement):存放的是⼀个地址。
基址(base):基址部分,通常⽤来指数据段中数据或字符串的⾸地址变址(index):存放在变址寄存器中的内容。
通常⽤来访问数组中的某个元素或字符串的某个字符。
⽐例因⼦(scale factor):是386新增加的寻址⽅式的术语,值可为1,2,4,8在寻址中,可⽤变址寄存器内容乘以⽐例因⼦来取得变址值。
有效地址的计算公式可⽤由以下来处理:EA = 基址 + (变址 X ⽐例因⼦) + 位移量除了⽐例因⼦固定,其它三个都可以有正负。
四种成分16位寻址32位寻址位移量0,8,16位0,8,32位基址寄存器BX,BP任何32位通⽤寄存器变址寄存器SI,DI除ESP外的32位通⽤寄存器⽐例因⼦⽆1,2,4,8表格⼀默认段选择规则访存类型所⽤段及段寄存器却省选择规则指令代码段 CS寄存器⽤于取指堆栈堆栈段 SS寄存器所有的堆栈的进栈和出栈,任何⽤ESP或EBP作为基址寄存器的访问局部数据数据段 DS寄存器除相对于堆栈以及串处理指令的⽬的以外的所有数据访问⽬的串附加数据段 ES寄存器串处理指令的⽬的串表格⼆3 直接寻址⽅式操作数的有效地址只包含位移量这⼀种成分。
值就在代码段中指令的操作码之后。
也就是位移量就是操作数的有效地址。
;假设(ds) = 3050Hmov ax,[0000] ;就是把内存在3050:0000内存的数据传送到ax中也可以⽤符号地址代替数值地址⽐如mov ax,[VALUE];就是把value的3050:value将value替换为数据跟上⼀样也可以⽤指定段寄存器来作为段地址也是可以的。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。
浅析汇编语言中寻址方式的区别
浅析汇编语言中寻址方式的区别
浅析汇编语言中寻址方式的区别王传俊寻址方式是汇编语言中的一个重要内容,是学习编程的基础,同时也是该门课程的一个学习难点。
本文通过以Inte18086CPU为例,使用分析比较的方法阐述了各寻址方式间的区别。
汇编语言寻址方式有效地址物理地址在计算机应用技术的发展过程中,汇编语言是一座连接软件和硬件的桥梁,也是计算机能够提供给用户最快而又最有效的语言。
汇编语言不同于用O,1数字表示的机器语言,它是用人们熟悉的英文缩写字符表示相应的操作码,用符号或数值表示地址和操作数。
因此,汇编语言为程序的编写、阅读和修改提供了方便。
但由于汇编语言仍是一种面向机器的语言,所以在进行程序设计时必须考虑到机器的指令系统、寻址方式及存储设备的设置和功能,而熟悉并灵活地应用机器所采用的各种寻址方式,是运用汇编语言进行程序设计的根本。
而一个指令系统具有哪几种寻址方式,是否为编写程序提供方便,是指令系统设计的关键,同时也是初学者学习汇编语言的难点。
在教学过程中,通常选用Inte18086CPU的PC机为基础机型来组织教学。
Inte18086提供了九类寻址方式,它们分别是立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、基址变址寻址、串寻址、端口寻址和隐含寻址。
由于Inte18086中的寻址方式有相似之处,极易混淆。
在教学过程中,应使学生抓住各种寻址方式的特点,找出它们之间的区别和联系,从而形成正确的概念。
什么是寻址方式呢?这是首先要明确的概念。
一个指令是由操作码和操作数两部分组成的。
操作数在存储器中存放的位置,称为操作数地址。
获得操作数地址的方式,就称为操作数地址的寻址方式,简称寻址方式。
在寻址过程中,操作数的存放位置决定着寻址的方式。
在汇编语言的学习过程中,区分“存放位置”是理解寻址方式的’前提。
因此,在学习之前应使学生理解寄存器和存储器的不同。
寄存器位于CPU内部,它的存取速度比存储器要快得多。
在计算机的运算过程中寄存器主要用来存放运算过程中的各种信息,包括操作数地址,操作数和运算的中间结果。
存储器是由许多存储单元组成的,每个单元有唯一确定的地址。
它是计算机的记忆场所,能把计算和处理的数据及程序存入计算机,使计算机自主工作,免受其
它因素的干扰。
在指令中,辨别操作数是存放在寄存器还是存储器中最简单的方法就是看这个操作数的书写有无[]。
如果有[],则操作数一定是存储器操作数,即操作数存放在存储器中,而存储器操作数所在的存储器地址就是该操作数的物理地址。
若无[],则操作数的存放分两种情况:一是在指令中操作数以立即数的形式给出,如3500H,则该操作数的寻址方式为立即寻址方式;二是操作数以通用寄存器形式给出,如AX,则该操作数的寻址方式为寄存器寻址方式。
立即寻址和寄存器寻址的相同之处在于都不需要访问内存,工作效率高。
但立即寻址方式主要用来为存储单元或寄存器赋初值,如:MOVAX,2043H这条指令中的源操作数2043H以立即数形式给出,与操作码一起放在代码段区域中。
而寄存器寻址方式的操作数放在一个通用寄存器中,即AX、BX、cx、DX、BP、sP、SI、DI中的任意一个。
如:MAXAX,cx这条指令中的源操作数存放在cx中。
直接寻址方式和前两种寻址方式的区别是:操作数存放在存储器中,16位有效地址直接包含在指令中。
它的物理地址是由指令中直接给出的16位有效地址与数据段寄存器DS向高位移动4位后相加得到的。
如:MOVAX,[2000H]中源操作数的16位有效地址2000H直接出现在指令中,它的物理地址=DS*10H+2000H。
寄存器间接寻址、变址寻址、基址变址寻址这三种寻址方式的操作数都存放在内存储器中,而要访问内存中存放操作数的存储单元,就需要知道存储单元在内存储器中的有效地址。
在Inte18086中,用来存放有效地址的寄存器只有四个,分别是DI、SI、BP和BX,即在指令中只有这四个寄存器可以放在[]中,作为寻址寄存器。
四种寻址方式的有效地址就是通过这四个寄存器以不同寻址方式而得到的。
寄存器间接寻址方式的操作数的有效地址只能由四个寄存器中的一个存放。
以DI、SI 或BX间接寻址时,操作数隐含在存储器的数据段区域中,操作数的地址用数据段寄存器DS内容左移4位加上DI、SI或BX中的16位有效地址获得。
如:MOVAX,[BX]中源操作数的有效地址为BX内容,它的物理地址=DS*10H+(BX)。
以BP间接寻址时操作数隐含在存储器的对栈段区域中,操作数的地址用堆栈段寄存器ss 内容左移4位加上BP中的16位有效地址获得。
若指令中标明是段超越的,则操作数的地址用段前缀寄存器内容左移4位加上BP中的16位有效地址获得。
变址寻址方式的操作数有效地址由变址寄存器(DI、SI、BP、BX)内容和指令中给定的8位或16位位移量组成。
与寄存器间接寻址方式相比多了位移量。
如:MOVAX,
disp[DI]中有效地址为disp+(DI),物理地址=DS*lOH+disp+(DI)。
在基址变址寻址方式中,将SI或DI称为变址寄存器,将BP或BX称为基址寄存器,在使用时只能同时使用一个变址寄存器和一个基址寄存器。
该寻址方式中的操作数有效地址=(SI)+(BX)。
如:MOVAX,[SI][BX],物理地址=DS*10H+(SI)+(BX)。
在以上六种寻址方式中,物理地址只与存放在内存储器中的操作数有关,而这种操作数在指令格式中最大的特点就是带有[],而其它操作数的存取都与内存无关,因而也就不涉及物理地址。
串寻址方式用于字符串的操作,使用隐含的变址寄存器SI和DI寻址。
源串操作数用SI寻址,目的串操作数用DI寻址,在指令执行过程中根据标志寄存器的DF标志位,自动修改SI和DI内容,以给定指向下一个操作数的地址,完成各种对字符串的操作。
串寻址方式的特征主要表现在操作码上,通常串寻址方式的操作码是一般操作码后加S(string字符串的缩写),以区别与其它寻址方式的不同。
如:MOV实现传送指令,MOVSB则实现字符串的字节传送。
端口寻址方式用于CPU寻址外设端口。
并由8位或16位(存放在寄存器DX中)立即数构成端口地址。
该寻址方式只有两个操作码:OUT(输出)和IN(输入)。
需要注意的是输出指由CPU输出至端口地址,输入则指端口地址输入到CPU中。
隐含寻址方式是指在Inte18086中,有些指令没有给出操作数,但却隐含着对固定寄存器的操作。
如:AAA隐含对AL操作,LES隐含对ES操作。
这三种是具有特殊功能的寻址方式,理解了其各自的操作对象及操作码的特征,那么掌握起来就很容易了。
通过对这几种寻址方式的分析比较,将抽象且较难理解的寻址方式具体化、形象化,这对今后的指令系统和程序设计学习会有很大的帮助。
1苏春莉:微机原理课程教学的实践与探讨[J],电脑知识与技术,2009,(24) 2陈佳:寻址方式教学方法的研究与研讨[J],科技技术,2009,(16) 3郭旭平:汇编语言寻址方式[J],机械管理开发,2008,(17) (作者单位:265500山东省烟台市烟台汽车工程职业学院)。