汇编语言寻址方式

合集下载

DSP第四章 TMS320C20X系列的寻址方式及汇编指令

DSP第四章 TMS320C20X系列的寻址方式及汇编指令

LT *0+
执行指令前: ARP=1, (AR1)=100H,(AR0)=3 执行操作: 用AR1所指的数据存储器100H内 容装载暂时寄存器; 执行指令后: ARP=1,(AR1)=103H
⑤减去索引量
方法
举例
指令使用AR内容作
LT *0-
为数据存储器地址,
执行指令后AR内容 执行指令前:
自动减去ARO的内容。 ARP=1, (AR1)=100H,(AR0)=3
执行操作:
用AR1所指的数据存储器100H内
容装载暂时寄存器;
执行指令后:
ARP=1,(AR1)=FEH
⑥加上索引量,反向进位
方法
举例
指令使用AR内容作为 数据存储器地址,执 行指令后AR内容自动 加上AR0的内容,该 加法采用反向进位方 法。 注:主要用于FFT算 法
LT *BR0+
把AR0加到辅助寄存器中时,地址以位倒序的方 式产生,即进位是从左向右,而不是从右向左进位。
LTP ind [,ARn]
MAC MAC pma , dma
乘且累加
MAC pma, ind [ , ARn]
MACD MACD pma, dma
乘且累加,并将被寻址数据移至下一单元
MACD pma, ind [, ARn]
MPY MPY dma
MPY ind [, ARn]
MPYA/MPYS
累加前次乘积,再将TREG与被寻址数相乘
PAC PAC
PREG转入累加器ACC
SPH
存储PREG高16位,直接或间接寻址
SPL
存储PREG低16位,直接或间接寻址
例1:MAC
0FF00H,02H ;DP=6,地址300H~37FH,PM=0, CNF=1

第3章 8086的指令系统—3.1寻址方式

第3章 8086的指令系统—3.1寻址方式
EA=[基址寄存器]+([变址寄存器] *比例因子)+位移量 BX,BP SI,DI 1 0,8,16
例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式

DSP28335汇编教程

DSP28335汇编教程

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代码生成工具编译生成的。

在下面的讲解当中会牵涉到模式的转换,希望读者要搞清楚每一个模式的对应关系。

汇编语言

汇编语言
练习:
MOV 23H,#30H
MOV 12H,#34H MOV R0,#23H MOV R7,#22H MOV R1,12H; MOV A,@R0; r1=? a=?
MOV 34H,@R1; 34h=? MOV DPTR,#6712H MOV 12H,DPH; 12h=? MOV R0,DPL; MOV A,@R0; r0=? a=?
LOOP: ADD INC
R0, #0FF
A, DPTR R1
;1机器周期
;1机器周期 ;2机器周期
DJNZ
RET
R0, LOOP
;2机器周期
;2机器周期
结果:定时时间 =▁▁▁▁▁
六、控制转移类指令
子程序调用:
概念:子程序(c中叫函数),调用。
1)acall/lcall addr11/addr16 区别在于访问的范围:一个是2k一个是64k; 2)ret
三、算术运算类指令
十进制调整:
例: mov a,#23h
add a,#18h; a=? da a; a=?
note: DA指令将十六进制的加法结果调整为BCD码加 法的结果。
四、逻辑运算&位运算
逻辑运算:0-1表示true-false
1)与: anl
2)或: rol 3)异或:xrl 4)非: cpl
xchd a,@r0;
寻址方式
寻址方式: (操作数如何取得的问题) 上述提到了类似的指令:
1)mov a,#30h 2)mov a,30h 3)mov a,r0 4)mov c,30h 5)movc a,@a+dptr
对应的寻址方式是: 1)立即数寻址;2)直接寻址;3)寄存器寻址; 4)位寻址;5)变址寻址;

第二章 80868088寻址方式和指令系统

第二章 80868088寻址方式和指令系统

