配套课件-微型计算机原理与汇编语言程序设计_第1页
配套课件-微型计算机原理与汇编语言程序设计_第2页
配套课件-微型计算机原理与汇编语言程序设计_第3页
配套课件-微型计算机原理与汇编语言程序设计_第4页
配套课件-微型计算机原理与汇编语言程序设计_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

第1章微型计算机概述教学重点了解计算机的发展与应用基础是熟悉计算机的软硬件组成难点是计算机各个部件协调工作的过程及有关概念重点是掌握计算机科学中的术语和基本概念第1章微型计算机概述1.1计算机的发展与应用1.2计算机的基本结构和工作原理1.3计算机系统1.4微型计算机的基本概念1.1计算机的发展与应用1.1.1计算机的发展历史及发展趋势

1、世界上第一台电子计算机

2、冯·诺伊曼结构计算机

①存储程序②五大功能部件

3、逻辑部件的发展

①电子管②晶体管③中小规模集成电路

④大规模和超大规模集成电路

4、计算机的发展趋势1.1计算机的发展与应用1.1.2计算机的特点与分类

1、计算机的特点(1)运算速度快:(2)计算精度高:(3)具有“记忆”和逻辑判断功能:

(4)能自动运行并且具备人机交互功能:

1.1计算机的发展与应用1.1.2计算机的特点与分类

计算机的种类很多,随着计算机的不断发展和新型计算机的出现,计算机的分类方法也在不断变化。按照“电气与电子工程师协会”(IEEE)在1989年提出的分类方法,可以将计算机分为以下6种:个人计算机、工作站、小型计算机、主机、小巨型计算机、巨型计算机。1.1计算机的发展与应用1.1.3计算机的应用

1、科学计算

2、数据处理

3、工业控制和实时控制

4、CAD/CAM/CIMS5、人工智能

6、虚拟现实1.2计算机的基本结构和工作原理

硬件基本结构

工作原理

常用术语2.程序的自动执行1.存储程序原理1.3微型计算机系统的组成硬件(Hardware)集成电路的出现使得微处理器飞速发展CPU

存储器

外部设备软件(Software)

系统软件应用软件计算机语言机器语言:由0和1构成汇编语言:用助记符表示高级语言:类自然语言表示微处理器飞速发展8038680486奔腾奔腾2代奔腾4代802868086奔腾3代IA-64(安腾)4004不是我不明白,这世界变化太快。扎扎实实掌握知识,以不变应万变!计算机中的常用术语位(bit,b):计算机表示信息的最基本单位,一个二进制位:0或1。1Byte=1B=8bits1KB=1024B,1MB=1024KB1GB=1024MB,1TB=1024GB字节(Byte,B):相邻的8位0和1的组合,最通用的单位。字(word):计算机内部数据处理的基本单位。一个字为2字节,双字为4字节。字长:计算机能一次性处理的二进制位数称为字长。不同机型字长不同。主频,访存空间,指令执行时间计算机的五大功能部件运算器存储器输出设备控制器程序和原始数据计算结果输入设备计算机的基本结构运算器存储器输出设备控制器程序和原始数据计算结果输入设备微型计算机的硬件组成中央处理单元CPU——控制器、运算器对汇编语言程序员,最关心其中的寄存器存储器——内存、外存(主存、辅存)内存呈现给汇编语言程序员是存储器地址外部设备(接口电路)——输入设备和输出设备汇编语言程序员看到的是端口(I/O地址)图示微机硬件系统组成图数据总线地址总线控制总线ROM+RAM硬盘、软盘、U盘等I/O接口主存储器系统总线辅助存储器输入设备输出设备CPU寄存器控制器运算器Cache相关概念1.系统总线2.硬件结构计算机中连接多个功能部件的信号线,分为数据总线、地址总线和控制总线。第1章教学要求了解计算机的发展史理解计算机科学中的常用术语和概念熟悉冯·诺伊曼结构计算机的系统组成思考:为什么计算机中采用二进制?

