第1章汇编语言基础知识

第1章汇编语言基础知识
第1章汇编语言基础知识

第1章汇编语言基础知识

本章介绍学习汇编语言程序设计所必须具备的基本知识,主要包括汇编语言的基本概念及计算机中数据的表示方法。通过本章的学习,读者应能了解汇编语言概念及其使用的进位计数制、不同进位计数制之间的转换、计算机编码以及基本数据类型。

本章内容要点:

汇编语言的概念

汇编语言的特点

不同进位计数制之间的转换

计算机编码

1.1汇编语言概述

1.1.1 汇编语言基本概念

自然语言是具有特定语音和语法等规范的、用于人类表达思想并实现相互交流的工具。人与人之间只有使用同一种语言才能进行直接交流,否则就必须通过翻译。要使计算机为人类服务,人们就必须借助某种工具,告诉计算机“做什么”甚至“怎么做”,这种工具就是程序设计语言。

程序设计语言通常分为三类:机器语言、汇编语言和高级语言。而前两种语言与机器密切相关,统称为低级语言。

1.机器语言

机器语言是计算机第一代语言,它全部由0、1代码组成,是能够直接被机器所接受的语言,是最底层的计算机语言。

机器语言不容易记忆,程序编写难度大,调试修改繁琐,且不易移植,现在程序员很少用。但机器语言执行速度最快,它是一种面向机器的程序设计语言。

2.汇编语言

为了克服机器语言难以记忆、表达和阅读的缺点,人们采用具有一定含义的符号作为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令(或汇编指令)。例如,用ADD表示加法指令,SUB表示减法指令,MOV表示传送指令等。汇编语言是汇编指令集、伪指令集和使用它们规则的统称。伪指令的概念将在第4章介绍。

汇编语言比机器语言直观,容易记忆和理解,用汇编语言编写的程序也比机器语言程序易读、易检查、易修改。对于不同的计算机,针对同一问题所编写的汇编语言源程序是互不通用的。

用汇编语言编写的程序执行效率比较高,但通用性与可移植性仍然比较差。计算机不能直接识别用汇编语言编写的程序,必须由一种专门翻译程序将汇编语言程序翻译成机器语言程序,计算机才能执行。

例如,在8086机器下,分别用汇编语言和机器语言计算10+20的程序代码如下:

汇编语言机器语言

MOV AL,10 B0 0A

ADD AL,20 04 14

显然,使用汇编语言编写的程序要比机器语言更容易理解。

3.高级语言

机器语言和汇编语言以外的程序设计语言统称高级语言。其特点是更加接近自然语言和惯用的数学表达形式,与计算机硬件结构无关,因而便于使用,便于交流和推广。例如,可以在程序中直接使用表达式10+20。目前,常用的高级语言数十种,如C、C++、Pascal、Basic、Java等。

高级语言可分成编译型和解释型高级语言,需要分别使用编译程序和解释程序将源程序翻译成机器语言程序,才能交计算机执行。总之,高级语言编程效率高,但运行效率低。

1.1.2 汇编语言的特点

汇编语言相对机器语言而言好记好用,但远不如高级语言方便、实用,而且编写同样的程序,使用汇编语言比使用高级语言花费的时间更多,调试和维护更困难,在计算机速度大大提高和存储器容量大大增加的今天,高级语言的使用更为广泛和普遍(特别是编写大型程序)。既然如此,为什么还要使用汇编语言呢?主要有两个原因:性能和对计算机的完全控制。一般而言,汇编语言具有如下特点:

(1)执行速度快

一个汇编语言程序,要比高级语言程序执行得更快。程序的执行速度对于某些应用来说是至关重要的。对于这些应用,单纯使用高级语言往往达不到要求,单纯使用汇编语言编写程序也并不是最好的方案,许多成功的大型应用程序往往使用的是混合编程。首先使用高级语言编写整个程序,然后测试程序的执行时间,再使用汇编语言重写其中最费时间的部分。这样做的依据是在实际使用中,通常程序的大部分执行时间都花费在一小部分代码上。例如编写图像处理程序,就往往使用汇编语言编写软件中的关键部分。

(2)程序短小

一个汇编语言程序,要比高级语言程序更小。在某些情况下,设备中的嵌入式处理器往往只有很少的内存,使用汇编语言可能是唯一的方法。如智能卡中有CPU,但是智能卡中很难有1 MB以上的内存,也不可能有带分页的硬盘,但智能卡又必须执行复杂的加密解密计算。个人数字助理(PDA)和其他使用电池作为能源的无线电子设备,为了节省电池的电力,往往也只有很少的内存,它们也需要使用短小精悍而且具有高效率的机器代码。

(3)可以直接控制硬件

某些应用程序要求能够完全控制计算机硬件,这也必须使用汇编语言。如操作系统中的低级中断和陷阱处理程序以及许多嵌入式实时系统中的设备控制程序都属于这一类应用。

(4)可以方便地编译

编译器可以产生供编程者使用的汇编程序或者自己执行汇编过程。因此,为了理解编译器的工作原理,必须首先理解汇编语言。

(5)辅助计算机工作者掌握计算机体系结构

研究汇编语言可以使人们清楚实际计算机结构。特别是对于学习计算机体系结构的学生,编写汇编语言是在结构层理解计算机的唯一途径。

(6)程序编制耗时,可读性差

用汇编语言编制程序十分费时,而且程序的质量直接受到程序员技术水平的影响,程序的可读性也很差。就如前面所举的加法计算的例子,用高级语言编程只需写一条加法表达式,简单明了,极其直观。而用汇编语言编程则需写出两条指令,这些指令都是些对硬件的操作,因此程序的可读性很差。

(7)程序可移植性差

由于汇编语言是面向硬件的,所以用汇编语言编制的程序可移植性很差。显而易见,不同的CPU都有相互独立的指令系统,相互间无任何关系,就算是使用同一系列CPU的机器,因其外围硬件可能有差别,这也会使相同的程序在不同的机器上无法通用。

不难看出,汇编语言存在很多的弱点,但由于它具有一些高级语言所不具备的突出优点,所以汇编语言的应用范围还是很广的。特别是当用户需要研究计算机具体的工作原理的时候,还必须要掌握汇编语言。

1.2 进位计数制及其转换

计算机内部的信息分为两大类:控制信息和数据信息。控制信息是一系列的控制命令,用于指挥计算机如何操作;数据信息是计算机操作的对象,一般又可分为数值数据和非数值数据。数值数据用于表示数量的大小,它有确定的数值;非数值数据没有确定的数值,它主要包括字符、汉字和逻辑数据等等。

对计算机而言,不论是控制命令还是数据,它们都要用“0”和“1”两个基本符号即基2码来编码表示,这是由于以下三个原因:

(1)基2码在物理上最容易实现。例如,用高、低两个电位表示“1”和“0”,或用脉冲的有、无表示“1”和“0”,用脉冲的正、负极性表示“1”和“0”等等,可靠性都较高。

(2)基2码用来表示二进制数,其编码及加减运算规则简单。

(3)基2码的两个符号“1”和“0”正好与逻辑数据“真”与“假”相对应,为计算机实现逻辑运算带来了方便。

因此,不论是什么信息,在输入计算机内部时,都必须用基2码编码表示,以方便存储、传送和处理。

1.2.1 数与数制

1.数的表示

进位计数制是一种计数的方法。在日常生活中,人们使用各种进位计数制,如六十进制(1小时=60分,1分=60秒),十二进制(1英尺=12英寸,1年=12月)等。但人们最熟悉和最常用的是十进制计数。按进位的原则进行计数叫进位计数制,简称数制。每种数制都有其基数和各数位的位权。基数是指该数制中允许选用的基本数码的个数。每个数码所表示的数值等于该数码乘以一个与数码所在位置有关的常数,这个常数叫位权,位权的大小是以基数为底,数码所在位置的序号为指数的整数次幂。在汇编语言中常用的进位计数制有:二进制、八进制、十进制和十六进制,其基数、数码和进位关系如表1-1所示。

