第4章 STM8指令系统.ppt

上传人:wj 文档编号:9971788 上传时间:2023-05-22 格式:PPT 页数:209 大小:944KB
下载 相关 举报
第4章 STM8指令系统.ppt_第1页
第1页 / 共209页
第4章 STM8指令系统.ppt_第2页
第2页 / 共209页
第4章 STM8指令系统.ppt_第3页
第3页 / 共209页
第4章 STM8指令系统.ppt_第4页
第4页 / 共209页
第4章 STM8指令系统.ppt_第5页
第5页 / 共209页
第4章 STM8指令系统.ppt_第6页
第6页 / 共209页
第4章 STM8指令系统.ppt_第7页
第7页 / 共209页
第4章 STM8指令系统.ppt_第8页
第8页 / 共209页
第4章 STM8指令系统.ppt_第9页
第9页 / 共209页
第4章 STM8指令系统.ppt_第10页
第10页 / 共209页
第4章 STM8指令系统.ppt_第11页
第11页 / 共209页
第4章 STM8指令系统.ppt_第12页
第12页 / 共209页
第4章 STM8指令系统.ppt_第13页
第13页 / 共209页
第4章 STM8指令系统.ppt_第14页
第14页 / 共209页
第4章 STM8指令系统.ppt_第15页
第15页 / 共209页
第4章 STM8指令系统.ppt_第16页
第16页 / 共209页
第4章 STM8指令系统.ppt_第17页
第17页 / 共209页
第4章 STM8指令系统.ppt_第18页
第18页 / 共209页
第4章 STM8指令系统.ppt_第19页
第19页 / 共209页
第4章 STM8指令系统.ppt_第20页
第20页 / 共209页
亲,该文档总共209页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第4章 STM8指令系统.ppt

《第4章 STM8指令系统.ppt》由会员分享,可在线阅读,更多相关《第4章 STM8指令系统.ppt(209页珍藏版)》请在冰点文库上搜索。

第4章 STM8指令系统.ppt

第4章STM8指令系统,4.1ST汇编语言格式及其伪指令4.2STM8S寻址方式4.3STM8S指令系统,4.1ST汇编语言格式及其伪指令,4.1.1ST汇编常数表示法在缺省情况下,ST汇编语言数制表示方式与Motorola汇编语言格式相同,与Intel汇编语言表示方式不同。

其中,二进制、十六进制、十进制数表示方式如下:

%10100101二进制数表示方式(用“%”作前缀,指示随后的数为二进制数)。

$5A十六进制数表示方式(用“$”作前缀,指示随后的数为十六进制数)。

12十进制数表示方式(没有前、后缀指示符)。

*表示程序计数器PC的当前值。

不过,如果程序员习惯了Intel汇编语言数制表示方式,则可在程序中使用Intel伪指令,指示程序中随后的数据格式采用Intel汇编语言格式表示。

例如:

Intel;指示随后的指令系列采用Intel格式数制即10100101B二进制数表示方式(用“B”作后缀,指示该数为二进制数)。

5AH十六进制数表示方式(用“H”作后缀,指示该数为十六进制数)。

12十进制数表示方式(没有前、后缀指示符)。

$表示程序计数器PC的当前值。

4.1.2ST汇编语言格式ST汇编语言格式与Intel汇编语言格式基本相同,如下所示。

标号:

操作码助记符第一操作数,第二操作数,第三操作数;注释举例:

Next:

ADDA,$10;累加器A与10H单元内容相加,结果保存到A中BTJT$1000,#2,LOOP1;若1000H单元的b2位为1,则跳转到LOOP1标号处执行,操作码助记符是指令功能的英文缩写,必不可少。

例如,用“ADD”作为加法指令的操作码助记符;用“BTJT”作为“位测试为真”转移指令的操作码助记符,“BTJT”就是“BitTestandJumpifTrue”的英文缩写。

指令操作码助记符后是操作数,不同指令所包含的操作数个数不同:

有些指令,如空操作指令“NOP”就没有操作数;有些指令仅含有一个操作数,操作数与操作码之间用“空格”隔开,如累加器A内容加1指令,表示为“INCA”,其中INC为指令操作码助记符,是英文“Increase”的缩写,A是操作数;有些指令含有两个操作数,例如,将立即数55H传送到累加器A中的指令表示为“LDA,#$50”,其中LD是指令操作码助记符,第一操作数为累加器A,第二操作数为“$50”,#表示立即数;有些指令含有三个操作数,如“当某存储单元指定位为1时转移”指令,用“BTJT$1000,#2,LOOP1”表示,其中BTJT是指令操作码助记符,LOOP1是标号,即相对地址。

