寻址方式

读者定位:(1)学习过计算机组成原理中的寻址方式  (2)了解8086基本的指令含义,如mov, lea等

内容概要:通过将计算机组成原理中的基本寻址方式与8086汇编中的寻址方式进行对比,加深学习印象,将理论与实践结合;

<1>立即寻址

立即寻址即在汇编语句中直接给出操作数,该操作数称为立即数:

mov cl, 0

在汇编语句 mov cl, 0中直接给出立即数0

<2>直接寻址

假设操作数在数据段中的偏移地址为idata,通过在汇编语句中直接给出操作数在数据段中的偏移地址来寻址操作数;

直接寻址方式的格式为[idata],如下:

mov cl, [0]

在汇编语句 mov cl, [0],0为操作数在数据段中的偏移地址,该汇编语句将数据段中偏移地址为0的操作数mov到寄存器cl中

<3>寄存器寻址

假如需要寻找存储在寄存器中的操作数,可以采用寄存器寻址方法;

寄存器寻址通过直接给出寄存器名即可:

mov ds, ax

该汇编语句采用寄存器寻址方法,将寄存器ax中的操作数mov到寄存器ds中。

<4>寄存器间接寻址

假如操作数的地址存储在寄存器中,可以采用寄存器间接寻址技术来寻址操作数;

寄存器间接寻址格式: [reg]

data segment
A db 1, 2, 3, 4, 5, 6, 7, 8
B db 8 dup(0)
data ends

code segment
    Assume cs: code, ds: data
start:
       mov ax, data
       mov ds, ax

       mov si, offset A
       mov di, offset B
       mov cx, 8
   s:  mov ax, [si]
       mov [di], ax
       inc si
       inc di
       loop s

       mov ax, 4c00h
       int 21h
code ends
    end start

如上所示,该汇编程序将数组A中的元素拷贝到数组B中;

在汇编语句 mov ax, [si] 与 mov [di], ax 中通过寄存器间接寻址来拷贝数据;

PS: (1)汇编语句 mov, si, offset A 与 mov di, offset B中伪指令offset的作用为回送变量或者标号的偏移地址,在该语句中作用为回送数组A与B的首地址;

(2) 在定义变量时,变量名与C语言中的含义相同,表示一个内存单元的内容,如 A 表示[ds:0] = 1,而不是数组A的地址

(3) 在8086中,只能通过特定的寄存器来进行寄存器间接寻址,能进行寄存器间接寻址的寄存器为bx, bp,si,di,但是bx,si, di 的段寄存器为ds,

而bp段寄存器为ss。

<5> 寄存器相对寻址

寄存器相对寻址格式:[reg + idata]或 idata[reg] 或[reg].idata (idata 为一个具体的数值)

作用:使用寄存器相对寻址功能常用来解决数组问题,以idata为某个数组的首地址,reg为偏移量;与寄存器间接寻址相同,寄存器相对寻址寻址方式

和其具有相同的对reg的限制要求

data segment
A db 1, 2, 3, 4, 5, 6, 7, 8
B db 8 dup(0)
data ends

code segment
    Assume cs: code, ds: data
start:
       mov ax, data
       mov ds, ax

       mov si, 0
       mov di, 0
       mov cx, 8
   s:  mov al, 0[si]
       mov 8[di], al
       inc si
       inc di
       loop s

       mov ax, 4c00h
       int 21h
code ends
    end start

该汇编程序使用寄存器间接寻址实现数组拷贝功能

<6> 基址变址寻址

基址变址寻址寻址技术使用三个寄存器进行寻址,一个为段寄存器,一个称为变址寄存器,另外一个寄存器存储偏移值;

段寄存器不需要显式的给出,其通过隐含寻址方式给出,如bx变址寄存器对应于ds段寄存器,bp变址寄存器对应于ss段寄存器;

基址变址寻址格式: [bx / bp + si / di] = (ds / ss * 16 + ((bx) + (si / di)))

还可以使用[bx/ bp][si/ di];

data segment
D db 10h dup(0)
A db 1, 2, 3, 4, 5, 6, 7, 8
B db 8 dup(0)
data ends

code segment
    Assume cs: code, ds: data
start:
       mov ax, data
       mov ds, ax

       mov bx, offset A
       mov si, 0
       mov di, 8
       mov cx, 8
   s:  mov ax, [bx + si]
       mov [bx + di], ax
       inc si
       inc di
       loop s

       mov ax, 4c00h
       int 21h
code ends
    end start

该汇编程序使用基址变址寻址技术实现拷贝数组A中的内容到数组B中的功能

<7>相对基址变址寻址

相对基址变址寻址寻址在基址变址寻址的基础上增加idata值,其格式为

[bx / bp + si / di + idata] = ( (ds / ss * 16) + bx / bp + si / di + idata);通常用做对二维数组或者结构体进行寻址;



参考书籍:

1)汇编语言(第三版)  王爽

2)计算机组成原理    蒋本珊

时间: 2024-08-11 04:05:49

寻址方式的相关文章

汇编--寻址方式

1.立即寻址方式 mov AL,5 (AL)=05H mov AX,3064H (AX)=3064H mov EAX,123456H (EAX)=123456H 2.寄存器寻址方式 mov AX,BX (AX)=3064H (BX)=1234H (AX)=1234H MOV EXC,EDX 3.直接寻址方式 mov AX,[2000H] mov AX,2000H ;这两者等效 4.寄存器间接寻址方式 mov AX,[BX] 默认DS:[BX] ;也可以制定其他段跨越前缀来取得其他段中的数据 mo

