汇编语言基础知识_第1页
汇编语言基础知识_第2页
汇编语言基础知识_第3页
汇编语言基础知识_第4页
汇编语言基础知识_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章汇编语言根底知识1.1汇编语言概述1.2进位计数制及其转换1.3计算机中数与字符的表示方法习题11.1汇编语言概述1.1.1汇编语言的根本概念汇编语言是机器语言的符号表示形式。在汇编语言出现之前,计算机使用机器语言来控制计算机的各种动作。所谓机器语言,就是用“0〞和“1〞所组成的一串二进制数所表示的命令或数据,机器的硬件可以直接识别和执行,不需要进行翻译。机器语言的特点是命令代码效率高,但不容易记忆,不利于推广和使用;程序员借助机器语言编程时,要用数值表示指令和地址,不但费时费力,而且容易出错。汇编语言将机器语言指令和地址符号化,程序员只需要记住符号名并用其编程,汇编器负责把汇编程序翻译成机器指令和正确的地址数值。大多数程序应该也可以用高级语言编写,但是在某些情况下汇编语言也是必不可少的。汇编语言可以访问计算机的所有指令,可以利用计算机的所有特性,而高级语言就没有这样的能力,高级语言能做的事情汇编语言都能做,而汇编语言能做的高级语言不一定能做到。例如,如果计算机有一个溢出位,汇编程序可以测试它,而一个JAVA程序就不能直接测试溢出位。汇编语言可以直接访问存放器,而高级语言那么不一定能访问。1.1.2汇编语言的特点汇编语言相对机器语言而言好记好用,但远不如高级语言方便、实用,而且编写同样的程序,使用汇编语言比使用高级语言花费的时间更多,调试和维护更困难。既然如此,为什么还要使用汇编语言呢?主要有两个原因:性能和对计算机的完全控制。一般而言,汇编语言具有如下特点:1)执行速度快一个汇编语言程序,要比高级语言程序执行得更快。程序的执行速度对于某些应用来说是至关重要的。对于这些应用,单纯使用高级语言往往达不到要求,单纯使用汇编语言编写程序也并不是最好的方案,许多成功的大型应用程序往往使用的是混合编程。首先使用高级语言编写整个程序,然后测试程序的执行时间,再使用汇编语言重写其中最费时间的局部。这样做的依据是在实际使用中,通常程序的大局部执行时间都花费在一小局部代码上。2)程序短小一个汇编语言程序,要比高级语言程序更小。在某些情况下,设备中的嵌入式处理器往往只有很少的内存,使用汇编语言可能是惟一的方法。如智能卡中有CPU,但是智能卡中很难有1 MB以上的内存,也不可能有带分页的硬盘,但智能卡又必须执行复杂的加密解密计算。个人数字助理〔PDA〕和其他使用电池作为能源的无线电子设备,为了节省电池的电力,往往也只有很少的内存,它们也需要使用短小精悍而且具有高效率的机器代码。3)可以直接控制硬件某些应用程序要求能够完全控制计算机硬件,这也必须使用汇编语言。如操作系统中的低级中断和陷阱处理程序,以及许多嵌入式实时系统中的设备控制程序都属于这一类应用。4)可以方便地编译编译器可以产生供编程者使用的汇编程序或者自己执行汇编过程。因此,为了理解编译器的工作原理,必须首先理解汇编语言。5)辅助计算机工作者掌握计算机体系结构研究汇编语言可以使人们清楚实际计算机结构。特别是对于学习计算机体系结构的学生,编写汇编语言是在结构层理解计算机的惟一途径。计算机的程序设计语言1.机器语言低级语言2.汇编语言程序设计语言3.高级语言C/C++、JAVA、 DELPHI……1.1机器语言机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。1.1机器语言指令:01010000(PUSHAX)电平脉冲:

1.1机器语言程序员们将0、1数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。例如应用8086CPU完成运算:S=768+12288–12801.1机器语言S=768+12288-1280机器码:

假设将程序错写成以下这样,请找处错误:

1.1机器语言在显示器上输出“welcometomasm〞。机器码看到这样的程序,你会有什么感想?如果程序里有一个“1〞被误写为“0〞,又如何去查找呢?1.2汇编语言的产生汇编语言的主体是汇编指令。汇编指令和机器指令的差异在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。汇编指令是机器指令的助记符。1.2汇编语言的产生机器指令:操作:存放器BX的内容送到AX中汇编指令:MOVAX,BX这样的写法与人类语言接近,便于阅读和记忆。存放器存放器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个存放器。AX是其中一个存放器的代号,BX是另一个存放器的代号。更详细的内容我们在以后的课程中将会讲到。1.2汇编语言的产生计算机能读懂的只有机器指令,那么如何让计算机执行程序员用汇编指令编写的程序呢?用汇编语言编写程序的工作过程1.3汇编语言的组成汇编语言由以下3类组成:1、汇编指令〔机器码的助记符〕2、伪指令〔由编译器执行〕3、其它符号〔由编译器识别〕汇编语言的核心是汇编指令,它决定了汇编语言的特性。3.高级语言机器语言和汇编语言以外的程序设计语言统称高级语言。其特点是更加接近自然语言和惯用的数学表达形式,与计算机硬件结构无关,因而便于使用,便于交流和推广。总之,高级语言编程效率高,但运行效率低。高级语言可分成编译型和解释型高级语言,分别使用编译程序和解释程序将源程序翻译成机器语言程序,然后交计算机执行。1.2进位计数制及其转换计算机内部的信息分为两大类:控制信息和数据信息。控制信息是一系列的控制命令,用于指挥计算机如何操作;数据信息是计算机操作的对象,一般又可分为数值数据和非数值数据。数值数据用于表示数量的大小,它有确定的数值;非数值数据没有确定的数值,它主要包括字符、汉字和逻辑数据等等。1.2.1计算机中的数据1.计算机中数的单位1〕位(bit):计算机最小的数据单位,用缩写b来表示。2〕字节(Byte):一个字节为8位,即1B=8bit,它是存储空间的根本计量单位。3〕字:通常由一个或假设干个字节组成。4〕数据的换算关系1Byte=8bit1KB=1024B1MB=1024KB1GB=1024MB2.进位计数制在计算机中,二进制并不符合人们的习惯,但是计算机内部却采用二进制表示信息,其主要原因有如下四点:电路简单:逻辑电路的通、断只有两个状态。工作可靠简化运算逻辑性强:正好代表逻辑代数中的“真〞与“假〞1.4.2计算机中常用的几种计数制在计算机的数制中,要掌握3个概念,即数码、基数和位权。数码:一个数制中表示根本数值大小的不同数字符号。 八进制有8个数码:0、1、2、3、4、5、6、7。基数:一个数值所使用数码的个数。 八进制的基数为8。位权:一个数值中某一位上的1所表示数值的大小。 八进制的123,1的位权是64,2的位权是8,3的位权是1。1.十进制〔Decimalnotation〕十进制的特点如下:有10个数码:0、1、2、3、4、5、6、7、8、9基数:10逢十进一〔加法运算〕,借一当十〔减法运算〕按权展开式例:将十进制数456.24写成按权展开式形式为:2.二进制〔Binarynotation〕二进制有如下特点:有两个数码:0、1。基数为:2。逢二进一〔加法运算〕,借一当二〔减法运算〕。按权展开式。例如:把写成展开式,它表示的十进制数为:3.八进制〔Octalnotation〕八进制的特点如下:有8个数码:0、1、2、3、4、5、6、7基数为:8逢八进一〔加法运算〕,借一当八〔减法运算〕按权展开式例如:相当于十进制数为:4.十六进制〔Hexadecimalnotation〕十六进制有如下特点:有16个数码:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。基数:16。逢十六进一〔加法运算〕,减一当十六〔减法运算〕。按权展开式。例如:十六进制数代表的十进制数为:

选择题:以下四个选项中,哪个不是七进制数A.256B.332 C.347 D.123同理,任意一个二进制数、八进制数和十六进制数也可用位权表示。例如:(101.11)2=1×22+0×21+1×20+1×2−1+1×2−2(124.36)8=1×82+2×81+4×80+3×8−1+6×8−2(AC.B5)16=A×161+C×160+B×16−1+5×16−2据上述概念,可推广出表示任意进制数的通式:

表1-1几种常用进制之间的对照关系十进制二进制八进制十六进制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F1.4.3常用计数制之间的转换1.X〔X=2、8、16进制数→十进制数〕二进制数→十进制数:以2为基数按权展开并相加八进制数→十进制数:以8为基数按权展开并相加。十六进制数→十进制数:以16为基数按权展开并相加。

2.十进制转换为二进制数1〕整数局部的转换整数局部的转换采用的是除2取余法。2〕小数局部的转换小数局部的转换采用乘2取整法。十进制转换成二进制除2取余法1252152312622723212余数10111101(125)10=(1111101)2例:将十进制数〔0.534〕10转换成相应的二进制数。结果为:〔0.534〕10=〔0.10001〕2十进制转换成八进制除8取余法125818158余数5710(125)10=(175)8十进制转换成十六进制除16取余法30016余数12(C)(300)10=(12C)1618162116013.八进制与二进制数之间的转换1〕八进制转换为二进制数八进制数转换成二进制数所使用的转换原那么是“一位拆三位〞,即把一位八进制数对应于三位二进制数,然后按顺序连接即可。2〕二进制数转换成八进制数二进制数转换成八进制数可概括为“三位并一位〞,即从小数点开始向左右两边以每三位为一组,缺乏三位时补0,然后每组改成等值的一位八进制数即可。