(5)奇偶标志PF
用于反映运算结果中“1”的个数。如果“1”的个数为偶数,则OF被置1,否则OF被清0。
(6)辅助进位标志AF
在字节操作时,如发生低半字节向高半字节进位或借位;在字操作时,如发生低字节向高字 节进位或借位,则辅助进位标志AF被置1,否则AF被清0。
②状态控制标志
(1)方向标志DF
方向标志决定着串操作指令执行时,有关指针寄存器调整方向。 当DF为1时,串操作指令按减方式改变有关的存储器指针值, 当DF为0时,串操作指令按加方式 改变有关的存储器指针值。
其中:存储单元的物理地址是12345H, 标出的:两个重叠段的段值分别是:1002H和1233H, 在对应段内的偏移分别是2325H和0015H。
采用段值和偏移构成逻辑地址后,段值由段寄存器给出,偏移可由指令指针IP、堆栈指针SP 和其他可作为存储器指针使用的寄存器(SI、DI、BX和BP)给出,偏移还可直接用16位数给 出。
图中指令存放在代码段中,OP表示该指令的操作码部分 再例如: MOV AL,5 则指令执行后,(AL)=05H
MOV BX,3064H 则指令执行后, (BX)=3064H
2、寄存器寻址方式
操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数数,寄存器可以是:
AX、BX、CX、DX、SI、DI、SP和BP等;
指令中不使用物理地址,而是使用逻辑地址,由总线接口单元BIU按需要根据段值和偏移自动 形成20位物理址。
3、段寄存器的引用
由于8086/8088CPU有四个段寄存器,可保存四个段值。所以可同时使用四个段值,但这四个 段有所分工。
在取指令的时候,自动引用代码段寄存器CS,再加上由IP所给出的16位偏移,得到要取指令 的物理地址。

汇编语言第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)

汇编的寻址方式

汇编的寻址方式

在汇编语言中,寻址方式指的是指令如何访问内存中的操作数或数据。

不同的处理器体系结构支持不同的寻址方式。

以下是一些常见的寻址方式:立即寻址(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这只是一些基本的寻址方式,具体的汇编语言和处理器架构可能会有其他特定的寻址方式。

汇编语言2-1寻址方式

汇编语言2-1寻址方式

EA =
+
பைடு நூலகம்
注意: 允许段超越。 注意:①允许段超越。 ②[BX+BP]或[SI+DI]是非法搭配 或 是非法搭配
例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
指令操作例:MOV AX,DATA[DI][BX] 指令操作例: , 操作例 若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AH=[83201H], AL=[83200H] 则指令执行后
目的 源
指令举例:
MOV AX , BX 操作码 操作数 ADD AX,[SI+6] INC HLT [BX]
二、8086的操作数分类
立即数(常数) 1、立即数(常数)
取值范围如下表: 取值范围如下表 8位 无符号数 00H-FFH(0-255)
带符号数80H-7FH(-128~127)
16位 0000H-FFFFH(0-65535)
存储器寻址方式
1、 立即寻址 、
直接把参与操作的数据写在指令中,是指令的一部分, 直接把参与操作的数据写在指令中,是指令的一部分,该数 据称为立即数。操作数可以是各种数制下的数值(相当于8位 据称为立即数。操作数可以是各种数制下的数值(相当于 位 位二进制数),也可以是带单引号的字符。 或16位二进制数),也可以是带单引号的字符。 位二进制数),也可以是带单引号的字符 强调: 强调:立即寻址只能用于源操作数 例如: 2050H,执行后, 执行后, 例如: MOV AX,2050H ; AX , 执行后 MOV AL,05H , ;AH = 20H,AL = 50H , MOV AL,‘A’ , 观察指令: 观察指令: MOV 05H,AL MOV BL,324D , , MOV CH,2050H MOV DL,‘25’ , , 注意: 立即数永远不能作目的操作数。 注意:1. 立即数永远不能作目的操作数。 2. 源操作数和目的操作数要互相匹配。 源操作数和目的操作数要互相匹配。

寻址方式和指令系统

寻址方式和指令系统

寻址⽅式和指令系统《微机原理》复习思考题第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汇编语言及其寻址方式

ATT汇编语言及其寻址方式

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寄存器⾥的数值所代表的地址。

相当于通⽤公式⾥的%基址或偏移量寄存器。

汇编课第3章寻址方式与指令系统之3 (1)

汇编课第3章寻址方式与指令系统之3 (1)

