您的位置:首页 > 其它

汇编语言 王爽(第三版) 第一到三章 总结

2016-10-31 19:33 288 查看
CPU:

微处理器

执行机器指令,进行运算的芯片

16位结构的CPU表示:

运算器一次最多可以处理16位的数据

寄存器的最大宽度为16位

寄存器和运算器之间的通路为16位

寄存器:

CPU中可以存储数据的器件

CPU中程序员可以用指令读写的部件(通过改变寄存器中的内容来实现对CPU的控制)

8086CPU有14个寄存器(16位)

AX,BX,CX,DX:通用寄存器(存储一般性数据;可各分为两个8位寄存器,XH与XL,X=A,B,C,D)

CS,DS,SS,ES:段寄存器(提供内存单元的段地址)

IP,SP

段地址 × 16 + 偏移地址 = 物理地址(段地址和偏移地址移位相加法)

原因:内存的物理地址的存储宽度与段寄存器的段地址的存储宽度不一致

段地址:偏移地址 表示存储单元地址

段的起始内存单元地址为16的倍数(考虑计算前后)

偏移地址变化范围:0~FFFFH,寻址能力为64KB(16^4B)个内存单元,段的最大长度为64KB

CS与IP:代码段

CS:代码段寄存器,IP:指令指针寄存器

8086机中,任意时刻,CPU执行CS:IP指向的内容(即CPU将CS:IP指向的内存单元中的内容看作指令)

jmp 段地址:偏移地址 用给出的段地址,偏移地址修改 CS,IP 的值;jmp 某一合法寄存器 用寄存器中的值修改IP

(用jmp修改CS,IP的值与在debug中运用R指令修改CS,IP的内容有什么区别?考虑循环的实现)

8086CPU工作过程:

CS:IP通过地址加法器得到内存单元地址,送入输入输出控制电路

输入输出控制电路通过地址总线传递物理地址

数据总线传送该物理地址处存放的机器指令,送入输入输出控制电路(CPU如何取一条完整的指令?CPU会对第一个读取的进行解码,从而知道这条指令有几个字节)

输入输出控制电路将其送入指令缓冲器

IP中的值自动增加

执行指令缓冲器的机器指令

DS与[address]:数据段

DS:存放要访问的数据的段地址,[address]中address表示偏移地址

DS:[address] 读写对应内存单元的数据

SS与SP:栈段

SS:内存中栈顶段地址,SP:偏移地址

SS:SP指示栈顶元素,当栈为空,SP为栈最底部的字单元的偏移地址+2

栈中字的存储:高位字节放高位内存单元,低位字节放低位内存单元

push指令,pop指令(内存传送指令)

格式:push/pop 通用寄存器/段寄存器/内存单

(实验,push IP出现ERROR,为什么?实验,push 数据出现ERROR)

执行过程:

push:

SP = SP - 2

向SS:SP指向的字单元中送入数据

pop:

从SS:SP指向的字单元中读取数据

SP = SP + 2

8086CPU不保证程序员对栈的操作不会出界,入栈、出栈时注意最大栈空间

ES还未作介绍

SI,DI,BP,PSW还未介绍到

4000

汇编指令

是机器指令的助记符,同机器指令一一对应

已学的汇编指令:(注意格式)

mov

add

sub

jump

Debug

DOS、Windows都提供的实模式(8086方式)程序的调试工具。使用它可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行(什么时候会用到?)

已学的几种命令:

R命令:查看、修改CPU中寄存器的内容

D命令:查看内存中的内容

E命令:修改内存中的内容

U命令:将内存中的内容解释为机器指令和对应的汇编指令

T命令:执行CS:IP指向的内存单元处的指令

A命令:以汇编指令的形式向内存中写入指令

实验中出现的困惑:

向显存中写入数据

T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行

地址总线(寻址能力为2^N个内存单元),数据总线,控制总线

内存地址空间

00000H~9FFFFH 主随机存储器地址空间(RAM),A0000H~BFFFFH 显存地址空间(随写随显示),C0000H~FFFFFH 各类ROM地址空间(只读)

对于CPU是一个统一的逻辑存储器,容量受CPU寻址能力的限制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: