描述性符合:reg(表示一个寄存器)和sreg(段寄存器)
reg集合:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di
sreg集合:ds、ss、cs、es
1、bx、si、di、和bp
在8086CPU中,只要这四个寄存器可以用在"[.....]"中进行内存单元的寻址。
在"[.....]"中,这四个寄存器可以单个出现,或只能以4种组合出现:bx和si、bx和di、dp和si、bp和di。
只要在"[.....]"中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。
2、机器指令处理数据的地址
机器指令关心指令执行的前一刻,它将处理数据所在的位置。在指令执行前,所要处理的数据可以在3个地方:CPU内部、内存、端口。
3、汇编语言中数据位置的表达
- 立即数(idata):直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中直接给出。
- 寄存器:指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
- 段地址(SA)和偏移地址(EA):数据在内存中,在汇编指令中可用[x]的格式给出SA,EA在某个段寄存器中。
4、寻址方式
定位内存单元的方法一般被称为寻址方式。
5、指令处理数据的长度
byte和word。
在机器指令中要指明,指令进行的操作时字操作还是字节操作:
- 通过寄存器名指明要处理的数据的尺寸。例如一般ax、bx等进行的是字操作;ah、bh等进行的是字节操作。
- 在没有寄存器名存在下,用操作符X ptr指明内存单元的长度,word ptr是一个字单元,byte是一个字节单元。
- 其他方法。列如push [idata]就不用指定,因为push指令只进行字操作。
7、div指令
div是除法指令,使用需注意:
- 除数:有8位和16位两种,在一个reg或内存单元中。
- 被除数:默认放在AX或DX和AX中,如果除数为8位数,被除数则为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在DX(存放高八位)和AX(存放低八位)中存放。
- 结果:若除数为8位,则AL存储商,AH存储余数;若除数为16位,AX存储商,DX存储余数。
8、伪指令dd
db和dw定义字节型数据和字型数据。dd定义dword(double word,双字)型数据。
9、dup
dup是一个操作符,同db、dw、dword等一样,是由编译器识别处理的符号。时和这三个数据定义伪指令配合使用,用来进行数据重复。
db 3 dup (0):定义了3个字节,值都是0,相当于db 0,0,0
使用格式:
db/dw/dword 重复的次数 dup (重复的字节型/字型/双字型数据)