表1-1 几种常用的进位计数制的基数、数码和进位关系

在十进制数中,个位的位权为100,十位的位权为101,百位的位权为102,千位的位权为103,而在小数点后第一位上的位权为10?1,小数点后第二位的位权为10?2等等。因此,如果有十进制数123.45,则百位上的1表示1个100,十位上的2表示2个10,个位上的3表示3个1,小数点后第一位上的4表示4个0.1,小数点后第二位上的5表示5个0.01,用位权表示成:

(123.45)10 =1×102+2×101+3×100+4×10-1+5×10-2

同理,任意一个二进制数、八进制数和十六进制数也可用位权表示。例如:

(101.01)2=1×22+0×21+1×20+0×2-1+1×2-2 (125.46)8 =1×82+2×81+5×80+4×8?1+6×8?2 (AD.5F)16 =A ×161+D ×160+5×16?1+F ×16?2

据上述概念,可推广出表示任意进制数的通式:

N =±

i

x

n

i m

=-∑r i

=±(

n i

i x =∑r i +1

m

i

i x -=-∑r i )

其中

n

i i x =∑r i 为整数部分,1

m

i

i x -=-∑r i 为小数部分。r 为基数,每一项的数字可用0~r -1数字

中的一个数字来表示。

2.计数制的书写规则

为了区别不同的计数制,可采用下列两种方法:

(1)在数字后面加写相应的英文字母作为标识,英文字母不分大小写。本书约定采用大写字母形式。如:1100011B 。B 后缀表示为二进制数(Binary )。

2357O 。O 后缀表示为八进制数(Octal )。由于英文字母O 容易和零误会,所以也可以用Q 来表示八进制。

1000D 。D 后缀表示为十进制数(Decimal )。

3AB5H 。H 后缀表示为十六进制数(Hexadecimal )。如果记数符号a ,b ,c ,d ,e ,f 打头,头部应加0,如0A8F5H ;记数符号 a ,b ,c ,d ,e ,f 不区别大小写,与ABCDEF 等效。

缺省后缀时,一般约定为十进制数。 (2)在括号外面加数字下标。 如:(1011)2表示二进制数的1011

(2DF2)16表示十六进制数的2DF2

1.2.2 不同数制之间的转换

1.十进制数与二进制数之间的转换 (1)十进制整数转换成二进制整数 方法:除2取余法

注意:第一次得到的余数为二进制数的最低位,最后得到的余数为二进制数的最高位。 例1.1 将十进制数97转换成二进制数。其过程如下:

即A 0=1 即A 1=0 即A 2=0 即A 3=0 即A 4=0 即A 5=1 即A 6=1 结束

最后结果为:(97)10 =(A 6 A 5 A 4 A 3 A 2 A 1 A 0)2=(1100001)2 (2)十进制小数转换成二进制小数 方法:乘2取整法

注意:最后将每次得到的整数部分(必定是0或1)按先后顺序从左到右排列即得到所对应二进制小数。

例1.2 将十进制小数0.8125转换成二进制小数。其过程如下:

2

余数为1, 余数为0, 余数为0, 余数为0, 余数为0, 余数为1, 余数为1, 余数为0

商为

0.8125

× 2

1.6250 整数部分为1,即A?1=1

0.6250 余下的小数部分

× 2

1.2500 整数部分为1,即A?2=1

0.2500 余下的小数部分

× 2

0.5000 整数部分为0,即A?3=0

0.5000 余下的小数部分

× 2

1.0000 整数部分为1,即A?4=1

0.0000 余下的小数部分为0,结束

最后结果为:(0.8125)10=(0.A?1A?2A?3A?4) 2 =(0.1101)2

(3)一般的十进制数转换成二进制数

为了将一个既有整数又有小数部分的十进制数转换成二进制数,可以将其整数部分和小数部分分别进行转换,然后再组合起来。

例1.3将(97.8125)10转换成二进制数。其过程如下:

(97)10=(1100001)2

=(0.1101)2

(0.8125)

10

由此可得:(97.8125)10 =(1100001.1101)2

(4)二进制数转换十进制数

方法:按位权展开后相加。

注意:用其各位所对应的系数,按“位权展开求和”的方法就可以得到,其基数为2。

例1.4 将(101.11)2转换成十进制数。其过程如下:

(101.11)2=1×22+0×21+1×20+1×2?1+1×2?2

=4+0+1+0.5+0.25

=(5.75)10

2.十进制与八进制之间的转换

(1)十进制整数转换成八进制整数

方法:除8取余法。

注意:采用基数8连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。

例1.5 将十进制数97转换成八进制数。其过程如下:

8 ︳97 余数为1,即A0=1

8 ︳12 余数为4,即A1=4

8 ︳1 余数为1,即A2=1

0 余数为0,结束

最后结果为:(97)10=(A2 A1 A0) 8=(141)8

(2)十进制小数转换成八进制小数

方法:乘8取整法。

注意:连续用基数8去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排

列每次乘积的整数部分。

例1.6 将十进制小数0.6875转换成八进制小数。其过程如下:

0.6875

×8

5000 整数部分为5,即A?1=5

0.5000 余下的小数部分

×8

4.0000 整数部分为4,即A?2=4

0.0000 余下的小数部分为0,结束

最后结果为:(0.6875)10 =(0.A?1A?2)8=(0.54)8(3)八进制数转换成十进制数

方法:按位权展开后相加。

用其各位所对应的系数,按“位权展开求和”的方法就可以得到,其基数为8。

例1.7将(141.54)8转换为十进制数。其过程如下:

(141.54)8=1×82+4×81+1×80+5×8?1+4×8?2

=64+32+1+0.625+0.0625

=97.6875

最后结果为:(141.54)8 =(97.6875)10

3.十进制与十六进制之间的转换

(1)十进制整数转换成十六进制整数

方法:除16取余法。

注意:采用基数16连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。

例1.8 将十进制整数(2347)10转换为十六进制整数,采用“除16倒取余”的方法,过程如下:

16 ︳2347 余数为11,即A0=B(十六进制数为B)

16 ︳146 余数为2,即A1=2

16 ︳9 余数为9,即A2=9

0 余数为0,结束

最后结果为:(2347)10=(A2 A1 A0)16=(92B)16

(2) 十进制小数转换成十六进制小数

方法:乘16取整法。

注意:连续用基数16去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。

例1.9将十进制小数0.6875转换成十六进制小数。其过程如下:

0.6875

× 16

11.0000 整数部分为11,即A?1=B

0.0000 余下的小数部分为0,结束

最后结果为:(0.6875)10 =(0.A?1)16 =(0.B)16

(3)十六进制数转换十进制数

方法:按位权展开后相加。

注意:用其各位所对应的系数,按“位权展开求和”的方法就可以得到,其基数为16。

例1.10将(92B.B)16转换成十进制数。其过程如下:

(92B.B)16=9×162+2×161+B×160+B×16?1

=9×162+2×161+11×160+11×16?1

=2347.6875

最后结果为:(92B.B)16=(2347.6875)10

4.二进制与八进制、十六进制数之间的转换

因为:23=8,所以每三位二进制数对应一位八进制数;

24=16,所以每四位二进制数对应一位十六进制。

表1-2列出了十进制、二进制、八进制、十六进制最基本的数字的对应关系。这些对应关系在后面的二进制、八进制、十六进制相互转换中要经常用到。

(1)二进制数转换成八进制数

