笔记——第八章

这章要解决数据处理的两个问题:数据地址和数据长度

数据地址

数据地址就是由段地址和偏移地址组成的。在8086CPU中,段地址寄存器有:ds、cs、ss、es;偏移地址寄存器有:bx、si、di和bp

段地址寄存器

  1. 一般偏移地址用的是bx,而指令中也没有显性地给出段地址,则段地址寄存器默认为ds
  2. 一般偏移地址用的是bp,而指令中也没有显性地给出段地址,则段地址寄存器默认为ss

偏移地址寄存器

这几个寄存器要么单独使用,要么只能是(bx,bp)组和(si,di)两两组合4种方式。即如下几种(idata是指确定的数字):

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

具体位置

汇编指令 指令执行前数据的位置 备注
mov bx,[0] 内存,[0]内存单元
mov bx,ax CPU内部,在ax寄存器里
mov bx,10 CPU内部,在指令缓冲器里 这种直接给出具体数字的叫做立即数

数据长度

8086里只能处理两种长度的数据,byte和word。在具体操作中

可以隐式地根据寄存器得到

如果是ax则是word,如果是al则是byte。

显示地指定

mov word ptr ds:[0],1
add byte ptr ds:[0],1

div

div是除法指令

  1. 除数:可以是8位可以是16位,一般存在除了段寄存器外的寄存器里或者内存单元里
  2. 被除数:默认放在ax或者ax和dx中,如果除数是8位,则被除数是16位,放在ax中,如果除数是16位,则被除数是32位,高位放在dx中,低位放在ax中。
  3. 结果:如果除数是8位,则al中放商,ah放余数,如果除数是16位,则ax中放商,dx中放余数。

一些伪指令

dd,dw,db

dd是双字型,占2个字
dw是单字型,占1个字
db是字符型,占1个字节

dup

配合上面的dd,dw,db使用,进行数据的重复,比如

db 3 dup(0)  //相当于db 0,0,0
db 3 dup(0,1,2) //相当于db 0,1,2,0,1,2,0,1,2

你可能感兴趣的:(笔记——第八章)