1、汇编语言程序设计docin/sundae_meng课程的总体结构基础知识基础知识指令系统指令系统计算机组成结构计算机组成结构CPU寻址方式寻址方式80X86 汇编语言程序汇编语言程序子程序循环分支程序高级汇编技术I/O程序设计BIOS和DOS中断相关应用图形程序与发声程序设计磁盘文件存取技术Pentium 汇编语言汇编语言单片机汇编语言单片机汇编语言应用应用基础基础docin/sundae_meng 汇编语言程序设计汇编语言程序设计参考书推荐参考书推荐1.80X861.80X86汇编语言程序设计汇编语言程序设计沈美明沈美明 温冬婵温冬婵 清华大学出版社清华大学出版社2.IBM PC 2.IBM
2、 PC 汇编语言与程序设计汇编语言与程序设计 PETER ABEL PETER ABEL 编著编著 第第4 4版版 清华大学出版社清华大学出版社.PRENTICE HALL.PRENTICE HALL第第5 5版版 人民邮电出版社人民邮电出版社3.IBM PC 3.IBM PC 汇编语言与程序设计例题习题集汇编语言与程序设计例题习题集 温冬婵温冬婵 沈美明沈美明 清华大学出版社清华大学出版社汇编语言程序设计汇编语言程序设计-方法方法技术技术应用应用 周学毛周学毛 高等教育出版社高等教育出版社docin/sundae_meng教学安排:教学安排:第一章第一章 绪论绪论 数制数制 数制之间的转换数
3、制之间的转换 数和字符的表示数和字符的表示 运算运算(2学学时时)第二章第二章 计算机组织计算机组织 CPU CPU 存储器存储器 外部设备外部设备 寻址方式寻址方式指令系统指令系统1-数据传送指令格式、算术指令格式及应用数据传送指令格式、算术指令格式及应用(4学时学时)第三章第三章 汇编语言格式汇编语言格式 完整段定义和简化段定义格式完整段定义和简化段定义格式 伪操作伪操作 表达表达式式(4学时学时)第四章第四章 指令系统指令系统2(2学时学时)第五、六、七章第五、六、七章 简单汇编语言程序设计简单汇编语言程序设计 循环循环程序设计程序设计 分支程序设分支程序设计计 子程序设计子程序设计 (
4、8学时学时)第八章第八章 输入输出程序设计简介输入输出程序设计简介 编程练习编程练习(2学时学时)第章第章 编程练习编程练习 综合习题及复习综合习题及复习(2学时学时)docin/sundae_meng计算机系统由硬件和软件两大部分组成第第1章章 基基 础础 知知 识识docin/sundae_meng绪论硬件部分磁盘接口典型PC机主板结构docin/sundae_meng计算机基础讨论的计算机组成docin/sundae_mengCPU结构示意图主存 及辅存docin/sundae_meng8 0 8 6系统结构简图 20位物理地址位物理地址16位数据位数据运算器运算器寄存器组寄存器组CPU
5、内部总线内部总线系统总线系统总线docin/sundae_meng8086 CPU 硬件实例n80188应用板docin/sundae_meng一个程序的运行过程 装载(Loader):将可执行文件按特定规律加载到内存(该步由操作系统完成);执行(Execute):执行当前程序(按应用程序代码执行)。磁盘文件磁盘文件内存内存处理器处理器docin/sundae_meng一条指令的执行过程 逻辑控制输出指令地址(可包含在取指中)取指:取出相应指令送往指令寄存器 译码:分析指令代码 执行:包括取操作数、计算 回送:回送结果 以上所有操作都在逻辑控制器控制下完成。AXBXCXDX逻辑控制主存储器(内
6、存)指指令令寄寄存存器器取指取指CS:IPFLAGS指令:ADD A,AX A=A+AX 执行过程。其中A为内存变量,AX为寄存器变量。docin/sundae_meng数据和信息的存储数据和信息最基本的单位是二进制的一个位,但存储时往往是以字节为单位存放,每字节一个地址,每字节由八个二进制位组成地址表达了字节数据存放的位置。docin/sundae_meng计算机语言的发展 机器语言机器语言FORTRANFORTRANBASICBASICPASCALPASCALC/C+C/C+DBASEDBASEJAVAJAVA.汇编语言汇编语言高级语言高级语言1.1 计算机语言概述计算机语言概述P1doc
7、in/sundae_meng计算机语言的发展历程机器语言机器语言汇编语言汇编语言高级语言高级语言0010011CBASICPASCALFORTRANC+C#.NETMOV AX,01INT 21H面向数据库面向数据库的语言的语言基于基于WEB的的开发语言开发语言VBDELPHIFOXPRODBASESQLSYSBASEORCALEJAVAASPVC+XMLHTMLdocin/sundae_meng#include stdafx.h#include stdio.h int main(int argc,char*argv)int a,b,c;a=1;b=2;c=a+b;printf(“c=%dn,
8、c);return 0;编译后的目标文编译后的目标文件达到件达到3.59KBdocin/sundae_mengdata segmentdata segmenta dw?a dw?b dw?b dw?c dw?c dw?string db c=$string db c=$data endsdata endscode segmentcode segmentmain proc farmain proc far assume cs:code,ds:data,es:data assume cs:code,ds:data,es:datastart:start:push ds push ds sub ax,
9、ax sub ax,ax push ax push ax mov ax,datamov ax,data mov ds,ax mov ds,ax mov es,ax mov es,axmov a,1mov a,1 mov b,2 mov b,2 mov ax,a mov ax,a add ax,b add ax,b mov c,ax mov c,ax lea dx,string lea dx,string mov ah,09 mov ah,09 int 21h int 21h add al,30h add al,30h mov dl,al mov dl,al mov ah,2 mov ah,2
10、int 21h int 21h mov dl,0ah mov dl,0ah int 21h int 21h mov dl,0dh mov dl,0dh int 21h int 21h ret retmain endpmain endpcode endscode ends end start end start例例 2.2.C=a+bC=a+b汇编后的目汇编后的目标文件只有标文件只有208208字节字节初始化初始化显示结果显示结果printf;a=1 ;a=1 ;b=2 ;b=2 ;ax=a ;ax=a ;ax+=b;ax+=b;c=axc=axdocin/sundae_meng机器语言、汇编语
11、言相关概念机器语言、汇编语言相关概念n汇编语言汇编语言:直接构架于机器语言之上的,用助记符书直接构架于机器语言之上的,用助记符书写的一种符号语言,经过汇编程序编译后能最终为写的一种符号语言,经过汇编程序编译后能最终为CPU识别的一种人机交流的语言,是一种符号化的机器语言。识别的一种人机交流的语言,是一种符号化的机器语言。便于书写、阅读和检查。便于书写、阅读和检查。n 用汇编语言编写的程序叫汇编源程序用汇编语言编写的程序叫汇编源程序机器语言机器语言:计算机硬件能直接识别的语言,由二进制计算机硬件能直接识别的语言,由二进制代码表示的指令组成,它是面向特定机器结构的内部语代码表示的指令组成,它是面向
12、特定机器结构的内部语言。相应的指令称为机器指令。言。相应的指令称为机器指令。它与硬件相关,程序效它与硬件相关,程序效率高,但通用性差。率高,但通用性差。高级程序设计语言高级程序设计语言:是面向用户,与特定机器属性相是面向用户,与特定机器属性相分离的通用语言。每种语言都有自己的语法规定与格式分离的通用语言。每种语言都有自己的语法规定与格式,也有适用范围。如,也有适用范围。如C、PASCAL、C+、BASIC。docin/sundae_meng计算机语言的开发平台DOSUNIXLinuxWindowsNETWAREWindows 2000/XPdocin/sundae_meng汇编语言编译软件n主
13、要有:Borland公司的公司的TASM版本版本Microsoft公司的公司的MASM版本版本 基于基于Windows 的:未来汇编的:未来汇编 Asm Studiodocin/sundae_meng汇编语言的特点汇编语言的特点n(1)汇编语言与机器密切相关:极强的硬件控制能)汇编语言与机器密切相关:极强的硬件控制能力(如端口控制),在硬件的调试中极为有用。力(如端口控制),在硬件的调试中极为有用。n(2)汇编语言程序效率高:目标程序短(占用内存)汇编语言程序效率高:目标程序短(占用内存少)、运行速度快。少)、运行速度快。n(3)特殊使用场合:工业控制、驱动程序。)特殊使用场合:工业控制、驱动
14、程序。n(4)多样性:)多样性:CPU机器指令的差异性决定汇编语言机器指令的差异性决定汇编语言源程序的多样性。源程序的多样性。n(5)易维护性:易读性、易维护性弱于高级语言。)易维护性:易读性、易维护性弱于高级语言。docin/sundae_meng汇编语言的应用汇编语言的应用n程序执行占用较短的时间,或者占用较小存程序执行占用较短的时间,或者占用较小存储容量的场合。储容量的场合。n程序与计算机硬件密切相关,程序直接控制程序与计算机硬件密切相关,程序直接控制硬件的场合。硬件的场合。n需提高大型软件性能的场合。需提高大型软件性能的场合。n没有合适的高级语言的场合。没有合适的高级语言的场合。doc
15、in/sundae_meng汇编语言的应用汇编语言的应用系统程序、效率代码、系统程序、效率代码、I/OI/O驱动程序驱动程序70%70%以上的系统软件是用汇编语言编写的。以上的系统软件是用汇编语言编写的。某些快速处理、位处理、访问硬件设备等某些快速处理、位处理、访问硬件设备等 高效程序是用汇编语言编写的。高效程序是用汇编语言编写的。高级绘图程序、视频游戏程序一般是用汇高级绘图程序、视频游戏程序一般是用汇 编语言编写的编语言编写的。病毒及杀毒部分相关用汇编语言编写病毒及杀毒部分相关用汇编语言编写。docin/sundae_meng学习汇编语言,你需要学习汇编语言,你需要胆量。不要害怕去接触那些计
16、算机的内部工作机制。知识。了解计算机常用的数制,特别是二进制、十六进制、八进制,以及计算机保存数据的方法。开放。接受汇编语言与高级语言的差异,而不是去指责它如何的不好读。经验。要求你拥有任意其他编程语言的一点点编程经验。头脑。docin/sundae_meng 数制数制 数制之间的转换数制之间的转换 运算运算 数和字符的表示数和字符的表示1.2 数据表示方式、运算与转换数据表示方式、运算与转换P3docin/sundae_meng预预 备备 知知 识识存储容量存储容量1K =1024 =210 (Kilo)1M=1024K =220 (Mega)1G =1024M=230 (Giga)数据宽度
17、数据宽度1个二进制位:bit (比特)8个二进制位:Byte (字节)1Byte=8bit2个字节:Word (字)1Word=2Byte=16bitdocin/sundae_meng1.数数 制制 数数 制制 基基 数数 数数 码码 二进制二进制 Binary 2 0,1 八进制八进制 Octal 8 0,1,2,3,4,5,6,7 十进制十进制 Decimal 10 0,1,2,3,4,5,6,7,8,9 十六进制十六进制 Hexadecimal 16 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F二进制二进制:基数为2,逢二进一 P4 1101B =12 3 +12 2
18、+12 0 =13十六进制十六进制:基数为16,逢十六进一 1001,0001,1000,0111 B 9 1 8 7 H =9 16 3 +1 16 2 +8 16 1 +7 16 0docin/sundae_meng2.数制之间的转换数制之间的转换 二进制二进制 十六进制十六进制 十进制十进制 二进制二进制 十进制十进制 十六进制十六进制降幂法降幂法 除法除法docin/sundae_meng 二进制二进制 十六进制十六进制P5 0011 0101 1011 1111 3 5 B F 0011,0101,1011,1111B=35BFH A 1 9 C 1010 0001 1001 110
19、0 A19CH=1010,0001,1001,1100Bdocin/sundae_meng 1011B =23+21+20=11D 降幂法 除法 例例:27D=?B 27 11 3 3 1 -2n 16 8 4 2 1 1 1 0 1 1 27D=11011B 二进制二进制 十进制十进制P5docin/sundae_mengn 余数余数n 2 37 12 37 1n 2 18 0 2 18 0n 2 9 1 2 9 1n 2 4 0 2 4 0n 2 2 0 2 2 0n 2 1 1 2 1 1n 0 0 n 所以所以37=10,0101B37=10,0101Bn docin/sundae_m
20、eng 十六进制十六进制 十进制十进制 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=18FHdocin/sundae_meng 算术运算算术运算 二进制数:二进制数:逢二进一逢二进一 借一为二借一为二 加法规则 乘法规则 0+0=0 0 0=0 0+1=1 0 1=0 1+0=1 1 0=0 1+1=0(进位1)1 1=13.运算(算术运算和逻辑运算)运算(算术运算和逻辑运算)docin/sundae_meng
21、0 5 C 3 H3 D 2 5 H4 2 E 8 H3 D 2 5 H0 5 C 3 H3 7 6 2 H1 11 1十六进制数:十六进制数:逢十六进一逢十六进一 借一为十六借一为十六docin/sundae_meng 逻辑运算(逻辑运算(按位操作按位操作)P11“与与”运算(运算(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 B AB 0 1 0 0 0 1 0 0 1 1 1 0 1 1 1 0docin/sun
22、dae_meng例例:X=00FFH Y=5555H,求Z=XY=?X=0000 0000 1111 1111 B Y=0101 0101 0101 0101 B Z=0101 0101 1010 1010 B Z=55AAHdocin/sundae_meng4.数和字符的表示数和字符的表示P6-P9 计算机中正负计算机中正负数的表示数的表示 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.ByteH
23、.O.ByteL.O.ByteL.O.ByteH.O.NibbleH.O.NibbleL.O.NibbleL.O.Nibbledocin/sundae_meng数的常用表示法数的常用表示法 原码原码 反码反码 补码补码原码表示法原码表示法:符号:符号+绝对值绝对值例:n=8bit+3原码 =0 000,0011 =03H-3原码 =1 000,0011 =83H+0原码 =0 000,0000 =00H-0原码 =1 000,0000 =80H 0 的表示不唯一反码表示法反码表示法:正数的反码同原码,负数的反码数值位与原码相反正数的反码同原码,负数的反码数值位与原码相反例:n=8bit+5反码
24、 =0 000,0101 =05H-5反码 =1 111,1010 =FAH+0反码 =0 000,0000 =00H-0反码 =1 111,1111 =FFH 0 的表示不唯一docin/sundae_meng例:机器字长8位,-46补码 =?46补码 =0 0 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 1 0 1 0 0 1 0 =D2H 机器字长16位,-46补码 =FFD2H +0补码 =0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 =-0补码 0 的表示的表示唯一按位求反按位求反末位加一末位加一按位求反按位求反末位加
25、一末位加一补码补码(Twos Complement)表示法:表示法:正数的补码:正数的补码:同原码负数的补码负数的补码:(1)写出与该负数相对应的正数的补码 (2)按位求反 (3)末位加一docin/sundae_meng 十进制 二进制 十六进制 十进制 十六进制 n=8 n=16+127 0111 1111 7F +32767 7FFF+126 0111 1110 7E +32766 7FFE.+2 0000 0010 02 +2 0002+1 0000 0001 01 +1 0001 0 0000 0000 00 0 0000 -1 1111 1111 FF -1 FFFF -2 111
26、1 1110 FE -2 FFFE .-126 1000 0010 82 -32766 8002-127 1000 0001 81 -32767 8001-128 1000 0000 80 -32768 8000n位二进制补码的表数范围:位二进制补码的表数范围:-2n-1 N 2n-1-1无符号整数的表数范围:无符号整数的表数范围:0 N 2n-1 docin/sundae_meng补码的加法和减法:补码的加法和减法:P9求补运算求补运算 :对一个二进制数按位求反、末位加一对一个二进制数按位求反、末位加一 X补码补码 -X补码补码 X补码补码 求补求补 求补求补加法规则加法规则:X+Y补码补码
27、 =X补码补码 +Y补码补码减法规则减法规则:X-Y补码补码 =X补码补码 +-Y补码补码 补码减法可转换为补码加法补码减法可转换为补码加法 64(-46)180100 00001101 00100001 0010例:docin/sundae_meng进位和溢出进位和溢出进位进位:由于运算结果超出了位数由于运算结果超出了位数,最高有效位向最高有效位向 前的进位,这一位自然丢失,一般不表前的进位,这一位自然丢失,一般不表 示结果的对错。示结果的对错。溢出溢出:表示结果超出了字长允许表示的范围,:表示结果超出了字长允许表示的范围,一般会造成结果出错。一般会造成结果出错。例:例:(64)110000
28、00 127 01111111 64 01000000 +1 00000001 0 1 00000000 128 10000000 进位进位 溢出溢出docin/sundae_mengBCD码n虽然二进制数实现容易,但不符合人们的使用习惯,且书写阅读不方便,所以在计算机输入输出时通常还是采用十进制来表示数,这就需要实现十进制与二进制间的转换。为了转换方便,常采用二进制编码的十进制,简称为BCD码。nBCD码就是用4位二进制数表示1位十进制整数。表示的方法有多种,常用的是8421 BCD码,它的表示规律如表所示。docin/sundae_meng十进制数字的十进制数字的8421 BCD码码十进制
29、数BCD码十进制数BCD码00000501011000160110200107011130011810004010091001docin/sundae_meng 字符的表示字符的表示P10ASCII码码:用一个字节字节来表示一个字符,低7位为字符的ASCII值,最高位一般用作校验位。例:例:A 41H a 61H 0 30H 换行换行 0AH 回车回车 0DH 空格空格 20Hdocin/sundae_meng作业n教材P11页n1n4n7n9(其中假设字长n=16)n课外查阅资料并思考10、13、14题docin/sundae_meng练习n1 十六进制数十六进制数88H,可表示成下面几种形
30、式,请找出错误,可表示成下面几种形式,请找出错误的表示(的表示()。)。无符号十进制数无符号十进制数136 带符号十进制数带符号十进制数120 压缩型压缩型BCD码十进制数码十进制数88 8位二进制数位二进制数8的补码表示的补码表示n2 n位补码的表数范围为:位补码的表数范围为:N 。n3 设(设(AX)=0304H,(,(BX)=0FF00H则执行指令则执行指令 AND AX,BX 后,(后,(AX)=。n4 已知:已知:X补补=0075H,Y补补=0FF8BH,则,则X+Y补补=,X-Y补补=。n5 计算机内表示机器数的常用编码有计算机内表示机器数的常用编码有_ _。n6 已知已知-Y补补
31、=7001H,则,则Y=(_H)。)。n7 已知已知X-Y补补=7001H,X+Y补补=0001H,则,则2X补补=(_H)。)。42n-12n-1-10300H0000H00EAH原码、反码、补码、原码、反码、补码、ASCII、BCD码等码等8FFF7002docin/sundae_meng练习n1 十六进制数十六进制数88H,可表示成下面几种形式,请找出错误,可表示成下面几种形式,请找出错误的表示(的表示(4)。)。无符号十进制数无符号十进制数136 带符号十进制数带符号十进制数120 压缩型压缩型BCD码十进制数码十进制数88 8位二进制数位二进制数8的补码表示的补码表示n2 n位补码的
32、表数范围为:位补码的表数范围为:2n-1 N+2n-1-1。n3 设(设(AX)=0304H,(,(BX)=0FF00H则执行指令则执行指令 AND AX,BX 后,(后,(AX)=0300H。n4 已知:已知:X补补=0075H,Y补补=0FF8BH,则,则X+Y补补=0000H,X-Y补补=00EAH。n5 计算机内表示机器数的常用编码有计算机内表示机器数的常用编码有原、反、补、原、反、补、ASCII、BCD码等码等。n6 已知已知-Y补补=7001H,则,则Y=(8FFFH)。)。n7 已知已知X-Y补补=7001H,X+Y补补=0001H,则,则2X补补=(7002H)。)。docin/sundae_meng