从小数点所在位置分别向左向右每三位一组进行划分。若小数点左侧的位数不是3的整数倍,在数的最左侧补零;若小数点右侧的位数不是3的整数倍,在数的最右侧补零。然后参照表1-2,将每三位二进制数转换成对应的一位八进制数,即为二进制数对应的八进制数。

表1-2十、二、八、十六进制数码的对应关系

例1.11将(11010.11)2转换为八进制数。其过程如下:

011 010 .110

3 2. 6

所以(11110.11)2 =(32.6)8

(2)八进制数转换成二进制数

方法:参照表1-2,将每一位八进制数转换成对应的三位二进制数,即为八进制数对应的

二进制数。

例1.12将(34.6)8转换为二进制数。其过程如下:

3 4. 6

011 100. 110

所以(34.6)8=(11100.11)2

(3)二进制数转换成十六进制数

从小数点所在位置分别向左向右每四位一组进行划分。若小数点左侧的位数不是4的整数倍,在数的最左侧补零;若小数点右侧的位数不是4的整数倍,在数的最右侧补零。然后参照表1-2,将每四位二进制数转换成对应的一位十六进制数,即为二进制数对应的十六进制数。

例1.13将(1011110.11)2转换为十六进制数。其过程如下:

0101 1110 .1100

5 E . C

所以(1011110.11)2=(5E.C) 16

(4) 十六进制数转换成二进制数

方法:参照表1-2,将每一位十六进制数转换成对应的四位二进制数,即为十六进制数对应的二进制数。

例1.14将(E8.C)16转换为二进制数。其过程如下:

E 8 C

1110 1000 1100

所以(E8.C) 16=(11101000.11)2

八进制数和十六进制数主要用来简化二进制数的书写,因为具有23=8,24=16的关系,故使用八进制数和十六进制数表示的二进制数较短,便于记忆。IBM–PC机中主要使用十六进制数表示二进制数和编码,所以必须十分熟悉二进制数与十六进制数的对应关系。

1.3计算机中数与字符的表示方法

计算机中数值型数据是用二进制数来表示的,而非数值型数据包括英文字母、标点符号、专用符号、汉字等,也是用二进制数来编码的。

1.3.1 数值型数据的编码

1. 二进制数的编码及运算

我们很容易想到,数据的正负号可用一位二进制的0和1两个状态来表示,这样,二进制数值数据在计算机中就能方便表示了。为了尽可能地简化对二进制数值数据进行算术运算用到的规则,机器将二进制数值数据进行编码表示。

常用的编码有原码、反码和补码。由于补码编码有许多优点,大多数微机采用了补码编码,所以我们着重介绍补码编码表示法。

为了讨论方便,有必要引入两个概念:机器数和机器数的真值。

●机器数:带符号的二进制数值数据在计算机内部的编码。

●真值:机器数所代表的实际值。

一般机器数的最高有效位用来表示数的正负符号,0表示正数,1表示负数。

(1)二进制数原码编码

正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。

例1.15当机器字长为8位二进制数时:

X=+1011011 [X]原码=01011011

Y=-1011011 [Y]原码=11011011

[+1]原码=00000001 [-1]原码=10000001

[+127]原码=01111111 [-127]原码=11111111 原码表示的整数范围是:

-(2n-1-1)~+(2n-1-1),其中n为机器字长。

则:8位二进制原码表示的整数范围是-127~+127,16位二进制原码表示的整数范围是-32767~+32767。

(2)二进制数反码编码

对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。

例1.16当机器字长为8位二进制数时:

X=+1011011 [X]原码=01011011 [X]反码=01011011

Y=-1011011 [Y]原码=11011011 [Y]反码=10100100

[+1]反码=00000001 [-1]反码=11111110

[+127]反码=01111111 [-127]反码=10000000

负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。反码表示的整数范围与原码相同。

(3)二进制数补码编码

正数的补码与其原码相同,负数的补码为其反码在最低位加1。

例1.17当机器字长为8位二进制数时,求X和Y的补码。

(a)X=+1011011B (b)Y=-1011011B

(a)根据定义有:[X]原码=0 101 1011 [X]补码=0 101 1011

(b)根据定义有:[Y]原码=1 101 1011 [Y]反码=1 010 0100

[Y]补码=1 010 0101

例1.18机器字长n=8位,X=+48D,求[X]补码。

将+48D转换为二进制:+110000B。

因为机器字长是8位,其中符号占了1位,所以数值只占7位。

则:[X]原码=0 011 0000,[X]补码= 0 011 0000。如写成十六进制,即[X]补码=30H。

例1.19机器字长n=8位,X=?48D,求[X]补码。

将?48D转换为二进制:?110000B。

因为机器字长是8位,其中符号占了1位,所以数值只占7位。

则:[X]原码=1 011 0000,[X]反码=1 100 1111,[X]补码=1 101 0000。如写成十六进制,即[X]补码=0D0H。

例1.20当机器字长为16位二进制数时,X=+48D,求[X]补。

将+48D转换为二进制:+110000B。

因为机器字长是16位,其中符号占了1位,所以数值只占15位。

则:[X]原码=0 000 0000 0011 0000,[X]补码= 0 000 0000 0011 0000。如写成十六进制,即[X]补码=0030H。

例1.21当机器字长为16位二进制数时,X=?48D,求[X]补。

将?48D转换为二进制:?110000B。

因为机器字长是16位,其中符号占了1位,所以数值只占15位。

则:[X]原码=1 000 0000 0011 0000,[X]反码=1 111 1111 1100 1111,[X]补码= 1 111 1111 1101 0000。

如写成十六进制,即[X]补码=0FFD0H。

由此可看出,补码数要扩展时,正数是在符号的前面补0,负数是在符号的前面补1。也就是说,补码数扩展实际上是符号扩展。

已知补码求真值的方法是:当机器数的最高位(符号位)为0时,表示真值是正数,其值等于其余n?1位的值;当机器数的最高位(符号位)为1时,表示真值是负数,其值等于其余n?1位按位取反末位加1的值。

例1.22(a)[X]补码=01011001B,(b)[X]补码=11011001B,分别求其真值X。

(a)[X]补码代表的数是正数,其真值:

X=+1011001B

=+(1×26+1×24+1×23+1×20)

=+(64+16+8+1)

=+(89)D

(b)[X]补码代表的数是负数,则真值:

X=-([1011001]求反+1)B

=-(0100110+1)B

=-(0100111)B

=-(1×25+1×22+1×21+1×20)

=-(32+4+2+1)

=-(39)D

下面,我们来讨论一下补码表示数的范围。

一般来说,如果机器字长为n位,则补码能表示的整数范围是:

?2n?1≤N≤2n?1?1

例如,当n=8时,?128≤N≤+127,其二进制补码数范围如表1-3所示。

当n=16时,?32768≤N≤+32767。

表1-38位二进制补码数范围

(4)二进制数补码的运算

补码的运算规则:

[X+Y]补= [X]补+ [Y]补

[X?Y]补= [X]补+ [?Y]补

已知[Y]补求[?Y]补的方法:将[Y]补各位按位取反(包括符号位),末位加1。

例1.23二进制数补码的运算规则证明举例。

设X1 = + 0001100 X2 = ?0001100

Y1 = + 0000101 Y2 = ?0000101

则[X1]补= 0 0001100 [X2]补= 1 1110100

[Y1]补= 0 0000101 [Y2]补= 1 1111011

①计算X1 + Y1。

+ 0001100 X1

+)+ 0000101 Y1

+ 0010001 X1+Y1

0 0001100 [X1]补

+)0 0000101 [Y1]补

0 0010001 [X1]补+[Y1]补

因为:[X1+Y1]补= [0 0010001]补= [X1]补+ [Y1]补

所以:[X1+Y1]补= [X1]补+ [Y1]补②计算X1?Y1。