预习第2章内容

再见第7章分支结构程序设计

本章内容提示本章将详细介绍转移类指令的应用,并介绍分支结构程序的基本形式、设计方法与设计实例7.1

转移类指令7.2

分支结构程序设计7.1转移类指令7.1.1

无条件转移指令

7.1.2

条件转移指令

返回本章首页7.1.1无条件转移指令JMPlabel;程序转向label标号指定的地址JMP指令分成4种类型:⑴段内直接短转移JMPSHORTOPR

;IP〈—(IP)+8位偏移量⑵段内直接近转移JMPNEARPTROPR

;IP〈——(IP)+16位偏移量⑶段内间接转移JMPR16/M16

;IP←R16/MEM16

不修改CS的内容。

例如:JMPAX ;IP←AXJMPWORDPTR[2000H]

;IP←[2000H]⑷段间直接转移格式JMPFARPTRLABEL

;IP〈——LABEL的偏移地址;CS〈——LABEL所在段的段地址例如:CODE1SEGMENTCODE2SEGMENTASSUMECS:CODE1ASSUMECS:CODE2START:∶BEGIN:∶∶JMPFARPTRPRINPRIN:∶NEXT:∶JMPFARPTRNEXT∶∶CODE2ENDSCODE1ENDSENDSTART⑸段间间接转移格式JMPDWORDPTROPR

;IP〈—(EA),CS〈—(EA+2)用一个双字存储单元表示要跳转的目标地址:低位字送IP,高位字送CS。

例如:

MOVWORDPTR[BX],0MOVWORDPTR[BX+2],1500HJMPDWORDPTR[BX];转到1500H:07.1.2条件转移指令JCCLABEL

;条件满足,转移:IP←(IP)+8位偏移量;条件不满足,顺序执行不影响标志位,但要利用标志位

可分为四类:1、判断单个标志位状态2、比较两个无符号数

3、比较两个带符号数

4、JCXZ特殊指令JCXZ计数器CX为0转移

JCXZlabel

;CX=0,发生转移:IP←(IP)+8位偏移量;CX≠0,顺序执行

MOVCX,100AGAIN:JCXZNEXT;判断(CX)是否为0MOVSB

;传送一个字节DECCX

;传送次数减1JMPAGAINNEXT:…...7.2分支程序的结构和程序设计7.2.1

分支程序的结构形式7.2.2

分支结构的程序设计返回本章首页7.2.1分支程序的结构形式8086指令系统有许多条件转移指令,说明8086系统有很强的逻辑判断能力,能根据逻辑判断选择执行不同程序段选择程序的结构有两种形式:双分支结构和多分支结构

(1)双分支结构(2)双分支结构(3)多分支结构程序设计7.2.2分支结构程序设计1.简单的双分支程序设计

例:内存中字节单元X,存有带符号数据,计算它的绝对值放入RESULT单元。分析:正数的绝对值是它本身,负数的绝对值是它的相反数;8086指令系统有专门的求相反数指令DATA SEGMENTXDB-25RESULTDB?DATA ENDSCODE SEGMENT ASSUMEDS:DATA,CS:CODESTART: MOVAX,DATA MOVDS,AX;初始化

MOVAL,X;X取到AL中TESTAL,80H;测试AL正负

JZNEXT

;为正,转NEXTNEGAL ;否则AL求补NEXT:MOVRESULT,AL ;送结果

MOVAH,4CH INT 21H ;返回DOSCODEENDS

ENDSTART

;汇编结束2.多分支程序设计若干个条件,每一条件对应一基本操作从若干分支中选择一个分支执行多分支结构实现的方法有:条件选择法、转移表法和地址表法

条件选择法一个条件选择指令可实现两路分支多个条件选择指令就可以实现多路分支适用于分支数较少的情况。用条件转移指令实现程序分支例:编写计算下面函数值的程序:

1 X>0Y=0 X=0-1 X<0

设输入数据为X、输出数据Y,且皆为字节变量。DATA SEGMENTXDB-25YDB?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX ;初始化 MOVAL,X ;X取到AL中CMPAL,0 ;Al中内容和0比较JGEBIG

;大于等于0,转BIGMOVBL,-1 ;否则为负数,-1送BLJMPEXIT

;转到结束位置BIG:JEEE

;(Al)是否为0,为0转EEMOVBL,1 ;否则为大于0,1送BLJMPEXIT

;转到结束位置

EE:MOVBL,0 ;0送BLEXIT:MOVY,BL ;BL中内容送Y单元

MOVAH,4CHINT21H ;程序结束CODEENDSENDSTART

;汇编结束例:试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。STASEGMENTSTACK DB200DUP(0)STAENDSDATASEGMENTX DW00ABHY DW–5Z DW200MAX DW?DATAENDSCODESEGMENTASSUMEDS:DATA,SS:STA,CS:CODESTART:MOVAX,DATA MOV DS,AX MOV AX,X CMP AX,Y ;X>Y?

JG L1 MOV AX,Y ;Y>Z?

CMP AX,Z JG EXITL2:MOV AX,Z JMP EXITL1:

CMP AX,Z ;X>Z?

JLE L2EXIT:

MOV MAX,AX MOV AH,4CH INT 21HCODE ENDS END START返回本节显示提示信息输入一个字符AL<30H?AL>39H?AL—30H送ALAL<41H?AL>46H?AL—37H送AL显示出错信息AL送NUM单元结束YNNNYYN教学重点第11章介绍实际应用当中,常见的混合编程问题,重点是参数传递方法混合编程的两种方式模块连接的约定规则模块连接的参数传递方法模块化程序设计将程序分段、采用子程序或宏结构都是进行模块化程序设计本节介绍开发大型程序时采用的方法:源程序文件的包含目标模块连接把源程序分放在几个文本文件中,在汇编时通过包含伪指令INCLUDE结合成一体INCLUDE

文件名源文件包含的操作步骤:①分别编辑生成各个文件②汇编、连接主程序文件把常用子程序写成独立的源程序文件,单独汇编,形成子程序的目标文件.OBJ主程序也经过独立汇编之后形成目标文件连接程序将所有目标文件连接起来,最终产生可执行文件需要遵循的原则:①声明共用的变量、过程等②实现正确的段组合③处理好参数传递问题目标代码文件的连接2声明共用的变量、过程各个模块间共用的变量、过程等要说明PUBLIC

标识符[,标识符...] ;定义标识符的模块使用EXTERN

标识符:类型[,标识符:类型...] ;调用标识符的模块使用标识符是变量名、过程名等类型是byte/word/dword(变量)或near/far(过程)在一个源程序中,public/extern语句可以有多条各模块间的public/extern伪指令要互相配对,并且指明的类型互相一致第9章实现正确的段组合子程序文件必须定义在代码段中,也可以具有局部的数据变量采用简化段定义格式,只要采用相同的存储模式,容易实现正确的近或远调用完整段定义格式中,为了实现模块间的段内近调用(near类型),各自定义的段名、类别必须相同,组合类型都是public。实际的程序开发中,各个模块往往由不同的程序员完成,不易实现段同名或类别相同,所以索性定义成远调用(far类型)定义数据段时,同样也要注意这个问题。当各个模块的数据段不同时,要正确设置数据段DS寄存器的段基地址第9章处理好参数传递问题少量参数可用寄存器或堆栈直接传送数据本身大量数据可以安排在缓冲区,用寄存器或堆栈传送数据的存储地址还可利用变量传递参数,但是要采用public/extern声明为公共(全局)变量这些也是子程序间的参数传递方法第9章什么是混合编程多种程序设计语言间,通过相互调用、参数传递、共享数据结构和数据信息而形成程序的过程就是混合编程程序的大部分采用高级语言编写,以提高程序的开发效率;在某些部分,利用汇编语言编写,以提高程序的运行效率混合编程方法嵌入式汇编——在C/C++语言中直接使用汇编语言语句,简洁直观、功能较弱模块连接——两种语言分别编写独立的程序模块,分别产生目标代码OBJ文件,然后进行连接,形成一个完整的程序使用灵活、功能强,要解决参数传递问题混合编程的关键问题建立不同语言之间的接口在不同格式的两种语言间提供有效的通讯方式,作出符合两种语言调用约定的某种形式说明,实现两种语言间的程序模块互相调用、变量的相互传送以及参数和返回值的正确使用TurboC嵌入式汇编方式格式