“一位拆三位〞“三位并一位〞4.二进制数与十六进制数的相互转换1〕二进制数转换成十六进制数二进制数转换成十六进制数的转换原那么是:“四位并一位〞,即以小数点为界,整数局部从右向左每4位为一组,假设最后一组缺乏4位,那么在最高位前面添0补足4位,然后从左边第一组起,将每组中的二进制数按权数相加得到对应的十六进制数,并依次写出即可;小数局部从左向右每4位为一组,最后一组缺乏4位时,尾部用0补足4位,然后按顺序写出每组二进制数对应的十六进制数。2〕十六进制数转换成二进制数十六进制数转换成二进制数的转换原那么是:“一位拆四位〞,即把1位十六进制数写成对应的4位二进制数,然后按顺序连接即可。

“四位并一位〞“一位拆四位〞(10101.11)2转换成十进制(10101.11)2=1X24+0X23+1X22+0X21+1X20+1X2-1+1X2-2

=16+0+4+0+1+0.5+0.25

=21.75(100101)2分别转换成八进制和十六进制转换成八进制:100101=100101=(45)8转换成十六进制:100101=00100101=(25)16(10101.11)2=1X24+0X23+1X22+0X21+1X20+1X2-1+1X2-2

=16+0+4+0+1+0.5+0.25

