8086CPU特性:
1.运算器一次最多可以处理16位数据,寄存器最大宽度为16位,寄存器和运算器之间的通路为16位
2.8086CPU有20位地址总线,1M寻址能力,086CPU又是16位结构,64KM寻址能力
1M寻址能力: 11111111111111111111 <==>1048575<==>1024*102364KM寻址能力: 1111111111111111<==>65535<==>1024*63
3.CPU将2个16位地址合成为一个20位物理地址,一个称为段地址,一个称为偏移地址,
偏移地址为16位,最大为FFFF,64KB
4.物理地址= 段地址H * 10H+偏移地址, 物理地址= 段地址 * 16+偏移地址,
本质含义:CPU访问内存是,用一个基础地址(段地址x16)和一个相对于基础地址的便宜地址相加,得出内存单元的物理地址.
5.4个段寄存器,CS指令段寄存器, DS数据段寄存器, SS堆栈段寄存器, ES, 任意时刻,CPU都是将CS:IP指向的内容当做指令执行。
6.栈 先进后出的线性表,出栈pop,SS:IP+2, 入栈push,SS:IP-2,pop,push是以2个字节为单位执行。
7.无论是 数据段,代码段,栈段都是一段物理内存,一段内存可以既是代码存储空间,又是数据存储空间,还可以是栈空间,也可以什么都不是。仅此而已!
基本概念
1个字节 == 8位 == 11111111(2进制)
255(10进制) = 11111111(2进制)==FF(16进制)==8位寄存器
65535(10进制) = 11111111 11111111(2进制)==FFFF(16进制)==16位寄存器16位通用寄存器: AX BX CX DX, 最大能存放是数是FFFF
ah al 表示 AX的高8位 和 低八位寄存器
比如执行:mov ax f4a3Hax=f4a3H(62627)
内存中 11110100 10100011
f4 a3 ah albh bl,ch cl,ch cl 同理。
注: 对于cpu来说 ah ,al是独立的 没有任何进位关系,最大能存放FF以下语句都是错误的:
mov ax al(在8位和16寄存器之间传输数据)mov ax bl(在8位和16寄存器之间传输数据)mov al 20000(在8位最大存放255的数据, mov al 255正确)add al 100H(将一个高8位的数据加到8位寄存器, add al 1FH正确)习题:
1.mov ax,62627 ax=______2.mov ah,31H ax=______
3.mov al,23H ax=______
4.add ax,ax ax=______
5.mov bx,826CH bx=______
6.mov cx,ax cx=______
7.mov ax,bx ax=______
8.add ax,bx ax=______
9.mov al,bh ax=______
10.mov ah,bl ax=______
11.add ah,ah ax=______
12.add al,6 ax=______
13. add al,al ax=______
14.mov ax,cx ax=______
习题解析:1.mov ax,62627 ax=f4a3H ;<--把十进制数62627变成十六进制就是结果F4A3H2.mov ah,31H ax=31a3H ;<--ah=31h,al不变,所以ax=31A3H
3.mov al,23H ax= 3123H ;<--al=23h,ah不变,所以ax=3123h
4.add ax,ax ax= 6246H ;<--ax=ax+ax=3123h+3123h=6246h,用计算器算一下结果就出来了
5.mov bx,826CH bx=826CH ;<--bx=826CH,ax不变
6.mov cx,ax cx=6246H ;<--cx=ax=6246H
7.mov ax,bx ax=826CH ;<--ax=bx=826CH
8.add ax,bx ax=04d8H ;<--ax=ax+bx=826CH+826CH=04D8H,0前面还有个1,但是ax放不下,所以丢弃,16位寄存器只能放下 FFFF
9.mov al,bh ax=0482H ;<--al=bh=82h,ah不变
10.mov ah,bl ax=6C82H ;<--ah=bl=6Ch,al不变
11.add ah,ah ax=d882H ;<--ah=ah+ah=6Ch+6Ch=D8h,al不变
12.add al,6 ax=d888H ;<--al=al+6=82H+6=88h,ah不变
13. add al,al ax= d810H ;<--al=al+al=88h+88h=10h,ah不变,结果是110h但al的大小只有8位二进制位,能放下的最大数为FFh,所以高位丢弃,只保留低两位
14.mov ax,cx ax=6246H ;<--ax=cx=6246H