+ 0001100 X1

?)+ 0000101 Y1

+ 0000111 X1?Y1

0 0001100 [X1]补

+) 1 1111011 [?Y1]补

1 0 0000111 [X1]补+[?Y1]补

因为:[X1?Y1]补= [0 0000111]补= [X1]补+ [?Y1]补

所以:[X1?Y1]补= [X1]补+ [?Y1]补

③计算X2 + Y2。

?0001100 X2

+)?0000101 Y2

?0010001 X2+Y2

1 111 0100 [X2]补

+) 1 111 1011 [Y2]补

1 11101111 [X2]补+[Y2]补

因为:[X2+ Y2]补= [1 1101111]补= [X2]补+ [Y2]补

所以:[X2 + Y2]补= [X2]补+ [Y2]补

④计算X2 – Y2。

?0001100 X2

?)?0000101 Y2

?0000111 X2?Y2

1 1110100 [X2]补

+)0 0000101 [?Y2]补

1 1111001 [X2]补+[?Y2]补

因为:[X2–Y2]补= [1 1111001]补= [X2]补+ [?Y2]补

所以:[X2–Y2]补= [X2]补+ [?Y2]补由此可看出,计算机引入了补码编码后,带来了以下几个优点:

①减法转化成了加法:这样大大简化了运算器硬件电路的设计,加减法可用同一硬件电路进行处理。

②运算时,符号位与数值位同等对待,都按二进制数参加运算;符号位产生的进位丢掉不管,其结果是正确的。这大大简化了运算规则。

运用以上两个规则时,要注意两点:

①公式成立有个前提条件,就是运算结果不能超出机器数所能表示的范围,否则运算结果不正确,按“溢出”处理。例如,如果机器字长为8位,则?128≤N≤+127,通过计算(+64)+(+65)来说明这个问题。

+64

+)+65

+129

0 1000000

+) 0 1000001

1 0000001 →?127

为什么(+64)+(+65)其结果值会是?127?这个结果显然是错误的。究其原因是(+64)+(+65)= +129>+127,超出了字长为8位所能表示的最大值,产生了“溢出”,所以结果值出错。

再看(?125)+(?10)。

?125 +) ? 10 ?135

1 0000011

+) 1 1110110

10 1111001 →+121

显然,计算结果是错误的。其原因是:(?125)+(?10)= ?135<?128,超出了字长为8位所能表示的最小值,产生了“溢出”,所以结果出错。

② 采用补码运算后,结果也是补码,欲得运算结果的真值,还需进行转换。 1. 无符号整数的编码

在某些情况下,计算机要处理的数据全是正数,此时机器数再保留符号位就没有意义了。这时,我们将机器数最高有效位也作为数值位处理,也就是说,假设机器字长为n 位,则有符号整数的编码格式如图1-1所示。

1位

n-1位

图1-1 有符号整数编码格式

无符号整数的编码格式如图1-2所示。

图1.2 无符号整数编码格式

无符号整数的表示范围为:0≤N ≤2n –1。

例如,当n=8位时,表示范围为:0≤N ≤255;

当n=16位时,表示范围为:0≤N ≤65535。

在计算机中最常见的无符号整数是地址。另外,双字长数据的低位字也是无符号整数。 要注意的是,计算机本身不论是对有符号数还是无符号数,总是按照补码的运算规则做

运算。

3.十进制数的编码

人们在日常生活中习惯使用十进制数,而在计算机内,采用二进制数表示和处理数据更方便。因此,在往计算机里输入和输出数据时,要进行十→二和二→十的进制转换。但是,在某些特定的应用领域中,如商业统计,数据的运算很简单,但数据的输入、输出量很大,这样,数制转换所占的时间比例很大。从提高计算机的运行效率考虑,可以在计算机内部直接用十进制数表示和处理数据。以下介绍在计算机内部十进制数的编码方法及运算方法。

(1)BCD码

BCD(Binary-Coded Decimal)码又称为“二—十进制编码”,专门解决用二进制数表示十进数的问题。最常用的是8421编码,其方法是用4位二进制数表示1位十进制数,自左至右每一位对应的位权是8、4、2、1,选择的是0000,0001,0010,…,1001这10种组合,用来表示0~9这10个数位,见表1-4所示。

表1-4 BCD码表

(2)压缩BCD码

每一位数采用4位二进制数来表示,即一个字节表示2位十进制数。

例如:二进制数10001001B,采用压缩BCD码表示为十进制数89D。

(3)非压缩BCD码每一位数采用8位二进制数来表示,即一个字节表示1位十进制数。而且只用每个字节的低4位来表示0~9,高4位为0。

例如:十进制数89D,采用非压缩BCD码表示为二进制数是:

00001001B 00001001B

1.3.2 非数值型数据的编码

现代计算机不仅处理数值数据,而且还要处理大量的非数值数据,像英文字母、标点符号、专用符号、汉字等等。前面已说过,不论什么数据,都必须用基2码编码后才能存储、传送及处理,非数值数据也不例外。下面我们分别介绍常见的非数值数据的二进制编码方法。

1.字符编码

使用最多、最普遍的是ASCII字符编码,即美国标准信息交换代码(American Standard Code for Information Interchance),具体见表1.5。

ASCII码表有以下几个特点:

(1) 每个字符用7位基2码表示,其排列次序为B6 B5 B4 B3 B2 B1 B0。实际上,在计算机内部,每个字符是用8位(即一个字节)表示的。一般情况下,将最高位置为“0”,即B7为“0”。需要奇偶校验时,最高位用做校验位。

(2) ASCII码共编码了128个字符,它们分别是:

32个控制字符,主要用于通信中的通信控制或对计算机设备的功能控制,编码值为0~31(十进制)。

?间隔字符(也称空格字符)SP,编码值为20H。

?删除控制码DEL,编码值为7FH。

?94个可印刷字符(或称有形字符)。这94个可印刷字符编码有如下规律:

字符0~9这10个数字符的高3位编码都为011,低4位为0000~1001,屏蔽掉高3位的值,低4位正好是数据0~9的二进制形式。这样编码的好处是既满足正常的数值排序关系,又有利于ASCII码与二进制码之间的转换。英文字母的编码值满足A~Z或a~z正常的字母排序关系。另外,大小写英文字母编码仅是B5位值不相同,B5为1是小写字母,这样编码有利于大小写字母之间的编码转换。

2.汉字的编码

计算机在处理汉字时,汉字字符也必须用基2码编码表示,一般汉字编码采用两个字节即16位二进制数。但由于汉字的特殊性,在汉字的输入、存储、输出过程中所使用的汉字编码是不一样的,输入时有输入编码,存储时有汉字机内码,输出时有汉字字形码。

(1)汉字输入编码

为了能把汉字这种象形文字通过西文标准键盘输入到计算机内,就必须对汉字用键盘已有的字符设计编码,这种编码称为汉字的输入编码,又称为汉字外部码,简称外码。使用较多的有以下4类:

①顺序码:如区位码、电报码等。

②音码:如拼音码、自然码等。

③形码:如五笔字型、大众码等。

④音形码:如双拼码、五十字元等。

(2)汉字机内码

汉字机内码也称汉字内部码,简称内码。它是机器存储和处理汉字时采用的统一编码。每个汉字的机内码是惟一的,用两个字节表示。为了避免与西文字符的ASCII码之间产生二义性,汉字机内码中两个字节的最高位均规定为“1”。

(3)汉字字形码

汉字字形码也叫汉字字模点阵码,是汉字输出时的字形点阵代码,是一串基2码编码。

3.逻辑数据的编码

逻辑数据是用来表示“是”与“否”,或称“真”与“假”两个状态的数据。在计算机中,用“1”表示“真”或“是”,用“0”表示“假”或“否”。需要注意的是,这里的1和0没有数值和大小概念,只有逻辑意义。