北京理工大学-张华平-2010
24
① 段内直接短转移 格式:JMP SHORT LABEL 例.
JMP SHORT B1 ;无条件转移到B1标号处 A1: ADD AX,BX B1: …
北京理工大学-张华平-2010
25
② 段内直接转移 格式:JMP LABEL 或: JMP NEAR PTR LABEL
同上
测试并取反由SRC 指定的DST中的位
同上
表3-4 位测试指令
北京理工大学-张华平-2010
10
三、位扫描指令
从386开始增加了位扫描指令,它们包括 BSF、BSR指令,可用于扫描操作数中第一个含 1的位。
北京理工大学-张华平-2010
11
1.顺向扫描指令 BSF 格式:BSF DST,RSC 功能:从右向左扫描RSC操作数中第一个含1的
… B3: SUB AX,CX
… C2 ENDS
北京理工大学-张华平-2010
动画演示
29
2.条件转移指令 执行这类指令时通过检测由前边指令已
设置的标志位确定是否转移,所以它们通常 是跟在影响标志的指令之后。这类指令本身 并不影响标志。
条件转移指令的通用汇编格式: JCC LABEL
北京理工大学-张华平-2010
(设为n),空出的位用操作数OPRD2高端的n位 填充,但OPRD2的内容不变,最后移出的位在进 位标志CF中。
2.双精度右移指令 SHRD 格式:SHRD OPRD1,OPRD2,CNT
北京理工大学-张华平-2010
20
3.6 程序控制指令
本节提供的指令可以改变程序执行的顺 序,控制程序的流向。它们均不影响标志位。
表3-7 检测北单京理个工大条学件-张华标平志-201位0 转移指令 33

汇编语言程序设计-80X86指令系统和寻址方式

汇编语言程序设计-80X86指令系统和寻址方式

1.数据传送类指令 • 数据传送类指令用于实现CPU的内部寄存器之间 • CPU内部寄存器和存储器之间 • CPU累加器AX或AL和I/O端口之间的数据传送 此类指令除了SAHF和POPF指令外均不影响标志寄存器的
内容。 在数据传送指令中,源操作数和目的操作数的数据长度
必须一致。
(1)MOV指令
指令功能:把AX中的16位数或AL中的8位数输出到指定端口。
例 3.26
OUT 22H, AL
(4)段间间接寻址方式 这种寻址方式是由指令中给出的存储器数据寻址方式,包括存
放转移地址的偏移量和段地址。其低位字地址单元存放的 是偏移地址,高位字地址单元中存放的是转移段基值。这 样既更新了IP内容又更新了CS的内容,故称为段间间接寻 址。 例 JMP WORD PTR[BX] ;转移到当前代码位置内 ;有效地址存放在BX寻址的单元中
;物理地址=DS×16+SI
MOV [DI], DX
;物理地址=DS×16+DI
2) 以BP进行寄存器间接寻址(BP作为地址指针)的方式
隐含的段寄存器为堆栈段寄存器SS,操作数存放在堆栈段区域, 将堆栈段寄存器SS的内容左移4位,再加上基址寄存器BP的 内容,即为操作数的物理地址。

MOV [BP], BX
OP
DW
OP
SW
操作码格式
8086指令格式
几点说明: ① 一条指令可以包含一个操作数,也可以包含一个以上的操作
数;一个操作数的指令称为单操作数指令,单操作数指令中 的操作数可能由指令本身提供,也可能由指令隐含地指出。 ② 若位移量或立即数为16位,那么在指令代码中,将低位字节 放在前面,高位字节放在后面。 ③ 8086指令系统中大多数指令的操作码只占用第一个字节,但 有几条指令是特殊的,其指令中的第一个字节不但包含操作 码成分,而且还隐含地指出了寄存器名,从而整个指令只占 一个字节,成为单字节指令。这些指令字节数最少,执行速 度最快,用得也最频繁。

汇编语言指令详解

汇编语言指令详解

第一讲第三章 指令系统--寻址方式回顾: 8086/8088的内部结构和寄放器,地址分段的概念,8086/8088的工作进程。

重点和纲要:指令系统--寻址方式。

有关寻址的概念;6种大体的寻址方式及有效地址的计算。

教学方法、实施步骤时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等讲 授 40” ×2 提 问 3” ×2 小 结2” ×2教学内容:8086/8088寻址方式操作码 操作数 …… 操作数运算机中的指令由操作码字段和操作数字段组成。

操作码:指运算机所要执行的操作,或称为指出操作类型,是一种助记符。