asm操作码操作数

<;或换行>举例

asmmovax,ds; asmpopax;asmpopds;asmret; asmpushds 若干注意事项操作码支持8086/8087指令或若干伪指令:db/dw/dd和extern操作数是操作码可接受的数据:立即数、寄存器名,还可以是C语言程序中的常量、变量和标号等内嵌的汇编语句可以用分号“;”结束,也可以用换行符结束使用C的注释,如

/*…*/正确运用通用寄存器、标号等/*LT602.C*/#include<stdio.h>voidupper(char*dest,char*src){ asmmovsi,src /*dest和src是地址指针*/ asmmovdi,dest asmcldloop: asmlodsb /*C语言定义的标号*/ asmcmpal,'a' asmjbcopy

/*转移到C的标号*/ asmcmpal,'z'

asmjacopy /*不是’a’到’z’之间的字符原样复制*/例11.2-1/2 asmsubal,20h/*小写字母转换成大写*/copy: asmstosb asmandal,al/*C语言中,字符串用NULL(0)结尾*/ asmjnzloop}main() /*主程序*/{charstr[]="ThisStartedOutAsLowercase!";charchr[100];upper(chr,str);printf("Originstring:\n%s\n",str);printf("UppercaseString:\n%s\n",chr);}例11.2-2/2TurboC模块连接的约定规则命名约定汇编语言过程中被C语言调用的标识符前要加上下划线“_”

声明约定C对调用的外部过程、变量等采用EXTERN说明汇编语言程序的标识符用public操作符定义寄存器使用约定存储模式约定采用相同的存储模式参数传递约定:堆栈和共享变量;汇编语言子程序:lt903s.asmdatasegmentmsg db’Hello,CandAssembly!$’dataendscodesegment

PUBLIC_display _display proc ;过程名加有下划线

movah,9 movdx,offsetmsg

;寄存器AX和DX无须保护

int21h ret_display endpCodeends end例11.3-1/2/*C语言程序:lt903.c*/externvoiddisplay(void);

/*说明display是外部函数*/main(){display();}例11.3-2/2;汇编语言子程序:lt904s.asm .modelsmall .code

PUBLIC_min _min proc ;小型模式,为近过程

pushbp movbp,sp movax,[bp+4]

;取第1个参数

cmpax,[bp+6]

;与第2个参数比较

jleminexit movax,[bp+6]

;保存返回值minexit:popbp ret_min endp end例11.4-1/2图示large688L/*C语言程序:lt904.c*/externintmin(int,int); main(){printf(“%d”,min(100,200));}小型模式编译程序和连接:

TCC-ms-Iinclude-Lliblt904.clt904s.obj大型模式编译程序和连接:

TCC-ml-Iinclude-Lliblt904.clt904l.obj例11.4-2/2例11.4的堆栈区堆栈段200+9100+4偏移地址+2BP小型模式堆栈段200+8100+6段地址+4偏移地址+2BPBP=SP大型模式VisualC++的嵌入式汇编格式

