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. 明日计划
汇编第八章实验,综合复习