安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识1IBM—PC汇编语言程序设计(第二版)主讲李敬兆安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识2计算机语言的发展机器语言FORTRANBASICCOBOLPASCALC/C++JAVA...汇编语言高级语言安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识3•计算机能够直接识别的数据是由二进制数0和1组成的代码。机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。•用机器语言编写的程序是计算机惟一能够直接识别并执行的程序,而用其他语言编写的程序必须经过翻译才能变换成机器语言程序,所以,机器语言程序被称为目标程序。机器语言安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识4为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。所以汇编语言是一种用符号书写的、基本操作与机器指令相对应的、并遵循一定语法规则的计算机语言。用汇编语言编写的程序称为汇编源程序。汇编语言是一种符号语言,比机器语言容易理解和掌握,也容易调试和维护。但是,汇编语言源程序要翻译成机器语言程序才可以由计算机执行。这个翻译的过程称为“汇编”,这种把汇编源程序翻译成目标程序的语言加工程序称为汇编程序。汇编语言安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识5汇编语言虽然较机器语言直观,但仍然烦琐难懂。于是人们研制出了高级程序设计语言。高级程序设计语言接近于人类自然语言的语法习惯,与计算机硬件无关,易被用户掌握和使用。目前广泛应用的高级语言有多种,如BASIC、FORTRAN、PASCAL、C、C++等等。高级语言汇编语言的特点面向机器的低级语言,通常是为特定的计算机或计算机系列专门设计的。保持了机器语言的优点,具有直接和简捷的特点。可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。经常与高级语言配合使用,应用十分广泛。安徽理工大学计算机科学与技术系李敬兆《汇编语言》#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,并在屏幕上显示出结果。例1编译后的目标文件达到3.59KB安徽理工大学计算机科学与技术系李敬兆《汇编语言》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,0dhint21hretmainendpcodeendsendstart例2.C=a+b汇编后的目标文件只有208字节安徽理工大学计算机科学与技术系李敬兆《汇编语言》建议●充分注意“汇编”课实践性强的特点,●多读程序,多写程序,多上机调试程序,●熟悉PC机的编程结构,●掌握汇编语言及其程序设计的基本概念、方法和技巧。安徽理工大学计算机科学与技术系李敬兆《汇编语言》第1章基础知识数制数制之间的转换运算数和字符的表示安徽理工大学计算机科学与技术系李敬兆《汇编语言》预备知识存储容量1K=1024B=210(Kilo)1M=1024K=220(Mega)1G=1024M=230(Giga)1个二进制位:bit(比特)8个二进制位:Byte(字节)1Byte=8bit2个字节:Word(字)1Word=2Byte=16bit安徽理工大学计算机科学与技术系李敬兆《汇编语言》1.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×160安徽理工大学计算机科学与技术系李敬兆《汇编语言》1.1数制与转换安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识13•任何进制的数都可用如下方法表示:N=±Ki*ri其中:Ki是任一个数码;ri是各位对应的权r是基数ni=-m1.1.2数制之间的转换二进制十六进制十进制二进制十进制十六进制降幂法除法安徽理工大学计算机科学与技术系李敬兆《汇编语言》二进制十六进制001101011011111135BF∴0011,0101,1011,1111B=35BFHA19C1010000110011100∴A19CH=1010,0001,1001,1100B安徽理工大学计算机科学与技术系李敬兆《汇编语言》安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识16十六进制和二进制的相互转换方法:对于二进制整数,只要从右到左每4位组成一组,不足4位最左边补0,即可得到相应的十六进制。对于二进制小数,只要从左到右每4位组成一组,不足4位最右边补0,即可得到相应的十六进制。01111101.010111007D5C∴(1111101.0101111)2=(7D.5C)16如果将十六进制转成二进制数,只要每一位十六进制数用四位二进制数表示即可。补0补0降幂法除法例:27D=?B2711331----2n16842111011∴27D=11011B二进制十进制安徽理工大学计算机科学与技术系李敬兆《汇编语言》二进制十进制1011B=23+21+20=11D二进制十进制安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识18十进制转换成二进制方法:对于整数部分除2取余法,小数部分采用乘2取整法例:117.8125D=2117258……1229……0214……127……023……121……10……10.8125×21.625……1×21.25……1×20.5……0×21.0……11110101.1101B十六进制十进制BF3CH=11163+15162+3161+12160=48956D降幂法除法例:399D=?H39914315399/16→24/16→1/16→0---↓↓↓16n256161F8118F∴399D=18FH安徽理工大学计算机科学与技术系李敬兆《汇编语言》二进制数:逢二进一借一为二加法规则乘法规则0+0=000=00+1=101=01+0=110=01+1=0(进位1)11=11.2运算(算术运算)安徽理工大学计算机科学与技术系李敬兆《汇编语言》05C3H3D25H42E8H+3D25H05C3H3762H-1-1十六进制数:逢十六进一借一为十六安徽理工大学计算机科学与技术系李敬兆《汇编语言》1.3计算机中数和字符的表示计算机中正负数的表示76543210符号位数值位假设机器字长为16位:符号位=0正数数值位=1负数1514131211109876543210假设机器字长为8位:H.O.ByteL.O.Byte安徽理工大学计算机科学与技术系李敬兆《汇编语言》数的常用表示法——原码反码补码原码表示法:符号+绝对值例:n=8bit[+3]原码=0000,0011=03H[-3]原码=1000,0011=83H[+0]原码=0000,0000=00H[-0]原码=1000,0000=80H0的表示不惟一反码表示法:正数的反码同原码,负数的反码数值位与原码相反例:n=8bit[+5]反码=0000,0101=05H[-5]反码=1111,1010=FAH[+0]反码=0000,0000=00H[-0]反码=1111,1111=FFH0的表示不惟一安徽理工大学计算机科学与技术系李敬兆《汇编语言》例:机器字长8位,[-46]补码=?[46]补码=001011101101000111010010=D2H机器字长16位,[-46]补码=FFD2H[+0]补码=000000001111111100000000=[-0]补码0的表示惟一按位求反末位加一按位求反末位加一补码(Two’sComplement)表示法:正数的补码:同原码负数的补码:(1)写出与该负数相对应的正数的补码(2)按位求反(3)末位加一安徽理工大学计算机科学与技术系李敬兆《汇编语言》十进制二进制十六进制十进制十六进制n=8n=16+127011111117F+327677FFF+126011111107E+327667FFE......……...+20000001002+20002+10000000101+100010000000000000000-111111111FF-1FFFF-211111110FE-2FFFE......……...-1261000001082-327668002-1271000000181-327678001-1281000000080-327688000n位二进制补码的表数范围:-2n-1≤N≤2n-1-1无符号整数的表数范围:0≤N≤2n-1安徽理工大学计算机科学与技术系李敬兆《汇编语言》补码的加法和减法:求补运算:对一个二进制数按位求反、末位加一求补求补[X]补码[-X]补码[X]补码加法规则:[X+Y]补码=[X]补码+[Y]补码减法规则:[X-Y]补码=[X]补码+[-Y]补码补码减法可转换为补码加法64(-46)18+010000001101001000010010+例:安徽理工大学计算机科学与技术系李敬兆《汇编语言》进位和溢出进位:由于运算结果超出了位数,最高有效位向前的进位,这一位自然丢失,一般不表示结果的对错。溢出:表示结果超出了字长允许表示的范围,一般会造成结果出错。例:(-64)1100000012701111111+6401000000+100000001010000000012810000000进位溢出安徽理工大学计算机科学与技术系李敬兆《汇编语言》字符的表示ASCII码:用一个字节来表示一个字符,低7位为字符的ASCII值,最高位一般用作校验位。例:‘A’41H‘a’61H‘1’31H换行0AH回车0DH空格20H安徽理工大学计算机科学与技术系李敬兆《汇编语言》安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识29BCD码BCD(Binary-CodedDecimal)码又称为“二—十进制编码”,专门解决用二进制数表示十进数的问题。最常用的是8421编码,其方法是用4位二进制数表示1位十进制数,自左至右每一位对应的位权是8、4、2、1。安徽理工大学计算机科学与技术系李敬兆《汇编语言》Ch1基础知识30BCD码有两种格式:(1)压缩BCD码格式(PackedBCDFormat)用4个二进制位表示一个十进制位,就是用0000B-1001B来表示十进制数0-9。例如:十进制数4256的压缩BCD码表示为:0100001001010110B(2)非压缩BCD码格式(UnpackedBCDFormat)用8个二进制位表示一个十进制位,其中,高四位无意义,我们一般用xxxx表示,低四位和压缩BCD码相同。例如:十进制数4256的非压缩BCD码表示为:xxxx0100xxxx0010xxxx0101xxxx0110B1.4逻辑运算(