预备篇-汇编预备知识_第1页
预备篇-汇编预备知识_第2页
预备篇-汇编预备知识_第3页
预备篇-汇编预备知识_第4页
预备篇-汇编预备知识_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言与接口技术第一章预备篇-汇编预备知识一、汇编语言的概念汇编语言是介于计算机能直接理解的机器语言与用户容易理解的高级语言之间的一种低级语言。汇编语言除了有与代码指令一一对应的符号指令外,还增加了专用于定义变量,常量,符号,过程,分配存储空间,定位程序起始地址等一系列指令称之为伪指令的符号指令。低级语言: 机器语言〔指令系统、操作码+操作数〕 汇编语言汇编语言实际上是机器语言的一个助记版本,它有一套指令系统,其中的汇编指令和机器指令是一一对应的。和机器指令不同,汇编指令是一些助记符〔通常是英文单词的缩写〕,而不是二进制代码,因此记忆这样的指令非常容易。汇编语言是一种针对机器指令的语言,但是使用它编制的程序只是一些文本信息,并不能直接在CPU上运行。因此必须要将汇编语言程序〔使用汇编语言编制的源程序〕翻译成可执行程序〔机器指令组成的程序〕,这个翻译过程叫做汇编。指令、伪指令以及程序设计规那么构成汇编语言系统。二、汇编语言的特点

相对高级语言而言,汇编每一行都是CPU执行的一条指令〔可执行程序最根本的组成元素〕,程序处于底层,紧密贴合硬件,更能有效地访问、控制计算机的各种硬件资源,如磁盘、存储器、CPU、I/O端口等;由于是使用指令直接进行程序编写,执行效率比高级语言编译而得的程序高〔占用资源少、执行速度快〕C语言实现c=a+b,并在屏幕上显示出结果

#include"stdafx.h"#include"stdio.h"intmain(intargc,char*argv[]){inta,b,c;a=3; b=2; c=a+b; printf(“c=%d\n",c); return0;}编译后的目标文件到达3.59KB汇编语言程序:c=a+bdatasegmentadb?bdb?cdb?stringdb'c=$'dataendscodesegmentmainprocfarassumecs:code,ds:data,es:datastart:pushdssubax,axpushax

movax,datamovds,axmoves,ax

mova,3movb,2moval,aaddal,bmovc,alleadx,stringmovah,09int21haddc,30hmovdl,cmovah,2int21hmovdl,0ahint21hmovdl,0dhint21hretmainendpcodeendsendstart汇编后的目标文件只有208字节三、汇编语言的应用范围通过和高级语言的比较可以理解,汇编语言针对的应用主要是硬件的控制和核心算法的编制。适合使用汇编语言的场合如下:(1)如果实际应用中需要设计硬件接口,那么必须使用汇编语言对接口进行调试,检查硬件接口设计是否正确;调试结束后还需要编制完整的驱动程序,使之提供给上层软件的系统调用,这通常也是使用汇编语言来完成的。(2)如果实际应用中需要使用已有硬件的特殊功能,这些特殊功能是高级语言中没有提供的,那么可以使用汇编语言程序直接控制该硬件。例如有些应用中需要使用MMX指令加速某些数字图象算法,那么就需要使用汇编语言来实现。(3)一个高级语言编制的应用软件中可能包含了成千上万行高级语言代码,但是并不是每行代码都是经常被执行的,经常被循环执行的代码往往只占总代码数量的一小局部,这局部代码被称为核心代码。在应用软件最终产品化的时候,核心代码往往改用汇编语言实现,以提高其运行效率。核心代码的效率提高就代表着这个软件的整体执行效率提高了。四、为什么学习汇编语言

从课程〔知识〕的角度涉及到计算机软硬件的最根底的局部,它是大学学习阶段深入计算机系统底层的一门课程,是进入计算机底层世界的门户,作为理解多门后期课程的根底,它起着至关重要的作用。后期课程:操作系统、接口与外部设备、嵌入式系统、计算机体系结构等指令系统层微体系结构层数字逻辑层面向问题的语言层汇编语言层操作系统层从编程〔技能〕角度看1〕汇编语言〔除机器语言外〕是计算机语言中最接近底层硬件的语言,直接用于控制硬件,是编写硬件驱动程序、调试硬件接口必不可少的工具。2〕由于直接使用指令进行程序设计,它的执行效率很高,速度比高级语言程序快,占用的空间比高级语言程序小,是通常用作编写核心算法的语言。五、如何学习汇编语言1、了解以X86系列的PC机的根本结构〔编程结构〕2、掌握X86系列微处理器的指令系统及寻址方式3、学习记忆汇编语言的语法4、掌握程序设计的根本方法5、理论联系实践以动手实践带动学习记忆作业、实验〔多看程序,多写程序〕编程:模仿→改造→创新本门课程的教学目的和要求(1)能够阅读汇编语言程序,并能够正确解释其功能(2)能够编写一些完整的、实用的汇编语言程序(3)能够正确使用汇编工具和调试工具,使编写的汇编语言程序能在计算机上正确运行(4)通过对汇编语言的学习,逐步了解计算机系统的底层工作原理,并逐步建立一个硬件系统的根本框架参考资料:1、IBM-PC汇编语言程序设计(第2版)

