1.两个基本问题:
(1)处理的数据在什么地方?
(2)处理的数据有多长?
2.寄存器集合(Reg):ax,bx,cx,dx,al,ah,bl,bh,cl,ch,dl,dh,sp,bp,di,si;
段寄存器集合(sReg):cs,ds,ss,es;
3.几种错误的指令:
(1)mov ax,[cx]
(2)mov ax,[dx]
(3)mov ax,[dx]
(4)mov ax,[ds]
(5)mov ax,[bp+bx]
(6)mov ax,[si+di]
4.处理可分为:读取、运算、写入,在及其指令这一层来讲,它并不关心所要处理的数据是多少,而关心指令执行前的那一刻,它将要处理数据所在的位置。
5.立即数:对于直接包含着机器指令中的数据,比如:mov ax,1,1就是一个立即数,执行前在CPU指令缓冲器中。
6.通过寄存器名指明要处理的数据的尺寸。如:ax是16bit=2Byte,al是8bit=1Byte
7.可以用操作符X ptr指明内存单元长度,X在汇编指令中可以是word或byte。比如:mov word ptr ds:[0],1
8.div是除法指令:
(1)除数:有8位和16位两种,在一个寄存器(reg)或内存单元中。
(2)被除数:默认放在AX或AX和DX中。如果除数是8位,被除数则为16位,默认在AX中存放;如果除数是16位,被除数则为32位,低16位放在AX中,高16位放在DX中。
(3)结果:如果除数是8位,则商存在AL中,余数存在AH中;如果除数是16位,则商存在AX中,余数存在DX中
(4)格式如下:
div reg
div 内存单元
(5)举例:
div byte ptr ds:[0]
含义:(al)=(ax)/((ds)*16+0))的商
(ah)=(ax)/((ds)*16+0)的余数
div word ptr es:[0]
含义: (ax)=[(dx)*100000H+(ax)]/((es)*16+0)的商
(dx)=[(dx)*100000H+(ax)]/((es)*16+0)的余数
div byte ptr [bx+si+8]
含义:(al)=(ax)/((ds)*16+(bx)+(si)+8)的商
(ah)=(ax)/((ds)*16+(bx)+(si)+8)的余数
div word ptr [bx+si+8]
含义: (ax)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8)的商
(dx)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8)的余数
9.db、dw、dd分别定义字节行数据、字行数据和双字数据。
10.dup是一个操作符,它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据重复。
格式如下:
db 重复的次数 dup (重复的字节型数据)
举例如下:
db 3 dup (0,1)
定义了6个字节,他们是0、1、0、1、0、1,相当于db 0,1,0,1,0,1