对逻辑数据只能进行逻辑运算,例如逻辑非、逻辑加、逻辑乘等基本逻辑运算和由基本逻辑运算构成的各种组合逻辑运算,运算结果仍是逻辑数据。下面介绍一下基本逻辑运算的运算规则。

(1)“与”运算(AND)

“与”运算又称逻辑乘,用符号·或∧表示。其运算规则为

0·0 = 0 0·1 = 0

1·0 = 0 1·1 = 1

即两个逻辑变量取值均为1时,它们“与”的结果才为1。

(2)“或”运算(OR)

“或”运算又称逻辑加,用符号+ 或∨表示。

0 + 0 = 0 0 + 1 = 1

1 + 0 = 1 1 + 1 = 1

即两个逻辑变量的取值只要一个为1,它们“或”的结果就会为1。

(3)“非”运算(NOT)

“非”运算用符号–来表示。

1=0

0=1

(4)“异或”运算(XOR)

“异或”运算用符号⊕或 来表示。

0⊕0 = 0 0⊕1 = 1

1⊕0 = 1 1⊕1 = 0

即两个逻辑变量取值不相同时,它们“异或”的结果才为1。

要注意的是,一个逻辑数据用一位基2码表示,这样,8个逻辑数据用8位基2码表示,这8位基2码可存放在一个字节中。反过来说,一个32位的字就可以表示32个逻辑数据。

逻辑运算关系见表1-6所示。

表1-6逻辑数运算规则

下面举例说明逻辑运算方法。

例1.23 X=00FFH,Y=5555H,Z1=X∧Y,Z2=X∨Y,Z3=X,Z4=X Y,求Z1、Z2、Z3、Z4的值。

解:X = 0000 0000 1111 1111

Y = 0101 0101 0101 0101

Z1= 0000 0000 0101 0101 = 0055H

Z2= 0101 0101 1111 1111 = 55FFH

Z3= 1111 1111 0000 0000 = FF00H

Z4= 0101 0101 1010 1010 = 55AAH

小结

1.数制

计算机中的数字电路用电压的高低(或通断)表示两种状态0、1,所以计算机内部的所有信息都是采用二进制计数法。在书写程序时,常采用二进制的短格式表示法:十六进制。

2.数制之间的转换

二进制数和十六进制的转换是很直接的。一个二进制数,从低位到高位,每4位用一个数字来表示,就是相应的十六进制数,反之一个十六进制数中的每一位用4位二进制数表示,就转换成相应的二进制数。

十六进制数的各位数与其对应权值(16i)的乘积之和即为其对应的是十进制数。十进制数转换为十六进制数主要使用除法,还可使用降幂法。

3.数和字符的表示

计算机中的数是用二进制来表示,其最高有效位表示数的正负号。整数采用补码表示法。对一个二进制数按位求反后在末位加1的运算称为求补运算。

补码的加法规则是:[X+Y]补=[X]补+[Y]补

补码的减法规则是:[X-Y]补=[X]补+[-Y]补

计算机采用ASCII表示字符,每个字符占用一个字节。

4.运算

二进制数的算术运算规则是逢二进一,十六进制数的运算规则是逢十六进一。

基本逻辑运算包括与(AND)、或(OR)、非(NOT)、异或(XOR),0、1代码为逻辑变量。

习题

1. 什么是汇编语言?汇编语言的特点是什么?

2. 把下列十进制数转换成二进制数、八进制数、十六进制数。

①127 ②1021 ③0.875 ④ 6.25

3. 把下列二进制数转换成十进制数。

①1001.11 ②101011.10011 ③111.011 ④1011.1

4. 把下列八进制数转换成十进制数。

①573.06 ②75.23 ③431.7 ④123.45

5. 把下列十六进制数转换成十进制数。

①0D5.F4 ②8BA.7C ③0B2E.3A ④6EC.2D

6. 把下列英文单词转换成ASCII编码的字符串。

①Upper ②Blow ③Computer ④What

7. 求下列带符号十进制数的8位基2码补码。

①+127 ②?2 ③?128 ④+2

8. 求下列带符号十进制数的16位基2码补码。

①+628 ②?9 ③?1234 ④+3249

9. 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。

①68+(-53)②68-53 ③68-(-53)④(-68)-53

10. 汉字在输入、存储、输出过程中所使用的汉字编码是否一样?使用的是什么编码?

汇编语言 快速入门

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%&“醒醒!” 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指

最新-单片机原理及应用期末考试必考知识点重点总结 精品

单片机概述 单片机是微单片微型计算机的简称,微型计算机的一种。 它把中央处理器(CPU),随机存储器(RAM),只读存储器(ROM),定时器\计数器以及I\O 接口,串并通信等接口电路的功能集成与一块电路芯片的微型计算机。 字长:在计算机中有一组二进制编码表示一个信息,这组编码称为计算机的字,组成字的位数称为“字长”,字长标志着精度,MCS-51是8位的微型计算机。 89c51 是8位(字长)单片机(51系列为8位) 单片机硬件系统仍然依照体系结构:包括CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、输入设备和输出设备、内部总线等。 由于一块尺寸有限的电路芯片实现多种功能,所以制作上要求单片机的高性能,结构简单,工作可靠稳定。 单片机软件系统包括监控程序,中断、控制、初始化等用户程序。 一般编程语言有汇编语言和C语言,都是通过编译以后得到机器语言(二进制代码)。 1.1单片机的半导体工艺 一种是HMOS工艺,高密度短沟道MOS工艺具有高速度、高密度的特点; 另一种是CHMOS工艺,互补金属氧化物的HMOS工艺,它兼有HMOS工艺的特点还具有CMOS的低功耗的特点。例如:8181的功耗是630mW,80C51的功耗只有110mW左右。1.2开发步5骤: 1.设计单片机系统的电路 2.利用软件开发工具(如:Keil c51)编辑程序,通过编译得到.hex的机器语言。 3.利用单片机仿真系统(例如:Protus)对单片机最小系统以及设计的外围电路,进行模拟的硬软件联合调试。 4.借助单片机开发工具软件(如:STC_ISP下载软件)读写设备将仿真中调试好的.hex程序拷到单片机的程序存储器里面。 5.根据设计实物搭建单片机系统。 2.1MCS-51单片机的组成:(有两个定时器) CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、I/O口(串口、并口)、内部总线和中断系统等。 工作过程框图如下:

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

计算机导论知识点总结

计算机导论知识点总结 指令系统:一台计算机中所有指令的的集合,它是表征一台计算机性能的重要指标。 微型计算机中,控制器的基本功能是指令的操作数。 USB总线是以串行方式传输数据。 计算机网络:计算机网络是利用通信线路连接起来相互独立的计算机的集合,其主要目的是实现数据通信和资源共享。 计算机病毒:破坏计算机功能或数据,影响计算机使用,并能自我复制的一组计算机指令或程序。 操作系统:操作系统是由程序和数据结构组成的大型系统软件,它负责计算机的全部软硬件的资源分配,调度和管理,控制各类程序的正常执行,并为用户使用计算机提供良好的环境。 高速缓冲储存器(Cache):位于cpu和内存之间的储存器,其 特点是速度快,目的是是储存器的速度与cpu的速度相匹配。 总线:若干信号线的集合,是计算机各部分之间实现信息传递的通道。 数据结构:数据结构是指具有一定的结构(关系)的数据元素的集合,主要研究数据的各种逻辑结构和物理结构,以及对数据的各种操作。 进程:一个程序(或者程序段)在给定的工作空间和数据集合上的一次执行过程,它是操作系统进行资源分配和调度的一个独立单位。 程序计数器:由若干位触发器和逻辑电路组成,用来存放将要执

