标题中所指的两个基本问题是:(1)处理的数据在什么地方?(2)要处理的数据有多长?要使得计算机正常工作,这两个问题必须给予说明,否则无法工作。
1、bx, si, di, bp
这四个寄存器用于内存寻址的规则有:
(1)在8086中只有这四个寄存器可以用于[]中进行内存单元寻址。也就是说,指令: mov ax, [bx]是正确的,而mov ax, [cx]是错误的。
(2)在[]寻址中,这四个寄存器可以单独出现,也可以按照以下四种组合出现:bx+si, bx+di, bp+si, bp+di。以下使用时错误的: mov ax, [bx+bp]; mov ax, [si+di]。
(3)若在[]中使用了bp,而指令中没有显式指出段地址,则段地址默认保存于ss(即ss等同于sp)。
2、机器指令处理数据的所在位置
基本上所有的机器指令的分类大致分为读取、写入、运算三类,其运行所最关心的问题是执行指令前一刻要处理数据的位置(通常来自于三个地方:CPU内部、内存和端口)。
3、数据位置的表达
三个概念:(1)立即数;(2)寄存器;(3)段地址和偏移地址。
4、寻址方式
表示数据放在内存中时确定数据位置的方式,主要有:直接寻址、寄存器间接寻址、寄存器相对寻址、基址编址寻址、相对基址编址寻址。
5 、指令处理的数据的长度
80X86指令可以处理字和字节两种尺寸的数据,指定数据长度的方法主要有三种:
(1)通过寄存器名说明;即通过ax等寄存器获取数据则表示字操作,通过al、ah等寄存器则是表示字节操作;
(2)在没有寄存器名的情况下,通过word ptr或byte ptr指明字操作或字节操作;
(3)通过指令默认制定操作方式;如push、pop等只进行字节操作。
6、div指令
注意的问题:
(1)除数:可能为8或16位,保存于内存单元或寄存器中;
(2)被除数:被除数的位数一定是除数的2倍;16位的被除数保存于AX中,32位的被除数保存于DX+AX中,前高后低;
(3)商和余数:商保存于AL或AX中(根据除数为8或者16位),余数保存于AH或DX中(根据除数为8或者16位);
7、伪指令dd
类似于定义字型数据的伪指令dw,dd用于定义一个双字节结构,即define double。
8、操作符dup
操作符dup为duplicate的简称,配合db、dw、dd等伪指令,进行数据的重复。
如:db 3 dup(0)——表示定义三个字节,值均为0;db 3 dup(0,1,2)——表示定义三个字节,其值分别为0,1,2;
最前面的伪指令表示定义数据的类型,dup前面的数字表示括号内的值重复的次数,括号中表示定义的数据。