沈美明温冬婵清华大学出版社

2、IBM-PC汇编语言程序设计例题习题集 沈美明温冬婵清华大学出版社教学内容和学时分配授课方式:讲课(36学时)+实验(12学时)考核方式(考试课):

平时成绩(30%)+考试成绩(70%)六、数据的表示和类型比方:1011B=111011O=5217777O=40951011H=4113数的二进制表示B、八进制表示O、十进制表示D、十六进制表示H有符号数的补码表示正数最高位为0,负数最高位为1。正数的补码形式不变,负数的补码形式由对应的正数每一个二进制位变反,最后结果加1。3的8位二进制补码:00000011-3的8位二进制补码:11111101BCD码是用4位二进制表示1位十进制。比方:668的BCD码是:011001101000数据根本类型:字节(byte),字(word),双字(DW),四字,十字节。ASCII码——美国信息交换标准码例:‘A’41H‘a’61H‘1’31H换行0AH回车0DH空格20H七、计算机系统概述计算机系统包括硬件和软件两局部硬件:CPU、存储器、总线控制器、输入设备和输出设备软件:为了运行管理和维护而编制的各种程序的总和软件分成系统软件和用户软件两大类。1、计算机硬件系统

存储器中央处理器总线控制

CPU逻辑大容量接口存储器

I/O设备图1.1计算机结构图存储器是计算机的记忆体。人们编写的程序〔指令序列组成〕就存放在此,也可存放程序中所用的数据,信息和中间结果。问题:冯.诺依曼是什么人,提出什么计算机方案?PC机内有1M字节随机存取的存储器RAM及40K字节ROMBASIC的解释程序、根本输入/出系统软件BIOS中央处理机包括运算器和控制器两局部。运算器执行所有的算术、逻辑运算指令。控制器那么负责中央处理机内全部的控制动作,它协助运算器完成各种运算。I/O子系统包括I/O设备〔负责与计算机外部世界通信用的输入/出设备:终端、键盘、打印机等〕和大容量存储器两类〔大容量存储器指可存储大量信息的外存如磁盘、磁带、光盘等〕。机器内部的存储器称为内存——容量有限,但速度快。除必要的系统程序外,一般程序〔包括数据〕只存放在外存中,只有当运行时,才将它从外存传递到内存的某个区域,由CPU执行。2、中央处理器CPU的任务是执行存放在存储器里的指令序列IBMPC机中的CPU由一个微处理芯片8088组成,主要性能:系统时钟4.77MHZ、根本指令99条、机内字长16位,数据线8根,地址线20根〔1M字节的寻址能力〕平均运算速度0.65Mps(兆次/秒〕系统总线16位ALU的数据总线

123458位数据总线20位地aBus

ALUPSW(F)1.2.3.4.5.

图1.28088CPU内部通讯存放器是I/O,MEM与EU部件交换数据的暂存存放器。BIU负责8088CPU与存贮器和I/O设备之间的信息传递:BIU从内存指示地址取出指令,并送指令流字节队列去排队。执行指令时,所需的存贮器操作数也由BIU从内存指定单元取出,传送给Eu去执行四个段存放器CS,DS,SS和ES,指令指针IP以及地址加法器产生存取数据或指令的20位地址,指令流字节队列存放取出来的指令。8088存放器组通用存放器组〔数据存放器组〕:AX,BX,CX,DX用来暂时存放计算过程中所用到的操作数,结果或信息。它们都可以字〔16位〕或字节〔8位〕形式访问,比方:AX,AH,AL,BX,CX,DX,DH,DL。这些都是通用存放器又可用于各自的专用存放器。AX:累加器,算术运算的主要存放器;所有的I/O指令都参与外设传送信息。BX:在计算存储器地址时,经常用作基址存放器。CX:在循环〔Loop)和串处理指令中用作隐含的计数器。DX:一般在做双子长运算时把DX和AX组合在一起存放一个双字长数,DX放高16位:对某些I/O操作,DX可用来存放I/O的端口地址。指针和变址存放器:SP,BP,SI,DI四个16位存放器。存放16位的操作数;更经常的用途是在段内寻址时提供偏移地址。使用指针和变址存放器,除减少指令长度外,更重要的作用是:使指令访问的地址是程序运算的结果。这个是指针或变址存放器与16位通用存放器进行算术和逻辑运算得到的。BP,SP:堆栈指针存放器,SP+SS在RAM中建立堆栈,并通过栈顶来存取站中的数据。而BP+SS不通过栈顶存取堆栈中某单元的信息。变址存放器SI,DI为变址存放器:它们有自动增量,自动减量的功能,与DS联用,确定数据段中某一存储单元的地址,在串处理中,SI,DI作为隐含源变址、目的变址存放器。此时SI与DS联用,DI与ES联用,到达在不同段寻址的目的。段存放器:CS:代码段存放器DS:数据段存放器SS:堆栈段存放器ES:附加段存放器16位存放器,用来标识当前代码段,数据段,堆栈段和附加段。功能:主要是使8088CPU对IBMPC内存的不同段进行读写。控制存放器IP和PSWIP——指令指针存放器〔存放代码段中的偏移地址〕,在程序执行过程中,它始终指向下一条指令的首地址,它与CS存放器联用取得确定的下一条指令在存储器中的物理地址,控制器可取得下一条执行指令,控制器一旦取得这条指令。就马上修改IP的内容,让它指向下一条指令的首地址。PSW程序状态字存放器〔16位〕由条件标志和控制标志构成。1514131211109876543210条件码标识:条件码标识〔6个〕,用来记录程序运行和状态信息。这些信息往往作为条件转移指令的控制条件。OF溢出标志OF=0:-128<=B<=127-32768<=W<=+32767;否那么OF=1SF符号标志与运算结果的最高位相同ZF零标志ZF=1:结果为0;否那么ZF=0AF辅助进位标志中间位向高位进位或借位时,AF=1;否那么AF=0PF奇偶标志操作数中1的个数为偶PF=1CF进位标志CF=1:最高有效位有进位注意:解有符号数的算术运算,必须根据OF是“1〞还是“0〞决定是否溢出。对于无符号的算术运算,必须根据CF是“1〞还是“0〞来决定。进位和溢出是两个不同性质的标志不要混淆确定CF和OF的值:字节〔-1〕+〔-1〕=-2的有符号数运算11111111+11111111CF=1OF=0←无溢出111111110(+100)+(+100)=20001100100+01100100CF=0011001000OF=1有溢出控制标志:DF方向标志DF=1(DOWN方向减量)DF=0(UP方向增量)IF中断标志IF=1(CPU响应外部中断请求)STIIF=0(CPU不响应外部中断请求)CLITF追踪标志TF=1〔CPU单步操作〕TF=0(连续操作)3、存储器存储单元的地址和值:计算机存储信息的根本单位是位、字节和字。每位是一个二进制数,一位可存储一个二进制数0或1,每8位组成一个字节,两个字节组成一个字。一字节高位字节低位字节一个字在存储器里以字节为单位存储信息,为了正确存放或取得信息,每一个字节单元给一个存储器地址。地址从0开始编号,顺序的每次加1——无符号的二进制数,以十六进制方式书写。16位二进制可标识多少单元的地址?:216个。那么16位〔一个字长〕可表示的地址范围有0-655351024=1k=210为讨论存储器容量的根本单位,那么65535个字节单元的存储器容量为64k〔210+6=210*26=64*210〕地址编号的范围〔十六进制表示〕0000H-FFFFHx表地址;〔x)表示该单元的内容。(0010)=1234H0010H1234H((0010))=(1234)=2F1EH一个存储单元中存放的信息为该存储单元的内容,字的存入如下图:低字节存入低地址0010H0011H〔0010)w=1234H〔0010)b=34H同一个地址既可看作字节单元的地址,又可作为字单元的地址,视具体情况而定。机器里访问存储器〔要求存数或取数〕都是以字为单位进行的。即:机器是以偶地址访问存储器的,这样,对于奇地址的字单元,要取一个字需要访问二次存储器。堆栈