操作数:指在指令执行操作的进程中所需要的操作数。

该字段除能够是操作数本身外,也能够是操作数地址或是地址的一部份,还能够是指向操作数地址的指针或其它有关操作数的信息。

寻址方式就是指令顶用于说明操作数所在地址的方式,或说是寻觅操作数有效地址的方式。

8086/8088的大体寻址方式有六种。

1.当即寻址所提供的操作数直接包括在指令中。

它紧跟在操作码的后面,与操作码一路放在代码段区域中。

如图所示。

例如:MOV AX,3000H当即数能够是8位的,也能够是16位的。

若是16位的,则存储时低位在前,高位在后。

当即寻址主要用来给寄放器或存储器赋初值。

2.直接寻址操作数地址的16位偏移量直接包括在指令中。

它与操作码—起寄存在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄放器DS加上这16位地址偏移量。

如图2-2所示。

例如:MOV AX,DS:[2000H];图2-2(对DS来讲能够省略成MOV AX,[2000H],系统默以为数据段)这种寻址方式是以数据段的地址为基础,可在多达64KB的范围内寻觅操作数。

8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。

现在只要在指令中指明是段超越的,则16位地址偏移量能够与CS或SS或ES相加,作为操作数的地址。

第三章 8086的寻址方式

第三章 8086的寻址方式
7
8086/8088指令概述
操作数的一般形式: 3、存储器操作数:这类操作数是指定存储单元 的内容或该单元的地址.
例1:MOV DS:[1000H], AL 其意义是将AL的内容送存储器数据段中偏移地址为 1000H的单元中去。
例2: 若指令改写为MOV AL,DS: [1000H]
指令意义为将数据段中偏移地址为 1000H 单元中的 内容送AL寄存器。前者指的是存储单元的地址,后者指 的是存储单元的内容
22
3.1 寻址方式
直接寻址: 符号地址:
8086/8088指令寻址方式
例3 :AREA1 EQU 0867H ; 等值伪指令EQU给常数0867H定义 一个符号AREA1 MOV AX,AREA1 ;AX=0867H 例4:AREA1 DW 0867H ;DW伪指令用来定义变量,
变量用来表示存储器中的数据。变量名AREA1表示内存中 一个数据区的名字,也就是符号地址,该地址单元存放一个字 数据0867H。 MOV AX,AREA1 ;
4、隐含操作数:这类操作数被操作助记符隐含着。 如,对压缩BCD加法结果进行调整的DAA,其操 作数就是隐含操作数AL。
5 、I/O端口操作数:可以作源操作数或目的操作数。 (I/O端口地址,可以直接或寄存器间接给出)
如: IN AL, 44H
OUT 量和常量三个概念:
例如:MOV AX,BX
3
8086/8088指令概述
例如:MOV AX,BX
用 MOV表示进行数据传送的操作码,用 AX、 BX表示操作数, 显然这样的表示方式更清晰,更便于记忆和使用。 用符号、助记符书写的指令称为符号指令。用符号指令书写程 序的规范称为汇编语言,对应的程序称为汇编语言源程序。

浅析汇编语言中寻址方式的区别

浅析汇编语言中寻址方式的区别

浅析汇编语言中寻址方式的区别浅析汇编语言中寻址方式的区别浅析汇编语言中寻址方式的区别王传俊寻址方式是汇编语言中的一个重要内容,是学习编程的基础,同时也是该门课程的一个学习难点。

本文通过以Inte18086CPU为例,使用分析比较的方法阐述了各寻址方式间的区别。

汇编语言寻址方式有效地址物理地址在计算机应用技术的发展过程中,汇编语言是一座连接软件和硬件的桥梁,也是计算机能够提供给用户最快而又最有效的语言。

汇编语言不同于用O,1数字表示的机器语言,它是用人们熟悉的英文缩写字符表示相应的操作码,用符号或数值表示地址和操作数。

因此,汇编语言为程序的编写、阅读和修改提供了方便。

但由于汇编语言仍是一种面向机器的语言,所以在进行程序设计时必须考虑到机器的指令系统、寻址方式及存储设备的设置和功能,而熟悉并灵活地应用机器所采用的各种寻址方式,是运用汇编语言进行程序设计的根本。