行的指令在储存器中存放地址。 机器指令:计算机执行某种操作的命令,可由cpu直接执行。 cpu主要的技术指标: 1.字长:cpu一次处理的二进制数的位数。 2.主频:cpu内部工作的时钟频率,是cpu运算时的工作频率。 3.地址总线宽度:决定了cpu可以访问储存器的容量,不同型号cpu的总线宽度不同,因而可使用的内存的最大容量也不同。 4.数据总线宽度:决定了cpu与内存,I/0设备之间一次数据传输的信息量。 5.高度缓冲:可以进行高速数据交换的存储器,它先于内存,与cpu交换数据。 6.指令系统:指令的寻址方式越灵活,计算机的处理能越强。 7.机器可靠性:平均无故障时间越短,机器性能月好。 计算机硬件主要由运算器,控制器,储存器,输入设备,输出设备和(总线)组成 1.运算器:主要完成算数运算和逻辑运算。 2.控制器:实现取指令,分析指令和执行指令操作的控制,实现对整个运算过程的有规律的控制。 3.储存器:是用来存放数据和程序的部件,可以分为主存储器(也称内存储器),和辅助存储器。 4.输入设备,输出设备:是实现计算机系统与人(或者其他系统)之间进行信息交换的设备。输入设备将外界信息转化为

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

汇编语言基本关键字

汇编语言基本关键字 aaa对非压缩BCD码加法之和调整 aas 对非压缩BCD码减法之差调整 aam乘法调整aad被除数调整 add不带进位标志位的加法adc带进位标志位的加法 and逻辑与 assume指定段寄存器 bswap双字单操作数内部交换 bt位测试bts位测试并置一 btr位测试并清零btc位测试并取反 bsf/bsr正,反向位扫描 call调用 cbw字节转换为字cwd字转换为双字cwde字转换为扩展的双字cdq双字转换为四字 cmp比较cmpxchg比较并交换 cmps串比较 code定义简化代码段 const定义简化常数数据段 daa对压缩BCD码加法之和调整das对压缩BCD码减法之差调整 data定义简化数据段 db/dw/dd/dq/dt定义字节/字/双字/四字/十字变量 dec减一

df定义32位便宜地址的远地址指针 div无符号数除法 equ等价textequ文本等价 even取偶偏移地址 fardata,fardata定义简化独立数据段 group定义段组 idiv有符号整数除法 imul有符号整数乘法 in输入 inc加一 ins/outs输入/输出串元素 jcxz/jecxz若cx=0/ecx=0,跳转 jmpdopd无条件跳转到DOPD 处取出指令继续执行 label为$定义符号 Lahf 标志位低八位送AH lea 偏移地址送通用寄存器lda传送进入数据段的地址指针 les传送进入附加数据段的地址指针lfs传送进入FS段的地址指针lgs传送进入GS段的地址指针lss传送进入堆栈段的地址指针 local说明局部变量 lods读出串元素 Loop/loopd无条件循环cx/ecx为循环次数 loopnz/loopnzd非零或不等时循环,cx/ecx为循环次数

汇编语言-高频考点

汇编语言重点知识总结 汇编速查手册汇编语言总结概要寄存器与存储器 1.寄存器功能 .寄存器的一般用途和专用用途 .CS:IP 控制程序执行流程.SS:SP 提供堆栈栈顶单元地址.DS:BX(SI,DI)提供数据段内单元地址.SS:BP 提供堆栈内单元地址 .ES:BX(SI,DI)提供附加段内单元地址 .AX,CX,BX 和CX 寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。.PSW 程序状态字寄存器只能通过专用指令(LAHF,SAHF)和堆栈(PUSHF,POPF)进行存取。 2.存储器分段管理 .解决了16位寄存器构成20位地址的问题 .便于程序重定位 .20位物理地址=段地址*16+偏移地址 .程序分段组织:一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。 3.堆栈 .堆栈是一种先进后出的数据结构,数据的存取在栈顶进行,数据入栈使堆栈向地址减小的方向扩展。 .堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。.堆栈总是以字为单位存取 指令系统与寻址方式 1.指令系统 .计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。执行指令后,一般源操作数不变,目的操作数被计算结果替代。 .机器指令由CPU 执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类:数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。 2.寻址方式 .寻址方式确定执行指令时获得操作数地址的方法 .分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。 .与数据有关的寻址方式的一般用途: (1)立即数寻址方式--将常量赋给寄存器或存储单元 (2)直接寻址方式--存取单个变量 (3)寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度计算机、电子信息、通信工程专业适用涉及微机原理、单片机原理 本资料结合知识点整理了近年来各名校复试真题 考研 专业课复试 高频考点复习指导 8086对存储器进行访问取指令时,物理地址可由(CS和IP )组合产生。设SS=3300H,SP=1140H,在堆栈中压入5个字数据后,又弹出两个字数据,则SP=(113AH )。利用DOS系统功能调用的9号(AH=9)功能,显示一个字符串,其入口参数应为 (DS:DX=字符串首地址)。在指令MOV AX,0 执行后,CPU状态标志位ZF的取值(不改变) 执行MOV PSW,#10H是将MCS-551的工作寄存器位置为(第2组) 某数存于内存数据段中,已知该数据段的段地址为2000H,而数据所在单元的偏移位置为0120H,该数据在内存的物理地址为(20120H ) MCS-51单片机的堆栈区应建立在(片内数据存储区的高128字节单元)MCS-51单片机的位寻址区位于内部RAM的(20H-2FH)单元

汇编语言基础知识

汇编语言基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有 效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel 公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。 1.1 微型计算机概述 微型计算机由中央处理器(Central Processing Unit ,CPU )、存储器、输入输出接口电路和总线构成。CPU 如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。存储器包括随机存储器(Random Access Memory ,RAM )和只读存储器(Read Only Memory ,ROM )。输入输出接口电路用来连接外部设备和微型计算机。总线为CPU 和其他部件之间提供数据、地址和控制信息的传输通道。如图1.1所示为微型计算机的基本结构。 外部设备存储器输入输出接口电路中央处理器 CPU 地址总线 数据总线 控制总线 图1.1 微型计算机基本结构 特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变 为各个部件面向总线的单一关系。一个部件只要符合总线结构标准, 就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。 数据总线用来在CPU 与内存或其他部件之间进行数据传送。它是双向的,数据总线 的位宽决定了CPU 和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。 地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了 CPU 可以直接寻址的内存范围。如 CPU 的地址总线的宽度为N ,则CPU 最多可以寻找2N 个内存单 元。

计算机系统结构知识点复习考点归纳总结

