汇编语言讲义第一章_第1页
汇编语言讲义第一章_第2页
汇编语言讲义第一章_第3页
汇编语言讲义第一章_第4页
汇编语言讲义第一章_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计第一章 汇编语言根底知识1.1计算机系统概述1.2数据表示1.3INTEL80x86系列微处理器1.1计算机系统概述1.1.1计算机的程序设计语言1.1.2计算机的软件1.1.3计算机的硬件1.1.1计算机的程序设计语言计算机的程序设计语言可以分为低级语言和高级语言。低级语言有机器语言和汇编语言。高级语言有C/C++、PASCAL、BASIC等。1.机器语言计算机可以直接识别的是二进制数0和1的代码。机器指令〔Instruction〕就是用二进制编码的指令,一条机器指令控制计算机完成一个操作。指令系统〔InstructionSet〕是指某种处理器所支持的所有指令的集合。机器语言〔MachineLanguage〕就是指令系统及使用它们编写程序的规那么。机器语言程序是计算机唯一能够直接识别并执行的程序。用其他语言编写的程序都要翻译、转换成机器语言程序。机器语言程序常称为目标程序〔或目的程序〕。机器指令一般由操作码〔Opcode〕和操作数〔Operand〕组成。操作码说明处理器要进行的操作;操作数说明参加操作的数据对象。2.汇编语言汇编语言是一种符号语言,用助记符表示操作码,用易于记忆的符号表示操作数。助记符一般是说明指令功能的英语单词或其缩写。汇编格式指令就是用助记符表示的指令。汇编语言〔AssemblyLanguage〕是指汇编格式指令集以及使用它们编写程序的规那么。用汇编语言编写的程序就是汇编语言程序,或称汇编语言源程序。汇编语言源程序要由汇编程序对其进行“汇编〞,转换成机器语言程序才能由处理器执行。二者不同3.高级语言〔High-levelProgrammingLanguage〕高级语言比较接近于人类的自然语言,与具体的计算机硬件无关。用高级语言编写的源程序需要经过编译或解释程序的翻译,才可转换为机器语言程序。编译程序:现把高级语言程序翻译成机器语言程序〔或先翻译成汇编语言程序,然后再由汇编程序再次翻译成机器语言程序〕,然后再在机器上执行。解释程序:直接把高级语言程序在机器上运行,一边解释一边执行。实现100与256相加机器指令B86400050001A30020汇编指令MOVAX,100 ADDAX,256MOV[2000H],AX高级语言表达:100+256汇编语言与高级语言的特点汇编语言:与处理器密切相关;通用性、可移植性较差。〔缺点〕功能有限,涉及到硬件细节,编写程序比较繁琐,调试起来比较困难。〔缺点〕汇编指令与机器指令一一对应,可以直接有效地控制计算机硬件,可以产生运行速度快、指令序列短小的高效率目标程序。〔优点〕高级语言:与具体计算机无关,可在多种计算机上编译后运行。功能强大,不必关心琐碎问题,采用类似自然语言的语法,易于掌握和应用。不易直接控制计算机的硬件操作,产生的目标程序较庞大、运行速度较慢。混合编程 取长补短汇编语言的主要应用场合汇编语言的大局部语句直接对应着机器指令,执行速度快,效率高,代码体积小,在那些存储器容量有限,但需要快速和实时响应的场合比较有用,比方仪器仪表和工业控制设备中。在系统程序的核心局部,以及与系统硬件频繁打交道的局部,可以使用汇编语言。比方操作系统的核心程序段、I/O接口电路的初始化程序、外部设备的低层驱动程序,以及频繁调用的子程序、动态连接库、某些高级绘图程序、视频游戏程序等。汇编语言可以用于软件的加密和解密、计算机病毒的分析和防治,以及程序的调试和错误分析等各个方面。1.1.2计算机的软件一个完整的计算机系统分为硬件和软件两大局部。硬件〔Hardware〕是计算机系统的机器局部,是计算机工作的物质根底。软件〔Software〕是为了运行、管理和维护计算机而编制的各种程序的总和,广义的软件还应该包括与程序有关的文档。软件可以分为系统软件和应用软件。见图1.1计算机软件层次图。后一页图1.1计算机软件层次图操作系统常驻监督程序系统程序库装入程序连接程序翻译程序文本编辑程序调试程序驱动程序文件管理程序I/O用户程序 用户程序库系统软件 用户软件返回1.系统软件系统软件是指为了方便使用、维护和管理计算机系统而编制的一类软件及其文档。操作系统〔operatingsystem〕是系统软件的核心。操作系统是系统程序的集合。它负责管理系统的软硬件资源,向用户提供方便、有效和可靠的工作环境。操作系统的主要局部是常驻内存监督程序〔monitor〕,只要一开机它就存在于内存中,它可以从用户接收命令,并使操作系统执行相应的动作。I/O驱动程序〔I/Odriver〕用来对I/O设备进行控制或管理。文件管理程序〔filemanagement〕用来处理存储在外存中的大量信息,对其中的信息以文件〔file〕的形式进行存取、复制及其他操作。文本编辑程序〔texteditor〕用来建立、输入或修改文本,并使它存入内存或大容量存储器中。翻译程序〔translator〕:系统程序中的翻译程序包括汇编程序、解释程序和编译程序。连接程序〔linker〕用来把要执行的程序与库文件或其他已经翻译好的子程序〔能完成独立功能的程序模块〕连接在一起,形成机器能执行的程序。装入程序〔loader〕用来把程序从外存传送到内存,以便机器执行。调试程序〔debug〕是系统提供给用户的能监督和控制用户程序的一种工具。系统程序库〔systerlibrary〕和用户程序库〔userlibrary〕,各种标准程序、子程序和一些文件的集合称为程序库,它可以被系统程序或用户程序调用。2.应用软件应用软件是解决某一问题的程序及其文档。返回进行汇编语言程序设计所需要的软件系统软件DOS平台Windows的虚拟MS-DOS环境应用软件文本编辑器:用来录入、修改源程序。常用的有:DOS的EDIT全屏幕编辑器;Windows的Notepad计事本;程序开发系统中的程序编辑器,例如你熟悉的TurboC编辑器;MASM集成开发环境PWB的编辑器。汇编程序:将汇编源程序翻译成目标程序。微机的汇编程序有多种版本,如MASM、NASM、MASM、AT&T等。连接程序LINK.EXE:将目标程序转换成可执行程序。调试程序:进行程序排错。常用的有:DOS的DEBUG程序;MASM的CodeView;TurboDebugger等。集编辑、汇编、连接和调试为一体的综合开发环境。如MASM的程序员平台PWB。集编辑器、汇编/反汇编、运行debug的软件模拟工具〔虚拟PC〕EMU8086。源程序可执行文件目标模块文本编辑器汇编程序连接程序调试程序1.1.3计算机的硬件计算机的硬件分为五大组成局部:运算器、控制器、存储器、输入设备和输出设备。〔如下图〕运算器和控制器是计算机的核心,合成中央处理单元CPU〔CentralProcessingUnit〕或处理机、处理器〔Processor〕。输入设备和输出设备往往通称为外部设备〔Peripheral〕,简称外设或I/O设备。在微型计算机中,CPU由一个大规模集成电路芯片构成,被称为微处理器〔Microprocessor〕。后一页微型计算机的系统组成I/O接口主存储器系统总线CPU寄存器控制器运算器辅助存储器输入设备输出设备1.中央处理单元运算器执行所有的算术和逻辑运算。控制器负责把指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令。CPU内部还有一些高速存储单元,称为存放器〔Register〕。它们为处理单元提供各种操作所需的数据。2.存储器〔Memory〕存储器是计算机的记忆部件。它用来存放程序以及程序中所涉及的数据。按所在位置,存储器可以分为主存储器〔主存、内存〕和辅助存储器〔辅存、外存〕。〔二者区别〕按读写能力,存储器可以分为随机存储器RAM〔读写存储器〕和只读存储器ROM。〔二者区别〕存储器地址〔Address〕、存储器容量。主存与存放器的区别。3.外部设备外部设备是实现人机交互和机间通信的一些机电设备。输入设备用来接受用户输入的原始数据和程序,并将它们转化为计算机可识别的形式存放到内存中。常用的输入设备有键盘、鼠标等。输出设备用来将存放在内存中由计算机处理的结果转变为人们所能接受的形式。常用的输出设备有显示器、打印机等。每个外设必须通过输入输出接口电路〔I/O接口〕与系统连接。程序员所见的I/O接口由一组存放器组成。一般说来,这些存放器有三种不同的用途:数据存放器:用来存放要在外设和主机间传送的数据,实际起了缓冲器的作用。状态存放器:用来保存外设或接口的状态信息,以便CPU在必要时检测外设的状态,了解外设的工作情况。命令存放器:又称控制存放器,CPU给外设或接口的控制命令通过此存放器送给外设。各种外部设备都有以上三种类型的存放器,只是每个接口所配备的存放器数量是根据设备的需要确定的。为了区别这些存放器,各个存放器进行了编号,形成I/O地址,通常被称作I/O端口〔Port〕。这样就组成了一个独立于内存储器的I/O地址空间。实际上,系统就是通过这些端口与外设进行通信的。4.系统总线系统总线把CPU、存储器和I/O设备连接起来,用来传送各局部之间的信息。系统总线包括数据线、地址线和控制线三组。数据线:双向的,用来传送信息。地址线:单向的,用来指出信息的来源和目的地。控制线:双向的,用来规定总线的动作,如方向等。系统总线的工作由总线控制逻辑负责指挥。返回主存与辅存的主要区别主存:用于存放当前正在执行的程序和使用的数据;CPU可以直接存取。由半导体芯片构成,其本钱高、容量小、速度快。辅存:用于长期保存大量程序和数据;CPU要通过I/O接口访问。由磁盘或光盘构成,其本钱低、容量大、速度较慢。目录返回RAM和ROM的主要区别RAM:RAM可以按地址随机读写。断电后不能保存信息。ROM:其中的信息只能被读出。断电后仍能保存信息。目录返回存储器地址、存储容量存储器由大量存储单元组成。为了区别每个单元,对它们进行编号,每个存储单元就有了一个惟一的存储器地址〔Address〕。每个存储单元存放一个字节的数据,一个字节B〔Byte〕包含了8个二进制位b〔bit〕。存储容量是指存储器所具有的存储单元个数,其根本单位是字节B。常用的单位是KB〔千字节〕,MB〔兆字节〕,GB〔吉字节〕,TB〔太字节〕。1KB=210B=1024B,1MB=210KB=220B,1GB=210MB=230B,1TB=210GB=240B。目录返回主存与存放器的区别共同点:存放二进制信息不同点:位置:存放器在CPU;主存在CPU外部。访问方式:对存放器按名访问;对主存按地址访问。目录返回1.2数据表示1.2.1进位计数制1.2.2数制之间的转换1.2.3编码1.2.4有符号数的表示法1.2.5无符号整数1.2.1进位计数制在采用进位计数制的系统中,如果只用r个根本符号〔0,1,2,……,r-1〕表示数值,那么称其为基r数制,r称为该数制的基数,而数制中每一个固定位置对应的单位值称为“权〞。规那么为“逢r进一〞。习惯上常用的是十进制计数。一个任意的十进制数可以表示为: anan-1…a0.b1b2…bm其含意是: an×10n+an-1*10n-1+…+a0*100+b1*10-1+b2*10-2+…bm*10-m其中ai〔i=0,1,…,n〕,bj〔j=1,2,…,m〕是0,1,2,3,4,5,6,7,8,9十个数码中的一个。十进制的基数为10,且遵循逢十进一的规那么。上式中对应于每位数字的10k称为该位数字的权,所以每位数字乘以其权所得到的乘积之和即为所表示数的值。例如:1234.56=1×103+2×102+3×101+4×100+5×10-1+6×10-2计算机中为了便于存储及计算的物理实现,采用了二进制数。二进制数的特点为:基数为2,只有0,1两个数码,各个位权以2k表示,遵循逢二进一的规那么。二进制数anan-1…a0.b1b2…bm可以表示为: an×2n+an-1*2n-1+…+a0*20+b1*2-1+b2*2-2+…bm*2-m其中ai,bj非0即1。例如:1011.011=1×23+0×22+1×21+1×20+0×2-1+1×2-2+1×2-3为了便于表示二进制数,人们又常用到十六进制数,另外还有八进制数。几种常用进位计数制特点十进制(Decimal)二进制(Bianry)八进制(Octal)十六进制(Hexadecimal)基数r102816基本符号0,1,2,3,4,5,6,7,8,90,10,1,2,3,4,5,6,70,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(a∼f)权10k2k8k16k规则逢十进一逢二进一逢八进一逢十六进一后缀D或d或缺省B或b字母O或oH或h1.2.2数制之间的转换二进制、八进制、十六进制数转换成十进制数任意数anan-1…a0.b1b2…bm=an×rn+an-1*rn-1+…+a0*r0+b1*r-1+b2*r-2+…bm*r-m=对应的十进制数其中r为2、8或16。例如:1011.011B=1×23+0×22+1×21+1×20+1×2-1+1×2-2+1×2-3=11.875D〔37〕8=3×81+7×80=〔31〕103ABH=3×162+10×161+11×160=839D十进制数转换成二进制、八进制、十六进制数十进制数的整数局部采用除r〔=2,8,16〕取余法:把要转换的十进制数的整数局部不断地除以二进制、八进制或十六进制数的基数2,8或16,并记下余数,直到商为0为止。第一次取得的余数为转换后整数局部的最低位。十进制数的小数局部采用乘r〔=2,8,16〕取整法:把要转换的十进制数的小数局部不断乘以二进制、八进制或十六进制数的基数2、8或16,并记下整数局部,直到结果的小数局部为0为止,或直到达所要求的精度为止。首次取得的整数局部为转换后小数局部的最高位。后一页例子例子例1.3: 117D=1110101B,转换过程:

117/2=58 (a0=1) 58/2=29 (a1=0) 29/2=14 (a2=1) 14/2=7 (a3=0) 7/2=3 (a4=1) 3/2=1 (a5=1) 1/2=1 (a6=1)进制间的转换目录例1.9: 48956D=BF3CH,转换过程为: 48956/16=3059 (a0=12) 3059/16=191 (a1=3) 191/16=11 (a2=15) 11/16=0 (a3=11)进制间的转换目录返回例1.4:0.8125D=0.1101B,转换过程为: 0.8125×2=1.625 〔b1=1〕 0.625×2=1.25 〔b2=1〕 0.25×2=0.5 〔b3=0〕 0.5×2=1.0 〔b4=1〕0.8125D=0.DH,转换过程为: 0.8125×16=13.0000 〔b1=13〕进制间的转换目录返回降幂法:首先写出要转换的十进制数,其次写出所有小于此数的各位二进制权值,用要转换的十进制数减去与它最近的二进制权值,如够减那么减去,并在相应位记以1;如不够减那么在相应位记以0并跳过此位;如此不断重复,直到该数为0为止。首先写出要转换的十进制数,其次写出小于该数的十六〔八〕进制权值,然后找出该数中包含多少个最接近它的权值的倍数,这一倍数即对应位的值,用原数减去此倍数与相应位权值的乘积,得到一个差值,再用此差值去找低一位的权值的倍数,如此反复,直到差值为0为止。后一页例子例子例1.1:N=117D,小于N的二进制权为: 64 32 16 8 4 2 1对应的二进制数是: 1 1 1 0 1 0 1计算过程如下: 117-26=117-64=53 〔a6=1〕 53-25=53-32=21 〔a5=1〕 21-24=21-16=5 〔a4=1〕 〔a3=0〕 5-22=5-4=1 〔a2=1〕 〔a1=0〕 1-20=1-1=0 〔a0=1〕进制间的转换例1.2 N=0.8125D,小于此数的二进制权为: 0.5 0.25 0.125 0.0625对应的二进制数是: 1 1 0 1计算过程如下: 0.8125-2-1=0.8125-0.5=0.3125 〔b1=1〕 0.3125-2-2=0.3125-0.25=0.0625 〔b2=1〕 〔b3=0〕 0.0625-2-4=0.0625-0.0625=0 〔b4=1〕 进制间的转换返回例1.8 N=48956D,小于N的十六进制权为: 4096 256 16 1对应的十六进制数是: B F 3 C计算过程如下: 48956-11×4096=48956-11×163=3900 〔a3=11〕 3900-15×256=3900-15×162=60 〔a2=15〕 60-3×16=60-3×161=12 〔a1=3〕 12-12×1=12-12×160=0 〔a0=12〕进制间的转换返回二进制、八进制、十六进制数之间的转换计算机中,存储信息的根本单位为一个二进制位〔Bit〕,但由于常用的字符是采用8位二进制数最成的一个字节〔Bytye〕来表示的。一个字节由8位组成,可以用两个四位组〔又称半字节〕来表示,所以用十六进制数来表示二进制数是比较方便的。二进制和十六〔八〕进制数之间具有对应关系〔见表〕:每四〔三〕个二进制位对应一个十六〔八〕进制位,所以相互转换非常简单。例如: 3AH=00111010B 657O=110101111B二进制数转换为十六〔八〕进制数:以小数点为界,分别向左向右分组,每四〔三〕位一组,不够四〔三〕位,两头补0。每组对应一个十六〔八〕进制位。例如: =35BF.54H转换过程为:

000035B F.54后一页不同进制间与BCD码的对应关系十进制二进制十六进制BCD码0000000100011120010223001133401004450101556011066701117781000889100199101010A111011B121100C131101D141110E151111F返回1.2.3编码在计算机中,各种字符只能用假设干位的二进制码的组合表示,这就称为二进制编码。由于字节为计算机的根本存储单位,所以常用8个二进制位表达1个字符。BCD〔BinaryCodedDecimal〕码一位十进制数可以用四位二进制编码来表示,这就是所谓的BCD码。常用的BCD码是8421BCD码,它用4位二进制编码的低10个表示0~9这十个数字。例:十进制数4978.149的BCD码为:

ASCII码字母和各种字符也必须按特定的规那么用二进制编码才能在计算机中表示。80X86机最常用的一种编码是美国信息交换标准代码ASCII〔AmericanStandardCodeforInformationInterchange〕。标准ASCII码用七位二进制编码,故有128个,如教材所示。微型机存储单位为8位,表达ASCII码时最高D7位通常为0;通信时D7为通常用作奇偶校验位。字符包括:字母:A、B、…Z,a、b、…z;数字:0、1、…、9;专用字符:+、-、*、/、、SP〔space空格〕、…;非打印字符:BEL〔bell响铃〕、LF〔linefeed换行〕、CR〔carriagereturn回车〕、……在PC机中,有时还采用扩展ASCII码,主要表达各种制表用的符号等。扩展ASCII码最高位D7位为1,以与标准ASCII码区别。1.2.4有符号数的表示方法计算机中的数是用二进制来表示的,数的符号也是用二进制表示的。在机器中,把一个数连同其符号在内数值化表示的数称为“机器数〞。与之对应的实际数值称为机器数的“真值〞。机器数,一般用最高有效位来表示数的符号,正数用0表示,负数用1表示。常用的有原码、反码和补码表示法。1.原码最高有效位表示符号〔正数为0,负数为1〕,其他位直接表示数值大小。2.反码正数的反码与原码相同,最高符号位用0表示,其余位为数值位。而负数的反码那么为它的正数的各位〔包括符号位〕按位取反而形成的;即0变1,1变0。3.补码正数的补码与原码相同,即最高有效位用0表示,其余位为数值位。而负数的补码那么为它的反码,在最低有效位〔即D0位〕加1所形成。后一页例子例子例子例如:有符号数X的原码表示如机器字长为8位 X=105=01101001B, [X]原=01101001B=69H X=-105, [X]原=11101001B=E9H如机器字长为16位,那么 X=105=0000000001101001B, [X]原=0000000001101001B=0069H X=-105, [X]原=1000000001101001B=8069H原码表示返回例如:有符号数X的反码表示如机器字长为8位 X=105=01101001B, [X]反=01101001B=69H X=-105, [X]反=10010110B=96H如机器字长为16位,那么 X=105=0000000001101001B, [X]反=0000000001101001B=0069H X=-105, [X]反=1111111110010110B=FF96H反码表示返回例如:有符号数X的补码表示如机器字长为8位 X=105=01101001B, [X]补=01101001B=69H X=-105, [X]补=10010111B=97H如机器字长为16位,那么 X=105=0000000001101001B, [X]补=0000000001101001B=0069H X=-105, [X]补=1111111110010111B=FF97H补码表示返回数值0,在原码和反码中有+0和-0两种表示方法。 如机器字长为8位,那么 [+0]原=00000000B [-0]原=10000000B [+0]反=00000000B [-0]反=11111111BN位二进制原码和反码所能表示的数值范围为+2N-1-1~-(2N-1-1)。即当N=8时,所表示的数值范围为+127~-127;当N=16时,所表示的数值范围为+65535~-65535。用补码表示数时的符号扩展问题所谓符号扩展是指一个数从位数较少扩展到位数较多〔如从8位扩展到16位,

温馨提示

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

评论

0/150

提交评论