您的位置:首页 > 其它

数据处理的两个基本问题

2017-04-11 19:29 295 查看

用于内存寻址的寄存器

8086CPU有14个寄存器:

(1)通用寄存器:

AX (Accumulator):累加寄存器

BX (Base):基地址寄存器

CX (Count):计数器寄存器

DX (Data):数据寄存器

(2)变址寄存器:

SI (Source Index):源变址寄存器

DI (Destination Index):目的变址寄存器

(3)指针寄存器:

SP (Stack Pointer):堆栈指针寄存器

BP (Base Pointer):基指针寄存器

(4)段寄存器:

CS (Code Segment):代码段寄存器

DS (Data Segment):数据段寄存器

SS (Stack Segment):堆栈段寄存器

ES (Extra Segment):附加段寄存器

(5)指令指针寄存器: IP

(6)标志寄存器:PSW

使用原则:

(1)bx、bp、di、si寄存器可用于内存单元寻址,其中bx、di、si段地址默认在ds中,bp的段地址默认在ss中

(2)CS寄存器不允许赋值,其他DS,ES,SS可以用通用寄存器给其赋值。

处理的数据在什么地方?

1.立即数

对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),称为立即数(idata ),数据包含在指令中

mov ax,1
add bx,2000h
or bx,00010000b
mov al,'a'


2.寄存器

指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。

mov ax,bx
mov ds,ax
push bx
mov ds:[0],bx
push ds
mov ss,ax
mov sp,ax


3.段地址(SA)和偏移地址(EA)

指令要处理的数据在内存中,可通过[X]的格式给出EA,SA在某个寄存器中

段地址默认在ds中

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


段地址默认在ss中

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


显性的给出存放段地址的寄存器

mov ax,ds:[bp]
mov ax,es:[bx]
mov ax,ss:[bx+si]
mov ax,cs:[bx+si+8]


处理的数据有多长?

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

字操作:

mov ax,1
mov bx,ds:[0]
mov ds,ax
mov ds:[0],ax
inc ax
add ax,1000


字节操作:

mov al,1
mov al,bl
mov al,ds:[0]
mov ds:[0],al
inc al
add al,100


2 . 在没有寄存器的情况下,用操作符X ptr指明内存单元长度

字操作: word ptr

mov word ptr ds:[0],1
inc word ptr [bx]
inc word ptr ds:[0]
add word ptr [bx],2


字节操作: byte ptr

mov byte ptr ds:[0],1
inc byte ptr [bx]
inc byte ptr ds:[0]
add byte ptr [bx],2


div 指令

div是除法指令,使用div作除法的时候:

div 除数(寄存器或内存单元,内存单元时要指明是字单元还是字节单元)

1. 除数为8位时,被除数则为16位,默认放在AX里,运算结果的商用AL存储,余数用AH存储

2. 除数为16位时,被除数则为32位,高16位放在DX里,低16位放在AX中,运算结果的商用AX存储,余数用DX存储

dup操作符

dup和db、dw、dd 等数据定义伪指令配合使用,用来进行数据的重复。

dup的使用格式

db 重复的次数 dup (重复的字节型数据)

dw 重复的次数 dup (重复的字型数据)

dd 重复的次数 dup (重复的双字数据)

eg:

db 3 dup (0)

定义了3个字节,相当于 db 0,0,0

db 3 dup (0,1,2)

定义了9个字节,相当于 db 0,1,2,0,1,2,0,1,2

db 3 dup (‘abc’ , ’ABC’)

定义了18个字节,相当于 db ‘abcABCabcABCabcABC’
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  寻址