计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识18086/8088和ARM核汇编语言程序设计第1章汇编语言基础知识计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识21.1汇编语言概述1.2进位计数制及其转换1.3计算机中数和字符的表示方法第1章汇编语言基础知识计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识3自然语言是具有特定语音和语法等规范的、用于人类表达思想并实现相互交流的工具。人与人之间只有使用同一种语言才能进行直接交流,否则就必须通过翻译。要使计算机为人类服务,人们就必须借助某种工具,告诉计算机“做什么”甚至“怎么做”,这种工具就是程序设计语言。程序设计语言通常分为三类:机器语言、汇编语言和高级语言。而前两种语言与机器密切相关,统称为低级语言。1.1.1汇编语言基本概念1.1汇编语言概述计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识4计算机语言的发展机器语言FORTRANBASICCOBOLPASCALC/C++JAVA...汇编语言高级语言1.1汇编语言概述1.1.1汇编语言基本概念计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识5计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。•用机器语言编写的程序是计算机惟一能够直接识别并执行的程序,而用其他语言编写的程序必须经过翻译才能变换成机器语言程序,所以,机器语言程序被称为目标程序。机器语言1.1汇编语言概述1.1.1汇编语言基本概念计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识6为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。所以汇编语言是一种用符号书写的、基本操作与机器指令相对应的、并遵循一定语法规则的计算机语言。用汇编语言编写的程序称为汇编源程序。汇编语言是一种符号语言,比机器语言容易理解和掌握,也容易调试和维护。但是,汇编语言源程序要翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为“汇编”,这种把汇编源程序翻译成目标程序的语言加工程序称为汇编程序。汇编语言1.1汇编语言概述1.1.1汇编语言基本概念计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识7例如,在8086机器下,分别用汇编语言和机器语言计算10+20的程序代码如下:汇编语言机器语言MOVAL,10B00AADDAL,200414显然,使用汇编语言编写的程序要比机器语言更容易理解。1.1汇编语言概述1.1.1汇编语言基本概念计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识8汇编语言虽然较机器语言直观,但仍然烦琐难懂。于是人们研制出了高级程序设计语言。高级程序设计语言接近于人类自然语言的语法习惯,与计算机硬件无关,易被用户掌握和使用。目前广泛应用的高级语言有多种,如BASIC、FORTRAN、PASCAL、C、C++等等。高级语言1.1汇编语言概述1.1.1汇编语言基本概念计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识9面向机器的低级语言,通常是为特定的计算机或计算机系列专门设计的。保持了机器语言的优点,具有直接和简捷的特点。可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。经常与高级语言配合使用,应用十分广泛。1.1汇编语言概述1.1.2汇编语言的特点计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识10#includestdafx.h#includestdio.hintmain(intargc,char*argv[]){inta,b,c;a=1;b=2;c=a+b;printf(“c=%d\n,c);return0;}编程实现c=a+b,并在屏幕上显示出结果。编译后的目标文件达到3.59KB1.1汇编语言概述C语言实现1.1.2汇编语言的特点计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识11汇编语言实现汇编后的目标文件只有208字节datasegmentadb?bdb?cdb?stringdb'c=$'dataendscodesegmentmainprocfarassumecs:code,ds:data,es:datastart:pushdssubax,axpushaxmovax,datamovds,axmoves,axmova,1movb,2moval,aaddal,bmovc,alleadx,stringmovah,09int21haddc,30hmovdl,cmovah,2int21hmovdl,0ahint21hmovdl,0dhint21hretmainendpcodeendsendstart1.1汇编语言概述编程实现c=a+b,并在屏幕上显示出结果。1.1.2汇编语言的特点计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识12建议:●充分注意“汇编”课实践性强的特点,●多读程序,多写程序,多上机调试程序,●熟悉PC机的编程结构,●掌握汇编语言及其程序设计的基本概念、方法和技巧。1.1汇编语言概述1.1.2汇编语言的特点计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识131.1汇编语言概述1.2进位计数制及其转换1.3计算机中数和字符的表示方法第1章汇编语言基础知识计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识14计算机内部的信息分为两大类:控制信息和数据信息。控制信息是一系列的控制命令,用于指挥计算机如何操作;数据信息是计算机操作的对象,一般又可分为数值数据和非数值数据。对计算机而言,不论是控制命令还是数据,它们都要用“0”和“1”两个基本符号即基2码来编码表示,这是由于以下三个原因:(1)基2码在物理上最容易实现。例如,用高、低两个电位表示“1”和“0”,或用脉冲的有、无表示“1”和“0”等等,可靠性都较高。(2)基2码用来表示二进制数,其编码及加减运算规则简单。(3)基2码的两个符号“1”和“0”正好与逻辑数据“真”与“假”相对应,为计算机实现逻辑运算带来了方便。因此,不论是什么信息,在输入计算机内部时,都必须用基2码编码表示,以方便存储、传送和处理。1.2进位计数制及其转换计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识15预备知识存储容量1KB=1024B=210(Kilo)1M=1024K=220(Mega)1G=1024M=230(Giga)1个二进制位:bit(比特)8个二进制位:Byte(字节)1Byte=8bit2个字节:Word(字)1Word=2Byte=16bit1.2进位计数制及其转换计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识161.2.1数与数制1.数的表示数制基数数码二进制Binary20,1八进制Octal80,1,2,3,4,5,6,7十进制Decimal100,1,2,3,4,5,6,7,8,9十六进制Hexadecimal160,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F二进制:基数为2,逢二进一11012=1×23+1×22+1×20=1310十六进制:基数为16,逢十六进一1001,0001,1000,01119187=9×163+1×162+8×161+7×1601.2进位计数制及其转换计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识17任何进制的数都可用如下方法表示:N=±Ki*ri其中:Ki是任一个数码;ri是各位对应的权r是基数ni=-m1.2进位计数制及其转换1.2.1数与数制计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识182.计数制的书写规则为了区别不同的计数制,可采用下列两种方法:(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表示十六进制数的2DF21.2进位计数制及其转换1.2.1数与数制计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识191.2.2不同数制之间的转换1.十进制数与二进制数之间的转换(1)十进制整数转换成二进制整数方法:除2取余法注意:第一次得到的余数为二进制数的最低位,最后得到的余数为二进制数的最高位。(2)十进制小数转换成二进制小数方法:乘2取整法注意:最后将每次得到的整数部分(必定是0或1)按先后顺序从左到右排列即得到所对应二进制小数。1.2进位计数制及其转换计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识20例:117.8125D=1110101.1101B2117258……1229……0214……127……023……121……10……10.8125×21.625……1×21.25……1×20.5……0×21.0……1(3)一般的十进制数转换成二进制数为了将一个既有整数又有小数部分的十进制数转换成二进制数,可以将其整数部分和小数部分分别进行转换,然后再组合起来。1.2进位计数制及其转换1.2.2不同数制之间的转换计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识21(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)101.2进位计数制及其转换1.2.2不同数制之间的转换计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识22(1)十进制整数转换成八进制整数方法:除8取余法注意:采用基数8连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。(2)十进制小数转换成八进制小数方法:乘8取整法注意:连续用基数8去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。(3)八进制数转换成十进制数方法:按位权展开后相加。用其各位所对应的系数,按“位权展开求和”的方法就可以得到,其基数为8。1.2进位计数制及其转换2.十进制与八进制之间的转换1.2.2不同数制之间的转换计算机科学与技术系《汇编语言程序设计》2019/12/30第1章汇编语言基础知识23(1)十进制整数转换成十六进制整数方法:除16取余法注意:采用基数16连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。例1.8将十进制整数(2347)10转换为十六进制整数,采用“除16倒取余”的方法,过程如下:16︳2347余数为11,即A0=B(十六进制数为B)16︳146余数为2,即A1=216︳9余数为9,即A2=90余数为0