=21.75100101=100101=(45)8100101=00100101=(25)16由以上方法可以看出,(25)10=(11001)2=(19)16=(31)8,(0.5)10=(0.1)2=(0.8)16=(0.4)8。在计算机里,通常用数字后面跟一个英文字母来表示该数的数制。十进制数一般用D(Decimal)、二进制数用B(Binary)、八进制数用O(Octal)、十六进制数用H(Hexadecimal)来表示。由于英文字母O容易和零误会,所以也可以用Q来表示八进制。另外,计算机操作中一般默认使用十进制,所以十进制数可以不标进制。1.3计算机中数与字符的表示方法1.3.1数值数据的编码及其运算1.二进制数的编码及运算我们很容易想到,数据的正负号可用一位二进制的0和1两个状态来表示,这样,二进制数值数据在计算机中就能方便表示了。为了尽可能地简化对二进制数值数据进行算术运算用到的规那么,机器将二进制数值数据进行编码表示。计算机中的数采用二进制数,字母、符号等也只能采用二进制代码〔0,1〕的排列组合表示〔编码〕。(两种编码:BCD码、ASCII码〕1.BCD码〔8421码、二──十进制数〕解决十进制数在计算机内部如何表示。BCD码规定用四位二进制数表示一位十进制数。对多位十进制数,只要把每一位十进制数分别表示为四位二进制数即可。十进制BCD码00000100012001030011401005010160110701118100091001十进制BCD码

28001010009561001010101101.3计算机中数与字符的表示方法2.ASCII码2.ASCII码解决字母、符号在计算机内部如何表示。根本ASCII码〔标准ASCII码〕用七位二进制数表示一个符号〔共128个〕;书写:用两位十六进制数书写,如41H----A;种类:1〕控制字符〔前32个和最后一个〕:0D---回车,0A---换行;2〕其他为打印字符〔可显示字符〕;应记住的ASCII码:30H~39H,41H,61H扩展ASCII码用八位二进制数表示一个符号〔共256个〕。机器数:带符号的二进制数值数据在计算机内部的编码。真值:机器数所代表的实际值。一般机器数的最高有效位用来表示数的正负符号,0表示正数,1表示负数。1.3.1有符号数表示方法例如:要表示127和-127,计算机中可以采取编码为:01111111和11111111那么127和-127是真值〔实际的值〕01111111和11111111是机器数1.3.1有符号数表示方法0.无符号数、有符号数、机器数、真值1.原码正数原码:符号位为0,数值位照抄。负数原码:符号位为1,数值位照抄。例:X=+25=+00011001B[X]原=00011001BX=-25=-00011001B[X]原=10011001B2.反码正数反码:符号位为0,数值位照抄。负数反码:符号位为1,数值位取反。例:X=+25=+00011001B[X]反=00011001BX=-25=-00011001B[X]反=11100110B原码和反码表数范围相同,都是-127~+127。3.补码3.补码为了将减法运算变成加法来做,有符号数在计算机内一律采用补码表示。正数补码:符号位为0,数值位照抄。负数补码:符号位为1,数值位取反加一。例:X=+25=+00011001B[X]补=00011001BX=-25=-00011001B[X]反=11100110B[X]补=11100111B

下面是原码、反码和补码的小结。原码、反码、补码总结:1〕正数的原码反码补码相同;负数的原码反码补码各不相同,但符号位都是1。2〕设字长为八位,原码反码的表示范围为

-127~+127,补码的表数范围为-128~+127。3〕某负数的补码,求该负数的真值,方法如下:①符号位不动,其余位求反加一,得到的是该负数的原码;②根据原码即可写出该负数的真值。例:[X]补=11111100B[X]原=10000011B+1=10000100BX=-0000100=-4二进制数补码的运算补码的运算规那么:[X+Y]补=[X]补+[Y]补[X−Y]补=[X]补+[−Y]补[Y]补求[−Y]补的方法:将[Y]补各位按位取反(包括符号位),末位加1。【例1-19】二进制数补码的运算规那么证明举例。设 X1=+0001100 X2=−0001100Y1=+0000101 Y2=−0000101那么 [X1]补=0 0001100 [X2]补=1 1110100 [Y1]补=0 0000101 [Y2]补=1 1111011①计算X1+Y1。 +0001100 X1 +〕 +0000101 Y1 +0010001 X1+Y1[X1+Y1]补= 00010001 00001100 [X1]补+〕00000101 [Y1]补 00010001 [X1]补+[Y1]补因为[X1+Y1]补= [00010001]补=[X1]补+[Y1]补所以[X1+Y1]补=[X1]补+[Y1]补②计算X1−Y1 +0001100 X1 -〕 +0000101 Y1 +0000111 X1−Y1 00001100 [X1]补+〕 11111011 [−Y1]补100000111 [X1]补+[−Y1]补因为[X1−Y1]补=[00000111]补=[X1]补+[−Y1]补所以[X1−Y1]补=[X1]补+[−Y1]补4.用补码作减法〔补充讲义〕我们用实例说明计算机在执行减法指令时,是如何把减法变成加法来做的〔设字长为8位〕。例1:(+5)-(+4)即(+00000101〕-〔+00000100〕①机器中+5和+4都用补码表示。②对减数求补(求反加一〕,得到〔-4〕的补码:11111100③〔+5〕的补码加〔-4〕的补码:00000101+11111100 ——————————100000001④将结果00000001看作补码,其真值即为+1。进位被自动舍弃例2(+5)-(-4)即(+0000101)-(-0000100〕①机器中+5和-4都用补码表示。(-4)补=11111100②对减数求补,得到的是+4的补码:00000100③将+5的补码加+4的补码00000101+00000100——————————00001001④将结果看成补码,其真值即为正确结果+9。例3:〔-5〕-〔+4〕和〔-5〕-〔-4〕步骤同上。总之:①被减数和减数都用补码表示;

②机器对减数先求补,而后做加;

③将计算结果看作补码。由此可看出,计算机引入了补码编码后,带来了以下几个优点:减法转化成了加法:这样大大简化了运算器硬件电路的设计,加减法可用同一硬件电路进行处理。运算时,符号位与数值位同等对待,都按二进制数参加运算;符号位产生的进位丢掉不管,其结果是正确的。这大大简化了运算规那么。二进制运算〔含十六进制运算〕1.算术运算与十进制运算相同,只不过是逢2进1,借1当2。 加法 减法 乘法0+0=0 0‐0=0 0×0=00+1=10‐1=1 0×1=01+0=1 1‐0=1 1×0=01+1=10 1‐1=0 1×1=12.十六进制算术运算:与十进制运算相同,但①逢16进1,借1当16;②注意运算结果如为A,B,C,D,E,F,不能写成10,11,12,13,14,15。例1:计算85AH+924H85A+924————

117E例2:计算800H‐1800‐001————7FF不可以写成14逢16进13.逻辑数据的编码逻辑数据是用来表示“是〞与“否〞,或称“真〞与“假〞两个状态的数据。在计算机中,用“1〞表示“真〞或“是〞,用“0〞表示“假〞或“否〞。需要注意的是,这里的1和0没有数值和大小概念,只有逻辑意义。对逻辑数据只能进行逻辑运算,例如逻辑非、逻辑加、逻辑乘等根本逻辑运算和由根本逻辑运算构成的各种组合逻辑运算,运算结果仍是逻辑数据。下面介绍一下根本逻辑运算的运算规那么。3.逻辑运算与运算〔AND;∧〕:1∧0=0 1∧1=1 0∧0=0 0∧1=0或运算〔OR;∨〕:1∨0=1 1∨1=1 0∨0=0 0∨1=1非运算〔NOT;~或—〕:~0=1 〔0=1〕 ~1=0〔1=0〕异或运算〔XOR;⊕〕1⊕0=1 1⊕1=0 0⊕0=0 0⊕1=1注意:逻辑运算是按位运算。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论