- 问题一:处理的数据在什么地方
- 问题二:处理的数据有多长
bx,si,di,bp
在8086CPU中,只有这四个寄存器可以直接用来进行内存单元的寻址
比如:
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bp]
- 这四个寄存器可以单个出线,也可以组合出现,但只能以以下四种组合出现:
- bx+si
- bx+di
- bp+si
- bp+di
- 只要在[…]中使用寄存器bp,而指令没有显然给出段地址,则段地址默认在ss中
机器指令处理的数据在什么地方
- CPU内部
- 内存
- 端口
汇编语言中数据位置的表达
- 立即数(idata)
mov ax,1
- 寄存器
mov ax,bx
- 段地址和偏移地址
mov ax,[bx]
mov ax:[0]
寻址方式
寻址方式 | 名称 |
---|---|
[idata] | 直接寻址 |
[bx],[si],[di],[bp] | 寄存器直接寻址 |
[bx+idata] | 寄存器相对寻址 |
[bx+si] | 基础地址加变换地址寻址 |
[dx+si+idata] | 相对基础地址加变换地址寻址 |
处理的数据有多长
- CPU的指令可以处理两种尺寸的数据,即byte(字节)和word(字),所以在机器指令中要指明指令进行的是字操作还是字节操作
- 通过寄存器名(ax字操作,al字节操作)指明要处理的数据的尺寸
- 用X ptr操作符指明指令进行的是字操作还是字节操作,X可以是word或byte,例如:
mov word ptr [bx] //字操作
mov byte ptr [bx] //字节操作
div指令
在汇编语言中div指令为除法指令,在使用时我们应考虑以下问题:
- 除数:有8位和16位两种,在一个寄存器或内存单元中
- 被除数:默认放在AX或DX中,如果除数为8位,则被除数为16位,默认在AX中存放;如果除数为16位,则被除数为32位,在DX和AX中存放,DX存放高16位,AX存放低16位
- 结果:如果除数为8位,则AL存储商,AH存储余数,如果除数为16位,则AX存储商,DX存储余数
伪指令dd
- dd用来定义双子型数据
伪指令dup
- dup用来定义重复数据,例如
db 3 dup(0) //定义三个字节,它们的值都是0
db 3 dup(0,1,2) //定义9个字节,它们是0,1,2,0,1,2,0,1,2