❤️💕💕汇编语言目前仍在发挥着不可替代的作用,在效率上无可替代,在底层,学习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默认是ds段
- bp默认是ss段
可以给出段地址,可以不受默认的影响
在汇编指令中,通过以下方式指定指令要处理的数据的长度
-
通过寄存器名指明要处理的数据的尺寸。
例如ax是字操作,al是字节操作
- 没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte。
mov word ptr sd:[0], 1 ---- 字单元
mov byte ptr ds:[0], 1 -----字节单元
在没有寄存器参与的内存单元访问指令中,用word ptr或者byte ptr显性地指明所要访问的内存单元地长度是很有必要的,否则,CPU无法知道要访问的单元是字单元还是字节单元。