8088cpu数据总线的宽度是8
8086cpu数据总线的宽度是16
cpu地址总线宽度-->内存地址空间的大小
8086:20-->2^20=1MB
80386:32-->4GB
----------------------------------
A 16-bit register can store data with the value up to 2^16-1=65535
A 8-bit register can store data with the value up to 2^8-1=255
----------------------------------
mov ax,0
mov al,0c5h
mov al,93h
result in ax?
mov ax,0c5h
mov ax,93h
result in ax?
----------------------------------
操作对象不一致:
mov bl,ax
mov ax,bh
都不对
----------------------------------
16位机/16位结构cpu的结构特性:
-运算器一次最多可以处理16位数据
-寄存器的最大宽度为16位
-寄存器和运算器之间的通路为16位
==>在8086内部,能够一次性处理、传输、暂时存储信息的最大长度为16位
一个段的起始地址一定是16的倍数
一个段的长度最大为64kb=2^16
----------------------------------
cpu寻址内存,需要向地址总线提供20位的物理地址,以寻址到一个唯一的内存单元
但cpu为16位,所以采用【段地址x16+偏移地址】的寻址方式
在cpu内部,需要段寄存器提供段地址
8086cpu加电启动或复位后(即cpu刚开始工作时)
cs和ip被设置为:cs=f000h,ip=fff0h
即在8086pc机刚启动时,cpu从内存ffff0h单元中读取指令执行
ffff0h单元中的指令是开机后执行的第一条指令
----------------------------------
cpu根据什么将内存中的信息看做指令?
cpu将cs:ip指向的内存单元中的内容看作指令。
----------------------------------
可以修改cs,ip中内容的指令:jmp
1.同时修改——jmp 段地址:偏移地址
2.仅修改ip——jmp 某一合法寄存器;用寄存器中的值修改ip
----------------------------------
Debug:
R: 查看、改变cpu寄存器的内容;
D: 查看内存中的内容;
E: 改写内存中的内容;
U:将内存中的机器指令翻译成汇编指令;
T: 执行一条机器指令;
A: 以汇编指令的格式在内存中写入一条机器指令。
进入dos后,使用alt+enter进入全屏——win7不支持。。。
------------------------------------
pc机主板上的rom中写有一个生产日期,在内存的fff00h-fffffh的某几个单元中,找到并试图修改:
1. debug
2. -d fff0:0 ff
3. -d fff0:00f0 00f5
4. -d fff0:00f5 0fc: 08/13/07
5. -e fff0:00f5
31 32 2f 31 15 2f 38 39
6. -d fff0:00f5 真的改了哎!重启debug没变!
重启cmd变了...
我还想重启电脑试试来着...
------------------------------------
向内存从b8100h开始的单元中填写数据,没变;
改变地址,有的变了有的没变;
------------------------------------