Aug 31

第一章 基础知识
◎汇编语言由3类指令组成
汇编指令:机器码的助记符,有对应机器码。
伪指令:没有对应机器码,由编译器执行,计算机并不执行
其他符号:如+-*/,由编译器识别,没有对应机器码
◎一个CPU有n根地址线,则可以所这个CPU的地址线宽度为n,这样的CPU最多可以寻找2的n次方个内存单元。
◎ 1K=2^10B 1M=2^20B 1G=2^30B
◎8086 CPU地址总线宽度为20,寻址范围为00000~FFFFF
00000~9FFFF 主存储器地址空间(RAM)
A0000~BFFFF 显存地址空间
C0000~FFFFF 各类ROM地址空间

第二章 寄存器(CPU工作原理)
◎16位结构描述了一个CPU具有下面几个方面的结构特性
运算器一次最多可以处理16位的数据
寄存器的最大宽度为16位
寄存器和运算器之间的通路为16位
◎8086有20位地址总线,可以传送20位地址,达到1M的寻址能力。采用在内部用两个16位地址合成的方法来形成一个20位的物理地址
◎物理地址 = 段地址 × 16 + 偏移地址
◎在编程是可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。段地址×16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB
◎8086有四个段寄存器 CS、DS、SS、ES
◎CS为代码段寄存器,IP为指令指针寄存器。任意时刻,设CS中内容为M、IP中内容为N,8086CPU从内存M×16+N读取一条指令执行
◎不能用mov修改CS、IP,因为8086CPU没有提供这样功能,可用指令JMP 段地址:偏移地址。JMP 2AE3:3 JMP AX 修改IP

Aug 31

一、中断是什么

中断的汉语解释是半中间发生阻隔、停顿或故障而断开。那么,在计算机系统中,我们为什么需要“阻隔、停顿和断开”呢?

举个日常生活中的例子,比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里,苦苦等着水开——如果水溢出来浇灭了煤气,有可能就要发生一场灾难了。等啊等啊,外边突然传来了惊奇的叫声“怎么不关水龙头?”于是我惭愧的发现,刚才接水之后只顾着抱怨这份无聊的差事,居然忘了这事,于是慌慌张张的冲向水管,三下两下关了龙头,声音又传到耳边,“怎么干什么都是这么马虎?”。伸伸舌头,这件小事就这么过去了,我落寞的眼神又落在了水壶上。

门外忽然又传来了铿锵有力的歌声,我最喜欢的古装剧要开演了,真想夺门而出,然而,听着水壶发出“咕嘟咕嘟”的声音,我清楚:除非等到水开,否则没有我享受人生的时候。

这个场景跟中断有什么关系呢?

Aug 30
学习汇编不错的教程:
中山大学汇编教程在线地址: http://202.116.65.193/Ncourse/hbyy
下载地址:http://202.116.65.193/Ncourse/hbyy/hb09/contents/000.asf
后面的自己加
或者:
4G中山大学下载(注意我是在网上找的,可以下载,速度不快,好慢,晚上下载速度是40多KB)
ftp://www.qihee.cn/程序设计/80x86汇编语言中山大学/hb01.rar
.........
.........
.........
ftp://www.qihee.cn/程序设计/80x86汇编语言中山大学/hb51.rar




第二个找到的网速成有60kb上下

http://www.dvd510.cn/soft/1/3/book_003_308.shtml
http://www.dvd510.cn/soft/1/3/book_003_309.shtml
http://www.dvd510.cn/soft/1/3/book_003_310.shtml
http://www.dvd510.cn/soft/1/3/book_003_311.shtml
http://www.dvd510.cn/soft/1/3/book_003_312.shtml
Tags:
Aug 24
在C和C++有三种定义结构的方法。

typedef struct {

int data;

int text;

} S1;

// 这种方法可以在c或者c++中定义一个S1结构
struct S2 {

int data;

int text;

};
// 这种定义方式只能在C++中使用,而如果用在C中,那么编译器会报错

struct {

int data;

int text;

} S3;

这种方法并没有定义一个结构,而是定义了一个s3的结构变量,编译器会为s3内存。

void main()

{

S1 mine1; // OK , S1 是一个类型

S2 mine2; // OK, S2 是一个类型

S3 mine3; // OK, S3 不是一个类型

S1.data = 5; // ERROR S1 是一个类型

S2.data = 5; // ERROR S2 是一个类型

S3.data = 5; // OK S3是一个变量

}

另外,对与在结构中定义结构本身的变量也有几种写法

struct S6 {

S6* ptr;

};

// 这种写法只能在C++中使用

typedef struct {

S7* ptr;

} S7;

// 这是一种在C和C++中都是错误的定义

如果在C中,我们可以使用这样一个“曲线救国的方法“

typedef struct tagS8{

tagS8 * ptr;

} S8;

又有分析:

struct _x1 { ...}x1; 和 typedef struct _x2{ ...} x2; 有什么不同?

其实, 前者是定义了类_x1和_x1的对象实例x1, 后者是定义了类_x2和_x2的类别名x2 ,
所以它们在使用过程中是有取别的.请看实例1.

结构也是一种数据类型, 可以使用结构变量, 因此, 象其它
类型的变量一样, 在使用结构变量时要先对其定义。
定义结构变量的一般格式为:
struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构变量;
结构名是结构的标识符不是变量名。

另一种常用格式为:

typedef struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构别名;


另外注意: 在C中,struct不能包含函数。在C++中,对struct进行了扩展,可以包含函数。

Aug 23

近期,国家发展改革委、信息产业部就电信资费有关问题进行了认真研究,拟定了进一步推进电信资费改革的总体思路和具体方法步骤,并于昨天正式公布.研究报告指出,今年要重点做好推进移动电话单向收费、降低漫游通话费上限标准和规范套餐资费三项工作.

分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]