Skip to content

Latest commit

 

History

History
88 lines (51 loc) · 2.18 KB

File metadata and controls

88 lines (51 loc) · 2.18 KB

第16节 用于内存寻址的寄存器BP

❤️💕💕汇编语言目前仍在发挥着不可替代的作用,在效率上无可替代,在底层,学习linux内核,计算机外围设备和驱动,都离不开汇编。Myblog:http://nsddd.top


[TOC]

用于内存寻址的寄存器用法

我们知道只有dx、dp、si、di可以用在[…]对内存单元进行寻址

mov ax,[bx]
mov ax,[bx + si]
mov ax,[bx + di]

mov ax,[bp]
mov ax,[bp + si]
mov ax,[bp + di]

mov ax,[si]
mov ax,[di]
......

上面的指令都是正确的

除了bx以外的通用寄存器、段寄存器不可以用在[…]中

mov ax,[cx]  ;这个是错误的用法   
mov ax,[ax]  ;这个是错误的用法
mov ax,[dx]  ;这个是错误的用法
mov ax,[ds]  ;这个是错误的用法

mov ax,[dx+dp]  ;两个偏移指令叠加寻址 × 不可以
mov ax,[si+di]	;两个变址寄存器相叠加 × 不可以

bx和dp区别

  • bx默认是ds段
  • bp默认是ss段

可以给出段地址,可以不受默认的影响

指令要处理的数据有多长

在汇编指令中,通过以下方式指定指令要处理的数据的长度

  1. 通过寄存器名指明要处理的数据的尺寸。

    例如ax是字操作,al是字节操作

  1. 没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。
mov word ptr sd:[0], 1  ---- 字单元
mov byte ptr ds:[0], 1   -----字节单元

在没有寄存器参与的内存单元访问指令中,用word ptr或者byte ptr显性地指明所要访问的内存单元地长度是很有必要的,否则,CPU无法知道要访问的单元是字单元还是字节单元。

END 链接