【汇编语言/底层开发】8、数据处理的两个基本问题

标题中所指的两个基本问题是:(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前面的数字表示括号内的值重复的次数,括号中表示定义的数据。

上一篇:什么是SEO?搜索引擎优化是什么意思?


下一篇:ArcGIS Engine开发之旅08--和查询相关的对象和接口