而一个指令系统具有哪几种寻址方式,是否为编写程序提供方便,是指令系统设计的关键,同时也是初学者学习汇编语言的难点。

在教学过程中,通常选用Inte18086CPU的PC机为基础机型来组织教学。

Inte18086提供了九类寻址方式,它们分别是立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、基址变址寻址、串寻址、端口寻址和隐含寻址。

由于Inte18086中的寻址方式有相似之处,极易混淆。

在教学过程中,应使学生抓住各种寻址方式的特点,找出它们之间的区别和联系,从而形成正确的概念。

什么是寻址方式呢?这是首先要明确的概念。

一个指令是由操作码和操作数两部分组成的。

操作数在存储器中存放的位置,称为操作数地址。

获得操作数地址的方式,就称为操作数地址的寻址方式,简称寻址方式。

在寻址过程中,操作数的存放位置决定着寻址的方式。

在汇编语言的学习过程中,区分“存放位置”是理解寻址方式的’前提。

因此,在学习之前应使学生理解寄存器和存储器的不同。

寄存器位于CPU内部,它的存取速度比存储器要快得多。

汇编语言-寻址方式

汇编语言-寻址方式

2020/12/27
20
基址加变址寻址例题
例3.12 MOV AX,[BX][SI] (等价形式MOV AX,[BX+SI])
说明:目的操作数地址是AX,源操作数偏移地址EA =[BX]+[SI],其中,基址寄存器选用了BX,变址寄存器 选用了SI。由于源操作数选用BX作基址寄存器,所以其物 理地址PA是由数据段寄存器DS的内容左移4位二进制与偏 移地址EA相加形成。
执行: (BX)→40050H 执行后:(40050H)=3344H,(BX)、(BP)、(DI)、 (SS)均不变。
2020/12/27
22
7. 相对基址加变址寻址
在该寻址方式中,操作数存放在存储器里,操作数的偏移
地址EA是由指令中指定的基址寄存器内容、变址寄存器内容 及位移量X三项相加之和组成。
为目的操作数地址,CX的内容为目的操作数。 执行前:(CX)=78H, 执 行:(CX)-1→CX 执行后:(CX)=77H
例3.7:ADD AX,BX 说明:ADD是双操作数指令,功能是实现加法运算,AX
为目的操作数地址,AX的内容为目的操作数,BX为源操作数地 址,BX的内容为源操作数。
执行前:(AX)=1234H,(BX)=5620H,即 执 行:(AX)+(BX) →AX 执行后:(AX)=6854H,(BX)不变。
2020/12/27
2
3.1 数据寻址方式
数据寻址方式即寻找操作数地址的 方式,在8086/80286中只能使用16位 寻址,而80386及其后继机型则既可用 16位寻址,也可用32位寻址,无论多 少位寻址实质都是寻找操作数的物理 地址。物理地址是由段地址和偏移地 址两部分组成,段地址存放在相应的 段寄存器中,偏移地址存储在相应的 地址寄存器中,偏移地址又称有效地 址。

汇编语言-寻址方式-地址和数据相关的寻址方式

汇编语言-寻址方式-地址和数据相关的寻址方式

汇编语⾔-寻址⽅式-地址和数据相关的寻址⽅式数据相关的寻址⽅式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.标号指令的符号地址,与操作码用‘:’分隔,其间可加若干空格。

有标号,程序的其他语句才可访问该语句。

可有可无。

规定:由8个以内的字母、数字构成,第一个必为字母,同一程序不可有相同标号,不能有助记符、伪指令、寄存器名、特殊符号等。

正确标号:AB1、NEXT、LOOP1。

错误标号:2A、S+M、EQU、ADD。

2.操作码说明语句功能,必不可少。

与操作数之间用空格相隔。

3.操作数说明操作对象。

可以是具体的数、标号(符号地址)、寄存器、直接地址等。

操作数为十六进制,且字母在最高位,则前面应补0.据指令之异,个数可为1、2、3或无。

各操作间用‘,’相隔。

4.注释程序说明。

以‘;’开头,可多行,每行都以‘;’开头。

二、寻址方式寻找操作数的地址。

1.寄存器寻址以通用寄存器的内容作为操作数,在指令的助记符中直接以寄存器名字来表示操作数位置。

51中若操作数以R0~R7表示操作数时,就属于此方式。

