目录
计算机是进行数据处理、运算的机器。其中包括两个基本问题:
(1)处理的数据在什么地方?
(2)要处理的数据有多长?
reg表示一个寄存器、serg表示一段寄存器。
rag的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di;
serg的集合包括:ds、ss、se、cs。
一、bx、si、di、和bp
1.在8086CPU中,只有在四个寄存器可以用在“[...]”中进行内存单元的寻址。
如下几种是正确:
mov ax ,[bx];
mov ax,[bx+si];
mov ax,[bx+di];
mov ax,[bp];
mov ax,[bp+si];
mov ax,[bp+di];
如下几种是错误的:
mov ax,[cx];
mov ax,[dx];
mov ax,[ax];
mov ax,[ds];
2.在[...]中,这四个寄存器可以单个出现,或只能以四种组合出现:bx和si,bx和di,bp和si,bp和di。
3.只要在[...]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中,例如下指令:
mov ax,[bp]; 含义:(ax)=((ss)*16+(bp));
mov ax,[bp+idata]; 含义:(ax)=((ss)*16+(bp)+idata);
二、机器指令处理的数据在什么地方
绝大多数机器指令都是进行数据处理的指令,处理大致分为三种:读入、写入、运算。
指令在执行前,所要处理的数据可以在三个地方:CPU内部、内存、端口。
机器码 | 汇编指令 | 指令执行前数据的位置 |
8E1E0000 | mov bx,[0] | 内存,ds:0单元 |
89C3 | mov bx,ax | CPU内部,ax寄存器 |
BB0100 | mov bx,1 | CPU内部,指令缓冲器 |
三、寻址方式
当数据存放在内存中的时候,我们可以用多种方式来给定这个内存单元的偏移地址,这个定位内存单元的方式一般称为寻址方式。
8086CPU有多种寻址方式,如图所示:
四、汇编语言中数据位置的表达
汇编语言中的三种表达数据位置的方式:
1、立即数(idata)
对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中称为:立即数(idata),在汇编语言中直接给出。
例如:mov ax,1
add bx,20000h
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在某个段寄存器中。
存放段地址的寄存器可以是默认的,比如:
mov ax,[0]
mov ax,[di]
mov ax,[bx+8]
mov ax,[bx+si]
mov ax,[bx+si+8]
等指令,段地址默认在ds中;
mov ax,[bp]
mov ax,[bp+8]
mov ax,[bp+si]
mov ax,[bp+si+8]
等指令,段地址默认在ss中。