1. 内存单元的访问方式(这里的不全,之后会进一步补充):
1) 总共有四种方式:
i. [立即数],但是在这种情况下只能作为源操作数(即第二个操作数,比如mov ax, [15]等),此时访问的内存是(ds:立即数),但是不能作为目的操作数(即第一个操作数),如果作为第一个操作数则编译器会将看做是一个普通的立即数而报错,比如mov [15], ax就会看成mov 15, ax而报错!一定要注意这点!
以下所有方式既可以作为源操作数也可以作为目的操作数,没有任何限制!
ii. [bx],注意,必须是基地址寄存器bx,不能是其它寄存器,如ax等,都会报错的!此时访问的就是(ds:bx)单元;
iii. 任意段寄存器(包括cs):[bx],中括号中的偏移地址也必须是bx而不能是其它寄存器,这种表示法就是段前缀表示法,只不过不写段前缀默认ds作为段基,加了段前缀就能精确定位到某一个段上了!
2) 访问内存单元最重要的关键——确定内存单元的类型(是字节型的还是字型还是双字型的):一般类型是由另一个操作数来确定(即根据寄存器的类型推断出来),比如mov al, [bx]中因为al是字节型的,因此传送的就是8位内存单元,而mov ax, [bx]中ax是16位的,因此传送的是双字,而mov [bx], [bx + 2]由于无法参考出传送的是什么类型的会编译报错!同样mov [bx], 23H中也无法推断出传送数据的类型而编译报错!
!!注意:MASM不支持两个操作数都是内存单元的情况!