第三章 寻址方式和汇编指令

合集下载

汇编语言程序设计及上机指导第3章指令格式与寻址方式

汇编语言程序设计及上机指导第3章指令格式与寻址方式

高地址
(2)寄存器间接寻址
返回
操作数在存储器中,而操作数的有效地址EA却在指定的寄存器中,
即 EA=[寄存器]
1)16位寻址时,EA放在SI、DI、BP或BX中。
若以SI、DI、BX间接寻址,则默认操作数在DS段中。
MOV AX,[SI]
;默认DS为段基址
若以寄存器BP间接寻址,则默认操作数在堆栈段中。
BX,BP
SI,DI
不用该分量,默 认为1
0,8,16(位)
所有32位通用寄存器
除ESP外的所有32位 通用寄存器
1,2,4,8(倍)
0,8,32(位)
所有32位/64位通用寄存 器(16个)
所有32位/64位通用寄存 器(16个)
1,2,4,8(倍)
0,8,32,64(位)
如:ADD AX,20[BX][SI]
MOV ECX,[EBP+50] ;也可写成 MOV ECX,50[EBP]
MOV DX,[EAX+BASE] ;也可写成 MOV DX,BASE[EAX]
BASE是符号常量或变量
MOV ECX,[EBP+50]指令执行时,EBP寄存器内容为3000H,再加上 位移量50H之和为3050H,然后把由SS寄存器寻址的段中的3050H 单元的32位数据传送给ECX。
最常用的数据传送指令MOV的格式为: MOV DEST,SRC ;将源操作数SRC的值传送至目的操作数
【例】 MOV EAX,EBX ;将EBX的值送给EAX
2019/6/4
3.2.2 有效地址的概念
返回
在80X86系列CPU中,内存单元的地址由两部分组成:
段基地址和段内偏移地址(也称段内偏移量)

微机作业第三章

微机作业第三章

第3章8051指令与汇编程序设计1. 8051微控制器有哪些寻址方式?每种寻址方式使用的变量和寻址空间是什么?8051单片机共有7种寻址方式。

寻址方式是指令中确定操作数的形式,用来确定操作数所处的存储空间。

1.立即寻址:在指令中直接给出操作数MOV A, #80H 8位操作数MOV A, #2000H 16位操作数2.直接寻址:指令中直接给出操作数地址(1)SFR,这一存储空间只能使用直接寻址MOV PSW, #50H(2)内部数据RAM,这一存储空间可以使用直接寻址和寄存器间接寻址MOV A, 30H3.寄存器寻址:以通用寄存器的内容作为操作数(通用寄存器包括A, B, DPTR, R0~R7)INC DPTR注意:A、B既是通用寄存器,也是SFR(直接寻址)4.寄存器间接寻址:以寄存器中的内容作为操作数的地址能够用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP区分内部数据RAM寻址和外部数据RAM寻址:外部数据RAM寻址指令上采用MOVX对内部数据RAM寻址:使用8位的R0或者R1即可MOV @R0, A对外部数据RAM寻址:使用P2端口提供高8位地址,使用R0或者R1提供低8位地址;或者使用16位的DPTR提供地址MOVX A, @R1MOVX @DPTR, A5.变址寻址:以基址寄存器PC或者DPTR与变址寄存器A中的内容之和作为操作数的地址变址寻址只能对程序存储器中的数据进行寻址,由于程序存储器是只读的,因此变址寻址只有读操作,指令上采用MOVCMOVC A, @A+DPTRMOVC A, @A+PC6.相对寻址:用于修改PC的值,使得PC加上指令中给出的一字节的偏移量由于转移指令有两字节和三字节这两种形式,因此偏移量的范围分别为-126~+129和-125~+130SJMP 80H7.位寻址:以位地址中的内容为操作数SETB 20HMOV 32H, C各种寻址方式的使用场合:立即寻址:常数直接寻址:SFR和内部数据RAM寄存器寻址:寄存器区寄存器间接寻址:内部数据RAM和外部数据RAM变址寻址:程序存储器相对寻址:PC位寻址:位地址区2.MOV、MOVX、MOVC指令有什么区别?它们的访问空间分别是什么?①MOV,用于片内数据存储器中的数据传递指令中。

第3章(1) 寻址方式和指令系统

第3章(1) 寻址方式和指令系统

EA的组成不同,寻找其中的操作数的方式也随之不同。如何寻找操作数 的有效地址,进而找到所需操作数的方式就是寻址方式 因为EA的组成方式都体现在指令中,故寻址方式也可以说是在指令中获得 操作数所在地址的方法。
3.1 Pentium的寻址方式
• 指令的两个问题
– 指出进行什么操作 – 涉及的操作数和操作结果放在何处
在这种寻址方式中,操作数是在存储器中,但是,操作 数的地址的16位偏移量包含在以下四个寄存器SI、DI、 BP、BX之一中。这又可分成两种情况: 1、 BX、SI、DI间址时以DS为默认段地址; 例:MOV AX,[SI] 2、BP间址时以SS为默认段地址。 例:MOV AX,[BP]
医药信息工程学院 何永玲
二、操作数存在方式
在微型计算机中,操作数可能以以下四种方式存在:
• 操作数包含在指令中——即指令的操作数场就包含着操作数本身。
MOV AX, 1234 ; ADD AL, 2
• 操作数包含在CPU的某一个内部寄存器中—— 这时指令中的操作数场是
CPU内部 寄存器的一个编码。
MOV DS, AX
• 操 作 数 在 内 存 的 数 据 区 中 —— 这 时 指 令 中 的 操 作 数 场 包 含 着 此 操 作 数 的
医药信息工程学院 何永玲
3.2.2 算术运算指令(1-P88)
– 不带进位位的加法指令ADD
比如: ADD ADD ADD ADD 比如: ADC ADC ADC CX,1000H ;CX=CX+1000h DI,SI [BX+DI],AX EAX,[BX+2000H]
• 无符号数和有符号数采用同一套加法指令及减法 所有算术运算指令均影响状态标志。 指令有两个条件:

第三章操作数的寻址方式

第三章操作数的寻址方式

第一节 汇编指令格式
2、单操作数指令
指令助记符 操作数
只有把数据先送入隐含的寄存器中、才能执行此操
作的指令。
例:mul cx
;(ax) ×(cx)→(dx,ax)
3、无操作数指令 指令助记符
例:clc ;0→cf stc ;1→cf
第二节 操作数的寻址方式
一、概述 二、立即数寻址(imm) 三、寄存器寻址(reg) 四、存储器寻址(mem)
如mov ax,varw
mov ax,[varw]
与立即数寻址的区别
在指令中,直接寻址给出操作数的EA,立 即数寻址给出操作数。
用数字书写时,格式不一样。
mov ax,1234h
mov ax,[1234]
2、寄存器间接寻址
操作数在存储器中,操作数的有效地址用si、di、 bx和bp等四个寄存器之一来指定,称这种寻址方式 为寄存器间接寻址方式。
2、寄存器间接寻址
例:假设有指令:mov ax, [bx],在执行时, (ds)=3000h,(bx)=2000h,存储单元32000h的内容是 1234h。问执行指令后,ax的值是什么?
PA=(ds)*16+(bx)=3000h*16+2000h=32000h (bx)=1234h
图示
3、寄存器相对寻址
立即数寻址(imm)
操作数出现在指令中,是指令的一个组成部分。这 样的操作数叫做立即数.以这种指定操作数的方式 就叫做立即数寻址。 执行过程
例:
mov ah, 80h add ax, 1234h mov b1, 12h mov w1, 3456h add d1, 32123456h
其中:b1、w1和d1分别是字节、字和双字内存变量。

第三章 MCS-51指令系统

第三章 MCS-51指令系统
第三章 MCS-51指令系统
3-1 指令格式 3-2 寻址方式 3-3 数据传送指令 3-4 算术运算指令
3-5 逻辑运算指令
3-6 位操作指令
3-7 控制转移指令
3-8 调用和返回指令
1
第三章 MCS-51指令系统
3-1 指令格式
一、 汇编语言指令格式 [标号:] 操作码 [操作数1],[操作数2][;注释] 例: LOOP: MOV A,#40H ;40H -> A
3-2 指令寻址方式
寻找操作数的方法叫寻址方式。
一、立即寻址方式 指令中给出实际操作数据(立即数), 一般用于为寄存器或存储器赋常数初值。
例:
8位立即数: MOV A,#40H ;A40H 16位立即数: MOV DPTR,#2100H ;DPTR2100H
9
第三章 MCS-51指令系统 二、直接寻址方式
24
第三章 MCS-51指令系统
(四)堆栈操作指令 入栈指令:PUSH n ;SPSP+1,(SP)(n) 出栈指令:POP n ;(n)(SP),SPSP-1 例:设 A=02,B=56H,执行下列指令后,SP= 30H , ? A= ? ,B= ? 30H 30H
SBR: MOV SP,#30H ;设栈底 PUSH A PUSH B MOV A,#0 B, #01
Y1,Y2,…,Yn
5
第三章 MCS-51指令系统
3-1 指令格式
二、 伪指令
汇编时不产生机器码,仅供汇编识别控制。
5.定义空间伪指令:DS 表达式 例3-6 ORG DS DB 0F00H 10H 20H,40H
汇编后,从0F00H开始,保留16个字节的内存单元, 然后从0F10H开始,按照下一条DB伪指令给内存单元赋值, 得(0F10H)=20H,(0F11H)=40H。

