170406 汇编-第八章数据类型、div和dup

来源:互联网 发布:智能家居数据分析 编辑:程序博客网 时间:2024/06/06 08:40

1625-5 王子昂 总结《2017年4月6日》 【连续第187天总结】

A.汇编第八章

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

处理的数据在什么地方

要处理的数据有多长

这两个问题,必须在机器指令中给以明确或隐含的说明,否则计算机就无法工作。

在8086CPU中,只有bx,si,di和bp四个寄存器中能够使用于[...]来进行内存单元的寻址。

而ax,cx,dx等等都是不可以放于其中的

在[...]中,这四个寄存器可以单独出现,也可以以bx/bp+si/di的组合出现。

不能以bx+bp或si+di的组合出现

只要在[...]中出现了bp寄存器,并且指令中没有显式给出段地址,那么段地址将默认为ss寄存器的内容

机器指令不关心数据的值,只关心数据存放在哪里。

一共有3种可能:CPU、内存、端口

在汇编语言中表达数据的位置有3种概念:

立即数(idata)

直接包含在机器指令中的数据,(执行前在CPU的指令缓冲器中),汇编语言称之为立即数。

寄存器

段地址和偏移地址(内存)


8086CPU的指令可以处理两种长度的数据,byte和word即字节和字。

通过寄存器指明长度:

eg:ax和bx是处理字单位的数据。al和ah是处理字节单位的数据。

在没有寄存器名存在的情况下,用操作符X ptr指明内存单元的长度,X在汇编指令中可以为word或byte

eg:mov word ptr ds:[0],1

mov byte ptr ds:[0],1

另外还有一些命令默认指明了访问单元的长度,例如push指令只进行字操作

寻址方式的综合运用:

在C语言中,一个结构体中的字符数组的访问方法为:

dec.cp[i]='x';

其中,dec表示结构体变量的地址,cp指明了结构体中数据项的地址,而i用来定位cp中的每一个字符

在汇编语言种,一个结构化的数据包含了多个类型不同的数据项。通常,用[bx+idata+si]的方式访问。也可以:

bx.idata[si]='x';

一般用bx定位整个结构体,idata定位某一个数据项,si定位数组项中的每个元素。


div是除法指令,使用的时候需要注意以下几个问题:

除数:有8位和16位两种,在一个reg(寄存器)或内存单元中

被除数:默认放在AX或DX+AX中。如果除数为8位,则被除数为16位,默认存放在AX中;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位

结果:如果除数为8位,则AL存储除法操作的商,AH储存除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。


之前用db和dw定义字节型数据和字型数据。dd是用来定义dword双字型数据的,占4个字节。

dup是一个伪指令操作符,用来进行数据的重复。

eg:db 3 dup (0)

等价于db 0,0,0

db 3 dup (0,1,2)

等价于db 0,1,2,0,1,2,0,1,2

db 3 dup ('abc','ABC')

等价于db 'abcABCabcABCabcABC'

dup在需要申请大量空间的时候非常有用,例如100、1000个字节的空间时,使用dup可以替代重复输入1000次

OD设置

C.明日计划

汇编第八章实验,综合复习

0 0
原创粉丝点击