在多操作数指令中,各操作数之间用“,”(逗号)隔开。

在双操作数指令中,第一操作数有时称为目的操作数,第二操作数有时称为源操作数。

“;”(分号)后的内容是注释信息。

在指令后加注释信息是为了提高程序的可读性,以方便阅读、理解该指令或其以下程序段的功能。

汇编时,汇编程序不理会分号后的注释内容,换句话说,加注释信息不影响程序的汇编和执行,因此,注释信息可以加在指令行后,也可以单独占据一行。

标号是符号化了的地址码,在分支程序中经常用到。

标号由英文字母(大写、小写)、数字(09)及“_”(下划线)构成,最长为30个字符。

注意:

“数字”不能作为标号的第一个字符。

例如,“task1_next1”是合法标号;而“8ye_next1”不是合法标号,原因是首字符为数字8。

另外,在ST汇编中,要严格区分标号的大小写。

在ST汇编中,位于00段内的地址标号后可带“:

”(冒号),也可以不带冒号,且标号一律顶格书写。

标号分为三大类:

公共标号(Public),由本模块定义,在整个项目内有效,项目内另一个模块引用时须用Extern伪指令申明;局部标号,仅在本模块内有效;外部标号(Extern),由另一个模块定义且声明为公共标号。

此外,标号还具有长度属性字节,00页内的标号,带后缀.B;字标号,00段内的标号,带后缀.W;长标号,存放位置没有限制,带后缀.L。

不带后缀长度属性说明符的标号默认为字标号,即.W类型。

4.1.3ST汇编支持的关系运算符ST汇编指令中的常数可以是二进制、十六进制、十进制常数,也可以是表4-1所示的运算符及其组合。

表4-1关系运算符,在表4-1中:

(1)a、b均为非负整数。

(2)当指令中的常数为关系运算式的结果时,必须用“”(花括号)将关系运算符括起来。

例如:

LDA,#HIGH1234H;该指令的含义将1234H常数的高8位12H送ALDWX,#45MULT36;将4536送索引寄存器X(3)由于STM8S汇编指令中没有位赋值指令,因此“布尔运算符”仅出现在条件汇编伪指令中。

4.1.4ST汇编伪指令(Pseudoinstruction)在汇编语言源程序中,除了包含可以转化为特定计算机系统的机器语言指令所对应的汇编语言指令外,还可能包含一些伪指令,如“#define”、“EQU”、“END”等。

“伪”者,假也,尽管它不是计算机系统对应的指令,汇编时也不产生机器码,但汇编语言源程序中的伪指令并非可有可无。

伪指令的作用是:

指导汇编程序(或编译器)对源程序进行汇编。

伪指令不是CPU指令,汇编时不产生机器码。

显然,伪指令与CPU类型无关,而与汇编程序(也称为汇编器或编译器)的版本有关。

在汇编语言源程序中引用某一条伪指令时,只需考虑用于将“汇编语言源程序”转化为对应CPU机器语言指令的“汇编程序”是否支持所用的伪指令。

1)符号常数定义伪指令#define符号常数、寄存器、寄存器中指定位以及I/O引脚重命名等,均可用#define伪指令定义为某一字符串形式。

ST8汇编最多支持4096条#define指令,格式如下:

#define常量名值;位于程序头内,例如:

#defineVAR1$30;常量VAR1为30H如果在程序头中使用下列Define伪指令:

#DefineTELE_DDRPD_DDR,#3;“PD_DDR,#3”被定义为TELE_DDR字符串#DefineTELE_CR1PD_CR1,#3;“PD_CR1,#3”被定义为TELE_CR1字符串#DefineTELE_CR2PD_CR2,#3;“PD_CR2,#3”被定义为TELE_CR2字符串#DefineTELE_InPD_IDR,#3;“PD_IDR,#3”被定义为TELE_In字符串,对PD3引脚控制寄存器、数据输入寄存器进行重命名后,就可以在程序中直接引用,如下所示:

BRESTELE_DDR;与“BRESPD_DDR,#3”指令等效BSETTELE_CR1;与“BSETPD_CR1,#3”指令等效BRESTELE_CR2;与“BRESPD_CR2,#3”指令等效BTJTTELE_In,NEXT1;与“BTJTPD_IDR,#3,NEXT1”指令等效这种做法的好处非常明显,由于某种原因TELE_In信号不从PD3引脚输入,而是从其他引脚输入,则仅需更换程序头中Define指令所指的寄存器名与引脚编号即可。

不过,很少需要在程序中更改引脚输入/输出属性的情况,因此也可以不重定义Px_DDR、Px_CR1、Px_CR2寄存器位,而仅定义数据输出寄存器Px_ODR位(输出引脚)、数据输入寄存器Px_IDR位(输入引脚),如下所示:

;输出引脚BSETPD_DDR,#2;1(输出),输出允许OE/CE,在PD口的b2位BSETPD_CR1,#2;1,互补推挽方式BRESPD_CR2,#2;0,选择低速方式,#defineOE_HT9170PD_ODR,#2;将PD_ODR,#2定义为“OE_HT9170”BSETOE_HT9170;1,开始时OE置为1(允许HT9170解码输出);输入引脚BRESPD_DDR,#7;0(输入),解码有效DV,在PD口的b7位BSETPD_CR1,#7;1,带上拉输入方式BSETPD_CR2,#7;1(允许中断),#DefineDV_HT9170PD_IDR,#7;将“PD_IDR,#7”引脚定义为“DV_HT9170”可以用#define指令定义外设控制寄存器、状态寄存器中的位,提高源程序的可读性。

例如:

#defineRST_SR_IWDGFRST_SR,#1;将“RST_SR,#1”用“RST_SR_IWDGF”字符串取代#defineRST_SR_ILLOPFRST_SR,#2;将“RST_SR,#2”用“RST_SR_ILLOPF”字符串取代由#define定义的符号常量不支持重定义功能,既不能用另一条#define指令再定义同一字符常量,也不能用EQU伪指令再赋值。

2)EQU与CEQU伪指令用EQU(不支持重定义)以及CEQU(可重定义)伪指令可以定义标号常量与变量,按标号定义与书写。

在ST8汇编中,将EQU、CEQU定义的常量、变量视为标号。

例如:

var2EQU$30;把var2定义为30H,var2,既可以视为常量,也可以视为变量。

作变量时,是;RAM还是ROM存储单元,与EQU后指定的数值有关LDA,#var2;立即数寻址,作常量,LDA,var2;直接寻址,即存储单元地址,视为变量。

该指令与“LDA,$30”指令等效CEQU伪指令用法与EQU相似,唯一区别是用CEQU定义的标号常数、变量允许用另一条“CEQU”伪指令重新定义。

由EQU、CEQU伪指令定义的标号常量、变量可以放在RAM、ROM、EEPROM段中,不过最好放在程序头部分。

3)标号属性说明伪指令PUBLIC与EXTERN无论是常量、变量定义标号,还是程序中转移目标地址标号,均存在三个属性:

标号长度(字节标号、字标号、长标号)、作用范围(局部标号、全局标号以及外部标号)、关联性(绝对标号与相对标号)。

标号长度属性可用“.B”(字节标号)、“.W”(字标号)、“.L”(长标号,三个字节)后缀符逐一指定,如下所示:

Labe_2.bEQU$30;字节标号Labe_1.wEQU$30;等同于“Labe_1EQU$30”,字标号,Labe_2.LEQU$1230;长标号(三字节)也可以用“Bytes”、“Words”或“Longs”伪指令指定多个同一种长度类型标号,如下所示:

BytesR00DS.B1R01DS.B1R02DS.B1WordsR10DS.B1R11DS.B1R12DS.B1,凡是没有特别说明的标号,均属于局部标号,只在本模块内有效。

对于全局标号,须用“PUBLIC”伪指令说明或“.label”(带前缀.)声明。

例如:

PUBLICtask_1;用BUPLIC伪指令声明.task_1;直接用前缀点“.”定义全局标号task_1(推荐使用这种方式).task_2;直接用前缀点“.”定义全局标号task_2本模块调用另一个模块定义的全局标号,应在模块头用“EXTERN”伪指令说明该标号来自另一个模块。

例如:

EXTERNtask_1,task_2;说明这两个标号来自另一个模块绝对标号常用于定义常量,程序没有汇编时,标号的值是确定的,如用EQU或#define指令定义的常量标号。

