[bx+si]和[bx+di]
[bx+si]表示一个内存单元,偏移地址为(bx)+(si) mov ax, [bx+si] 指令含义:
数学描述: (ax)= ((ds)*16+ (bx) + (si)) 其他形式:mov ax,[bx][si]
[bx+si+idata]和[bx+di+idata]
[bx+si+idata]表示一个内存单元,偏移地址为(bx)+(si)+idata mov ax, [bx+si+idata] 指令含义:
数学描述: (ax)= ((ds)*16+ (bx) + (si) +idata) 其他形式:mov ax,[bx+200+si] mov ax,[200+bx+si] mov ax,200[bx][si] mov ax,[bx].200[si] mov ax,[bx][si].200
不同的寻址方式的灵活应用
[idata]用一个常量来表示地址,可用于直接定位一个内存单元 [bx]用一个变量来表示的内存地址,可用于间接定位一个内存单元
[bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元
[bx+si]用两个变量表示地址
[bx+si+idata]用两个变量和一个常量表示地址
一般来说,在需要暂存数据的时候,我们都应该使用栈.
第八章 数据处理的两个基本问题
我们将使用两个描述性的符号reg来表示一个寄存器,用sreg表示一个段寄存器.
reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di
sreg的集合包括:ds、cs、ss、es
bx、si、di和bp
在8086CPU中,只有bx、si、di和bp这4个寄存器可以用在“[…]”中来进行内存单元的寻址
在“[…]”中,这4个寄存器可以单个出现,或只能以4种组合出现:bx和si、bx和di、bp和si、bp和di
只要在“[…]”中使用寄存器bp,而指令中没有显式地给出段地址,则段地址就默认在cs中.
寻址方式小结
指令要处理的数据有多长
8086CPU的指令,可以处理两种尺寸的数据,byte和word
在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte. push和pop指令只进行字操作