烧点饭 发表于 2012-12-5 14:21:35

汇编笔记之8.数据处理的两个基本问题

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,
(2)mov ax,
(3)mov ax,
(4)mov ax,
(5)mov ax,
(6)mov ax,
4.处理可分为:读取、运算、写入,在及其指令这一层来讲,它并不关心所要处理的数据是多少,而关心指令执行前的那一刻,它将要处理数据所在的位置。
5.立即数:对于直接包含着机器指令中的数据,比如:mov ax,1,1就是一个立即数,执行前在CPU指令缓冲器中。
6.通过寄存器名指明要处理的数据的尺寸。如:ax是16bit=2Byte,al是8bit=1Byte
7.可以用操作符X ptr指明内存单元长度,X在汇编指令中可以是word或byte。比如:mov word ptr ds:,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:
含义:(al)=(ax)/((ds)*16+0))的商
   (ah)=(ax)/((ds)*16+0)的余数
div word ptr es:
含义: (ax)=[(dx)*100000H+(ax)]/((es)*16+0)的商
      (dx)=[(dx)*100000H+(ax)]/((es)*16+0)的余数
div byte ptr
含义:(al)=(ax)/((ds)*16+(bx)+(si)+8)的商
       (ah)=(ax)/((ds)*16+(bx)+(si)+8)的余数
div word ptr
含义: (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

页: [1]
查看完整版本: 汇编笔记之8.数据处理的两个基本问题