IBMPC的堆栈是在内存RAM中开辟的一端固定一端活动的存储空间,活动端为栈顶,固定端为栈底。栈的伸展方向是从高地址到低地址,进栈时SP的变化顺序SP-2,SP-4,SP-6,…SP-2I,出栈时SP的变化顺序SP+2,SP+4,SP+6,…SP+2I作用:中断,子程序嵌套,递归,保存现场,存放中间结果等。内存分段内存由RAM和EPROM/ROM构成,由于8086/8088有20条地址线,且存储器是以字节为单位,故其直接寻址能力可达1MB〔220字节〕,而8088CPU内部的EU只能进行16位运算,与地址有关的存储器也都是16位,那么如何得到20位地址?涉及到内存分段技术。地址分段的范围00000H-FFFFFH在编程时,将存储器划分成假设干段,每个段的大小可达64K〔216〕——段内地址可用16位表示。实际可依需要来确定段的大小——64K范围内的任意个字节数。可用16位表示段地址,访问存储单元时,用段地址+十六位段地址偏移量可得到确定的单元位置。——“位置〞即为物理地址。段地址放入段存放器CS,DS,SS,ES物理地址的计算方法为:将段地址后添加4位零,再加上偏移地址值。16X段地址+偏移地址=物理地址16位段地址0000+16位偏移地址————————————20位物理地址一般情况下,物理段在存储器中的分配是由操作系统负责的。逻辑段可以在程序中重新定义,各逻辑段也可以允许重叠。例如:代码段占8K存储区〔2000H〕数据段占2K存储区〔800H〕堆栈段占256B存储区分配如下二种:内存

CS0150H64K代码01500HDS4200HSS1CD0H64K堆栈1CD00HESB000H64K数据42000H64K附加B0000H

内存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论