0.从(使用语言的)角度可以将系统看成是按(功能)划分的多个机器级组成的层次结构 1、从计算机系统执行程序的角度看,并行性等级由低到高分为(指令内部)、(指令之间)、(任务或进程之间)和(作业或程序之间)四级。 2、从计算机系统中处理数据的并行性看,并行性等级从低到高分为(位串字串)、(位并字串)、(位串字并)和(全并行)。 3、存储器操作并行的典型例子是(并行存储器系统和相联处理机),处理机操作步骤并行的典型例子是(流水线处理机),处理机操作并行的典型例子是(阵列处理机),指令、任务、作业并行的典型例子是(多处理机)。 4、开发并行的途径有(时间重叠),资源重复和资源共享。 5、计算机系统多级层次中,从下层到上层,各级相对顺序正确的应当是(微程序机器级,传统机器语言机器级,汇编语言机器级)。 6、对系统程序员透明的应当是(CACHE存储器、系列机各档不同的数据通路宽度、指令缓冲寄存器) 7、对机器语言程序员透明的是(主存地址寄存器) 8、计算机系统结构包括(机器工作状态、信息保护、数据表示) 9、对汇编语言程序员透明的是(I/O方式中的DMA访问) 10、属计算机系统结构考虑的是(主存容量和编址方式) 11、从计算机系统结构上讲,机器语言程序员所看到的机器属性是(编程要用到的硬件组织) 12、计算机组成设计考虑(专用部件设置、控制机构的组成、缓冲技术) 13、在多用户机器上,应用程序员能使用的指令是(“执行”指令、“访管”指令、“测试与置定”指令) 14、软硬件功能是等效的,提高硬件功能的比例会(提高解题速度、提高硬件成本、减少所需存储器用量) 15、下列说法中正确的是(软件设计费用比软件重复生产费用高、硬件功能只需实现一次,而软件功能可能要多次重复实现、硬件的生产用比软件的生产费用高) 16、在计算机系统设计中,比较好的方法是(从中间开始向上、向下设计)。 17、推出系列机的新机器,不能更改的是(原有指令的寻址方式和操作码)。 18、不同系列的机器之间,实现软件移植的途径包括(用统一的高级语言、模拟、仿真)。 19、在操作系统机器级,一般用(机器语言)程序(解释)作业控制语句。 20、高级语言程序经(编译程序)的(翻译)成汇编语言程序。 21、传统机器语言机器级,是用(微指令程序)来(解释)机器指令。 22、汇编语言程序经(汇编程序)的(解释)成机器语言程序。 23、微指令由(硬件)直接执行。 24、系列机软件必须保证(向后兼容),一般应做到(向上兼容) 25、在计算机系统的层次结构中,机器被定义为(能存储和执行相应语言程序的算法和 数据结构)的集合体 26、优化性能价格比指(在某种价格情况下尽量提高性能)或(在满足性能前提下尽量降低价格)。 27、目前,M0由(硬件)实现,M1用(固件)实现,M2至M5大多用(软件)实现。 28、系列机中(中档机)的性能价格比通常比(低档机、高档机)的要高 29、(计算机组成)着眼于机器级内各事件的排序方式,(计算机体系结构)着眼于对传统机器级界面的确定,(计算机组成)着眼于机器内部各部件的功能,(计算机实现)着眼于微程序设计。 30、计算机系统结构也称(计算机体系结构),指的是(传统机器级)的系统结构。 31、用微程序直接解释另一种机器指令系统的方法称为(仿真),用机器语言解释

高中信息技术学业水平考试Word、Excel操作题考点总结

Word操作题考点总结 常用工具栏、格式工具栏的调出:视图菜单——工具栏——常用、格式 1、设置字体、添加底纹 字体的设置:选中文字——格式——字体 字符间距、文字效果的设置:选中文字——格式——字体——字符间距、文字效果底纹的设置:选中文字——格式——边框和底纹 2、设置段落、行距 选中段落——格式——段落——行距、首行缩进(找特殊格式)、段前段后、左缩进右缩进 3、页面设置 文件——页面设置页边距(上下左右)、纸型 4、图片 插入图片:先把光标放到插入的位置,插入——图片——来自文件 图片大小设置:选中图片——格式——图片——大小——输入高、宽值(根据情况取消或勾选“锁定纵横比”) 图片环绕方式的设置:选中图片——格式——图片——版式——选择合适的环绕方式(若找不到需要的环绕方式,点击高级) 5、艺术字 插入艺术字:先把鼠标光标放到插入的位置,插入——图片——艺术字 艺术字环绕方式的设置:选中艺术字(鼠标呈四向箭头单击)——格式——艺术字——格式、版式 更改艺术字的样式、字体:选中艺术字——艺术字工具栏(若没有,选择视图菜单——工具栏——艺术字) 6、自选图形 插入自选图形:插入——图片——自选图形——出现自选图形对话框选中合适的图形,然后拖拉鼠标绘制图形 自选图形的设置:选中自选图形——格式——自选图形——设置自选图形格式——颜色线条、大小、版式 7、文本框 插入文本框:插入——文本框——横排、竖排 文本框的设置:文本框上单击——格式——文本框——设置文本框格式——颜色线条、大小、版式 8、项目编号 选中需要添加项目符号的段落——格式——项目符号和编号——编号 9、特殊符号 插入——特殊符号——特殊符号 10、分栏 分栏:格式——分栏——选择分的栏数 取消分栏:格式——分栏——选择一栏 11、页眉和页脚、页码 视图——页眉和页脚 插入——页码 12、新建Word文件 找到要求的文件夹——空白处右击——新建——Microsoft Word文档——输入文件名

汇编语言程序设计知识点

汇编语言程序设计知识点 第一章基础知识 (1)正负数的补码表示, 掌握计算机中数和字符的表示; 1、假设机器字长为8位,[+3]补 =00000011B,[-3]补= FD H 。 2、十六进制数0F8H表示的十进制正数为 248 ,表示的十进制负数为 -8。 3、8位二进制数被看成是带符号补码整数时,其最小值是 -128,最大值是 127 。 4、计算机处理问题中会碰到大量的字符、符号,对此必须采用统一的二进制编码。目前,微机中普遍采用的是ASCII 码,称为美国信息交换标准码。 第二章80x86计算机组织 (1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器 1、IP寄存器中保存的是?下一条指令的首地址 2、FLAGS标志寄存器中共有几位条件状态位?6位 3、有几位控制状态位?3位 4、标志寄存器分为哪2类?条件码,控制 5、哪个标志位用来控制可屏蔽中断请求是否被CPU响应?IF 6、键盘I/O、显示I/O和打印I/O分别对应16、10和17号中断。 (2)存储单元的地址和内容,存储器地址的分段,实模式下逻辑地址、物理地址的表示。 1、如果SS=6000H,说明堆栈段起始物理地址是60000H。 2、已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为1420H 。 3、如果数据段中一个内存单元对应的物理地址为3F756H,(DS)=3F00H,那么使用DS段寄存器指明该单元的段基值时,需要使用哪一个偏移量才能正确访问该单元756H。 4.如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H . 第三章80x86的指令系统和寻址方式 (1)与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址).数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS指令,与REPE/REPZ和REPNE/REPNZ

汇编语言入门教程

汇编语言入门教程 2007-04-29 22:04对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK 出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS 段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。

微机原理及接口技术期末复习资料重点归纳