如:‘MOV A,R0’,功能:把寄存器R0的内容传送到累加器A中。

2.直接寻址在指令中直接给出操作数地址。

如:MOV ‘A,3AH’,功能:把内部RAM的3AH单元内容传送到累加器A中。

3.立即寻址指令的操作数是一个数。

该操作数被称为立即数。

立即数前加‘#’,如:’MOV A,#3AH’,功能:把立即数3AH送到累加器A中。

4.寄存器间接寻址寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,相应的寄存器前加@。

如:‘MOV A,@R0’,功能:取出寄存器R0中的值,将此值作为地址,取该地址单元中的内容传送到A。

5.变址寻址以某个寄存器的内容为基本地址,在此基本地址基础上加上地址偏移量作为真正的操作地址,并将此地址单元的内容作为指令的操作数。

51中,一般用数据指针DPTR或程序计数器PC的内容为基本地址,累加器A的内容为地址偏移量,并以DPTR+A或PC+A的值作为实际的操作数地址。

汇编语言补充复习题(含答案)

汇编语言补充复习题(含答案)

汇编语言补充复习题(含答案)汇编语言补充复习题一、简答题1、8086的指令格式由哪些部分组成?什么是操作码?什么是操作数?什么是寻址方式?2、8086/8088中有关操作数的寻址方式有哪几种?3、汇编语言程序应该由哪些逻辑段组成?各段的作用是什么?4、写出以下结构类定义语句的格式。

过程定义:段定义:5、简述标志寄存器各位的定义。

6、写出具有下列功能的伪指令语句:在DAl为首地址的存储单元中连续存放字节数据:2个54,5个‘A’, 10个(3,5)。

7、解释段基地址、逻辑地址、偏移地址、有效地址、物理地址的含义。

物理地址如何计算?(P35)教材P57,1~6教材P112,7~14教材P140,6~9,11教材P198,9(1)~(5)二、选择题1、若(AX)=0122H,4个标志位CF,SF,ZF,OF的初始状态为0,执行指令SUB AX,0FFFH 后,这4个标志位的状态是A、(CF)=0,(SF)=0,(ZF)=0,(OF)=0B、(CF)=0,(SF)=0,(ZF)=1,(OF)=1C、(CF)=1,(SF)=1,(ZF)=0,(OF)=0D、(CF)=1,(SF)=1,(ZF)=1,(OF)=12、当运算结果为0时,不能转向标号L1处的指令为A、JE L1B、JGE L1C、JNZ L1D、JAE L13、当程序结束要退回DOS时,在系统功能调用中,INT 21H指令前,先必须执行的指令是()。

AMOV AH,01H B、MOV AH,4CHC、MOV AH,02HD、MOV AH,09H4、DOS功能调用的子功能号应存放在()寄存器中A、AHB、ALC、DHD、DL5、比较两个同长度的字符串,全相等则转移到ST2的是()。

