1、课程导言,汇编语言的特点,1,学习汇编语言的方法,3,在程序设计技术有了革命性进步和发展的今天,汇编语言仍具有不可替代的地位。,1.汇编语言的特点 可直接控制硬件,充分发挥硬件功能。 汇编语言程序代码质量高,占用内存 空间少,执行速度快。, 缺点:可移植性差、可读性差。,高级语言: C=A+B ;,汇编语言:,MOV AX , A,ADD AX , B,MOV C , AX,为什么要学汇编呢?,人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使
2、用机器的逻辑功能。所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。,机器的逻辑功能,软件系统功能构筑其上,硬件系统功能运行于下。 汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。 学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统的最佳起点和最有效途径。,什么是汇编语言?,以助记符形式表示计算机指令助记符(mnemonic)是便于人们记忆、并能描述指令功能和指令操作数的符号助
3、记符是表明指令功能的英语单词或其缩写汇编格式指令以及使用它们编写程序的规则就形成汇编语言(Assembly Language)汇编语言程序:用汇编语言书写的程序汇编程序:将汇编语言程序“汇编”成机器代码目标模块的程序,汇编语言程序与汇编程序是两个概念,2.学习汇编语言的目标和要求, 掌握汇编语言程序设计的基本方法,为其他专业课奠定基础(接口技术、组成原理、单片机等),深入理解计算机内部工作原理。, 培养自我拓展汇编语言知识的能力及开发能力。,本课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。,3.学习汇编语言的方法,汇编语言是不容易学好的一门课,所以同学们首先要
4、有刻苦学习“打硬仗”的思想准备,同时还要采用科学、有效的学习方法,提高学习效率、获得良好的学习效果。1不可忽视预习与复习。课前要复习已学知识,并尽量预习新内容,才能提高听课的质量和效率;2听课思维活跃、全神贯注。课堂上要精神集中,思想跟随老师的讲解思路,积极思考,真正理解授课内容,并做笔记。课后应及时看书复习并整理笔记,遇到不懂的知识尽量从书上找答案,然后才是请教老师、其他同学和网络,对于大家普遍存在的问题通过某种方式告知讲课老师,以便老师在下次讲课时有的放矢地解决同学的疑难问题;,3重视阅读参考书籍、拓广学习思路。要学习好一门课,首先应认真学习主教材,此外还应重视广泛参考其他教材和资料,因为
5、每本书的篇幅有限,各本书内容一般具有互补性。尤其还要多学习和充分利用多媒体资源,可与老师所讲授知识互补;,4勤于上机实践,培养动手能力。程序设计是很有挑战性的思维和实践,只有肯下功夫、勤于读程序、写程序、调试程序,才能逐步掌握程序设计方法和技巧,编程思路如泉涌,得心应手。5实验前必须充分准备。进实验室前,应先将实验指导书的教学内容仔细阅读几遍,完成以下工作:深入分析问题;寻求和设计解题思路、方案和算法;运用某种工具(如流程图等)描述算法;编写程序;设计测试数据和预期运行结果。完成上述工作后,才能到实验室上机调试程序和验证程序执行结果,提高实验效率和质量,学有所获。,(1) IBM PC汇编语言
6、程序设计第4版 peter Abel著,清华大学出版社.PRENTICE HALL第5版 peter Abel著 沈美明、温冬婵译 人民邮电出版社(2)汇编语言程序设计, 钱晓捷等,电子工业出版社(3) Windows 环境下32位汇编语言程序设计,罗云彬, 电子工业出版社(4)80x86 IBM PC及兼容计算机(卷I和II)汇编语言、设计与接口技术(第4版)(影印版),参考教材:,第一章 基础知识,1教学目的:了解计算机语言的分类和特点,掌握不同进位计数制之间的转换和运算及计算机中数的表示。2教学要求:了解计算机语言的分类和特点掌握计算机的运算熟练掌握不同进制之间转换和计算机中数的表示3教
7、学重点:不同进制之间转换补码表示法4掌握难点:不同进制之间转换补码表示法,预 备 知 识,存储容量1K = 1024 = 210 (Kilo) 1M = 1024K = 220 (Mega) 1G = 1024M = 230 (Giga)1个二进制位:bit (比特)8个二进制位:Byte (字节) 1Byte = 8bit2个字节: Word (字) 1Word = 2Byte = 16bit,一、 数 制,二进制: 基数为2,逢二进一 11012 = 12 3 + 12 2 + 12 0 = 1310十六进制:基数为16,逢十六进一 1001, 0001, 1000, 0111 9 1 8
8、 7 = 9 16 3 + 1 16 2 + 8 16 1 + 7 16 0,二、 数制之间的转换,二进制 十六进制 十进制 二进制 十进制 十六进制,降幂法 除法, 二进制 十六进制 0011 0101 1011 1111 3 5 B F 0011,0101,1011,1111B = 35BFH A 1 9 C 1010 0001 1001 1100 A19CH = 1010,0001,1001,1100B,1011B = 23+21+20=11D 降幂法 除法 例: 27D = ? B 27 11 3 3 1 - - - - 2n 16 8 4 2 1 1 1 0 1 1 27D = 11
9、011B, 二进制 十进制, 十六进制 十进制 BF3CH = 11163 +15162 +3161 +12160 = 48956D 降幂法 除法 例:399D = ? H 399 143 15 399/1624/161/16 0 - - - 16n 256 16 1 F 8 1 1 8 F 399D = 18FH, 算术运算 二进制数:逢二进一 借一为二 加法规则 乘法规则 0 + 0 = 0 0 0 = 0 0 + 1 = 1 0 1 = 0 1 + 0 = 1 1 0 = 0 1 + 1 = 0 (进位1) 1 1 = 1,三、运算(算术运算和逻辑运算),0 5 C 3 H3 D 2 5
10、 H4 2 E 8 H,3 D 2 5 H0 5 C 3 H3 7 6 2 H,1,1,十六进制数:逢十六进一 借一为十六,“与”运算(AND) “或”运算(OR) A B AB A B AB 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1“非”运算(NOT) “异或”运算(XOR) A A A B AB 0 1 0 0 0 1 0 0 1 1 1 0 1 1 1 0, 逻辑运算(按位操作),例:X=00FFH Y=5555H,求Z=XY= ? X= 0000 0000 1111 1111 B Y= 0101 0101 0101 0101 B Z
11、= 0101 0101 1010 1010 B Z=55AAH,四、 数和字符的表示, 计算机中正负数的表示,7 6 5 4 3 2 1 0,符号位 数值位,假设机器字长为16位:,符号位 = 0 正数 数值位 = 1 负数,15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,假设机器字长为8位:,H.O.Byte,L.O.Byte,H.O.Nibble,L.O.Nibble,数的常用表示法 原码 反码 补码原码表示法:符号 + 绝对值例:n = 8bit +3原码 = 0 000,0011 = 03H - 3原码 = 1 000,0011 = 83H +0原码 = 0
12、 000,0000 = 00H - 0原码 = 1 000,0000 = 80H 0 的表示不惟一反码表示法:正数的反码同原码,负数的反码数值位与原码相反例:n = 8bit +5反码 = 0 000,0101 = 05H - 5反码 = 1 111,1010 = FAH +0反码 = 0 000,0000 = 00H - 0反码 = 1 111,1111 = FFH 0 的表示不惟一,补码(Twos Complement)表示法:正数的补码: 同原码负数的补码:(1)写出与该负数相对应的正数的补码 (2)按位求反 (3)末位加一,n位二进制补码的表数范围: - 2n-1 N 2n-1-1,无
13、符号整数的表数范围: 0 N 2n-1,补码的加法和减法:求补运算 :对一个二进制数按位求反、末位加一 X补码 -X补码 X补码加法规则:X+Y补码 = X补码 + Y补码减法规则:X-Y补码 = X补码 + -Y补码 补码减法可转换为补码加法,64(-46) 18,0100 00001101 00100001 0010,例:,进位和溢出进位: 由于运算结果超出了位数,最高有效位向前的进位,这一位自然丢失,一般不表示结果的对错。溢出:表示结果超出了字长允许表示的范围,一般会造成结果出错。例: (64) 11000000 127 01111111 64 01000000 + 1 00000001
14、 0 1 00000000 128 10000000 进位 溢出, 字符的表示ASCII码:用一个字节来表示一个字符,低7位为字符的ASCII值,最高位一般用作校验位。 例:A 41H a 61H 1 31H 换行 0AH 回车 0DH 空格 20H,Page 14 1.11.5中的小题,本章作业,第二章 80x86计算机组织,1教学目的:掌握INTEL80X86微处理器的结构及内存单元地址与内容的含义和关系,了解计算机接口的构成,为汇编语言编程奠定基础。2教学要求:熟练掌握INTEL80X86微处理器的结构掌握内存单元地址与内容的含义和关系了解计算机接口的构成3教学重点:微处理器的功能结构微
15、存储器组织4掌握难点:微处理器的寄存器组存储器寻址,一、Intel 80x86系列微处理器,80386,80486,奔腾,奔腾II,奔腾4,80286,8086,奔腾III,IA-64(安腾),4004,IA-32,Intel 处理器图片,二、计算机系统,硬件:,中央处理机 CPU,总线控制 逻辑,接 口,接 口,存储器,大容量存储器,I/O设备,I/O子系统,系统总线,.,.,软件:系统软件 用户软件,三、中央处理器,8086/8088寄存器组:数据寄存器:指针及变址寄存器:SP、BP、SI、DI段寄存器: CS、DS、SS、ES控制寄存器: IP、FLAGS,CPU组成:算术逻辑部件ALU
16、、控制器、寄存器,AX,BX,CX,DX,高8位 低8位,80x86的寄存器结构,8086/8088,IOPL,NT,80286,VM,80386,AC,80486,ID,VIP,VIF,31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,Pentium,80x86的标志寄存器 (P.23),IOPL: I/O特权级 VIP:虚拟中断未决标志 NT: 嵌套任务标志 VIF:虚拟中断标志 RF: 重新启动标志 VM:虚拟8086模式位 AC: 对准检查方式位 ID: 标识标志,
17、标志寄存器 ( FLAGS / PSW ),15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0,条件码标志: 控制标志:,OF 溢出标志 DF 方向标志 SF 符号标志 IF 中断标志ZF 零标志 TF 陷阱标志CF 进位标志AF 辅助进位标志PF 奇偶标志,OF DF IF TF SF ZF AF PF CF,寄存器与存储器的比较: 寄 存 器 存 储 器,在CPU内部 在CPU外部访问速度快 访问速度慢容量小,成本高 容量大,成本低用名字表示 用地址表示没有地址 地址可用各种方式形成,四、存储器,存储单元的地址和内容:, 存储器以字节(8 bit)为编程单位 每个字
18、节单元都有唯一的地址编码 地址用无符号整数来表示(编程用十六进制表示) 一个字要占用相继的两个字节 低位字节存入低地址,高位字节存入高地址 字单元地址用它的低地址来表示 机器以偶地址访问(读 / 写)存储器,20 根地址线: 地址范围 00000H FFFFFH (1MB)机器字长16位:仅能表示地址范围 0000H FFFFH (64KB)小段:规定段地址必须取为小段首址,从0地址单元开始,每16个字节为一小段,共有64K个小段 小段的首地址 00000 H 0000F H 00010 H 0001F H 00020 H 0002F H FFFF0 H FFFFF H 段起始地址:小段首地址
19、段的大小: 64K 范围内的任意字节,实模式下存储器寻址,存储器的分段,存储器的逻辑分段:,存储器,64KB代码,01500H,42000H,1CD00H,段寄存器,CSDSSSES,64KB堆栈,64KB数据,64KB附加数据,B0000H,B000H,存储器,8KB代码,2KB数据,256堆栈,02000H,04800H,04000H,0200H,0400H,0480H,CSDSSS,优点: 允许程序在存储器内重定位; 允许实模式程序在保护模式下运行; 有利于程序和数据的分离。,存储器的逻辑地址与物理地址,10011111,00100110,01001000,逻辑地址,段地址 : 偏移地址
20、,1000 : 0000H,1000 : 0001H,1000 : 0002H,1000 : 0003H,1000 : 0004H,1000 : 0005H,物理地址,10000H,10001H,10002H,10003H,10004H,10005H,10000011,01011100,10100010,字节内容(10000H)9FH;(10001H)26H字内容 (10000H)269FH;(10001H)4826H,访问两次内存,物理地址 = 16 段地址 + 偏移地址,16 位 段 地 址,16 位 偏 移 地 址,0000,+,20 位 物 理 地 址,例:(DS) = 2100H,
21、(BX) = 0500H (PA) = 21000H+0500H = 21500H,例:,已知一个存储单元的段地址为3200H,偏移地址为1210H,其物理地址是多少?, 访问存储器单元时,寄存器的组合关系如下图:,支持多任务处理功能支持虚拟存储器特性,保护模式下的80x86,保护模式下的存储器寻址,所选存储单元,所选段,存 储 器,段基地址32,选择器16,偏移地址 32,地址转换,+,五、外部设备,外部设备与主机( CPU 和存储器)的通信是通过外设接口(Interface)进行的,每个接口包括一组寄存器。数据寄存器:存放外设和主机间传送的数据状态寄存器:保存外设或接口的状态信息命令寄存器
22、:保存CPU发给外设或接口的控制命令 外设中每个寄存器有一个端口(Port)地址,构成一个独立于内存的 I / O 地址空间:0000H FFFFH,第2章 作业,Page 33 2.1 2.5,第三章 80x86的指令系统和寻址方式,1教学目的:掌握微机寻址方式和8086微处理器指令系统及Debug的使用2教学要求:掌握8种寻址方式熟悉指令系统的六大类指令,要求结合上机实践熟练掌握常用指令。结合指令举例逐步熟悉和掌握汇编语言程序的格式,以及典型程序段。会熟练使用Debug调试程序,3教学重点:寻址方式8086微处理器指令系统4掌握难点:寄存器的应用存储器的结构, 指令系统 一组指令的集合,指
23、令, 寻址方式 与数据有关的寻址方式 与转移地址有关的寻址方式,导言, 8086的寻址方式,与数据有关的寻址方式:以 MOV 指令为例 立即寻址 MOV AX , 3069H寄存器寻址 MOV AL , BH直接寻址 MOV AX , 2000H 寄存器间接寻址 MOV AX , BX 寄存器相对寻址 MOV AX , COUNT SI 基址变址寻址 MOV AX , BP DI 相对基址变址寻址 MOV AX , MASK BX SI ,存储器寻址,(1) 立即寻址方式* 操作数在指令中给出 指令格式: MOV AL, 5 MOV AX, 3064H MOV AL, A请判断:* MOV 4
24、0H, AL *MOV AH, 3064H,(2) 寄存器寻址方式* 操作数在指定的寄存器中 MOV AX, BX MOV AL, BH MOV AX, 3064H* 字节寄存器只有 AH AL BH BL CH CL DH DL* MOV AH, BX * MOV CS, AX,(3) 直接寻址方式* 有效地址EA由指令直接给出 例:MOV AX, 2000H EA=2000H, 假设(DS)=3000H, 那么PA=32000H,* 隐含的段为数据段 DS* 可使用段跨越前缀 MOV AX, ES: 2000H* 操作数地址可由变量(符号地址)表示, 但要注意VALUE DB 10 变量的
25、属性MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE ,寄存器间接寻址* EA 在基址寄存器(BX/BP) 或变址寄存器(SI/DI) 中 MOV AX, BX PA = 16d (DS) + (BX) MOV AX, ES:BX PA = 16d (ES) + (BX) MOV AX, BP PA = 16d (SS) + (BP) * 不允许使用AX、CX、DX 存放 EA MOV AX, CX * SRC 和 DST 的字长一致 MOV DL, BX ; BX指示一个字节单元 MOV DX, BX ; BX指示一个字单元 * 适于数组、
26、字符串、表格的处理,(5) 寄存器相对寻址方式* 指令格式: MOV AX, COUNTSI 或 MOV AX, COUNT+SI 假设 (DS)=3000H, (SI)=2000H, COUNT=3000H, 则: PA = 35000H 假设(35000H)=1234H, 那么 (AX)=1234H* 适于数组、字符串、表格的处理,(6) 基址变址寻址方式*指令格式: MOV AX, BX DI MOV AX, BX+DI MOV AX, ES:BX SI* 适于数组、字符串、表格的处理* 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, BX BP MOV AX, SI DI
27、,有效地址 =,(BX) (SI)(BP) (DI),+,( 7 ) 相对基址变址寻址方式 MOV AX, MASK BX SI 或 MOV AX, MASK BX+SI 或 MOV AX, MASK+BX+SI,有效地址 =,(BX) (SI) 8位(BP) (DI) 16位,+,+,位移量,访问存储器的方式,默认的段寄存器,可跨越的段寄存器,偏移地址,取指令 CS 无 IP堆栈操作 SS 无 SP一般数据访问 DS CS ES SS 有效地址EABP作为基址的寻址 SS CS DS ES BP串操作的源操作数 DS CS ES SS SI串操作的目的操作数 ES 无 DI,段 寄 存 器
28、的 使 用 规 定,例:编写一段显示字符串STRING的程序 DATA SEGMENT STRING DB HAPPY NEW YEAR! , 0DH , 0AH , $ COUNT DW 17 DATA ENDS ( 1 ) 直接寻址 mov dl, string mov ah, 2 int 21h ; 显示字符H mov dl, string+1 mov ah, 2 int 21h ; 显示字符A : :,回车,换行,Int 21h详见P471,( 2 ) 寄存器间接寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏
29、址 bxNext : mov dl, bx mov ah, 2 int 21h ; 显示一个字符 inc bx loop next ; 循环指令( 3 ) 寄存器相对寻址 mov cx, count ; mov cx, 17 mov si, 0 Next : mov dl, stringsi ; mov dl, string+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令,( 4 ) 基址变址寻址 mov cx, count ; mov cx, 17 mov bx, offset string ; string的偏址 bx mov si, 0Next : mov dl, bx si ; mov dl, bx+si mov ah, 2 int 21h ; 显示一个字符 inc si loop next ; 循环指令( 5 ) DOS 显示字符串功能 mov dx, offset string ; string的偏址 dx ; lea dx, string mov ah, 9 int 21h ; 显示一串字符,