微机重点总结 第一章 计算机中数的表示方法:真值、原码、反码(-127—+127)、补码(-128—+127)、BCD码,1000的原码为-0,补码为-8,反码为-7。 ASCII码:7位二进制编码,空格20,回车0D,换行0A,0-9(30-39),A-Z(41-5A),a-z(61-7A)。 模型机结构介绍 1、程序计数器PC:4位计数器,每次运行前先复位至0000,取出一条指令后PC自动加1,指向下一条指令; 2、存储地址寄存器MAR:接收来自PC的二进制数,作为地址码送入存储器; 3、可编程只读存储器PROM 4、指令寄存器IR:从PROM接收指令字,同时将指令字分别送到控制器CON和总线上,模型机指令字长为8位,高4位为操作码,低4位为地址码(操作数地址); 5、控制器CON:(1)每次运行前CON先发出CLR=1,使有关部件清零,此时PC=0000,IR=0000 0000;(2)CON 有一个同步时钟输出,发出脉冲信号CLK到各部件,使它们同步运行;(3)控制矩阵CM根据IR送来的指令发出12位控制字,CON=C P E P L M E R L I E I L A E A S U E U L B I O; 6、累加器A:能从总线接收数据,也能向总线送数据,其数据输出端能将数据送至ALU进行算数运算(双态,不受E门控制); 7、算数逻辑部件ALU:当S U=0时,A+B,当S U=1时,A-B; 8、寄存器B:将要与A相加或相减的数据暂存于此寄存器,它到ALU的输出也是双态的; 9、输出寄存器O:装入累加器A的结果; 10、二进制显示器D。 中央处理器CPU:PC、IR、CON、ALU、A、B;存储器:MAR、PROM;输入/输出系统:O、D。 执行指令过程:指令周期(机器周期)包括取指周期和执行周期,两者均为3个机器节拍(模型机),其中,取指周期的3个机器节拍分别为送地址节拍、读存储节拍和增量节拍。 控制器:环形计数器(RC)、指令译码器(ID)、控制矩阵(CM)、其他控制电路。 微型计算机硬件基本结构:算术逻辑单元ALU、控制器、存储器、输入/输出设备。 微型机工作原理:存储程序,按地址顺序执行。 第二章 微处理器基本结构和功能: 1、内部寄存器阵列(通用寄存器和专用寄存器); 2、算数逻辑运算单元; 3、控制器(指令寄存器、指令译码器和各种定时与控制 信号产生电路); 4、现代微处理器中还集成了浮点运算部件及高速缓冲寄 存器cache。 8086/8088微处理器结构: 执行部件EU的组成: 1、ALU(算术逻辑单元); 2、寄存器组: (1)通用寄存器:4个16位通用寄存器(AX、BX、CX、DX)或8个8位寄存器(AL、AH、BL、BH、CL、CH、DL、DH),其中AX为累加器,BX为基址寄存器,CX为计数寄 存器,DX为数据寄存器; (2)专用寄存器:两个16位指针寄存器SP和BP,两个 16位变址寄存器SI和DI,其中,SP是堆栈指针寄存器, 由它和堆栈段寄存器SS一起来确定堆栈在内存中的位 置,BP是基址指针寄存器,通常用于存放基地址,SI是 原变址寄存器,DI是目的变址寄存器,都用于指令变址寻 址方式; (3)标志寄存器FR :为16位寄存器,其中7位未使用, 使用的9个标志位可分为两类:状态标志(CF、PF、AF、8086/8088 CPU 总线接口单 元BIU(完成 取指令和存 取数据) 执行单元EU (负责分析 指令和执行 指令) 段寄存器(CS、SS、DS、ES) 指令指针寄存器IP 地址加法器 指令队列 内部控制逻辑 输入/输出控制电路 算术逻辑单元ALU 寄存器组 标志寄存器FR 暂存器 AX BX CX DX 通用寄存器 专用寄存器

汇编语言基础练习题目

一、填空 1.在8086/8088的计算机中,存储单元的20位物理地址由两部分组成,即16 位的段地址和16位的偏移地址,物理地址= 段地址×10H+偏移量。 2.段的起始地址必须是某小段的首地址,它能被 10H 整除。 3.已知01020H字单元的内容为6A58H,请分别写出它的两个字节单元的地址和内容:(01020H)=58H,(01021H)=6AH。 4.指令执行后,若标志寄存器的ZF=0,则表示结果不为0;若SF=0,则表示结果的符号是正号,即结果为正数。 5.控制器从存储器取出一条指令后,指令指针寄存器IP的内容是将要执行的下一条指令开始的偏移地址。 6.段地址和偏移地址为1000:127B的存储单元的物理地址是 1127BH。 解:由物理地址= 段地址×10H+偏移量的公式可得 物理地址=1000H×10H+127BH=10000H+127BH=1127BH。 二、选择 1.与CS寄存器组合才能形成代码段的物理地址的寄存器是( C )。 A.SP寄存器 B.BP寄存器 C.IP寄存器 D.BX寄存器 2.如果存储器分段时,一个段最多允许16K个字单元,那么表示该段内偏移地址的二进制数至少是( A )。 A.15位 B.16位 C.17位 D.18位 解:16K个字单元,即为32K个字节单元。由于2的15次方为32K,因此至少需要15位二进制数才能表示16K个字单元。 3.已知一数据段的段地址是0100H,这个段的第6个字单元的物理地址是( B )。 A.01010H B.0100AH C.01012H D.01006H 解:由于一个字单元占用两个字节,第一个字单元的偏移地址为0000H,因此第一个字单元的物理地址为01000H。以后每一个字单元的地址在前一个的基

汇编语言部分知识点整理

8大通用寄存器: EAX累加器常用、放数据 EBX基址寄存器常用、放地址 ECX计数器少用、多用于循环操作、控制循环次数egloop EDX数据寄存器常用!放数据(要输出的字符串地址放在DX、字符的ASCII码放在DL里ESI 源变址寄存器放源操作数(数组或字符串)的地址即指向他 EDI目的变址寄存器放目的操作数(数组/字符串)的地址即指向他 EBP 基址指针寄存器一般不用,指向堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变量 ESP堆栈指针寄存器指向栈顶的数据,在涉及堆栈操作的指令中自加自减,一般不能自主变化。 6大段寄存器: CS 代码段,存放程序中的指令代码 SS 堆栈段,指明程序使用的堆栈区域 DS 数据段,存放当前运行程序所用的数据 ES 附加数据段特别的:专为处理数据串设计的串操作指令必须使用附加数据段作为其目的操作数的存放区域。 FS 附加数据段 GS 附加数据段 另外两个常用寄存器: FLAGS状态寄存器:CF(进位)ZF(零)OF(溢出)PF(奇偶)SF(符号) AF(调整一般不用)(DF IF) IP 16位(EIP 32位)指令指针寄存器,专门用来存放将要执行的指令在主存中的位置。特别的EIP有自动增量功能。一般不能改,不可中断。但可以调整其指令执行顺序实现循环 MASM操作符:对常量、变量、地址等进行操作的关键字。 Eg:+ - * / offset(取得变量的偏移地址) 程序模板: ;example.asm in DOS .model small .486 .stack (可以没有) .data (可以没有) ……;数据定义eg:msg db ‘hello,Sarah!54581415’ .code ;定义代码段 .startup ;程序执行开始,同时设置数据段寄存器DS指向程序的数据段 ……;主程序eg:mov dx,offset msg ……等等 …… …… .exit ;程序执行结束,返回DOS ……;子程序(可以没有) .end ;汇编结束

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言基础试题

第一章基本知识 一、单项选择题(共40分,每题2分) 1.若十进制数为13 2.75,则其十六进制数为(B) A.21.3 B.84.C C.4.6 D.6 2.若[X补]=11111,则其十进制真值为(C) A.-31 B.-15 C.-1 D.31 3.某定点整数64位,含1位符号位,补码表示,则其绝对值最大负数为(A) A.-263 B.-264 C.-(263-1) D.-(263-1) 4.原码乘法是(D) A.用原码表示操作数,然后直接相乘 B.被乘数用原码表示,乘数取绝对值,然后相乘 C.乘数用原码表示,被乘数取绝对值,然后相乘 D.先取操作数绝对值相乘,符号位单独处理 5.在微机系统中分析并控制指令执行的部件是(C) A.寄存器 B.数据寄存器 C.CPU D.EU 6.已知X=76,则[X]补=(B) A.76H B.4CH C.0B4H D.0CCH 7.已知[X]补=80H, 则X=(D) A.80H B.0 C.0FFH D.-80H 8.已知[X]补=98H, 则[X]补/2=(A) A.0CCH B.4CH C.49H D.31H 9.已知X=78,Y=-83则[X+Y]补=(C) A.0F5H B.0A1H C.0FBH D.65H 10.在计算机的CPU中执行算术逻辑运算的部件是(A) A.ALU B.PC C.AL D.AR 11.将125转换成二进制数的结果(A) A.7DH B.7CH C.7EH D.7BH 12.将93H看成一个组合BCD码,其结果是(B) A.10010101 B.10010011 C.10000011 D.10000001 13.能被计算机直接识别的语言是(C) A.C语言 B.汇编语言 C.机器语言 D.面向对象语言

相关文档
最新文档