一、数据类型
计算机执行指令过程中需要处理各种类型的机器数,可处理的数据类型有七种:
1)无符号二进制数
2)带符号二进制数
3)BCD码
4)数的定点和浮点表示法
5)串数据
6)ASCII码数据
7)指针类数据
二、寻址方式
寻址方式是指寻找指令中操作数或指令转移地址的方式,分为数据寻址方式和程序寻址方式。数据寻址方式是指获取指令所需的操作数或操作数地址的方式;程序寻址方式指在程序中出现转移和调用时的程序定位方式。指令系统是指机器所支持的所有指令的集合。
数据寻址方式:立即数寻址、寄存器寻址、存储器寻址。
(CPU可以直接将数据本身与指令一起编码作为指令代码的一部分,也可以存放在寄存器或主存储器中,直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址、变址寻址都属于存储器寻址方式。)
程序寻址方式:段内直接寻址方式、段内间接寻址方式、段间直接寻址方式、段间间接寻址方式。
指令系统:数据传输指令、算术运算指令、逻辑运算指令和存储器控制指令,以及保护模式下的指令等。
1.数据寻址方式
1.1 立即数寻址(操作数直接存放在指令中)
操作数直接包含在指令机器码中,它紧跟在操作码的后面,与操作码一起放在代码中。特点是执行速度快,主要给寄存器赋值。同样不需要执行总线周期。
MOV AX,0A7FH ;AX←0A7FH,执行后,AH=0AH,AL=7FH
MOV AL,5H ;AL←5H
1.2 寄存器寻址(操作数在寄存器中)
操作数包含在CPU内部的寄存器中。对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、DP、BP;8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。寄存器寻址的指令本身存放在存储器的代码段,操作数在CPU寄存器中。特点是执行速度快。
MOV AH,AL </span>
1.3 直接寻址(操作数在存储器中,指令给出存储器的偏移地址)
在指令的操作码后面直接给出操作数的16位偏移地址(有效地址),它与指令的操作码一起,存放在内存的代码段,低8位在前,高8位在后。操作数隐含数据段操作,存放在内存的数据段DS区域中,在给定的16位有效地址的地方。
MOV AX,[2000H] ;把内存中的地址为DS,偏移地址为2000H的2个字节数据送到AX中。
1.4 寄存器间接寻址(
操作数的地址在基址寄存器或变址寄存器中,操作数在存储器中)
指令中的操作数存放在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以是BX(基址寄存器)、BP、SI(变址寄存器)、DI(变址寄存器)之一,即有效地址等于其中某一寄存器的值,对寄存器指向的存储单元进行数据操作,这些用来存放存储器操作数偏移地址的寄存器称为地址指针。允许段超越改变段地址。
(1)以BX、SI、DI(作为地址指针)进行寄存器间接寻址的方式
MOV AX,[BX] ;PA=DS*16+BX
MOV BX,[SI] ;PA=DS*16+SI
MOC [DI],DX ;PA=DS*16+DI
(2)以BP(作为地址指针)进行寄存器间接寻址的方式
MOV [BP],BX ;PA=SS*16+BP
1.5 变址寻址
用SI、DI变址寄存器进行的间接寻址。操作数存放在存储单元中,操作数的物理地址是段寄存器的内容左移4位加上变址寄存器SI或DI的内容,再加上由指令中所指出的16位或8位位移量DISP。
MOV AX,3003H[SI] ;设DS=3000H,SI=2000H,3003H位位移量DISP。PA=DS*10H+EA=3000H+2000H+3003H=35003H
1.6 基址寻址
使用基址寄存器BX或基址指针寄存器BP进行寻址。当使用BX寄存器实现基址寻址时,隐含的段地址在DS寄存器中;当使用BP时,隐含的段地址在SS寄存器中。同样允许段超越。
操作数存放在存储单元中,操作数的物理地址是段寄存器的内容左移4位加上BX或BP的内容,再加上由指令中所指出的16位或8位位移量。
MOV SI,08H[BX] ;PA=DS*16+BX+08H
MOV AX,[BX+100H] ;PA=DS*16+BX
MOV AL,[BP+08H] ;PA=DS*16+SP+08H
MOV 0200H[BP],AX ;PA=SS*16+BP
1.7 基址、变址寻址
操作数在存储单元中,其物理地址由段寄存器内容左移4位加上一个基址寄存器和一个变址寄存器,再加上16位或8位位移量。
MOV AX,MASK[BX][SI] ;PA=DS*10H+EA=6000H*10H+A500H+2200H+64H=6C764H(设MASK=64H,BX=A500H,SI=2200H,DS=6000H)
2.程序寻址方式
2.1 直接寻址方式(相对寻址方式)
把指令本身提供的位移量加到指令指针寄存器中,形成有效目标地址的寻址方式。
JMP 1000H ;跳到CS:1000H这个位置
CALL 1000H ;调用CS:1000H这个位置的函数
2.2 段内间接寻址方式
2.3 段间直接寻址方式
2.4 段间间接寻址方式