汇编语言寻址方式
- 格式:ppt
- 大小:253.00 KB
- 文档页数:23
DSP28335汇编教程当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。
根据程序的要求采用不同的寻址方式,可以有效地缩短程序的运行时间和提高代码执行效率。
汇编指令是可执行指令,每一条指令对应一条机器码,用来控制处理器仲的执行部分进行各种操作。
在本章节当中将主要以基于C28x的DSP芯片为例,为读者讲解DSP的寻址方式和汇编指令系统,其中大部分内容也可适用于其他Ti公司的DSP产品。
6.1汇编语言指令集概述在学习C28x系列DSP的寻址方式和汇编指令指令之前,先来对一些基础的知识进行讲解一下先,在汇编程序当中开发人员会常常使用到许多的特殊符号和标志,它们都具有特殊的含义,在学习汇编之前读者们必须先理解这些符号和标志含义,在这里会对其中最常用最重要的操作数符号和寄存器经行详细说明。
在进行汇编讲解之前先来了解一下开发的核心——CPU。
在TMS320C2000系列中,CPU 内核为:C20x/C24x/C240x:C2xLP:C27x/C28x:C27x、C28x这些CPU的硬件结构有一定差别,指令集也不相同,但是,在C28x芯片中可以通过选择兼容特性模式,使C28xCPU与C27xCPU及C2xLPCPU具有最佳兼容性。
可通过状寄存器STl的位OBJMODE和位AMODE的组合,选定模式。
C28x芯片具有3种操作模式:1.C28x模式:在该模式中,用户可以使用C28x的所有有效特性、寻址方式和指令系统,因此,一般应使C28x芯片工作于该种模式。
2.C27x目标——兼容模式:在复位时,C28x的CPU处于C27x目标-兼容模式。
在该模式下,目标码与C27xCPU完全兼容,且它的循环—计数也与C27xCPU兼容。
3.C2xLP源——兼容模式:该模式允许用户运行C2xLP的源代码,这些源代码是用C28x代码生成工具编译生成的。
在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。
在汇编语言中,寻址方式指的是指令如何访问内存中的操作数或数据。
不同的处理器体系结构支持不同的寻址方式。
以下是一些常见的寻址方式:立即寻址(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这只是一些基本的寻址方式,具体的汇编语言和处理器架构可能会有其他特定的寻址方式。
寻址⽅式和指令系统《微机原理》复习思考题第3章 8086的寻址⽅式和指令系统3.1 8086汇编语⾔指令的寻址⽅式有哪⼏类?⽤哪⼀种寻址⽅式的指令执⾏速度最快?3.2 直接寻址⽅式中,⼀般只指出操作数的偏移地址,那么,段地址如何确定?如果要⽤某个段寄存器指出段地址,指令中应如何表⽰?3.3 在寄存器间接寻址⽅式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?3.4 ⽤寄存器间接寻址⽅式时,BX,BP,SI,DI分别针对什么情况来使⽤?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进⾏说明。
3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下⾯两条指令所进⾏的具体操作:MOV BYTE PTR [BP], 2000MOV WORD PTR [BX], 20003.6 使⽤堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注意什么问题?3.7 下⾯这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。
XCHG CS, AXMOV [BX], [1000]XCHG BX, IPPUSH CSPOP CSIN BX, DXMOV BYTE[BX], 1000MOV CS, [1000]3.8 8086系统中,当对SS和SP寄存器的值进⾏修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会⾃动禁⽌外部中断,等到本条指令和下条指令执⾏之后,⼜⾃动恢复对SS寄存器赋值前的中断开放情况。
这样做是为了允许程序员连续⽤两条指令分别对SS和SP寄存器赋值,同时⼜防⽌堆栈空间变动过程中出现中断。
3.9 以下是格雷码的编码表0——0000 1——0001 2——0011 3——0010 4——01105——0111 6——0101 7——0100 8——1100 9——1101请⽤换码指令和其他指令设计⼀个程序段,实现格雷码往ASCII的转换。
ATT汇编语⾔及其寻址⽅式汇编语⾔论风格来分主要是两类,⼀类是Intel汇编,⼀类是AT&T汇编,分别被Windows和Linux作为主流风格。
因为我博客以推荐Linux系统为主,所以以后多以Linux汇编为主要描述语⾔。
AT&T汇编的特点: ".s"为汇编语⾔的后缀名, "#"井号开头的是注释⾏, "."点开始的指令⼀般都是伪指令, "$"美元符号修饰⽴即数, "%"修饰寄存器。
例如:AT&T汇编寄存器,寄存器前需要加上%修饰: 8位:al,ah 16位:ax 32位:eax 64位:raxAT&T操作符修饰: 8位:b 16位:w 32位:l 64位:q操作格式:操作符[操作修饰符] 操作对象[源] 操作对象[⽬标]寻址⽅式(Addrsing mode),就是指数据的组织⽅式,固定格式为:地址或偏移 (%基址或偏移量寄存器, %索引寄存器, ⽐例因⼦)则最终地址 = 地址或偏移 + %基址或偏移量寄存器 + %索引寄存器 * ⽐例因⼦这⼀串东西基本上都是可选的,没写的项基本上算以0代替,不同的组合就成了不同的寻址⽅式,如下:1) 直接寻址movl ADDRESS, %eaxADDRESS其实就相当于"地址或偏移"⾥的地址,反正就是⼀个数字。
2)寄存器寻址其实上⾯的例⼦也包括了寄存器寻址,顾名思义%eax就是寄存器寻址,代表对这个寄存器本⾝的写⼊或读出。
3)⽴即寻址movl $2, %ebx我⼀直觉得⽴即寻址算不算寻址,反正它的意思就是把2这个数字写⼊%eax寄存器,$2就是⽴即寻址,其实就是⽴即数。
4)间接寻址movl (%eax), %ebx(%eax)就是间接寻址了,意思就是访问eax寄存器⾥的数值所代表的地址。
相当于通⽤公式⾥的%基址或偏移量寄存器。