汇编寻址模式


学汇编,首先要学会寻址模式。
寻址模式本质上,就是将数据从一个地方取出来,放进去的过程。
如何能够这样做,那就必须让他们之间有电路连接。
比如将寄存器的内容放到内存中去,他们就是通过总线连接的。
而cpu内部,各个寄存器之间也是有线路连接的。如果能够找到cpu的图示,就能够形象的认识到那些是能够传递数据,那些部件之间是不能够直接传递数据,必须通过中间人来间接传递。

汇编寻址模式

立即                     mov ax,100h
寄存器                 mov ax,bx
直接                     mov ax,[100h]
间接                     mov ax,[bp] ;其中bx,bp是基址寻址,si,di是变址寻址
相对变址                     mov ax,100h[si]
相对基址                     mov ax,100h[bx]
基址变址             mov ax,[bx][si]
相对基址变址     mov ax,100h[bp][di] 

这个是16位汇编的寻址模式,16位的特点,除了寄存器是16位之外,间接寻址所能用的寄存器也限定只能是bx,bp,si,di这是个。
然后和相对偏移量一起构成了各种复合寻址模式。

立即寻址模式,即数据直接和指令一起编码,cpu读入执行的时候,无须再通过任何寻址方式,也就是不用通过地址去找数据。从感性上将,这是唯一不用寻址的模式(虽然他称为一种寻址模式)。

寄存器寻址,从这里看出,寄存器也是有地址的,但是寄存器的地址是不可以间接寻址的。通过寄存器寻址,我们通过寄存器的地址找到寄存器的数据。

直接寻址, 直接寻址将数据的内存地址和指令一起编码,指令通过这个地址,找到相关的数据。
间接寻址, 间接寻址是在直接寻址的基础上面建立起来的,也就是直接寻址得到的数据是一个地址,通过这个地址找到最终的数据,也就是两次寻址,第一次得到的是地址,第二次才是目标数据。

这里面有多种可能,因为一步寻址模式有两个,一个是通过寄存器地址找寄存器数据的寄存器寻址方式;一个是通过内存地址找内存单元上数据的直接寻址方式。但是16位汇编,只采用了寄存器寻址模式作为第一步寻址,这样做的原因在于寄存器寻址的速度快,即使通过两次寻址还是比利用直接寻址快一个数量级。

第二步寻址,却是直接寻址方式,也就是第一步得到的数据,是一个内存地址。为何不两个都是寄存器寻址呢?可能这样做没有什么实用价值吧。

复合寻址模式, 就是变种的间接寻址模式,所谓的间接寻址方式,就是一个寄存器里面包含着内存的地址,而复合寻址模式中,这个内存的地址是由三个部件组合给出的(2~3个),基址部件,包括寄存器bx,bp;变址部件si,di;偏移量,相当于直接寻址方式的常量。

以上忽略了一个事实,那就是内存地址是分段的,也就是cs,ds,ss,es等,可以通过段前缀明确给出,也可以不给出而使用约定默认值。那些寻址方式涉及内存地址的呢?除了立即寻址和寄存器寻址外,其他寻址方式都涉及内存地址。也就是直接寻址,间接寻址,还有复合寻址。默认值是如何设定的呢?是通过寄存器之间的约定,比如使用间接寻址 mov ax,[bx],bx寄存器就约定和ds组合成最终内存地址。下面是一些约定情况,

ip-cs ;指令寻址
sp - ss ;栈寻址
si - ds ;串寻址
di - es ;串寻址
bp - ss
bx,si,di - ds


直接寻址方式,没有寄存器,默认是 ds;
间接寻址方式,bp - ss;  bx,si,di - ds;
复合寻址方式,主要看基址部分,如果是bp就对应ss,否则都是ds;

至于ip 并不在这个范围内,这里面任何一种寻址方式,涉及内存的,都没有包括ip。
ip是指令寻址方式,对应着cs.
类似的, sp用于栈操作指令的栈操作寻址方式,对应着ss.
si 和 es 虽然在这个范围内,但是还有一种情况,就是用做串操作指令的串操作寻址方式,分别对应着ds,和es。

寻址方式的学习,除了了解一般规律,其他关键就是要记住特别情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值