第三章MCS51系列单片机指令系统及汇编语言程序设计

第三章MCS51系列单片机指令系统及汇编语言程序设计
AJMP addr11 绝对转移指令为2K地址范围内的转移指令,对转移目的地址的要求与 ACALL指令中对子程序入口地址的要求相同。 【3】短转移指令
SJMP rel ;PC+ 2 + rel→PC 短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码 偏移量,且SJMP rel指令为2字节指令,所以转移范围为-126D~+ 129D 【4】间接转移指令
表3.4 程序存储器空间中的32个基本2K地址范围
0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2FFFH 3000H~37FFH 3800H~3FFFH 4000H~47FFH 4800H~4FFFH 5000H~57FFH
3. 寄存器寻址
以通用寄存器的内容为操作数的寻址方式。通用寄存 器包括:A,B,DPTR,R0~R7。其中,R0~R7必须在 工作寄存器组之中。
例如:INC R0 ;(R0)+1→R0
需要注意的是,A和B既是通用寄存器,又是具有直 接地址的特殊功能寄存器。
4. 寄存器间接寻址
以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够 用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必 须在工作寄存器组之中,SP仅用于堆栈操作。
MCS-51单片机共有111条指令,按功能分类, MCS-51指令系统可分为5大类:
➢ 数据传送类指令(共29条) ➢ 算术操作类指令(共24条) ➢ 逻辑操作类指令(共24条) ➢ 控制转移类指令(共17条) ➢ 布尔变量操作类指令(共17条)
1.数据传送类指令(共29条)
以累加器A为目的操作数类指令(4条)

3. 寻址方式与指令系统

3. 寻址方式与指令系统

算术运算类指令
加法指令(Addition) 带进位加法指令(Add with carry) 加1指令(Increment) 减法指令(Subtraction) 带借位减法(Subtract with borrow) 减1指令(Decrement) 求负数指令(Negative)
加法指令(Addition)
指令格式:add dest,src 功能:目的操作数和源操作数相加,其和数 存放在目的操作数中,源操作数原有内容不 变。 根据相加结果设置标志寄存器中的CF、PF、 AF、ZF、SF和OF。 Add指令可以进行字或字节操作。 对src和dest的具体内容的要求。
加法指令
Add ax,bx Add al,bl Add cx,20 Add cl,0A4h Add dl,da_byte Add da_word[si],dx 对于第四条指令,如果(cl) = 0e5h,
指令格式
双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR
传送类指令
数据传送指令(move) mov dest,src 可以进行字节数据传送,也可以进行字数据 传送。 mov cl,05h ;字节传送 mov ax,1234h ;字传送 mov da_byte,12h ;字节传送 mov da_word,1234h ;字传送
位操作类指令
逻辑运算指令(Logical) 测试指令(Test) 移位/循环移位指令(shift/rotate) 处理器控制类指令
逻辑运算指令(Logical)
数据传送指令(move)
寄存器之间的传送 mov dl,cl ;字节传送 mov ax,bx ;字传送 mov ds,ax ;通用寄存器和段寄存器之间的 传送

汇编语言第3章 指令系统和寻址方式

汇编语言第3章 指令系统和寻址方式

5.寄存器相对寻址方式(register relative addressing)
EA=基址(base) 或变址( index)+偏移量 (displacement)
基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)+displacement
(DI) =(SS)*16+(BP)+ (SI)+displacement (DI)
例:mov AX,ARRAY[BX][DI] (DS)=1000H,(BX)=1200H, (DI)=1000H, ARRAY=1000H 物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:ARRAY[BX][DI] 用途:处理成组数据(举例说明)
2.段内间接寻址(intrasegment indirect addressing) (IP)新=EA=寄存器或存储单元的内容 寄存器:所有寄存器寻址方式可用的寄存器 存储单元:所有存储单元寻址方式均适用 例:JMP SI (IP)=(SI) JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段 (SI) 物理地址=(DS)*16+(BX) (DI) =(SS)*16+(BP)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

