编程语言
首页 > 编程语言> > 【汇编语言】数据寻址

【汇编语言】数据寻址

作者:互联网

数据寻址

在这里插入图片描述

文章目录

一、寻址概述

运行的程序保存于主存储器,需要通过存储器地址访问程序的指令和数据 通过地址访问指令或数据的方法称为寻址方式 (Addressing Mod) 一条指令执行后,确定下一条执行指令的方法是指令寻址。执行过程中,访问所需要操作的数据(操作数)的方法是数据寻址
IA-32 处理器除外设数据外的数据寻址方式有以下三类:
• 用常量表达的具体数值(立即数寻址)
• 用寄存器名表示的其中内容(寄存器寻址)
• 用存储器地址代表的保存的数据(存储器寻址)

二、数据寻址方式

(1)立即数寻址

1.立即数寻址定义

在立即数寻址(或立即寻址)方式中,指令需要的操作数紧跟在操作码之后作为指令机器代码的一部分,并随着处理器的取指操作从主存进入指令寄存器。

2.立即数的形式

3.立即数的类型

立即数的类型由对应的寄存器或变量类型决定。

4.立即数寻址总结

符号含义
i88位立即数
i1616位立即数
i3232位立即数
imm立即数

(2)寄存器寻址

1.寄存器寻址定义

指令的操作数存放在处理器的寄存器中,就是寄存器寻址方式。
在这里插入图片描述

2.寄存器寻址形式

3.寄存器寻址语法错

mov edi,si

错误的原因是两个操作数的类型不匹配,因为 EDI 32 位寄存器SI 16 位寄存器, MOE 指令不允许把 16 位寄存器的数据传送到 32 位寄存器

4.寄存器寻址总结

符号含义
r88位寄存器
r1616位寄存器
r3232位寄存器
reg通用寄存器

(3)存储器寻址

1.存储器寻址概述

寻址主存中存储的操作数就称为存储器寻址方式,也称为主存寻址方式 编程时,存储器地址使用包含段选择器和偏移地址的逻辑地址。在这里插入图片描述

2.存储器寻址方式

①存储器的直接寻址

有效地址只有位移量部分,直接包含在指令代码中,用变量名(或加中括号)表示偏移地址
►直接使用变量名表达:变量名
►变量名加或减一个常量:变量名+n 、变量名-n
►或者用中括号括起变量名:[变量名] 、变量名[n]

MOV ECX,COUNT
MOV ECX,[COUNT]
MOV ECX, DS:[405000H]
②存储器的寄存器间接寻址

有效地址存放在寄存器中,就是采用寄存器间接寻址存储器操作数,使用英文中括号括起寄存器名表示寄存器间接寻址。

③存储器的寄存器相对寻址

有效地址是寄存器内容与位移量之和,寄存器要用中括号括起

mov esi,[ebx+4] ;位移量:4
mov edi,[ebp-08h] ;位移量:-08H
mov eax,count[esi] ;位移量:count
  • 主存储器采用字节编址,地址的加减是以主存字节单元为单位
  • 方便对数组的元素或字符串的字符进行操作
    ►数组(字符串)的首地址作为位移量
    ►寄存器赋值0,或者元素(字符)个数
    ►增减寄存器值指向不同的元素(字符)

寄存器相对寻址的多种表达形式

④存储器的变址寻址

使用变址寄存器寻址操作数称为变址寻址,有效地址需要使用变址寄存器获得,寄存器要用中括号括起。

组合基址寄存器、位移量或比例,构成多种变址寻址方式:
在这里插入图片描述

mov eax,[ebx+esi] ;基址变址寻址
mov eax,[ebx+edi+80h] ;相对基址变址寻址
mov eax,[esi*2] ;带比例的变址寻址
mov eax,[edi*2+80h] ;带比例的相对变址寻址
mov eax,[ebx+esi*8+count] ;带比例的相对基址变址寻址

标签:操作数,汇编语言,ebx,变址,mov,寻址,寄存器,数据
来源: https://blog.csdn.net/BlacKingZ/article/details/115425252