__asm{指令

}举例intpower2(intnum,intpower){

__asm {

moveax,num movecx,power shleax,cl

} //返回EAX=EAX×(2^CL)}模块连接的注意事项必须遵循共同的约定规则命名约定声明约定寄存器使用约定存储模式约定参数传递约定采用一致的调用规范声明共用函数和变量正确传递入口参数和返回参数32位汇编语言过程用.386p等处理器伪指令说明采用的指令集32位逻辑段环境有些指令在32位段与16位段有差别采用平展模式(flat)汇编时采用选项/coff;汇编语言子程序:lt614f.asm

.386p .modelflat,c

PUBLICpower2 .codepower2 proc pushebp movebp,esp moveax,[ebp+8]

;取第1个参数

movecx,[bp+12]

;取第2个参数

shleax,cl popebp ret ;返回EAXpower2 endp end例11.14-1/2图示//C++语言程序:lt914.cpp#include<iostream.h>extern“c”{intpower2(int,int);}voidmain(void){cout<<“2的6次方乘5等于:\t”;cout<<power2(5,6)<<endl;}将汇编语言程序汇编成目标代码文件:

ML

/c/cofflt614f.asm在VisualC++6.0编译环境下创建项目,插入汇编成的目标代码文,然后编译连接例11.14-2/2如何简化利用堆栈的传递参数方法例11.14的堆栈区堆栈段6+125+8EIP+4EBPEBP=ESP要调用带参数过程定义的过程,不应采用CALL指令,因为比较烦琐应该采用过程调用伪指令INVOKE使用INVOKE伪指令的前提是需要用PROTO伪指令对过程进行声明带参数过程的定义、声明和调用过程名 PROC

调用距离语言类型作用范围<起始参数> USES寄存器列表,参数:类型

LOCAL参数表

… ;汇编语言语句过程名 ENDP第9章过程声明伪指令:用于事先声明过程的结构过程名

PROTO

调用距离语言类型,参数:类型过程调用伪指令

INVOKE

过程名,参数,...如何调用;汇编语言程序:lt915.asm .modelsmallchecksumdPROTOc,countp:word,arrayp:word ;声明过程

.stack256 .dataarray db12h,25h,0f0h,0a3h,3 db68h,71h,0cah,0ffh,90hcount equ$-array

;数组的元素个数result db? ;校验和

.code .startup

INVOKEchecksumd,count,offsetarray

;调用过程

movresult,al ;保存校验和

.exit0例9.15-1/2对比checksumdPROCcUSESbxcx,\ countp:word,arrayp:word

movbx,arrayp ;BX←数组的偏移地址

movcx,countp ;CX←数组的元素个数

xoral,alsumd: addal,[bx] ;求和:AL←AL+DS:[BX] incbx loopsumd retchecksumdendp end例11.15-2/2对比;lt915.asm的列表文件(lt915.lst)

...INVOKEchecksumd,count,offsetarray* movax,wordptrOFFSETarray* pushax* movax,+000Ah* pushax* callchecksumd* addsp,04h

movresult,al

...例9.15-1/2指示该语句由汇编程序自动生成checksumdPROCcUSESbxcx,\ countp:word,arrayp:word* pushbp ;起始代码* movbp,sp* pushbx ;保护bx和cx* pushcx movbx,arrayp ;arrayp=[BP+6] movcx,countp ;cuontp=[BP+4] ...

ret* popcx ;结尾代码* popbx* popbp* ret0000hchecksumcendp例11.15-2/2进入调试程序观察;汇编语言子程序:lt916s.asm

.modelsmall,c ;采用C语言类型

publicmin

.codemin proc,var1:word,var2:word movax,var1 ;取第1个参数var1 cmpax,var2 ;与第2个参数var2比较

jleminexit movax,var2 ;保存返回值minexit: ret min endp end例11.16对比供C语言主程序调用;汇编语言子程序:lt917f.asm .386p .modelflat,c PUBLICpower2 .codepower2

PROC,num:dword,power:dword moveax,num ;获取参数

movecx,power shl

温馨提示

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

评论

0/150

提交评论