《汇编语言(第四版)》王爽 第八章 数据处理的两个基本问题

数据处理的两个基本问题:

(1)处理的数据在什么地方?
(2)要处理的数据有多长?

8.1 bx、si、di和bp

(1)在8086CPU中,只有这4个寄存器可以用在“[…]”中来进行内存单元的寻址。
(2)在[…]中,这4个寄存器可以单独出现,或只能以4种组合出现:bx和si、bx和di、bp和si、bp和di。
(3)只要在[…]中使用bp寄存器,指令中没有给出段地址,段地址就默认在ss中。

8.2 机器指令处理的数据在什么地方

绝大部分机器指令都是进行数据处理的指令,大致可以分为三类:读取、写入、运算。指令在执行前,所要处理的数据可以在三个地方:CPU内部、内存、端口

8.3 汇编语言中数据位置的表达

汇编语言中用3个概念表达数据的位置

(1)立即数idata:直接包含在机器指令中的数据,在汇编指令中直接给出。
(2)寄存器:指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
(3)段地址SA和偏移地址EA:指令要处理的数据在内存中,在汇编指令中使用[X]的个数给出EA,SA在某个段寄存器中,也可以显性给出。

8.4 寻址方式

给定一个内存单元的偏移地址的方法叫做寻址方式

《汇编语言(第四版)》王爽 第八章 数据处理的两个基本问题_第1张图片

8.5 指令要处理的数据有多长

8086CPU的指令可以处理两种尺寸的数据,byte和word。所以机器指令要指明,指令进行的是子操作还是字节操作,对于这个问题,汇编语言这样处理:

(1)通过寄存器名指出要处理的数据的尺寸。 即ax,bx之类的是字操作,al类似的是字节操作。
(2)在没有寄存器名存在的情况下,使用操作符X ptr指明内存单元的长度,X可以是byte或word。 例如,mov word ptr
ds:[0], 1或者inc byte ptr [bx]。
(3)有些指令默认了访问的是字单元还是字节单元,例如push就不用指明,其只进行字操作。

8.6 寻址方式的综合应用

一般来说,**[bx+idata+si]**的方式可以访问结构体中的数据。用bx定位整个结构体、用idata定位结构体的某一个数据项,用si定位数组项中的每一个元素。还可以这样写[bx].idata[si]。

8.7 div指令

div除法指令,使用div做除法的时候注意以下三点:

(1)除数:有8位和16位两种,在一个reg或内存单元中。
(2)被除数:默认放在AX或DX和AX中,如果除数为8位,被除数为16位,默认在AX中存放;如果除数为16位,被除数则为32位,在DX和AX里存放,DX存放高16位,AX存放低16位。
(3)结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

其格式如下:
div reg
div 内存单元

8.8 伪指令dd

前面我们使用dbdw定义字节型数据和字型数据,dd是用来定义dword型数据的。

8.9 dup

dup是一个操作符,在汇编语言中同db,dw,dd一样,是由编译器识别处理的符号。它是和db,dw,dd等数据定义伪指令搭配使用的,用来进行数据的重复

比如:
db 3 dup(0)定义了三个字节,它们的值都是0,相当于db 0,0,0。
db 3 dup(0,1,2)定义了9个字节,它们是0,1,2,0,1,2,0,1,2,相当于db 0,1,2,0,1,2,0,1,2。

你可能感兴趣的:(汇编语言(第四版)王爽,汇编语言,底层语言)