8086 寻址方式

(段超越前缀用来改变默认的段寻址,通常内址寻址是数据段或者堆栈段. 但是可以在指令前加上段超越前缀,来访问其他段的数据.比如 di,si,bx 的段默认位是 ds,bp 默认为 ss.) 1.立即寻址方式: 操作数包含在指令中,跟在操作码后存在在代码段. 立即数寻址方式主要用来给寄存器和存储单元赋值,因此这种寻址方式不能用于单操作数指令: 若用于双操作数指令,也只能用于源操作数字段,不能用于目的操作数字段. 比如 "mov ax, 1111H". 2.寄存器寻址方式: 不需要通过访问存

组成原理之指令寻址方式和操作数寻址方式图示

指令包括操作码和操作数两部分.指令的寻址方式即指令如何寻找下一条指令的:分为顺序寻址方式和跳跃寻址方式,其中顺序寻址方式是根据PC给出下一条要执行指令的地址,跳跃寻址方式是从执行指令中获取下一条指令的地址,之后更新PC数据,找到下一条要执行的指令. 顺序寻址方式: 如图 程序计数器+1可得到下一条指令 如图   跳跃寻址方式 如图 由指令3可以知道向下条指令为6,程序计数器的值变为6 如图 下面介绍操作数寻址方式,前面提到指令有操作码和操作数组成,一条指令中的操作数可以通过操作数地址寻找.寻找的

汇编语言之寻址方式

与数据有关的寻址方式 下面以数据传送指令MOV为例来说明.其汇编格式为:MOV  目标, 源 1.立即寻址方式(immediate addressing) 操作数直接包含在指令中,紧跟在操作码之后的寻址方式称为立即寻址方式,把该操作数称为立即数. MOV  AL, 6                       ;(AL)=6 MOV  AX, 3064H             ;(AX)=3064 2.寄存器寻址方式(register addressing) 操作数直接包含在寄存器中,由指令

ARM中的寻址方式

ARM处理器支持9中不同的寻址方式. 1.移位寄存器寻址: 有5种移位方式: LSL:逻辑左移.最低位用0补充,且移出的最后一位存放在cpsr中的C位中. LSR:逻辑右移.最高位用0补充,且移出的最后一位存放在cpsr中的C位中. ASR:算术右移.最高位用符号位补充,且移出的最后一位存放在cpsr中的C位中. ROR:循环右移(不涉及到CPSR中的C位的循环右移).且移出的最后一位存放在cpsr中的C位. RRX:扩展循环右移(带有C位的右移).只循环右移一位,且最高位用cpsr中的C位补充

arm9的操作模式,寄存器,寻址方式

工作模式 Arm有7种工作模式: 名称 简称 简介 User Usr 正常用户程序执行的模式(linux下用户程序就是在这一模式执行的.) FIQ Fiq 快速中断模式 IRQ Irq 普通中断模式 Supervisor Svc 给操作系统准备的保护模式,权限很高的一种模式,linux的内核就是运行在此模式 Abort Abt 比如访问虚拟内存,导致了异常,就是进入这一模式. Undefined Und 运行一条处理器并不支持的指令就进入此模式. System Sys Armv4及以上的版本才有

2.4 ARM寻址方式

所谓的寻址方式就是处理器指令中给出的信息来找到指令所需要的操作数的方式 1. 立即数寻址 立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数,对应的寻址方式就叫做立即数寻址例如指令如下 ADD????R0,????R0,????#0x3f;????R0?R0+0x3f 在以上两条指令中,第一个源操作数即为立即数,要求以"#"为前缀. 2. 寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高

Intel 80x86 寻址方式

随着学习的深入,我们会逐渐接触到计算机内部的构造方式,以及设计原理,这其中,计算机的寻址方式是一个很重要的概念,我们需要好好理解一下. 一.预备知识: (1)操作数 在接触寻址方式之前,我们还要先了解一下操作数的概念,根据操作数存放方式的不同,我们可以将操作数分成3类, 1.立即操作数:操作数包含在本条指令中: 2.寄存器操作数:操作数存放在CPU的某个寄存器中: 3.存储器(内存)操作数:操作数存放在存储器中: (2)逻辑地址 逻辑地址 = 段地址(存储单元所在逻辑段地址)左移4位 + 偏移地

汇编试验七:寻址方式在结构化数据访问中的应用

预备知识: (1)寻址方式 <汇编语言>P169 (2)div指令 被除数 dx + ax,除数 bx ,商 ax,dx 余数: (3)dd :双字数据 (4)dup :重复赋值指令

汇编学习笔记(2)-80x86寻址方式

寻址方式 所谓寻址方式就是表示指令中数据所在地址的方式.一共有七种寻址方案 立即数寻址 寄存器寻址 直接寻址 寄存器间接寻址 寄存器相对选址 基址变质寻址 相对基址变质寻址 在此之前,先介绍一个数据复制指令 MOV 指令, 格式是 MOV AX, BX . AX, BX是寄存器上一章介绍过的MOV就是指令. 指令的含义就是将BX的值复制给AX.C语言的表述就是AX=BX; 举个例子 如果一开始 AX=5; BX=0; MOV AX,BX 之后 AX = BX 都是0: 立即数寻址 / 寄存器寻址