【世界杯专栏】32强巡礼——日本 2025-05-09 00:42:08
《赠荷花》原文及翻译赏析 2025-07-15 01:15:18
ps怎么把图片嵌进去 2025-08-14 13:51:43
贵阳手机报价(贵阳地区最新手机报价大盘点) 2025-08-22 05:15:48
漫步者音箱和惠威哪个更好? 2025-07-27 03:49:06
鲤鱼纹身有什么讲究和忌讳(鲤鱼纹身的意义何在) 2025-07-06 13:26:53
恌轻的解释及意思 2025-09-17 17:39:18
【关注】金庸先生亲笔“盖章”的鹿鼎山,一个真实的... 2025-05-17 03:02:01
南非国歌包含五种语言成绕口令 全民学唱迎世足 2025-06-30 18:47:02
个人征信怎么查?3种免费方法+实操步骤图解,5分钟搞定信用报告 2025-08-08 01:24:54

操作数及寻址方式

操作数是什么?

操作数是指 指令执行的操作所需要数据的来源。操作数是汇编语言指令的一个字段。例如: Mov AX 5678H操作数(AX 5678H)。在操作数这个字段中可以放操作数本身,也可以放操作地址,还可以放操作地址的计算方法。

通常一条指令均包含操作符和操作数。 简单理解: 操作就是+、-、*、/、逻辑运算&、|、~等等.那么操作数就是操作符相邻的变量或常量

例如:

a+b

a、b就是操作数,+就是操作符

操作数是指令执行的参与者,也就是各种操作的对象与之有关的是操作码,,所谓操作码是说明计算机要执行哪种,如传送运算移位跳转等操作,它是指令中不可缺少的组成部分。

操作数是运算符作用于的实体,表达式中的一个组成部分,它规定了指令中进行数字运算的量。表达式是操作数与操作符的组合。

操作数的形式

立即操作数:指令要操作的数据以常量的形式出现在指令中,称为立即数,它只能作为源操作数。寄存器操作数:指令要操作的数据存放在CPU中的寄存器里,指令中给出寄存器名即可。内存操作数:指令要操作的数据存放在内存某些单元中,指令中给出内存单元物理地址(实际上指令只给出了偏移地址,段地址采用隐含方式给出,也可以使用跨段方式指出当前段地址)。

操作数应用

在应用指令中,内容不随指令执行而变化的操作数为源操作数,内容随执行指令而改变的操作数为目标操作数。大多数情况下,操作数字段可有一个或者多个操作数。只有一个操作数的指令称为单操作数指令,两个操作数的指令称为双操作数指令。双操作数又称为源操作数(source) 和目的操作数(destination)

操作符 目的操作数 源操作数. 如:

MOV AH, 06H

操作数在C语言中包括常量、标识符、字符串、函数调用、下标表达式、 成员选择符和复杂表达式,在汇编语言中也是重要的一部分, 通过将操作数与操作符相结合的方式或者通过将操作符放在括号内的方式形成。

操作数的寻址方式

在指令中,指定操作数或操作数存放位置的方式称为寻址方式。 说明操作数所在地址的寻址方式可分为7种.

立即数寻址

操作数包含在指令中,紧跟着操作码并与操作码一起存放在代码段中,与代码一起被取入CPU的指令队列,指令执行时不需要到其他地址单元中去取。

立即寻址中的操作数可以是计算机有效数制下的数值,也可以是带单引号的字符。这种寻址方式主要用于给寄存器或存储单元赋初值的场合。立即寻址方式是这七种寻址方式中速度最快的寻址方式。

mov ah,80h ;8位

mov ax,1234h ;16位

mov eax,12345678h ;32位

指令立即寻址示意图如下:

MOV AX,3102H ;

MOV AL,‘A’ ;

寄存器寻址

操作数在CPU内部的寄存器中,在指令中指定寄存器号。需要注意的是:源操作数与目的操作数字长要相同

源操作数是寄存器

ADD VARD,EAX; VARD是双字类型变量

目的操作数是寄存器

ADD BH, 78h;

源和目的操作数都是寄存器

MOV EAX, EBX;

直接寻址

操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。

两种表现形式:

显式的指定段寄存器

例如:

MOV ES:[1000H], AX;

指定将AX的值移动到附加段的1000H偏移处

未显式指定段寄存器

因未指定段前缀,则默认数据在数据段中。其物理地址将由数据段寄存器DS和指令中给出的有效地址(偏移)直接形成。

MOV AX, [2000H] 指令的寻址过程

寄存器间接寻址

操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。

规定:在不使用段超越前缀的情况下

若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。

寄存器相对寻址

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。

规定:在不使用段超越前缀的情况下

若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS若有效地址用BP来指定,则其缺省的段寄存器为SS。

基址加变址寻址方式

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。

规定:在不使用段超越前缀的情况下,

如果有效地址中含有BP,则缺省的段寄存器为SS;如果有效地址中不含有BP,则缺省的段寄存器为DS。

例如:

假设指令:MOV BX, [BX+SI]

在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。指令执行后,BX的值是什么?

计算有效地址:

EA=(BX)+(SI)=2100H+0011H=2111H

则物理地址为:

PA=(DS)16+EA=1000H16+2111H=12111H

相对基址加变址寻址

操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。

规定:在不使用段超越前缀的情况下

如果有效地址中含有BP,则其缺省的段寄存器为SS;如果有效地址中不含有BP,则其缺省的段寄存器为DS。

例如:

假设指令:MOV AX, [BX+SI+200H]

在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。指令执行后,AX的值是什么?

计算有效地址:

EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H

则物理地址为:

PA=(DS)16+EA=1000H16+2310H=12310H