资源预览内容
第1页 / 共71页
第2页 / 共71页
第3页 / 共71页
第4页 / 共71页
第5页 / 共71页
第6页 / 共71页
第7页 / 共71页
第8页 / 共71页
第9页 / 共71页
第10页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
汇编语言程序设计先修课 程高级语言程序设计教材汇编语 言及应用教程,李浪 熊江 齐忠主编, 华中科技大学出版社 参考书IBM-PC汇编语 言程序设计(第2版) ,沈美明 温冬婵 编著, 清华大学出 版社 汇编语 言,王爽 编,清华大学出版 社 学时课堂教学32学时,上机实践8学时考核方式考核方式期末考试: 60平时成绩: 40作业: 10上机: 30作业: 40n程序一词来自生活,通常指完成某些事务的 一种既定方式和过程n在日常生活中,可以将程序看成对一系列动 作的执行过程的描述 什么是程序n介绍你从住处到学校上课的过程 银行1、带上存折/银行卡去银行 3、将存折或储蓄卡递给银行职 员并告知取款数额 2、取号排队5、银行职员办理取款事宜 生活中的程序6、拿到钱并离开银行 4、输入密码 1、做口述笔记 2、键入信函的内容 3、发送传真1、口述2、信函mov ax, y add ax, x mov sum ,ax指令被逐条执行程序员老板秘书计算机程序:为了让计算机执行某些操作或解决 某个问题而编写的一系列有序指令的集合 要执行的一组指令3、传真计算机中的程序编写程序的工具就是计算机语言,汇编就是多种语 言中的一种汇编语言是什么?汇编语言能做什么?汇编语言为什么学?汇编语言怎么学?初始汇编语言初始汇编语言汇编语言机器语言 高级语言FORTRANBASICPASCALC/C+JAVAScriptx word ? y word ? sum word ?mov x, 100 mov y,200 mov ax, y add ax, x mov sum ,ax66C705002040006400 66C70502204000C800 66A102204000 66030500204000 66A304204000 int x, y, sum;x=100; y=200;sum=x+y;机器语言汇编语言C/C+语言3种类型语言之间的直观比较机器语言n机器语言 真正唯一能让CPU直接识别的语言。 它是用二进制编码表示的机器指令的集合及一组 使用机器指令的规则。例1:用8086机器语言实现简单加法(2200H)+(2201H)结果存放在(2202H)中的程序片段:用16进制表示A0 00 22 ;将(2200H)中的数送到AL中 02 06 01 22 ;将(AL)+(2201H),和数送到AL中 A2 02 22 ;将(AL)送回(2202H)中机器语言优缺点优点:目标程序小,执行速度快,效率高;缺点:表达的意义不直观,编写、阅读、调试较困难。汇编语言n汇编语言:是一种符号语言,与机器语言一 一对应;使用助记符表示相应的操作,并遵 循一定的语法规则。n与机器语言有类似的优缺点,比机器语言更 容易所理解。A0 00 2202 06 01 22A2 02 22MOV AL , 2200HADD AL , 2201HMOV 2202H , AL高级语言n高级语言:面向人的语言,有多种类型。优缺点优点:便于阅读,易学易用,不涉及硬件,具有通用性;缺点:目标代码冗长,占用内存多,从而执行时间长,效 率不高,不能对某些硬件进行操作。高级语言与汇编语言开销对比n下面是两个小例子,例2是用高级语言VC+编写的,例 3是用汇编语言编写的。它们完成相同的功能。例2#include “stdio.h“ main() int a,b,c;a=1;b=2;c=a+b;printf(“c=%dn“,c); 编译后的目标文件 达到3.59KB高级语言与汇编语言开销对比data segment a db ? b db ? c db ? string db c=$ data endscode segment main proc farassume cs:code, ds:data, es:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,axmov 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 int 21h mov dl,0ah int 21h mov dl,0dh int 21h retmain endpcode ends end start汇编后的目标 文件只有 208字节例3用高级语言和汇编语言书写的程序均不能被CPU 直接识别并执行,这些程序通称源程序。因此,所有源程序都必须翻译成目标程序后才能被 CPU执行。高级语言程序、汇编语言程序和机器语言程序的关系:高级语言源程序编译 解释汇编语言源程序汇编目标程序相应编译器或 解释程序汇编程序汇编程序则专门负责完成将汇编语言源程 序翻译为目标程序汇编语言相对于高级语言的特点:n汇编语言是面向机器的语言,它的指令语句与机器指令 一一对应,是 机器指令的符号表示。因此,对于不同类 型的cpu,要求使用不同的汇编语言和汇编程序。n汇编语言保持了机器语言的特点,具有直接和简捷的特 点。n汇编语言可有效地访问、控制计算机的各种硬件设备, 如磁盘、存储器、cpu、I/O端口等。n汇编语言程序目标代码简短,占用内存少,执行速度快 ,是高效的程序设计语言。n汇编语言程序编写繁琐。n汇编语言程序调试困难。单条指令功能有限通用集成编程环境少汇编语言能做什么?(应用)n对软件的执行时间或存储容量有较高要求的场合。例如:实时控制系统、智能化仪器仪表及高性能软件。n需要提高大型软件性能的场合。 例如:某些快速处理、位处理等高效程序用汇编语言编写的n与硬件关系密切,要直接有效控制硬件的场合。n其它不适合高级语言的场合。n经常和高级语言配合使用。是否采用汇编语言编程,主要权衡 软件的开发时间及软件的质量。适度地追求“时空” 效率为什么学习汇编语言n评论语言优劣,如同争论兵器高下!高级语言 长兵器汇编语言威力强大却难免滞重, 长于大型应用,可谓“ 一寸长,一寸强”轻巧灵活却难免有风险 ,长于底层应用,可谓 “一寸短,一寸险”西门吹雪的一剑西来,那是c语言;李寻欢的小李飞刀,那 是汇编语言;陆小凤的灵犀一指,那是机器语言。短兵器汇编语言指令是用一些具有相应含义的助记符来表达 的,是对机器指令的一种直观对应表达汇编语言指令与机器密切相关,不同的机器有不同的 指令系统,比如:8086 vs 80386,使得移植性差正是因为汇编语言有“机器相关”特性,所以程序员写汇编程序时 候,可以充分发挥自己的聪明才智,对机器的各种资源进行合理 的安排,使他们始终处于最佳的使用状态,最终效果是:程序的 执行代码短,执行速度快。现在高级语言编译程序在进行寄存器 分配和目标代码生成时,都有一定程度的“优化策略”,但是这种 策略要适应各种不同情况,所以,高级语言的这种优化只能在宏 观上,不能在微观上。反观汇编,程序员几乎就是直接在写执行 代码,故此,可以在具体细节上进行优化。(这是汇编高效率的 直接原因)汇编语言怎么学好汇编语言怎么学好n汇编语言是一种面向机器的语言,其汇编指令与机 器指令基本上一一对应,所以汇编语言也同机器指令 一样具有功能单一、具体的特点。要想完成某件工作 (比如计算A+B+C),就必须安排CPU的每步工作( 比如:先计算A+B,再将C加到前者的结果上)。n 故此:由于汇编语言要安排运算的每一个细节,这就 使得编写汇编语言程序比较繁琐,复杂。一个简单的 计算公式,也要用一系列汇编指令一步一步来实现。 我们可以看出,编程者是个事无巨细的导演,要操心 每一步,对每一个演员(数据)的每个动作进行指导 (指令) 。而不能象高级语言那样当甩手掌柜!“事事操心、操心事事”对汇编程序调试的复杂性要有心理准备在通常情况下,调试汇编语言程序要比调试高级语言困难 :1.汇编语言指令涉及到机器资源的细节,在调试过程中,要 清楚每个资源的变化情况;2.在编写汇编语言程序时,为了提高资源的利用率,可以使 用各种实现技巧,而这些技巧完全有可能破坏程序的可读 性。于是,在调试过程中,除了要知道每条指令的执行功 能,还要清楚它在整个目标实现过程中的作用;3.高级语言几乎不显示的使用“转移指令”,但汇编语言要用 到大量的各类转移指令,这些跳转指令大大增加了调试的 难度。如果在汇编语言中不使用“转移指令”,那么,汇编 程序就变成了单调的顺序程序,这很不现实!汇编语言怎么学好对初学者而言,汇编的命令太复杂,往往学习很长时也 写不出一个漂漂亮亮的程序,以至妨碍了我们学习汇编 语言的热情,不少人就此放弃。要有持之以恒的必胜信 心!为了使学习汇编语言有个好的开始,你必须要先排除那 些华丽复杂的命令,将注意力集中在一些重要的指令上 ,比如:CMP、LOOP、MOV、JMP、。汇编语言怎么学好最重要的一点就是:实践出真知,多写、多练、多读、多分析要有自信心,你们是最棒的学习方法n兴趣是最好的老师!nAttitude is everything! n实践是检验真理的唯一标准!学习目标n了解以Intel系列微处理器为基础的PC机 的基本结构(编程结构)n掌握Intel系列微处理器的指令系统及寻址 方式n熟悉汇编程序的上机操作环境n会读、会编、会调试汇编程序课程要求n课堂上注意听讲、重要的是理解n部分补充例题等内容需要笔记n课堂外一定要看书复习或预习、独立、认 真完成作业n充分利用上机时间、多编程练习汇编语言预备知识复习n我们的惯用思维是十进制,但计算机的世界是二进制, 无论是高级语言还是汇编语言最终都要转换为机器语言 ,即二进制形式。n本节我们要复习:1、进位计数制2、不同基数的数之间的转换,特别是二进制 十进制、二进制 十六进制之间的转换。3、不同基数的数的运算4、机器数的表示,重点掌握有符号数的补码表示数制n十进制:基数为10,逢十进一,权为10kq12.34 = 1101 + 2 100 + 3 10-1 + 4 10-2 n二进制:基数为2,逢二进一,权为2kq(1101)2 = 1 23 + 1 22 + 1 20 = (13)10n十六进制:基数为16,逢十六进一,权为16kq(9187)16 = 9 163 + 1 162 + 8 161 + 7 160n八进制:基数为8,逢八进一,权为8kq(147)8 = 1 82 + 481 + 7 80例:若要写一个八进制数 197,对否例:同样的一串数字101,若表示的数制不 一样,其含义也不一样,如下:十进制数 101D=二进制数 101B=八进制数 101O= 那么如何区分它们呢现对常用进制数归纳总结如下:数制n在计算机中为了区分不同数制的数据,采用以下方法:十进制数-后跟D 八进制数-后跟O二进制数-后跟B 十六进制数-后跟H进制转换n十进制数126转换 为二进制和十六进制126633122 0215 7 3 1
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号