相对标号包括转移指令中的标号、在RAM或EEPROM存储区内用DS(DS.B、DS.W、DS.L)伪指令定义的变量,相对标号的值,即对应的存储单元地址,必须经过编译、连接后才能确定。

4)标号长度定义伪指令位于特定段内的标号地址长度可以是Byte、Word、Long,缺省时标号地址长度为Word,可以重新指定标号的地址长度。

例如,在起始地址为0100的RAM段中,标号地址长度为16位,可以用Long指定为24位(3字节)。

例如:

segmentram1Variable.L;标号Variable的长度定义为long(后缀.L)dc.b$50不能在起始地址为0100H的段内将标号定义为Byte,原因是其物理地址至少为16位;同理,不能将位于10000H单元后的标号定义为.W类型,原因是其物理地址为24位,只能定义为.L类型。

3段定义伪指令Segment段是一个非常重要的概念,段与存储区关联,定义如下:

segmentclasscod其中:

(1)name为段名(最长为12个字符),可选。

(2)align为定位类型:

可以是Byte(字节,其始于任意一个地址)、Word(字,起始于0、2、4等偶数地址)、Long(4个字节,起始于0、4、8、C)等。

(3)combine为组合类型:

可以为at:

x-y(段的起始地址与终了地址)、command(公共段)。

(4)class为段的别名。

引号内为别名,最长为30个字节,不能省略。

例如:

BYTES;8位地址形式标号segmentbyteat00-FFram0;起始地址、终了地址均默认为十六进制,无须加“H”或“$”WORDS;16位地址形式标号segmentbyteat1000-13FFram1WORDS;16位地址形式标号segmentbyteat1400-17FFstackWORDS;16位地址形式标号segmentbyteat4000-47FFeepromWORDS;16位地址形式标号,segmentbyteat8080-27FFFromWORDS;16位地址形式标号segmentbyteat8000-807Fvectit在ST汇编中,一个模块内最多可定义128个段,但至少需要定义一个代码段。

采用下列的段定义,强迫其后定义的变量从字边界开始存放。

segmentLongeeprom;定位类型为Long,即从4字节边界开始。

该段起始地址由前面;别名相同的段指定Var2ds.b2;Var2的地址末位为0、4、8等,4中断服务程序定义伪指令interrupt中断服务程序定义伪指令结构如下:

Interrupt中断入口标号中断入口标号.LIRET;中断返回指令然后,把中断服务程序地址标号填入中断入口地址表中。

5常用条件汇编伪指令ST汇编支持条件汇编伪指令,常用条件汇编伪指令的结构如下:

(1)第一种:

#IF表达式;表达式为真,则汇编随后的指令系列#ELSE;ELSE可选#ENDIF,

(2)第二种:

#IFdef;含义是指定的变量、标号或字符串存在,则;汇编随后的指令(不支持运算符)#ELSE;ELSE可选#ENDIF,6其他1)DC伪指令在ST汇编中,DC伪指令用于在ROM段中定义字节、字、双字常数表,包括了:

DC.Bn1,n2,n3,;字节常数(8位整数)定义伪指令,将随后的一串8位二进制数;(字节,彼此间用逗号隔开)连续存放在ROM存储区中用于定义;字节常数表DC.Wnn1,nn2,nn3;字常数(16位整数)定义伪指令,将随后的一串16位二进制数;(两个字节,彼此间用逗号隔开)连续存放在ROM存储区中用于;定义字常数表,在STM8系列CPU中,字、双字(由四个字节组成)等的存放规则是:

低字节存放在高地址中,高字节存放在低地址中,即采用“大端”方式。

假设在9000H开始的单元中,用DC.W0F012H,5678H定义两个字常数,则这两个16位二进制数的存放规则是:

9000H单元的内容为0F0H(高位字节),9001H单元的内容为12H(低位字节);9002H单元的内容为56H(高位字节),9003H单元的内容为78H(低位字节)。

字存储单元起始于字的低位地址,对应字存储单元的高位字节。

例如,在LDWX,0100H指令中,将0100H单元内容送寄存器XH,将0101H单元内容送寄存器XL。

字可以按“对齐”方式存放,字地址起始于0、2、4、6等偶字节,也可以按“非对齐”方式存放,字地址起始于1、3、5、7等奇字节。