loc32:32位寻址方式指定地址单元的内容。
#16bitsigned:16位有符号立即数。
7
§3.2 寻址方式
C28x系列DSP的指令集采用7种寻址方式:
直接寻址方式 堆栈寻址方式 间接寻址方式 寄存器寻址方式 数据/程序/IO空间寻址方式 程序空间间接寻址方式 字节寻址方式
8
F2812的大多数指令利用操作码中的8位字段来选 择寻址方式和对寻址方式进行修改.在F2812指令系统 中,这个8位字段用于以下寻址方式:
6
2、汇编语法指令描述
汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记符,它
是指令中的关键字,表示本条指令操作类型,不能省略。操作数可以省略,也
可以有很多,但各操作数之间要用“,”分开。指令助记符与操作数之间要用空
格分开。
ARn :
n为数值0~7,ARn指定下次的辅助寄存器。
பைடு நூலகம்
ind :
选择以下7种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式
使用)。
#:立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数
<< 左移。
>> 右移。
@:
当使用C28x语法时,64位字段数据与通过“@”符号来表示,以帮助程
序员理解当前正在使用哪种寻址模式。
@@:
当使用C28x语法时,128位字段数据页通过“@@”符号来表示。
loc16:16位寻址方式指定地址单元的内容。
将Loc32寻址方式对应的32位数据进行符号扩展
表示7位立即数
7位立即数,零扩展
7位立即数,符号扩展
表示8位立即数
8位立即数,零扩展
3
续:
S:8bit
8位立即数,符号扩展
10bit
表示10位立即数
0:10bit
10位立即数,零扩展
S:10bit
10位立即数,符号扩展
16bit
表示16位立即数
0:16bit
√ – v28
;假定AMODE=0(C28x寻址方式)
– v28 – m20 ;假定AMODE=1(与C2xLP全兼容的寻址方式)
√ 在文件中使用内嵌伪指令
. c28_amode ;告诉汇编器后面的代码段都假定AMODE=0
(C28x寻址方式)
. lp_amode ;告诉汇编器后面的代码段都假定AMODE=1(与
引。 C28x的间接寻址方式下的loc16/loc32的语法说明:
AMODE X X X X X
Loc16/32语法 *XARn++
说明
ARP=n (31~0)=XARn 如果loc16,XARn=XARN+1 如果loc32,XARn=XARN+2
*--XARn
ARP=n
(31~0)=XARn 如果loc16,XARn=XARN-1 如果loc32,XARn=XARN-2
寻址范围
数据空间的低 64K字的范围
13
例1、带偏移量的堆栈寻址方式访问堆栈区16/32数据,当AMODE=0时:
ADD AL,*-SP[5]
;将(SP-5)指向堆栈单元的16位内容加到AL
MOV *-SP[8],AL ;将AL中的16位内容存入(SP-8)指向的堆栈单元
ADDL ACC,*-SP[12] ;将(SP-12)指向的堆栈单元的32位内容加到ACC
ADD AL,*--SP
;SP=SP-1,再把新SP指向的16位堆栈的内容加到AL中
MOVL ACC,*--SP ;SP=SP-2,再把新的SP指向的32位堆栈内容移到ACC中
14
3、间接寻址方式
XAR0~XAR7(辅助寄存器指针),该方式下,32位的XARn寄存 器被当做一般的数据指针。通过相应的指令可以实现操作后XARn加1、 操作前/后减1,或由3位立即数偏移量或另一个16位寄存器的内容来索
▲ AMODE=0—该方式是复位后的默认方式,也是F2812 的C/C++编译器使用的方式。这种方式与C2xLP CPU的寻 址方式不完全兼容。数据页指针偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1—该方式包括的寻址方式完全与C2xLP 器
件的寻址方式兼容。数据页指针的偏移量是7位并支持所
32位辅助寄存器XAR0~XAR7
32位辅助寄存器XAR0~XAR7的低16位
32位辅助寄存器XAR0~XAR7的高16位
32位辅助寄存器指针,ARP0指向XAR0,ARP1指向XAR1……
ARP指向的辅助寄存器的低16位
ARP指向的辅助寄存器
累加器的高16位寄存器AH或者16位寄存器AL
立即数助记符
描述 不等于 等于 大于(有符号减法) 大于或等于(有符号减法) 小于(有符号减法) 小于或等于(有符号减法) 高于(无符号减法) 高于或相同(无符号减法) 低于(无符号减法) 低于或相同(无符号减法) 无溢出 溢出 测试位为0 测试位为1 BIO输入等于零 无条件
测试标志位
Z=0 Z-1 Z=0且N=1 N=0 N=1 Z=1或N=1 C=1且Z=0 C=1 C=0 C=1或Z=0 V=0 V=1 TC=0 TC=1 BIO=0
MOVL *-SP[34],ACC ;将ACC中的32位内容存入(SP-34)指向的堆栈单元
例2、利用堆栈寻址方式递增访问堆栈区16/32为数据:
MOV *SP++,AL ;将16位AL寄存器的值压入栈顶,且SP=SP+1 MOVL *SP++,P ;将32位P寄存器的值压入栈顶,且SPSP+2
例3、通过堆栈寻址方式递减访问堆栈区16/32数据:
寄存器寻址方式下的loc16/loc32语法说明:
AMODE X
Loc16/loc32语法
说明
@ACC
访问32位寄存器ACC。当寄存器@ACC位目的地操作
数是,Z、N、V、C、OVC等标志可能会受到影响
有C2xLP 支持的间接寻址方式
在F2812间接寻址方式中,使用哪个辅助寄存器指针在指令中并不
被明确指出。而在C2xLP的间接寻址方式中,3位长度的辅助寄存器
指针被用来选择当前使用哪个辅助寄存器以及下次操作将使用哪个辅
助寄存器
10
➢ 汇编器/编译器对AMODE位的追踪
编译器总是假定AMODE=0,所以它只使用对AMODE=0 有效的寻址模式。而汇编器可以通过设置命令行选项实现默认 AMODE=0或者AMODE=1
22位地址的构成:
31 21
0
0 DP寄存器的值(15~0或15~1) 来自指令中偏移量(6位或7位)
12
2、堆栈寻址方式
SP(堆栈指针),这种方式下,16位的SP指针被用来访问软件堆栈 的内容。C28x系列的堆栈是从存储器的低地址变化到高地址的,SP总是 指向下一个空的存储单元。指令提供6位的偏移量,该偏移量是从当前的 堆栈指针值中抽取出来的,用以访问堆栈中的数据。在数据入栈和出栈 时,该偏移量也可分别用于堆栈指针操作后的增加或操作前的减少。
*+XARn[AR0]
ARP=n (31~0)=XARn+AR0
*+XARn[AR1]
ARP=n
(31~0)=XARn+AR1
*+XARn[3位数]
ARP=n
(31~0)=XARn+三位数
15
4、寄存器寻址方式
该寻址方式下,寄存器可以是访问的源操作数,也可以是目标操
作数,这样在C28x中就能实现寄存器到寄存器的操作。这一方式包括 对32位和16位寄存器的寻址
通过状寄存器STl的位OBJMODE和位AMODE的组合来选定模式。 3种操作模式:
C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址 方式和指令系统,因此,一般应使C28x芯片工作于该种模式。
C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标—兼 容模式。在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数 也与C27xCPU兼容。
(1)loc16 为16位数据访问选择直接/堆栈/间接/寄 存器寻址方式
(2)loc32 为32位数据访问选择直接/堆栈/间接/寄 存器寻址方式
以上7种寻址方式都与“loc16/loc32”组合起来使用
9
➢ 寻址方式选择位
由于F2812 提供了多种寻址方式, 因此用寻址方式选择 位(AMODE)来选择8位字段(loc16/loc32)的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下:
直接寻址方式下loc16/loc32的语法说明:
AMODE (ST1.8)
偏移量
0
@6位数
1
@@7位数
每页大小 64字 128字
32位数据地址
(32~22)=0 (21~6)=DP:15~0 (5~0)=6位数
(32~22)=0 (21~7)=DP:15~0 (6~0=7)位数
寻址范围
数据空间的低 4M字的范围
堆栈寻址方式下loc16/loc32的语法说明:
AMODE (ST1.8)
0 X
X
偏移量
32位数据地址
*-SP[6位] *SP++ *--SP
(32~16)=0 (15~0)=SP-6位
(32~16)=0 (15~0)=SP 如果loc16,SP=SP+1 如果loc132,SP=SP+2
(32~16)=0 (15~0)=SP 如果loc16,SP=SP-1 如果loc132,SP=SP-2
相关文档
最新文档