---恢复内容开始---
数据处理的俩个基本问题。
1.处理的数据在什么地方
2.要处理的数据有多长
reg表示寄存器 ax//累加器
,bx//基址寄存器
,cx//循环次数寄存器
,dx//累加器
,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di
sreg表示段寄存器
ds\ss\cs\es
机器指令处理的数据在什么地方
绝大部分机器指令都是进行数据处理的指令,处理大致分3类,读取写入运算,在机器指令这一层来讲,并不关心数据的值是多少,而关心指令执行的前一刻,他将要处理的数据所在的位置,
指令执行前,所要处理的数据可以在三个地方:CPU内部,内存,端口。
3.汇编语言中数据位置的表达!
1.立即数(idata)
对于直接包含在机器指令中的数据(执行前在CPU的指令缓存器中),在汇编语言中称为:立即数,在汇编指令中直接给出
(2)寄存器。
指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
(3)段地址和偏移地址
指令要处理的数据在内存中,在汇编指令中可用[x]的格式给出偏移地址EA,段地址SA在某个寄存器中。
存放段地址的寄存器可以是默认的,如
4. 寻址方式
当数据存放在内存中时候,我们可以用多种方式来给定这个内存单元的偏移地址,
这种定位内存单元的方法一般被称为寻址方式。
总共又5种寻址方式: 直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址,
5.
指令要处理的数据有多长
8086CPU的指令,可以处理俩种尺寸的数据,byte和word。所以在机器指令中,要指明是字操作还是字节操作。
1.在没有寄存器名存在的情况下,用操作符X ptr 指明内存单元的长度,X在汇编指令中可谓word或者byte
mov word ptr ds :[0],1 inc word ptr [bx] inc word ptr ds:[0] add word ptr [bx],2 //上面是用word ptr 指明了指令访问的内存单元是一个字单元 mov byte ptr ds:[0],1 inc byte ptr [bx] inc byte ptr ds:[0] add byte ptr [bx],2 //上面用 byte ptr 指明了指令访问的内存单元是一个字节单元
有些指令 默认了访问的是字单元还是字节单元,比如,push[1000H] 就不用指明访问的是字单元还是字节单元,因为push 只进行字操作
7. div指令
div是除法指令,使用div做除法的时候要注意以下问题。
(1)除数,有8位数和16位数俩种,在一个reg或内存单元中。
(2)被除数,默认放在AX或者DX 和AX中,一般DX存高16位,AX存低16位。
(3)结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数
8.伪指令dd
前面用db和dw定义字节型数据和字型数据,dd是用来定义dword(double)型数据的
9.dup 是一个操作符,在汇编语言中同db,dw,等一样,也是由编译器识别处理的符号,它是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复。
db 3 dup (0)
定义了3个字节 ,它们的值都为0,相当于db 0,0,0