DC.L$82000000;长标号(4字节,即32位整数)定义伪指令。

将随后的一串32位二进制数(四;个字节,彼此间用逗号隔开)连续存放在存储器中用于定义4字节常数表注意:

不能在RAM、EEPROM段中用DC指令定义变量,原因是变量赋值只能在代码段中用“MOV”指令实现。

2)DS伪指令在ST汇编中,用DS伪指令在RAM、EEPROM存储区(段)中定义字节、字、双字变量。

DS.Bn;保留n个字节存储单元(8位)伪指令DS.Wn;保留n个字存储单元(16位)伪指令DS.Ln;保留n个双字存储单元(32位)伪指令例如:

segmentram1Data2ds.b2;在RAM1段内定义了字节变量Data2(预留了两个字节),在程序中,可以使用如下两种方式之一访问:

LDWX,#Data2;变量地址送索引寄存器XLDA,#$5aLD(X),A;通过间接寻址方式访问INCWX;X加1,指向下一个存储单元LD(X),A或LDA,#$5aLDData2,A;用直接寻址方式读写LDData2+1,A;用直接寻址方式读写下一个单元,位于RAM存储区内的字节变量最好用“标号(变量名)ds.bn”伪指令定义;字变量最好用“标号(变量名)ds.wn”伪指令定义,尽量避免用绝对标号EQU或CEQU定义。

这是因为相对标号地址浮动,不会出现资源冲突,这在模块化程序中尤为重要。

不过,用DS.W、DS.L定义字变量、4字节变量时均不能按字节访问,反而不方便,不如将DS.W定义的字变量用DS.B定义2个字节变量方便。

例如:

VAR1DS.W1;VAR1为字变量,只能按字方式访问改为VAR1DS.B2;VAR1为字节变量,既可以按字节访问,也可以按字访问将VAR2DS.W2;VAR1为字变量,只能按字方式访问改为VAR2DS.B2MUL2;VAR1为字节变量,既可以按字节访问,也可以按字访问,3)END伪指令END伪指令表示汇编结束。

该指令将告诉汇编程序,下面没有需要汇编的指令。

在ST汇编中,每一个模块最后一条指令必须为“END”伪指令。

4.2STM8S寻址方式,指令由操作码和操作数组成,确定指令中操作数在哪一个寄存器或存储单元中的方式,就称为寻址方式。

对于只有操作码的指令,如NOP、TRAP等,不存在寻址方式问题;对于双操作数指令来说,每一个操作数都有自己的寻址方式。

例如,在含有两个操作数的指令中,第一操作数(也称为目的操作数)有自己的寻址方式;第二操作数(又称为源操作数)也有自己的寻址方式。

在现代计算机系统中,为减少指令码的长度,对于算术、逻辑运算指令,一般将第一操作数和第二操作数的运算结果经ALU数据输出口回送CPU内部数据总线,再存放到第一操作数所在的存储单元或CPU内某一个寄存器中。

例如,累加器A内容(目的操作数)与某一个存储单元内容(源操作数)相加,所得的“和”将存放到累加器A中,这样就不必为运算结果指定另一个存储单元地址,缩短了指令码的长度。

当然,运算后,累加器A中的原有信息(被加数)将不复存在。

如果在其后的指令中还需用到指令执行前目的操作数的信息,可先将目的操作数保存到CPU内另一个寄存器或存储器的某一个存储单元中。

指令中的操作数只能是下列内容之一:

(1)CPU内某一个寄存器名,如累加器A、索引寄存器X或Y、堆栈指针SP、条件码寄存器CC等。

CPU内含有什么寄存器由CPU的类型决定。

在STM8内核单片机CPU内,就含有累加器A、索引寄存器X和Y、堆栈指针SP、条件码寄存器CC(标志寄存器);而在MCS-51内核单片机CPU内,含有累加器A、通用寄存器B、堆栈指针SP、程序状态字寄存器PSW以及工作寄存器组R7R0。

(2)存储单元。

存储单元地址范围由CPU寻址能力及实际安装的存储器容量、连接方式决定。

(3)外设寄存器包括外设的控制寄存器、状态寄存器与数据寄存器。

在STM8S系统中,与PA口有关的寄存器有PA_DDR(数据传输方向控制寄存器)、PA_CR1与PA_CR2(特性控制寄存器)、PA_ODR(输出数据锁存器)、PA_IDR(输入数据寄存器)。

