第三章 寻址方式和汇编指令
合集下载
第3章 寻址方式与指令系统(逻辑运算指令和串操作指令)
目录 上页 下页 结束
1. 基本串操作指令
⑴ 串传送指令MOVS(move string)
把字节或字操作数从主存的源地址传送
至目的地址
MOVSW ;字串传送:ES:[DI]←DS:[SI], ; SI←SI±2,DI←DI±2 MOVSB ;字节串传送:ES:[DI]←DS:[SI], ; SI←SI±1,DI←DI±1
算术运算指令总结
四则运算是计算机经常进行的一种操作。算
术运算指令也是经常使用的一类指令。 要求重点掌握: ADD/ADC SUB/SBB INC/DEC CMP 8086除直接支持二进制数的算术运算;还提 供对BCD码运算的调整指令,实现了间接的 十进制算术运算操作。
目录 上页 下页 结束
;AL=02H
CF
0 01000110 10 1 0
循环移位指令示例
MOV AL,46H MOV CL,2 ROL AL,CL
;AL←18H,CF=1,OF=0。
目录 上页 下页 结束
-18-
例:用移位指令实现乘法功能
求:ax×3+bx×7
mov shl add mov mov shl sub add
-5-
目录
上页
下页
结束
逻辑异或指令XOR
逻辑异或运算:两数按相同为0,不同为1的运 算原则进行运算,结果送目的操作数。
1. 基本串操作指令
⑴ 串传送指令MOVS(move string)
把字节或字操作数从主存的源地址传送
至目的地址
MOVSW ;字串传送:ES:[DI]←DS:[SI], ; SI←SI±2,DI←DI±2 MOVSB ;字节串传送:ES:[DI]←DS:[SI], ; SI←SI±1,DI←DI±1
算术运算指令总结
四则运算是计算机经常进行的一种操作。算
术运算指令也是经常使用的一类指令。 要求重点掌握: ADD/ADC SUB/SBB INC/DEC CMP 8086除直接支持二进制数的算术运算;还提 供对BCD码运算的调整指令,实现了间接的 十进制算术运算操作。
目录 上页 下页 结束
;AL=02H
CF
0 01000110 10 1 0
循环移位指令示例
MOV AL,46H MOV CL,2 ROL AL,CL
;AL←18H,CF=1,OF=0。
目录 上页 下页 结束
-18-
例:用移位指令实现乘法功能
求:ax×3+bx×7
mov shl add mov mov shl sub add
-5-
目录
上页
下页
结束
逻辑异或指令XOR
逻辑异或运算:两数按相同为0,不同为1的运 算原则进行运算,结果送目的操作数。
第三章 寻址方式与指令系统
不能用于条件转移 例:JMP FAR PTR ADD_TO
ADD_TO是另一代码段中的符号地址
19
转移地址相关的寻址方式
段间间接寻址(Intersegment Indirect addressing) 在不同的段间转移 需要修改CS寄存器;同时,也要修改IP 段地址和有效地址在内存中,需四个单元 首单元地址由指令中指定的寻址方式确定 汇编指令格式: JMP DWORD PTR 符号地址
例1:JMP BX 执行后: 转移的有效地址(IP)=(寄存器)/(内存单元) (IP)=1256H 物理地址=16d*(CS)+ (寄存器)/(内存单元) 例2:JMP TABLE[BX] 执行后: (IP)=(16*(DS)+(BX)+偏移量) 不能用于条件转移 =(232F7H)=3280H 例3:JMP [BX][SI] (IP)= (16*(DS)+(BX)+(SI)) =(264E5H)=2450H
其中:DWORD PTR是段间间接转移的操作符
不能用于条件转移
20
段间间接转移的寻址过程
例:假设(DS)=1000H,(CS)=3000H JMP DWORD PTR [2000H]
计算首地址
(DS)*16+2000H =12000H
21
寻址方式总结
与数据相关的寻址方式
第三章MCS51系列单片机指令系统及汇编语言程序设计
例如: MOVX A, @R1 ;外部数据RAM中地址为P2R1的单元内容→A MOVX @DPTR,A ;A→外部数据RAM中DPTR为地址的单元
寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。 内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。 外部数据RAM最大可达64K字节,仅用R0或R1无法寻址整个空间。在 MCS-51系列单片机指令中,对外部数据RAM作间接寻址有两种方法:第一种 由P2口提供高8位外部数据RAM地址,由R0或R1提供低8位地址,由此共同 寻址64K空间;第二种是用16位的DPTR作寄存器间接寻址。
3.1 MCS-51单片机的寻址方式
MCS-51单片机共有7种寻址方式:
➢ 立即寻址 ➢ 直接寻址 ➢ 寄存器寻址 ➢ 寄存器间接寻址 ➢ 变址寻址 ➢ 相对寻址 ➢ 位寻址
1. 立即寻址
立即寻址就是把操作数直接在指令中给出,即操作 数包含在指令中。立即操作数有8位和16位两种形式, 前面加“#”来表示。
CLR A ;0→A,累加器A中的内容清零 循环移位指令(4条)
RL A ;累加器A中的内容左移一位 RR A ;累加器A中的内容右移一位 RLC A ;累加器A中的内容连同进位位C左移一位 RRC A ;累加器A中的内容连同进位位C右移一位 例:A=16H,指令RR A执行后,A=0BH。
4.控制转移类指令 (共17条)
寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。 内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。 外部数据RAM最大可达64K字节,仅用R0或R1无法寻址整个空间。在 MCS-51系列单片机指令中,对外部数据RAM作间接寻址有两种方法:第一种 由P2口提供高8位外部数据RAM地址,由R0或R1提供低8位地址,由此共同 寻址64K空间;第二种是用16位的DPTR作寄存器间接寻址。
3.1 MCS-51单片机的寻址方式
MCS-51单片机共有7种寻址方式:
➢ 立即寻址 ➢ 直接寻址 ➢ 寄存器寻址 ➢ 寄存器间接寻址 ➢ 变址寻址 ➢ 相对寻址 ➢ 位寻址
1. 立即寻址
立即寻址就是把操作数直接在指令中给出,即操作 数包含在指令中。立即操作数有8位和16位两种形式, 前面加“#”来表示。
CLR A ;0→A,累加器A中的内容清零 循环移位指令(4条)
RL A ;累加器A中的内容左移一位 RR A ;累加器A中的内容右移一位 RLC A ;累加器A中的内容连同进位位C左移一位 RRC A ;累加器A中的内容连同进位位C右移一位 例:A=16H,指令RR A执行后,A=0BH。
4.控制转移类指令 (共17条)
第三章 寻址方式和汇编指令.
14
3、间接寻址方式
XAR0~XAR7(辅助寄存器指针),该方式下,32位的XARn寄存 器被当做一般的数据指针。通过相应的指令可以实现操作后XARn加1、 操作前/后减1,或由3位立即数偏移量或另一个16位寄存器的内容来索 引。
C28x的间接寻址方式下的loc16/loc32的语法说明:
AMODE Loc16/32语法 说明 ARP=n (31~0)=XARn 如果loc16,XARn=XARN+1 如果loc32,XARn=XARN+2 ARP=n (31~0)=XARn 如果loc16,XARn=XARN-1 如果loc32,XARn=XARN-2 ARP=n (31~0)=XARn+AR0 ARP=n (31~0)=XARn+AR1 ARP=n (31~0)=XARn+三位数
第三章 寻址方式和汇编指令
§3.1 汇编语言指令集概述 §3.2 寻址方式 §3.3 C28x汇编操作指令 §3.4 汇编程序
1
§3.1 汇编语言指令集概述
在TMS320C2000系列中,CPU内核为: C20x/C24x/C240x:C2xLP: C27x/C28x:C27x、C28x 这些CPU的硬件结构有一定差别,指令集也不相同,但在C28x芯片 中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具 有最佳兼容性。 通过状寄存器STl的位OBJMODE和位AMODE的组合来选定模式。 3种操作模式: C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址 方式和指令系统,因此,一般应使C28x芯片工作于该种模式。 C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标—兼 容模式。在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数 也与C27xCPU兼容。 C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这 些源代码是用C28x代码生成工具编译生成的。
微型计算机原理与接口技术 第3章 寻址方式和指令系统new
作为目的操作数 MOV [VALUE+BX+DI],AH
相对基址变址寻址适用场合
这种寻址方式通常用于对二维数组的寻 址。如存储器中存放着由多个记录组成 的文件,则位移量可指向文件的首部, 基址寄存器指向某个记录,变址寄存器 指向该记录中的一个元素。
与数据有关的寻址方式总结
寻址方式名称 有效地址的三种成分 位移 量 寄存器寻址 基址 寄存 器 变址 寄存 器 MOV AX,BX 格式(以数据传送指令为例)
段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址
段内直接寻址
转向的有效地址是指令中的8位(转移范 围在-128~+127字节之间的短转移)或 16位(转移范围在-32768~+32767字节 之间的近转移)位移量与当前IP内容之 和 JMP SHORT NEXT JMP NEAR PTR NEXT(或 JMP NEXT)
当前IP
机器语言指令
计算机并不认识用汇编语言编写的程序, 只有用汇编程序(如微软的宏汇编程序 MASM.EXE)将源程序翻译成计算机能认 识的二进制机器语言指令(机器码)后, 才能被计算机识别和执行 汇编语言指令与机器指令是一一对应的
机器语言指令的编码特点
8086的指令的二进制编码长度不是固定 的,而是可变的,最短的为1个字节,最 长的为6个字节; 不同指令,其编码是不一样的; 同一条指令的机器码和编码长度也会随 寻址方式不同而不同
相对基址变址寻址适用场合
这种寻址方式通常用于对二维数组的寻 址。如存储器中存放着由多个记录组成 的文件,则位移量可指向文件的首部, 基址寄存器指向某个记录,变址寄存器 指向该记录中的一个元素。
与数据有关的寻址方式总结
寻址方式名称 有效地址的三种成分 位移 量 寄存器寻址 基址 寄存 器 变址 寄存 器 MOV AX,BX 格式(以数据传送指令为例)
段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址
段内直接寻址
转向的有效地址是指令中的8位(转移范 围在-128~+127字节之间的短转移)或 16位(转移范围在-32768~+32767字节 之间的近转移)位移量与当前IP内容之 和 JMP SHORT NEXT JMP NEAR PTR NEXT(或 JMP NEXT)
当前IP
机器语言指令
计算机并不认识用汇编语言编写的程序, 只有用汇编程序(如微软的宏汇编程序 MASM.EXE)将源程序翻译成计算机能认 识的二进制机器语言指令(机器码)后, 才能被计算机识别和执行 汇编语言指令与机器指令是一一对应的
机器语言指令的编码特点
8086的指令的二进制编码长度不是固定 的,而是可变的,最短的为1个字节,最 长的为6个字节; 不同指令,其编码是不一样的; 同一条指令的机器码和编码长度也会随 寻址方式不同而不同
计算机原理_3寻址方式和指令系统
计算机原理_3寻址方式和指令系统
寻址方式和指令系统是计算机原理中非常重要的概念,它们决定了计算机能够进行的操作和数据的处理方式。下面将从寻址方式和指令系统的概念、分类和特点三个方面详细介绍。
一、寻址方式
在计算机中,寻址方式是指CPU访问内存中数据的方式。常见的寻址方式包括直接寻址、间接寻址、变址寻址和相对寻址等。
1、直接寻址
直接寻址是指通过给出数据的内存地址来访问数据。在直接寻址中,指令中给出了待访问的内存地址,CPU直接从该内存地址中读取/写入数据。
2、间接寻址
间接寻址是指通过寄存器中的地址来访问数据。在间接寻址中,指令中给出了一个寄存器的编号,CPU将寄存器中的地址作为内存地址进行读取/写入操作。
3、变址寻址
变址寻址是指通过给出基地址和偏移量来计算内存地址的方法。在变址寻址中,指令中给出了一个基地址和一个偏移量,CPU通过将两者相加来得到最终的内存地址进行操作。
4、相对寻址
相对寻址是指通过给出相对于指令计数器的偏移量来计算内存地址的
方式。在相对寻址中,指令中给出了一个偏移量,CPU将偏移量与指令计
数器相加来得到最终的内存地址。
二、指令系统
指令系统是指计算机可以执行的指令的集合。根据指令的类型和功能
划分,指令系统可以分为以下几种类型。
1、数据传输指令
数据传输指令用于在CPU和内存、寄存器之间传输数据。例如,将内
存中的数据传送到寄存器中或将寄存器中的数据传送到内存中等。
2、算术指令
算术指令用于进行数值运算,如加、减、乘、除等。这些指令可以对
寄存器或内存中的数据进行算术运算,并将结果存放在寄存器或内存中。
第3章寻址方式及指令系统
3.2.1.2 寄存器寻址方式
• 指令中出现的寄存器名作为操作数的寻址方式叫 寄存器寻址方式。 • 操作对象是寄存器中的内容。
• • • •
例3.2: MOV AX,BX MOV DH,CL MOV DS,AX
注意:
• 汇编指令涉及到的寄存器名有20个。其中,字节寄存器只有 AH AL BH BL CH CL DH DL • 寄存器寻址既可以作DST,也可以作SRC。源操作数和目的 操作数的字长一致 图例 • CS 不能作为目的操作数 如:MOV CS, AX 错
操作数可能的存放方式:
–直接包含在指令中 立即数 –包含在某个寄存器中 寄存器操作数 –在内存中 存储器操作数(内存操作数) –在端口中 端口操作数 立即寻址方式
寄存器寻址方式
存储器寻址方式
端口寻址方式
②操作数的分类:
• 根据其在指令中的位置分为第一操作数和第二操作数以及隐 含操作数(无操作数,在指令中不会出现但会用到);
同一系列机的指令都是兼容的。
二、程序执行的基本流程 • 程序是为了解决某一问 题而编写的有限指令序 列。 • 指令的执行过程主要有 两个阶段:取指阶段和 分析执行阶段。
图3.1 程序执行流程图
三、指令的级别
机器级和汇编级 • 机器指令是指由二进制代码构成的可由CPU 直接理解并执行的指令; • 汇编指令实质上是机器指令符号化的结果, 它与机器指令是一对一的。 • 例如:
第3章 寻址方式与指令系统
第3章 寻址方式与指令系统
指令系统概述 8086寻址方式
8086指令系统
1
指令系统概述
1.指令的基本概念 指令——控制计算机完成指定操作的命令 机器语言指令——指令的二进制代码形式。 【例】 B8 45 14 汇编语言指令——助记符形式的指令,又称符号指令。 【例】 MOV AX,1445H 指令系统——CPU所有指令及其使用规则的集合
25
通用数据传送指令三:寄存器与存储器之间的数据传送 MOV MOV MOV MOV MOV MOV AL,BUFFER;BUFFER为变量 AX,[SI] SI,ES:[BP] DS,DATA[BX+SI] ALFA[BX+DI],ES AL,[2000H]
存储器的数据类型与寄存器要一致 通用数据传送指令四:立即数到存储器的数据传送 MOV WORD PTR [2000H],1000H MOV BYTE PTR[SI],15 MOV ALFA,25 ;ALFA已定义,类型确定 一定要使立即数与存储器数据类型一致
操作数的物理地址=段地址16+EA
【例】
MOV AX,[0100H] ;PA=DS16+0100H
MOV AX,[BX]
;PA=DS 16+BX
6
与数据有关的寻址方式:以 MOV指令为例
• 立即寻址 • 寄存器寻址 • 直接寻址 • 寄存器间接寻址 MOV AX , 3069H MOV AL , BH MOV AX , [ 2000H ] MOV AX , [ BX ]
指令系统概述 8086寻址方式
8086指令系统
1
指令系统概述
1.指令的基本概念 指令——控制计算机完成指定操作的命令 机器语言指令——指令的二进制代码形式。 【例】 B8 45 14 汇编语言指令——助记符形式的指令,又称符号指令。 【例】 MOV AX,1445H 指令系统——CPU所有指令及其使用规则的集合
25
通用数据传送指令三:寄存器与存储器之间的数据传送 MOV MOV MOV MOV MOV MOV AL,BUFFER;BUFFER为变量 AX,[SI] SI,ES:[BP] DS,DATA[BX+SI] ALFA[BX+DI],ES AL,[2000H]
存储器的数据类型与寄存器要一致 通用数据传送指令四:立即数到存储器的数据传送 MOV WORD PTR [2000H],1000H MOV BYTE PTR[SI],15 MOV ALFA,25 ;ALFA已定义,类型确定 一定要使立即数与存储器数据类型一致
操作数的物理地址=段地址16+EA
【例】
MOV AX,[0100H] ;PA=DS16+0100H
MOV AX,[BX]
;PA=DS 16+BX
6
与数据有关的寻址方式:以 MOV指令为例
• 立即寻址 • 寄存器寻址 • 直接寻址 • 寄存器间接寻址 MOV AX , 3069H MOV AL , BH MOV AX , [ 2000H ] MOV AX , [ BX ]
汇编语言第3章 指令系统和寻址方式
例:某接口的命令寄存器(port=126)的D7位控制成组 数据传送。发送成组传送命令。 MOV DX,126H IN AL, DX OR AL, 80H OUT DX, AL
• XLAT 换码指令(translate) *专用AL,BX 表长不超过256
例:LEA BX, TABLE ; (BX)=0040H
• 段超越 • 寻址方式 (一)与数据有关的寻址方式 1.立即数寻址(Immediate addressing) 例: mov AL,5 (AL)=5 用途:初始化
2.寄存器寻址(Register addressing) 例: mov AL,DH (AL)=(DH) mov BX,SI (BX)=(SI) 寄存器有:AX,BX,CX,DX,SP,BP,SI,DI AH,AL,BH,BL,CH,CL,DH,DL 用途:单个数据传送
6.基址变址寻址方式(based indexed addressing)
EA=基址(base)+变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
物理地址=(DS)*16+(BX)+ (SI)
(DI) =(SS)*16+(BP)+ (SI) (DI)
① ② ③ ④ MOV mem/reg1,mem/reg2 MOV reg/mem, data MOV segreg, mem/reg MOV mem/reg, segreg
汇编语言程序设计 第3章 8086 8088寻址方式和指令系统
1、直接寻址方式 2、寄存器间接寻址方式 3、寄存器相对寻址方式 4、基址变址寻址方式 5、相对基址变址寻址方式
2013-12-10
第3章
8086/8088寻址方式和指令系统
19
安徽工业大学
3.2
网络工程系
《汇编语言程序设计》
8086/8088寻址方式
3.2.1
与数据有关的寻址方式
8086/8088只能使用16位寻址方式,对以上3种成分的组 成有着不同的规定,详见表3.1。
CS→ AX 45 76
执行后:(AX)=4576H
OP
76H 45H
MOV AX,4576H
指令的存储形式
2013-12-10
第3章
8086/8088寻址方式和指令系统
13
安徽工业大学
3.2
网络工程系
《汇编语言程序设计》
8086/8088寻址方式
3.2.1
与数据有关的寻址方式
2.寄存器寻址方式 定义:指令所要的操作数已存储在某寄存器中,或把目标操 作数存入寄存器。把在指令中指出所使用寄存器(即:寄存 器的助记符)的寻址方式称为寄存器寻址方式。 汇编格式:R (其中R表示寄存器名,如AX、BX等。) 功能:操作数直接存放在寄存器R中。
执行后:(AX)=68ACH,(BX)=5678H
第3章 8086/8088寻址方式和指令系统
2013-12-10
第3章
8086/8088寻址方式和指令系统
19
安徽工业大学
3.2
网络工程系
《汇编语言程序设计》
8086/8088寻址方式
3.2.1
与数据有关的寻址方式
8086/8088只能使用16位寻址方式,对以上3种成分的组 成有着不同的规定,详见表3.1。
CS→ AX 45 76
执行后:(AX)=4576H
OP
76H 45H
MOV AX,4576H
指令的存储形式
2013-12-10
第3章
8086/8088寻址方式和指令系统
13
安徽工业大学
3.2
网络工程系
《汇编语言程序设计》
8086/8088寻址方式
3.2.1
与数据有关的寻址方式
2.寄存器寻址方式 定义:指令所要的操作数已存储在某寄存器中,或把目标操 作数存入寄存器。把在指令中指出所使用寄存器(即:寄存 器的助记符)的寻址方式称为寄存器寻址方式。 汇编格式:R (其中R表示寄存器名,如AX、BX等。) 功能:操作数直接存放在寄存器R中。
执行后:(AX)=68ACH,(BX)=5678H
第3章 8086/8088寻址方式和指令系统
第三章操作数的寻址方式
3、寄存器相对寻址
例:mov al,[bx+1000h]
;(al)←((ds)×16+(bx)+(1000h))
mov ax,es:[bp+06h]
;(ax)←((es)×16+(bp)+(06h))
3、寄存器相对寻址
例:假设指令:mov ax, [bx+1000h],在执行它时, (ds)=3000h,(bx)=1000h,内存单元32000h的内容 为1234h,问该指令执行后,bx的值是什么?
5、基址变址相对寻址
例:mov ax,[bx+si+06h]
;(ax)←((ds)×16+(bx)+(si)+06h)
mov ax,[bp+si+06h]
;(ax)←((ss)×16+(bx)+(si)+06h)
图示
5、基址变址相对寻址
例: 假设指令:mov ax, [bx+si+1000h],在执行 时,(ds)=3000h,(bx)= 700h,(si)=300h,内存 单元32000h的内容为1234h。问指令执行后,ax的 值是什么?
2、寄存器间接寻址
例:假设有指令:mov ax, [bx],在执行时, (ds)=3000h,(bx)=2000h,存储单元32000h的内容是 1234h。问执行指令后,ax的值是什么?
汇编语言讲义第三章 80x86的寻址方式
起放在代码段,而操作数则在数据段中。操作数的地址是数据段寄存器DS中
…
的内容左移4位后,加上指令给定的16位地址偏移量。
• 默认段为数据段。
CS
例7 MOV AX,[2000H] ;((DS)×10H+Biblioteka Baidu000H)→AX
A1H 00H 20H
…
执行前:(DS)= 3000H
执行后:(AX)= 5050H
DS
20020H
89H 37H
… … … …
AX
00 00H
例13 MOV 6[BP],BX
; (BX)→(SS)×10H+(BP)+6
…
执行前:(BX)= 4000H,(BP)= 30H,
(SS)= 2000H,(20036H)= 0000H 执行后:(BX)= 4000H,(BP)= 30H, (SS)= 2000H,(20036H)= 4000H
结构的需要,这个段内偏移地址可以由
几个部分组成,把它称为有效地址EA。
1、立即寻址方式:n
• 所提供的操作数(立即数)紧跟在操作码的后面,与操作码一起放在指令代
码段中。
• 立即数可以是8位数或16位数。 • 只能用于源操作数字段,不能用于目的操作数字段,经常用于给寄存器赋初
值。 例1 MOV AL,18 ; 18→AL 以下为错误的指令:
…
的内容左移4位后,加上指令给定的16位地址偏移量。
• 默认段为数据段。
CS
例7 MOV AX,[2000H] ;((DS)×10H+Biblioteka Baidu000H)→AX
A1H 00H 20H
…
执行前:(DS)= 3000H
执行后:(AX)= 5050H
DS
20020H
89H 37H
… … … …
AX
00 00H
例13 MOV 6[BP],BX
; (BX)→(SS)×10H+(BP)+6
…
执行前:(BX)= 4000H,(BP)= 30H,
(SS)= 2000H,(20036H)= 0000H 执行后:(BX)= 4000H,(BP)= 30H, (SS)= 2000H,(20036H)= 4000H
结构的需要,这个段内偏移地址可以由
几个部分组成,把它称为有效地址EA。
1、立即寻址方式:n
• 所提供的操作数(立即数)紧跟在操作码的后面,与操作码一起放在指令代
码段中。
• 立即数可以是8位数或16位数。 • 只能用于源操作数字段,不能用于目的操作数字段,经常用于给寄存器赋初
值。 例1 MOV AL,18 ; 18→AL 以下为错误的指令:
第3章指令格式及寻址方式(汇编语言)
3
2018年9月6日星期四
《 汇 编 EA=[基址寄存器]+([变址寄存器]×比例因子)+位移量 语 有效地址四分量的使用规则: 言 16位寻址方式 32位寻址方式 64位寻址方式 程 有效地址分量 序 所有32位/64位通用寄存 BX,BP 所有32位通用寄存器 设 基址寄存器 器(16个) 计 除ESP外的所有32位 所有32位/64位通用寄存 SI,DI 及 变址寄存器 通用寄存器 器(16个) 上 不用该分量,默 1,2,4,8(倍) 1,2,4,8(倍) 机 比例因子 认为1 指 0,8,16(位) 0,8,32(位) 0,8,32,64(位) 导 位移量 》 如:ADD AX,20[BX][SI] ;EA=(BX)+(SI)+20 第 MOV EBX,[EAX][4*EDX+2AH] ;EA=(EAX)+(EDX)×4+2AH 章
10
三.存储器寻址方式
3
2018年9月6日星期四
2000H 2001H
34H 12H ……
高地址
《 汇 编 语 言 程 序 设 计 及 上 机 指 导 》 第 章
11
(2)寄存器间接寻址
操作数在存储器中,而操作数的有效地址EA却在指定的寄存器中, 即 EA=[寄存器] 1)16位寻址时,EA放在SI、DI、BP或BX中。 若以SI、DI、BX间接寻址,则默认操作数在DS段中。 MOV AX,[SI] ;默认DS为段基址 若以寄存器BP间接寻址,则默认操作数在堆栈段中。 MOV AX,[BP] ;默认SS为段基址 如果操作数不在上述规定的默认段,则必须在指令中相应的操作数前加上 段超越前缀。 MOV CX,DS:[BP] ;DS:是段超越前缀, 表示访问 数据段,而非堆栈段 2)32位寻址时,8个32位通用寄存器均可作寄存器间接寻址。 MOV CH,[EAX] MOV DX,[EBX] 除EBP、ESP默认段寄存器为SS外,其余6个寄存器均默认段寄存器DS, 可以采用段超越前缀对其它段进行寻址。 CS和ES不能被超越,在堆栈操作时,SS也不能被超越。
汇编程序设计第三章
MOV AX, BX
MOV AL, BH
* 字节寄存器只有 AH AL BH BL CH CL DH DL MOV AH, BX MOV CS, AX
* SRC 和 DST 的长度一致 * CS 不能用 MOV 指令改变
第3章 8086/8088寻址方式及指令系统
(3) 直接寻址方式* — 有效地址EA由指令直接给出
注意:立即数表示操作数地址时,该立即数必须加方括号
例:MOV AX, [ 100H ] 如(DS)=3000H,执行时,计算机先计算出该存储器的物 理地址为: 30000H(段基地址)+100H(偏移地址)=30100H(物理 地址)
若(30100H)=34H,(30101H)=12H则指令执行后的结 果是:(AX)=1234H
MASK=0250H 操作码 50H 02H ~ ~ DS ~ ~ 30000H BX 32000H SI 33000H MASK 33250H 33251H 数据段 代码段
MASK=0250H
则物理地址 =30000H+2000H+1000H+0250H AX AH AL =33250H, 若(33250H)=3456H 则执行结果(AX)=3456H
第3章 8086/8088寻址方式及指令系统
3.1 8086/8088的寻址方式
3.1.1 与数据有关的寻址方式 8088/8086微处理器可采用许多不同的方法来存取指令 操作数,其操作数所在地址有3种可能。 (1) 直接包含在指令中,即指令中的操作数部分就是操 作数本身--立即数寻址
MOV AL, BH
* 字节寄存器只有 AH AL BH BL CH CL DH DL MOV AH, BX MOV CS, AX
* SRC 和 DST 的长度一致 * CS 不能用 MOV 指令改变
第3章 8086/8088寻址方式及指令系统
(3) 直接寻址方式* — 有效地址EA由指令直接给出
注意:立即数表示操作数地址时,该立即数必须加方括号
例:MOV AX, [ 100H ] 如(DS)=3000H,执行时,计算机先计算出该存储器的物 理地址为: 30000H(段基地址)+100H(偏移地址)=30100H(物理 地址)
若(30100H)=34H,(30101H)=12H则指令执行后的结 果是:(AX)=1234H
MASK=0250H 操作码 50H 02H ~ ~ DS ~ ~ 30000H BX 32000H SI 33000H MASK 33250H 33251H 数据段 代码段
MASK=0250H
则物理地址 =30000H+2000H+1000H+0250H AX AH AL =33250H, 若(33250H)=3456H 则执行结果(AX)=3456H
第3章 8086/8088寻址方式及指令系统
3.1 8086/8088的寻址方式
3.1.1 与数据有关的寻址方式 8088/8086微处理器可采用许多不同的方法来存取指令 操作数,其操作数所在地址有3种可能。 (1) 直接包含在指令中,即指令中的操作数部分就是操 作数本身--立即数寻址
第三章 2 寻址方式与指令系统汇编语言
位移量 ┇
┇
54
无条件段内转移
段内间接寻址
JMP BX JMP WORD PTR[BX] IP
47
串送存指令例
例2:若在内存缓冲区中有一个数据块,起 始地址为BLOCK。数据块中有负数、正数, 现要求把其中的正负数分开,分别送到 同一段的两个缓冲区,存放正数的缓冲 区起始地址为PLUSDATA;存放负数的缓 冲区起始地址为MINUSDATA。
48
Start:
GOON:
MIUS:
AGAIN:
49
五、程序控制指令
转移指令 循环控制 过程调用 中断控制
50
1. 转移指令
通过修改指令的偏移地址或段地址及偏移 地址实现程序的转移
无条件转移指令
无条件转移到目标地址,执行新的指令
有条件转移指令
在具备一定条件的情况下转移到目标地址
51
无条件转移指令
格式: JMP OPRD
目标地址
与JMP在 同一代码段
STOS OPRD STOSB STOSW 执行的操作为:从累加器AL(字节操作)或AX(字操作)传送一个字节 或字,到由DI作为指针的目的串中,同时修改DI使指向串中的下 一个元素。 指令的操作为:
目 标 操作数
对字节:((ES):(DI))←(AL)
DI±1 对字:((ES):(DI+1)(DI))←(AX)
第3章 寻址方式与指令系统
-14-
目录
上页
下页
结束
⑸ 相对基址加变址寻址
操作数在存储器中,存储单元的有效地址由一个基址寄存器 和变址寄存器的内容及指令中指定的8位或16位位移量的和 构成。即EA=[BX]/[BP]+[SI]/[DI]+[8/16位位移量] 地址表达式可以书写为以下两种形式之一: ① 位移量[基址寄存器][变址寄存器] ② [基址寄存器+变址寄存器+位移量] 例如: MOV AX,[BX+DI+20H] ;指令中给出8位位移量20H。 MOV AX,ES:1000H[BP][SI] ;访问ES段字存储单元。 以下三条语句是等价的: MOV AL,TABLE[BX][SI] MOV AL,TABLE[BX+SI] MOV AL,[TABLE+BX+SI]
ax将ax中的商调整为非压缩bcd码?aam指令跟在字节乘mul之后将乘积调整为非压缩bcd码aad指令跟在字节除div之前先将非压缩bcd码的被除数调整为二进制数aam和aad指令根据结果设置sfzf和pf但对ofcf和af无定义??请看实例62目录上页下页结束非压缩bcd码的乘除运算?实现非压缩bcd码乘法
-8-
目录
上页
下页
结束
⑵ 寄存器间接寻址
若操作数在存储器中,存储单元有效地址被放在基址寄存器 BX、BP或变址寄存器SI、DI中,则称为寄存器间接寻址。 寄存器间接寻址方式在汇编格式中表示为: [基址寄存器名或变址寄存器名] 例如: MOV AX,[BX] ;物理地址=DS×16+BX MOV AL,[BP] ;物理地址=SS×16+BP MOV AX,CS:[DI] ;物理地址=CS×16+DI 其中“[BP]”、“[BX]”、“[DI]”都是寄存器间接寻址方式。 机器执行这种寻址方式的指令时,依据地址码字段的值 仿问寄存器,将其中的值作为操作数的偏移地址。如果指令 中指定的寄存器是BX、SI、DI,则操作数默认在数据段中, 取DS寄存器的值作为操作数的段地址值;如果指令中指定 的寄存器是BP,则操作数默认在堆栈段中,取SS寄存器的 值作为操作数的段地址值,从而算得操作数的20位物理地址, 继而访问到操作数。 目录 上页 下页 结束 -9-
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
32位辅助寄存器XAR0~XAR7
32位辅助寄存器XAR0~XAR7的低16位
32位辅助寄存器XAR0~XAR7的高16位
32位辅助寄存器指针,ARP0指向XAR0,ARP1指向XAR1……
ARP指向的辅助寄存器的低16位
ARP指向的辅助寄存器
累加器的高16位寄存器AH或者16位寄存器AL
立即数助记符
loc32:32位寻址方式指定地址单元的内容。
#16bitsigned:16位有符号立即数。
7
§3.2 寻址方式
C28x系列DSP的指令集采用7种寻址方式:
直接寻址方式 堆栈寻址方式 间接寻址方式 寄存器寻址方式 数据/程序/IO空间寻址方式 程序空间间接寻址方式 字节寻址方式
8
F2812的大多数指令利用操作码中的8位字段来选 择寻址方式和对寻址方式进行修改.在F2812指令系统 中,这个8位字段用于以下寻址方式:
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位寄存器的内容来索
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数据:
乘积移位方式(+4 ,1 ,0 ,-1,-2,-3,-4 ,-5 ,-6)
22位程序计数器
按位求反码
Loc16寻址方式对应的16位数据
将Loc16寻址方式对应的16位数据进行零扩展
将Loc16寻址方式对应的16位数据进行符号扩展
Loc32寻址方式对应的32位数据
将Loc32寻址方式对应的32位数据进行零扩展
▲ AMODE=0—该方式是复位后的默认方式,也是F2812 的C/C++编译器使用的方式。这种方式与C2xLP CPU的寻 址方式不完全兼容。数据页指针偏移量是6位(在C2xLP CPU中是7位),并且不支持所有的间接寻址方式。
▲ AMODE=1—该方式包括的寻址方式完全与C2xLP 器
件的寻址方式兼容。数据页指针的偏移量是7位并支持所
16位立即数,零扩展
S:16bit
16位立即数,符号扩展
22bit
表示22位立即数
0:22bit
22位立即数,零扩展
S:22bit
22位立即数,符号扩展
LSb
最低有效位
LSB
最低有效字节
LSW
最低有效字
MSb
最高有效位
MSB
源自文库
最高有效字节
MSW
最高有效字
OBJ
对于某条指令,位OBJMODE的状态
N
重复次数(N=0,1,2,3,4,5,6…)
有C2xLP 支持的间接寻址方式
在F2812间接寻址方式中,使用哪个辅助寄存器指针在指令中并不
被明确指出。而在C2xLP的间接寻址方式中,3位长度的辅助寄存器
指针被用来选择当前使用哪个辅助寄存器以及下次操作将使用哪个辅
助寄存器
10
➢ 汇编器/编译器对AMODE位的追踪
编译器总是假定AMODE=0,所以它只使用对AMODE=0 有效的寻址模式。而汇编器可以通过设置命令行选项实现默认 AMODE=0或者AMODE=1
C2xLP全兼容的寻址方式)
11
1、直接寻址方式
DP(数据页指针),此方式中,16位的DP寄存器被当做一个固定 的页指针,将指令提供6位或7位的地址偏移量与DP寄存器中的值组合 起来就构成完整的地址。当访问具有固定地址的数据结构时,这种寻 址方式特别有用,例如,外设寄存器和C/C++中的全局及静态变量。
第三章 寻址方式和汇编指令
§3.1 汇编语言指令集概述 §3.2 寻址方式 §3.3 C28x汇编操作指令 §3.4 汇编程序
1
§3.1 汇编语言指令集概述
在TMS320C2000系列中,CPU内核为: C20x/C24x/C240x:C2xLP: C27x/C28x:C27x、C28x
这些CPU的硬件结构有一定差别,指令集也不相同,但在C28x芯片 中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具 有最佳兼容性。
C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这 些源代码是用C28x代码生成工具编译生成的。
2
1、常用操作数符号说明
符号
描述
XARn ARn,ARm ARnH ARPn AR(ARP) XAR(ARP) AX # PM PC ~ [loc16] 0:[loc16] S:[loc16] [loc32] 0:[loc32] S:[loc32] 7bit 0:7bit S:7bit 8bit 0:8bit
直接寻址方式下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字的范围
使用)。
#:立即寻址方式中常用的前缀。数值前面带“#”,表示该数值为一个立即数
<< 左移。
>> 右移。
@:
当使用C28x语法时,64位字段数据与通过“@”符号来表示,以帮助程
序员理解当前正在使用哪种寻址模式。
@@:
当使用C28x语法时,128位字段数据页通过“@@”符号来表示。
loc16:16位寻址方式指定地址单元的内容。
堆栈寻址方式下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
寄存器寻址方式下的loc16/loc32语法说明:
AMODE X
Loc16/loc32语法
说明
@ACC
访问32位寄存器ACC。当寄存器@ACC位目的地操作
数是,Z、N、V、C、OVC等标志可能会受到影响
将Loc32寻址方式对应的32位数据进行符号扩展
表示7位立即数
7位立即数,零扩展
7位立即数,符号扩展
表示8位立即数
8位立即数,零扩展
3
续:
S:8bit
8位立即数,符号扩展
10bit
表示10位立即数
0:10bit
10位立即数,零扩展
S:10bit
10位立即数,符号扩展
16bit
表示16位立即数
0:16bit
6
2、汇编语法指令描述
汇编指令一般都由操作符和操作数组成,操作符也被称为指令助记符,它
是指令中的关键字,表示本条指令操作类型,不能省略。操作数可以省略,也
可以有很多,但各操作数之间要用“,”分开。指令助记符与操作数之间要用空
格分开。
ARn :
n为数值0~7,ARn指定下次的辅助寄存器。
ind :
选择以下7种符号之一:*,*+,*-,*0+,*0-,*BR0+,*BR0-(兼容模式
{}
可选字段
=
赋值
==
等于
4
关于算术方面的助记符以及与其相关的标志位
COND 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
语法 NEQ EQ GT GEQ LT LEQ HI HIS,C LO,NC LOS NOV OV NTC TC NBIO UNC
引。 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
描述 不等于 等于 大于(有符号减法) 大于或等于(有符号减法) 小于(有符号减法) 小于或等于(有符号减法) 高于(无符号减法) 高于或相同(无符号减法) 低于(无符号减法) 低于或相同(无符号减法) 无溢出 溢出 测试位为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
通过状寄存器STl的位OBJMODE和位AMODE的组合来选定模式。 3种操作模式:
C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址 方式和指令系统,因此,一般应使C28x芯片工作于该种模式。
C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标—兼 容模式。在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数 也与C27xCPU兼容。
*+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位寄存器的寻址
22位地址的构成:
31 21
0
0 DP寄存器的值(15~0或15~1) 来自指令中偏移量(6位或7位)
12
2、堆栈寻址方式
SP(堆栈指针),这种方式下,16位的SP指针被用来访问软件堆栈 的内容。C28x系列的堆栈是从存储器的低地址变化到高地址的,SP总是 指向下一个空的存储单元。指令提供6位的偏移量,该偏移量是从当前的 堆栈指针值中抽取出来的,用以访问堆栈中的数据。在数据入栈和出栈 时,该偏移量也可分别用于堆栈指针操作后的增加或操作前的减少。
√ – v28
;假定AMODE=0(C28x寻址方式)
– v28 – m20 ;假定AMODE=1(与C2xLP全兼容的寻址方式)
√ 在文件中使用内嵌伪指令
. c28_amode ;告诉汇编器后面的代码段都假定AMODE=0
(C28x寻址方式)
. lp_amode ;告诉汇编器后面的代码段都假定AMODE=1(与
(1)loc16 为16位数据访问选择直接/堆栈/间接/寄 存器寻址方式
(2)loc32 为32位数据访问选择直接/堆栈/间接/寄 存器寻址方式
以上7种寻址方式都与“loc16/loc32”组合起来使用
9
➢ 寻址方式选择位
由于F2812 提供了多种寻址方式, 因此用寻址方式选择 位(AMODE)来选择8位字段(loc16/loc32)的解码。该 位属于状态寄存器ST1。寻址方式可以大致归类如下:
5
PM与结果保存方式的关系
PM +4 +1 0 -1 -2 -3 -4 -5 -6
保存方式 P(31:4)=相乘结果中低38位的(27:0),P(3:0)+0 P(31:1)=相乘结果中低38位的(30:0),P(31)+0 P(31:0)=相乘结果中低38位的(31:0) P(31:0)=相乘结果中低38位的(32:1) P(31:0)=相乘结果中低38位的(33:2) P(31:0)=相乘结果中低38位的(34:3) P(31:0)=相乘结果中低38位的(35:4) P(31:0)=相乘结果中低38位的(36:5) P(31:0)=相乘结果中低38位的(37:6)
寻址范围
数据空间的低 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