1.  一个字由两个字节组成,可以存在一个16寄存器中,这个字的高位字节和低位字节分别存在这个寄存器的高8位    寄存器和低8位寄存器中。
2.  一个内存单元可以存放8位数据,cpu中的寄存器又可以存放N个8位的数据,所以计算机中的数据大多是由1到N   个8位.
3.  数据构成的,用16禁止可以直观的看出这些数据由哪些8位数据组成。
4.  8位寄存器最大可以存放值为255的数据,16位寄存器最大可以存放值为65535的数据。
5.  每一个内存单元在存储空间中都有一个唯一的地址,这个地址称为物理地址。
6.  物理地址=段地址*16+偏移地址,16是十六进制的形式即10H,也可以理解成右边多一位,举    例:F000H*16=F000H*10H=F0000H
7.  一个段的最大大小是64KB,例如段首地址为0000H,而偏移量的范围就在0000H-FFFFH之间,就表示00000H-0FFFFH  的实际内存单元.所以说一个段的大小在64Kb.
8.   计算机可以用不同的段地址和偏移地址来标示同一个物理地址。

9.   cpu将CS:IP指向的内存单元中的内容看做指令                                                        

10.  DS寄存器用来存放要访问数据的段地址。   

11.  [..]表示一个内存单元,中的数标示内存单元的偏移地址,指令执行时取DS中的数据为内存单元的段地址。
12.  数据从内存单元到寄存器的格式是:mov 寄存器,内存单元地址,从寄存器到内存单元是mov 内存单元地址寄存器名
13.  任意时刻,SS:SP指向栈顶元素,可以使用add sp,16来手动修改sp栈顶
14.  空栈时SS:SP指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2
15.  栈都是以字为单位的
16.  PUSH指令的执行步骤,首先sp=sp-2,然后向ss:sp指向的字单元中送入数据。
     pop指令执行的步骤,从ss:sp指向的字单元中读数据,然后sp=sp+2
18.  对于数据段,将他的段地址放在DS中,用mov add sub等访问内存单元的指令时,cpu就将我们的数据段中的内容当数据来访问
19. 对于代码段,将他的段地址放在CS中,将段中的第一条指令的偏移地址放在IP中,这样cpu就执行定义的代码段中的指令
20.  对于栈段,将他的地址放在ss中,将栈顶单元的偏移地址放在sp中,这样cpu在执行pop push指令时,就将我们定义的栈段当做栈空间来使用
21.  Debug的T命令在执行修改寄存器的SS指令时下一条指令也紧接着被执行
22.  XXX segment 和 XXX ends是一对成对使用的伪指令
23.  在debug中到了int 21指令,要用P命令执行
24.  mov ax,[bx] 中的bx存放的数据作为一个偏移地址EA,段地址SA默认存放在ds中
25.  在汇编源程序中,数据不能以字母开头
26.  可以用G 0012 命令直接执行到0012处的指令
27.  在[]里用一个常量idata直接给出内存单元的偏移地址,就要在[]的前面显示的给出段地址所在的段寄存器
28.  dw定义字型数据;dd定义双字型数据;db定义字节型数据,这些定义的数据处于代码段的最开始处
29.  end start 指明了程序的入口,存储在可执行文件的描述信息中
30.  在程序中,段名酒相当于一个标号,代表了段地址
31.  and指令可以将操作对象的相应位设为0; or指令可以将操作对象的相应位设为1
32.  小写字母的ASCII值比大写字母的ASCII值大20H
33.  [bx+idata]表示一个内存单元, mov ax,[200+bx]=mov ax,200[bx]=mov ax,[bx].200
34.  SI和DI是两个和bx功能相近的寄存器,但是他们不能分成两个8位寄存器
35.  例子,可以用ds:si指向要复制的原始字符串,用ds:di指向复制的目的空间
36.  [bx+si]也表示一个内存单元,常写成mov ax,[bx][si]
37.  [bx+si+idata]也表示一个内存单元
38.  一般来说,在需要暂存数据的时候,我们应该用栈
39.  只有[bx] [si] [di] [bp]这四个寄存器可以用在 [...]中进行内存单元的寻址
40.  [ax] [cx] [dx] [ds]这四个寄存器可以单个出现,或只能以四种组合出现:bx和si、bx和di、bp和si、bp和     di
41.  只要在[..]中使用寄存器bp,而指令中没有显性的给出段地址,段地址就默认在ss中
42.  对于直接包含在机器指令中的数据,在汇编语言中称为:立即数 (执行前在cpu的指令缓冲器中)
43. 判断程序指令进行的是字操作还是字节操作,有3个方法:1.通过寄存器名字判断数据的尺寸;2.用操作符X ptr指明内存单元的长度,X在汇编中可以为word或byte,例如,mov word ptr ds:[01],2;3.push指令只能       进行字操作
44.  dup是个操作符,用来进行数据的重复,例如,db 100 dup (0)定义了一个100KB的空间
------------------------------------
45.  div指令,被除数:默认放在ax或ax和dx中,若除数为8位,则被除数为16位,默认放在ax中;
     若除数为16位     ,被除数则为32位,放在ax和dx中,dx存放高16位,ax存放低16位。
     结果:若除数为8位,则al存放商,ah存放余数;若除数为16位,则ax存放商,dx存放余数