(4)常数。

常数类型及范围也与CPU类型有关。

下面以STM8内核CPU为例,介绍在计算机系统中常见的寻址方式。

4.2.1立即寻址(Immediate)当指令的第二操作数(源操作数)为8位或16位常数时,就称为立即寻址方式。

其中的常数称为立即数,例如:

LDA,#$5A其中,“#”是立即寻址标识符;$5A为十六进制数5A。

在立即寻址方式中,立即数包含在指令码中,取出指令码时也就取出了可以立即使用的操作数(也正因如此,该操作数被称为“立即数”,并把这种寻址方式形象地称为“立即寻址”方式)。

4.2.2寄存器寻址在寄存器寻址方式中,指令中的操作数为CPU内的某一个寄存器。

例如:

LDA,XL;源操作数为CPU内索引寄存器X的低8位,属于寄存器寻址;目的操作数为累加器A,属于寄存器寻址LDWX,#$12;目的操作数为索引寄存器X,属于寄存器寻址LDWSP,X;源操作数为CPU内索引寄存器X,属于寄存器寻址;目的操作数为堆栈指针SP,属于寄存器寻址,在CISC指令系统中,采用寄存器寻址方式的操作数地址往往隐含在操作码字段(字节)中。

其特点是,指令中的一个或两个操作数采用寄存器寻址方式,指令的机器码短。

例如,“LDA,#23H”指令似乎为3个字节,实际上第一操作数A属于寄存器寻址,操作数地址隐含在操作码字段中,因此该指令机器码为B6H、23H,只有两个字节。

而“LDWSP,X”指令的机器码为94H,只有一个字节,原因是该指令中的两个操作数均属寄存器寻址。

CPU内并非所有的寄存器均支持寄存器寻址,尤其是MCU内的外设寄存器,属于直接寻址而不是寄存器寻址。

例如,“MOVPA_ODR,#0FFH”指令编译后与“MOV5000H,#0FFH”指令等效,即指令中的PA_ODR(PA口数据输出寄存器)操作数为直接寻址,而不是寄存器寻址。

4.2.3直接寻址(Direct)在指令中直接给出操作数所在的存储单元地址。

例如:

LDA,$50;把50H单元内容送累加器A,其中源操作数50H为存储单元地址,属于直接寻址LDA,$5000;把5000H单元内容送累加器A,其中源操作数5000H为存储单元地址(16位地址)LDFA,$015000;把015000H单元内容送累加器A,其中源操作数015000H为存储单元;地址(24位地址)注:

在程序中,一般不宜使用直接地址,而是通过相对标号方式将其定义为一字符串,即变量名,以方便程序的维护与升级。

4.2.4寄存器间接寻址在寄存器间接寻址中,操作数所在存储单元的地址存放在CPU内某一个特定寄存器中。

也就是说,寄存器内容是存储单元地址。

在STM8内核CPU中,索引寄存器X、Y均可作为间接寻址寄存器。

例如:

LDWX,#tabdata;其中tabdata为先前已定义过的标号LDA,(X);把寄存器X内容对应的存储单元信息送累加器ALD(Y),A;把累加器A的内容送寄存器Y指定的存储单元指令中的“()”是间接寻址的标识符。

4.2.5变址寻址(Indexed)STM8内核CPU支持以X、Y、SP作变址的寻址方式,如LDA,(labtab1,x)LDA,(labtab1,y)LDA,(labtab1,sp)LDFA,($010000,x)其中,labtab1为标号,即基地址;x、y、sp为变址寄存器。

在STM8汇编中,对于变址寻址方式,在“基址,变址”形式中,逗号(,)与变址之间不能加“空格”。

例如,(LED_Data,X)是合法的地址,而(LED_Data,X)是非法的地址。

该规则同样适用于复合寻址方式的地址格式,例如,(50H.W,x)是合法的复合地址,而(50H.W,x)属于非法的复合地址。

例如,假设标号labtab1的地址为9000H,而变址寄存器x为120H,则“LDA,(labtab1,x)”指令的含义是把9000H+120H=9120H单元内容传送到寄存器A中。

基地址可以是8位地址形式,即0000页内的RAM单元;16位地址形式,即00段内的RAM单元、FlashROM、EEPROM单元或外设寄存器;24位地址形式,即00FF段内的FlashROM单元。

在变址寻址方式中,标号可以用直接地址取

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

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2