A、REPE CMPSBB、REPNE CMPSBJZ ST2 JZ ST2C、REP MOVSBD、REPNE MOVSBJZ ST2 JZ ST26、设ALPHA DW 7435H,396,8321,AUl DB 10 DUP(?)BETA DD 9543HCNT EQU BETA-ALPHA,则CNT的值为()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80x86的寻址方式
计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 8086/8088有七种基本的寻址方式。
1.立即寻址方式 操作数就包含在指令中,它作为指令的一部分,跟在操作后存 放在代码段,这种操作数就称为立即数。 立即数可以是8位的,也可以是16位的。 如果是16位立即数,按“高高低低”原则进行读取。 例如:MOV AX, 1234H
再如:MOV AL, 5 MOV BX, 2064H
则执行指令后(AL)=05H 则执行指令后,(BX)=3064H
指令中也可指定段超越前缀来取得其它段中的数据。 如,MOV AX , ES : [BX] 引用的段寄存器是ES 请熟悉下面的表达形式: MOV [SI] , AX ; 目的操作数间接寻址 MOV [BP] , CX ;目的操作数引用的段寄存器是SS MOV SI , AX; 目的操作数寄存器寻址
5.寄存器相对寻址方式 操作数在存储器中,操作数的有效地址是一个基址寄存器 (BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8 位或16位位移量之和。 即:
7.相对基址加变址寻址方式 操作数在存储器中,操作数的有效地址是由: 基址寄存器之一的内容与变址寄存器之一的内容 及指令中给定的8位或16位位移量相加得到。 即:
在一般情况下,如果BP之内容作为有效地址的一部分,那么 引用的段寄存器是SS;否者以DS之内容为段值。 在指令中给定的8位或16位位移量采用补码形式表示。在计算 机有效地址时,如果位移量是8位,那么被带符号扩展成16位。 当所取得的有效地址超过FFFFH是,就取64K的模。
请熟悉下面的写作形式: MOV BX , [BP-4] 源操作数间接相对寻址,引用的段寄存器是SS。 MOV ES : [BX + 5] , AL 目的操作数采用寄存器相对寻址,引用的段寄存器是ES。 指令MOV AX , [SI + 3]与MOV AX , 3[SI]是等价的。
6.基址加变址寻址方式 操作数在存储器中,操作数的有效地址是由: 基址寄存器之一的内容与变址寄存器之一的内容相加。 即:
3.直接寻址方式 操作数在寄存器中,指令直接包含有操作数的有效地址(偏移 地址)。操作数一般存放在数据段。 所以,操作数低地址由DS加上指令中直接给出的16位偏移得 到。 例如:如果(DS)=2000H ,MOV AX, [8054H]
在汇编语言指令中,可以用符号地址代替数值地址, 如:MOV AX, VALUE 此时,VALUE为存放操作数单元的符号地址。 如写成:MOV AX, [VALUE]也是可以的,两者等价。 如VALUE在附加段中,则应指定段超越前缀如下: MOV AX , ES : VALUE 或MOV AX , ES:[VALUE] 直接寻址方式常用语处理单个存储器变量的情况。它可以实现 在64K字节的段内寻址操作数。直接寻址的操作数通常是程序 使用的变量。 注意:立即寻址和直接寻址书写表示方法上是不同的,直接寻 址的地址要放在方括号中。在源程序中,往往用变量名表示。
2.寄存器寻址方式 操作数在CPU内部的寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是: AX,BX,CX,DX,SI,DI,SP,BP 对于8位操作数,寄存器可以是: AL,AH,BL,BH,CL,CH,DL,DH 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来 取得操作数,因而可以取得较高的运算速度。 例如:MOV AX, BX 如指令执行前(AX)=3064H, (BX)=1234H。则指令执行后, (AX)=1234H, (BX)保持不变 又如: MOV SI, AX MOV AL, DH 都是寄存器寻址的的例子。
4.寄存器间接寻址方式 操作数在存储器中,操作数有效地址在SI、DI、BX、BP这四 个寄存器之一中。 在一般情况下,如果有效地址在SI、DI和BX中,则以DS寄存 器之内容位段值。 如果有效地址在BP中,则以SS段寄存器之内容位段值。 例如:如果(DS)=5000H ,(SI)=1234H MOV AX, [SI]
在一般情况下,如果SI、DI或BX之内容作为有效地址的一部 分,那么引用的段寄存器是DS;如果BP之内容作为有效地址的 一部分,那么引用的段寄存器是SS。 在指令中给定的8位或16位位移量采用补码形式表示。在计算 有效地址时,如位移量是8位,则被带符号扩展成,(DI)=3678H MOV AX, [DI+1234H] 则,物理地址=50000+3678+1223=5489BH 假设该字存储单元的内容如下,则(AX)=55AAH
在一般情况下,如果BP之内容作为有效地址的一部分,那么 引用的段寄存器是SS;否者以DS之内容为段值。
例如:如果(DS)=2100H ,(BX)=0158H,(DI)=10A5H MOV AX, [BX][DI] 假设该字存储单元的内容如下,则(AX)=1234H
下面两种表示方法是等价的: MOV AX , [BX + DI] MOV AX , [DI][BX] 下面指令中,目的操作数采用基址加变址寻址,引用的段寄存 器是DS。 MOV DS :[BP + SI] , AL 下面指令中,源操作数采用基址加变址寻址,引用的段寄存器 ES。 MOV AX , ES :[BX + SI] 这种寻址方式适用于处理数据或表格。用基址寄存器存放数组 首地址,而用变址寄存器来定位数组中的各元素。或反之。 由于两个寄存器都可改变,所以能更加灵活地访问数组或表格 中的元素。
相关文档
最新文档