div byte ptr ds:[0]
(al)=(ax)/((ds)*16+0)为商
(ah)=(ax)/((ds)*16+0)为余数

div word ptr es:[0]
(ax)=[(dx)*10000H+(ax)]/((es)*16+0)为商
(dx)=[(dx)*10000H+(ax)]/((es)*16+0)为余数

div byte ptr [bx+si+8]
(al)=(ax)/((ds)*16+(bx)+(si)+8)为商
(ah)=(ax)/((ds)*16+(bx)+(si)+8)为余数
------------------------------------
46.  可以修改IP(段内转移),或同事修改CS和IP(段间转移)的指令成为转移指令。
47.  段内转移分为短转移(IP修改范围在-128~127)和近转移(Ip修改范围在-32768~32767)。
48.  8086CPU的转移指令分为:无条件转移指令(入,jmp)、条件转移指令、循环指令(loop)、过程、中断
49.  操作符offset的功能是取得标号的偏移地址,例如 mov ax,offset s
51.  jmp 为无条件转移指令,可以只修改ip,或同时修改ip和cs     ===转移的目的地址在指令中的jmp===
     1.jmp short 标号(对ip的修改范围在-128~127)
     2.jmp near ptr 标号(对ip的修改范围在-21768~21767,用补码表示)
     3.jmp far  prt 标号(实现的是段间转移,又称远转移,段地址在CS中,便宜地址在IP中)
52.  jmp 16位寄存器                                           ===转移的目的地址在寄存器中的jmp==
53.  1.jmp word  ptr 内存单元地址 (段内转移)                ===转移的目的地址在内存中的jmp==
     2.jmp dword ptr 内存单元地址  (段间转移),从内存单元地址的开始处存放着两个字,高地址处的字是转移的目的段地址,低地址处的字是转移的目的的偏移地址
54.  jcxz为有条件转移指令,所有的条件转移指令都是短转移,对ip的修改范围在-128~127
55.  loop 指令时循环指令,所有的循环指令都是短转移
56.  B8000H!BFFFFH共32KB的空间是80*25彩色字符模式的显示缓冲区,一个字符占两个字节
57.  ret指令用栈中的数据修改IP中的内容,从而实现近转移,相当于POP IP
58.  retf指令用栈中的数据,修改cs和ip的内容,从而实现远转移,相当于POP IP pop CS
Call 标号----是相当于PUSH IP; jmp near ptr 标号
call far ptr 标号--相当于 push cs; push ip ; jmp far ptr 标号
call 16位寄存器 相当于push ip ; jmp 16位寄存器
========================================
60.  可以push 段寄存器、内存单元、寄存器
61.  push的执行过程是先将sp=sp-2,然后将数据送入SS:SP指向的内存单元。而,pop执行的过程是先从ss:SP处读取数据然后sp=sp+2
62. 与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP给出的
63. 0bcc:0000 = 0bcd:0000,即0bcc和0bcd相隔16个字节,因为每个内存单元是一个字节
64. dup操作符:例如:db 3 dup (0); 也可以使dw 或dd
65. CPU执行指令的过程:
  从CS:IP处指向的内存单元读取指令,读取的指令进入指令缓冲器; ip=ip+指令长度,然后指向下一个指令; 执行指令,转到第一处,继续重复....
66. jmp far ptr s中的段地址是高地址,偏移地址是低地址
67. add ax,0 可以使ZF=1,所以je指令将跳转
68. divdw:进行的是不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型,ax放被除数的低   16位,dx放被除数的高16位,cx放除数。返回结果时,dx放高16位,ax放低16位,cx放余数



posted on 2009-07-13 17:30  on_road  阅读(944)  评论(0编辑  收藏  举报