|  | 
 
| 1、BX,SI,DI,BP 
 像:mov ax, [cx]    mov ax, [ax]    mov ax, [dx]   mov ax, [ds] 这些都是错误的写法。在8086中,只有这4个寄存器是可以用在“[...]”中进行内存单元寻址的。
 
 
 如 mov ax, [bx + bp]     mov ax, [si + di]  都为错误的写法。在[...]中,这4个寄存器可以单个出现,或只能以四种组合出现:bx和si、 bx和di、bp和si、bp和di。
 
 
 只要在[...]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。
 2、在没有寄存器名存在的情况下,用操作符 X ptr 指明内存单元的长度,X 在汇编指令中可以为 word 或 byte。
 如:
 mov  word ptr ds:[0], 1
 mov  byte ptr ds:[0], 1
 
 3、相对基址变址寻址
 [bx + si + idata]    [bx + di + idata]   [bp + si + idata]    [bp + di + idata]
 在应用中和C语言的对比
 strcut company {
 char cn[3];
 char hn[9];
 int    pm;
 int    sr;
 char  cp[3];
 };
 struct comany dec = { "DEC", "Ken Olsen", 137, 40, "PDP" };
 修改 dec.cp[3] 中的 PDP 字符
 i = 0;
 dec.cp = 'V';
 i++;
 dec.cp = 'A';
 i++;
 dec.cp = 'X';
 和汇编对比,汇编修改:
 mov si, 0
 mov byte ptr [bx].10h[si], 'V'
 inc si
 mov byte ptr [bx].10h[si], 'A'
 inc si
 mov byte ptr [bx].10h[si], 'X'
 用 [bx + idata + si] 的方式来访问结构体中的数据。 bx 定位整个结构体; idata 定义结构体中的某一个数据项,用 si 定位数组项中的每个元素。汇编提供的更为贴切的书写方式如:[bx].idata[si]。
 比较C语言中的:dec.cp
 dec 是个变量名,指名了结构体的变量地址,cp指名数据项cp的地址,而 i  用来定位 cp 中的每一个字符。这和汇编是很相似的。
 
 | 
 |