汇编:操作数寻址方式 | 您所在的位置:网站首页 › 汇编语言db指令的地址如何确定 › 汇编:操作数寻址方式 |
1、通用寄存器的一般用途
操作数从指令代码中立即得到,即立即数(Immediate),用常量形式直接表达,因此操作数存储在 代码段(CS)中。 例:MOV AX, 1100H 注 意! 只能用于源操作数 () MOV 40H, AL (AL不能给一个常数值) 源操作数和目的操作数的字长必须一致 MOV AH, 3064H (AX为16位寄存器,AH和AL分别为AX的高八位和低八位,而操作数3064H有16位) 二、操作数在存储器中 --存储器寻址 1.直接寻址例:MOV CX,[1000H]; (1)指令中直接包含了操作数的有效地址EA,在指令操作码之后; (2)默认段地址在DS寄存器中,即操作数的实际地址(物理地址)是DS:EA DS:EA的意思是物理地址 = DS*16+EA。 若DS = 2000H,则物理地址 = 2000H*16 + 1000H = 21000H。 2.寄存器间接寻址(1)操作数的有效地址EA存放在基址寄存器或变址寄存器。不能放在AX\CX\DX中; (2)可以方便地对数组的元素或字符串的字符进行操作; (3)寄存器间接寻址没有说明存储单元类型; 操作数的段地址(数据处于哪个段,代码段、数据段…)取决于选择哪一个间址寄存器:物理地址 = 段地址*16 + 简直寄存器地址。 例:MOV AX,[BX];其中(DS)=2000H,(BX)=0100H; 则源操作数的物理地址为:2000H*16+0100H = 20100H(该地址和20101H两个地址一起存储着16位的字,20101H存储高8位,20100H存储低8位)。 3.寄存器相对寻址 有效地址是寄存器内容与位移量之和;适用于数组、字符串、表格的操作。例:MOV BX,1100+[BX](或者写成MOV BX,1100[BX]) ; (DS)=2000H,(BX)=0100H, 物理地址 = 2000H*16 + 0100H = 20100H。 4.基址变址寻址有效地址是基址寄存器和变址寄存器之和; 注意:必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, [BX][BP](BX: 基址寄存器;BP: 基址指针寄存器) MOV AX, [SI][DI](SI: 源变址寄存器;DI: 目的变址寄存器) 例:MOV AX,[BX][SI]; 物理地址 = 段地址*16 + BX + SI; 5.相对基址变址寻址例:MOV AX,MASK[BX][SI];(或者MOV AX, [BX+SI+MASK]或 MOV AX, MASK[BX+SI]) 物理地址 = 段地址*16 + BX + SI + MASK; 三、总结 1.汇编语言 SI DI BX BP SS DS 是什么SI: 16位寄存器,源变址寄存器 DI: 16为寄存器,目的变址寄存器 BX: 16位寄存器(可分成2个8位寄存器BH,BL),基址寄存器 BP: 16位寄存器,基址指针寄存器 SS : 16位段寄存器,作用是存放当前堆栈段的段地址,一般和SP连用 DS: 16为段寄存器, 作用是存放当前数据段的段地址 2.怎样根据这些求物理地址有个公式: 物理地址 = 基础地址 + 偏移地址 = CS*10H(基础地址)+ IP(偏移地址) CS: 16位段寄存器,存放当前代码段的段地址 IP: 存放下一条要执行的指令的偏移地址 有问题欢迎交流!!!!
|
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |