现在的位置: 首页 > 综合 > 正文

[学习笔记]汇编语言——王爽

2014年04月05日 ⁄ 综合 ⁄ 共 1938字 ⁄ 字号 评论关闭

【为了更好地理解地址和微机原理】

计算机是一门交叉学科,一部分知识会连带着其他相关内容,让人无头绪。没通过基本检测点,不要往下学习。没有完成当前实验,不要向下学习

 

 Object: 深入理解机器工作基本原理 && 培养底层编程意识和思想

 

第一章:基础知识

每一种微处理器(Central Processing Unit),由于硬件设计和内部结构差异,拥有特异的机器指令集,即机器语言

 

编译器Compiler:将汇编指令翻译成机器指令的程序

 

内存Memory:存储着让CPU工作的指令和数据

 

About instruction and data:

都是Binary information, CPU的解读不同罢了

 

存储单元:

CPU所能处理的最小单元,以Byte为单位。其编号为 0 ~ (2^n– 1)

Step 3:

 

Step 1:

 

地址信息:找到reador write对应的位置

CPU有n根地址线,则该CPU地址总线宽度为n,最多寻找2^n个存储单元

(32位,64位)   【1位对应2个地址】

 

数据信息:所要读写的数据

【8位对应一个字节】

控制信息:器件的选择,读或写

控制总线的宽度决定了CPU对外部器件的控制能力

 

随机存储器 Random Access Memory(RAM):重启后清零

只读存储器Read-Only Memory(ROM):一直存在

BIOS:由主板和各接口卡厂商提供的软件系统

 

从CPU角度思考,所有存储器的存储单元处于一个统一的逻辑存储器中,其容量受CPU寻址能力的限制

 

判断微机性能的主要标志:

(当某因素不再是限制性能的主要因素时,再多便是多余)

1.       字长

字长是微处理器一次可以直接处理的二进制数据的位数,它通常取决于微处理器内部通用寄存器的位数和数据总线的宽度。

2、主频

主频也叫做时钟频率,用来表示微处理器的运行速度。   单位:   GHz

3、运算速度

MIPS是Millions ofInstruction Per Second的缩写,用来表示微处理器的性能,意为每秒钟能执行多少百万条指令。

         4、主存容量

    主存储器所能存储的信息总量称为主存容量。主存容量一般以字节为单位。一般指内存

 

第二章:寄存器

CPU中有运算器,控制器,寄存器

 

通用寄存器:

         AX,BX, CX, DX

低位

Low

 

高位high

 

(x64兼容x86的原因?)

 

十六进制:     FFFF H或 0xFFFF     (16位)

Mov 赋值, add 自加,sub自减        操作对象必须位数相同,一一对应

 

逻辑存储空间是一维线性空间,每个存储单元有唯一的地址,即物理地址

 

64位结构:

·运算器每次最多处理64位数据

·寄存器最大宽度为64位

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

物理地址= 段地址 * 16 +  偏移地址

(本质:基础地址+ 偏移地址)

 

段Segament:CPU管理内存的划分

 

CS (代码段寄存器): IP(指令指针寄存器):指示CPU当前需读取指令的地址

jmp AX:BX      将AX的值赋给CS,将BX的值赋给IP

 

8086机中,任意时刻CPU讲CS:IP指向的内容当作指令执行.          即此时的数据当指令处理

读取一条命令A后,IP自动增加到下一条顺序指令B的地址,然后执行A

 

实验1:使用DEBUG

         R读写寄存器(register)

 

         D查看内存

(解读:最左列为起始地址,中间为后续的每个地址对应的内容,右边为Ascii)

 

段地址:起始偏移地址 末尾偏移地址

 

         E改写内存

 

         U将特定内存单元的内容翻译为汇编指令

 

         T执行CS:IP指向的 指令

A以汇编的形式向内存写入指令(assembly)

         Q退出

(注意:通用寄存器和CS/IP的变化)

 

第三章寄存器(内存访问)

      通常的地址,指数据的起始地址

内存单元,是字节单元

         如:一个int类型数据在内存中的表示,即00 12 4E 20H      (高位地址,对应高位数据)

 

         CPU要读写一个内存单元时,需先得到其地址,DS则是存储段地址的寄存器

(8086不允许将数据直接赋值给DS,需要用通用寄存器中转,由于硬件设计)

 

这是对内存的读取,而不是改变CS:IP对指令读取!

[0]表明,以DS寄存器的地址为段地址,0为偏移地址的物理地址

对地址的操作,总需要寄存器为媒介, 寄存器的数据是安全的?

 

mov ax,1000

mov ds,ax

mov ax,[0]

假定ax是16位寄存器,则ax会读取1000:0000和1000:0001地址单元的数据

 

add sub mov小结:

容器(寄存器/内存单元) &  数据 

 

 

 

 

 

 

 

 

 

 

 

 

附录:

抱歉!评论已关闭.