汇编语言程序设计
主讲:王建荣 助教: 罗成 Tel:27402104 E_mail: wjr@tju.edu.cn Ftp://202.113.12.9/wjr/汇编语言/2005 助教: 罗成 E_mail: luocheng19820101@hotmail.com
教材:
课程介绍 专业基础课、必修课 计算机组成原理的一个部分 软件开发的一个组成部分 一种低级语言的程序设计 高级语言程序设计的扩展
相关课程 先修课 高级语言程序设计 计算机组成原理 后续课 微机接口技术 计算机控制技术
计算机语言发展简史 机器语言 汇编语言 高级语言 FORTRAN BASIC COBOL PASCAL C/C++ JAVA …...
汇编语言 汇编语言是一种面向机器的低级程序设计语言 汇编语言以助记符形式表示每一条计算机指令 用助记符表示的指令就是汇编语言中的汇编格式指令 助记符(mnemonic)是便于人们记忆、并能描述指令功能和指令操作数的符号 助记符一般就是表明指令功能的英语单词或其缩写 用助记符表示的指令就是汇编语言中的汇编格式指令 汇编格式指令以及使用它们编写程序的规则就形成汇编语言(Assembly Language) 汇编语言源程序以 .ASM为默认的扩展名
汇编程序(Assembler) 80x86CPU的汇编程序主要有微软的宏汇编程序MASM。较著名的还有Borland公司的TASM,无实质差别 本课程采用Borland的TASM5.0
汇编语言的特点 汇编语言程序与处理器指令系统密切相关 程序员可直接、有效地控制系统硬件资源 形成的可执行文件运行速度快、占用主存容量少
汇编语言可操作的系统硬件资源 中央处理单元 存储器(主存储器) 外部设备(接口电路)
汇编语言和高级语言(1) 汇编语言与处理器密切相关 高级语言与具体计算机无关 ↘ 汇编语言程序的通用性、可移植性较差 ↗ 高级语言程序可以在多种计算机上编译后执行
汇编语言和高级语言(2) 汇编语言功能有限、涉及硬件细节 高级语言提供了强大的功能,不必关心琐碎问题 ↘ 编写程序比较繁琐,调试起来也比较困难 高级语言提供了强大的功能,不必关心琐碎问题 ↗类似自然语言的语法,易于掌握和应用
汇编语言和高级语言(3) 汇编语言本质上就是机器语言 高级语言不针对具体计算机系统 ↗ 可以直接、有效地控制计算机硬件 ↗ 易于产生速度快、容量小的高效率目标程序 高级语言不针对具体计算机系统 ↘ 不易直接控制计算机的各种操作 ↘ 目标程序比较庞大、运行速度较慢
汇编语言和高级语言(4) 汇编语言的优点: 汇编语言的缺点: 直接控制计算机硬件部件 可以编写在“时间”和“空间”两方面最有效的程序 与处理器密切有关 需要熟悉计算机硬件系统、考虑许多细节 编写繁琐,调试、维护、交流和移植困难
汇编语言和高级语言(5) 汇编语言的优点使得它在程序设计中占有重要的位置,是不可被取代的 汇编语言的缺点使得人们主要采用高级语言进行程序开发工作 有时需要采用高级语言和汇编语言混合编程的方法,互相取长补短,更好地解决实际问题
汇编语言的应用场合 程序要具有较快的执行时间,或者只能占用较小的存储容量 程序与计算机硬件密切相关,程序要直接、有效地控制硬件 大型软件需要提高性能、优化处理的部分 没有合适的高级语言、或只能采用汇编语言的时候 分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等 70%以上的系统软件是用汇编语言编写的。
一个简单的汇编语言源程序举例 分别用C语言和汇编语言编制一程序,实现如下功能: 给定两个整数(<128),将其进行加法运算并在屏幕上显示加法运算结果。
一个简单的汇编语言源程序举例 #include "stdafx.h" #include "stdio.h" int main() { int a,b,c; a=1; b=2; c=a+b; printf( "c=%d\n",c ); return 0; } 编译后的目标文件达到3.59KB
一个简单的汇编语言源程序举例 汇编后的目标文件只有208字节 mov a,1 mov b,2 mov al,a add al,b mov c,al lea dx,string mov ah,09 int 21h add c,30h mov dl,c mov ah,2 mov dl,0ah mov dl,0dh ret main endp code ends end start data segment a db ? b db ? c db ? string db 'c=$' data ends code segment main proc far assume cs:code, ds:data, es:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax 汇编后的目标文件只有208字节
学习汇编语言,你需要 胆量:不要害怕去接触那些计算机的内部工作机制。 知识:了解计算机常用的数制,特别是二进制、十六进制、八进制,以及计算机保存数据的方法。 开放:接受汇编语言与高级语言的差异,而不是去指责它如何的不好读。 经验:要求你拥有任意其他编程语言的一点点编程经验。 头脑。
为什么学习汇编 如果你仅仅只是想混口饭吃,找个工作,可能教你成为MFC的高手之类的书对你就足够了。 但是,如果你想做一个很好的软件,不仅能满足你谋一碗饭吃,还能使你扬名,最后你的软件还能成为很多人用,甚至你还想把它作为一个事业去经营,从最低层开始做起,从最基本做起。 ——梁肇新《编程高手箴言》
第1章 基础知识 数制 数制之间的转换 运算 数和字符的表示
进位记数制 二进制 B(Binary) 八进制 O(Octal) 十进制 D(Decimal) 十六进制 H(Hexadecial)
数制之间的转换 二进制数和十进制之间的转换 十六进制数和二进制之间的转换 二进制和十六进制数之间的转换
运算 算术运算 逻辑运算
运算-逻辑运算 与、或、非、异或 与(AND)
运算-逻辑运算 与、或、非、异或 或(OR)
运算-逻辑运算 与、或、非、异或 非(NOT)
运算-逻辑运算 与、或、非、异或 异或(XOR)
运算-逻辑运算 例:X=00FFH,Y=5555H,Z1=X∧Y,Z2=X∨Y,Z3= ,Z4= ,求Z1、Z2、Z3、Z4的值。 解:X = 0000 0000 1111 1111 Y = 0101 0101 0101 0101 Z1= 0000 0000 0101 0101 = 0055H Z2= 0101 0101 1111 1111 = 55FFH Z3= 1111 1111 0000 0000 = FF00H Z4= 0101 0101 1010 1010 = 55AAH
计算机中数和字符的表示 计算机中数的表示 原码:符号+绝对值 反码:正数的反码与原码相同,负数的数值位与原码相反 补码:正数的补码与原码相同,负数的补码用2n-|x|来表示
计算机中数的表示 补码 (1)写出与该负数相对应的正数的补码 (2)按位求反 (3)末位加一 补码的表数范围
补码的加法和减法 补码的加法规则是: [X+Y]补=[X]补+[Y]补 补码的减法规则是: [X-Y]补=[X]补+[-Y]补 无符号整数
BCD码及其表示 用4位二进制数表示1位十进制数 常用的BCD码存储格式 组合(压缩)型BCD码(1Byte表示2个BCD码) 7 6 5 4 3 2 1 0 BCD 个 位 十 位 非组合(非压缩)型BCD码(1Byte表示1个BCD码) 7 6 5 4 3 2 1 0 BCD 无意义
字符的编码 采用7位编码的ASCII码,用1Byte表示 非打印字符33个(用于控制) 27=128 打印字符95个 BEL(07H) 响铃 DEL(7FH) 删除 CR (0DH) 回车 LF (0AH) 换行