第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 汇编语言 程序设计 微型计算机 原理 应用 课件
- 资源描述:
-
1、1微型计算机原理及应用微型计算机原理及应用2第三章第三章 汇编语言程序设计汇编语言程序设计3.ASM.OBJ.EXE编译编译连接连接编译程序:编译程序:MASM.EXE连接程序:连接程序:LINK.EXE4用户编写程序,程序在计算机中运行,用户编写程序,程序在计算机中运行,计算机的控制计算机的控制由操作系统交给用户程序由操作系统交给用户程序,运行用户程序,当用户程序运行结束后,运行用户程序,当用户程序运行结束后,应再将控制权交回操作系统应再将控制权交回操作系统,所以,在程,所以,在程序中应该有返回序中应该有返回DOS的指令。在计算机的指令。在计算机中,返回中,返回DOS的指令是操作系统中的一的
2、指令是操作系统中的一个子程序,用户使用时应调用这个子程序。个子程序,用户使用时应调用这个子程序。5每当一个用户的可执行文件每当一个用户的可执行文件.EXE装入内存后,存储器的装入内存后,存储器的分配情况如图:分配情况如图:系统占用系统占用程序段前缀程序段前缀用户数据区用户数据区用户堆栈区用户堆栈区用户代码段用户代码段系统和系统和ROM占用占用00000HDS,ES100个字节个字节SS用户程序空间用户程序空间FFFFFHCS6系统占用系统占用INT 20H 程序段前缀程序段前缀用户数据区用户数据区用户堆栈区用户堆栈区用户代码段用户代码段系统和系统和ROM占用占用无论用户程序有几段,也无论这些段
3、无论用户程序有几段,也无论这些段的排列顺序如何,用户程序的代码前的排列顺序如何,用户程序的代码前一定有一定有100个字节的个字节的程序段前缀程序段前缀(Program Segment Prefix,简称简称PSP),PSP给出了用户的可执行文件给出了用户的可执行文件(.EXE)的若干控制信息。其中的若干控制信息。其中PSP的开始处的开始处(第第1,2字节字节)有一条中断指令有一条中断指令INT 20H的代码,这条指令的功能是的代码,这条指令的功能是结束用户结束用户程序,返回操作系统程序,返回操作系统。在用户程序执。在用户程序执行完以后,通过执行该条指令就可以行完以后,通过执行该条指令就可以返回
4、返回DOS。7如何使用户程序执行完后返回来执行这条指令?如何使用户程序执行完后返回来执行这条指令?系统占用系统占用INT 20H 程序段前缀程序段前缀用户数据区用户数据区用户堆栈区用户堆栈区用户代码段用户代码段RET系统和系统和ROM占用占用DS,ESSSCS首先将用户程序定义为一个首先将用户程序定义为一个远过程远过程,当,当可执行文件装入内存后,可执行文件装入内存后,DS,ES两个段两个段寄存器被寄存器被CPU自动设置为指向自动设置为指向PSP的首的首址址,所以一般程序的开始指令为:,所以一般程序的开始指令为:PUSH DS XOR AX,AX PUSH AX即将即将DS的内容和的内容和00
5、00H压入堆栈,程序压入堆栈,程序结束时的最后一条语句为结束时的最后一条语句为RET,就把压就把压入堆栈的入堆栈的PSP段的段基址和偏移量段的段基址和偏移量0000H弹出并送入弹出并送入CS和和IP,转而执行返转而执行返回回DOS的指令的指令INT 20H。00H00HPSPLPSPH堆栈堆栈情况情况CSIP8返回操作系统的另一个办法是用系统调用返回操作系统的另一个办法是用系统调用中断指令:中断指令:INT 21H,在用户程序结束时,在用户程序结束时,用下面两条指令:用下面两条指令:MOV AH,4CH INT 21H这两条指令经常用在短的程序段中,即用这两条指令经常用在短的程序段中,即用户程
6、序并不是一个完整的汇编程序,而只户程序并不是一个完整的汇编程序,而只是由一些指令组成的、没有堆栈区或数据是由一些指令组成的、没有堆栈区或数据区的程序段。区的程序段。9第一节第一节 伪指令伪指令10伪指令:伪指令不是处理器运行的指令,而是程伪指令:伪指令不是处理器运行的指令,而是程序员给汇编序员给汇编编译程序编译程序下达的命令。是在编译源程下达的命令。是在编译源程序期间由汇编序期间由汇编编译程序执行的命令编译程序执行的命令。因为程序要分段放在内存内因为程序要分段放在内存内,编译程序必须要编译程序必须要知道每段的起始位置知道每段的起始位置,为为CPU的段寄存器分配地址;的段寄存器分配地址;如果程序
7、中有变量如果程序中有变量,还要定义变量空间,存放数据、还要定义变量空间,存放数据、结果;知道源程序的开始、结束标志结果;知道源程序的开始、结束标志伪指令语句:在汇编时不产生二进制代码伪指令语句:在汇编时不产生二进制代码,仅为编仅为编译程序提供汇编时所需要的必要信息的语句。译程序提供汇编时所需要的必要信息的语句。11一、段定义一、段定义一般的源程序分为一般的源程序分为4个段:代码段个段:代码段Code、数据段数据段Data、堆堆栈段栈段Stack、附加段附加段Extra。各个段从段定义语句开始,到段结束语句各个段从段定义语句开始,到段结束语句ENDS结束。结束。段名段名 SEGMENT 定位类型
8、定位类型 组合类型组合类型 类别类别段体段体段名段名 ENDS用户指定用户指定可任选定义可任选定义12段名必须是合法是标识符。段名必须是合法是标识符。定位类型:定位类型:内存可以看成是一本书内存可以看成是一本书,将将其分成其分成页页,段段,字字,和字节和字节。每每256个地址为一页个地址为一页(PAGE),每页的起始地每页的起始地址为二进制:址为二进制:xxxx xxxx xxxx 0000 000016进制:进制:xxx00H第一页第一页 (256个地址个地址)第二页第二页 (256个地址个地址)00000H000FFH00100H00200H001FFH13每每16个地址为一段个地址为一段
9、(PARA),每段的起始地址为二进制:每段的起始地址为二进制:xxxx xxxx xxxx xxxx 000016进制:进制:xxxx0H第一段第一段 (16个地址个地址)第二段第二段 (16个地址个地址)xxx00Hxxx0FHxxx10Hxxx1FHxxx20H段段(节节)是默认的定位类型。是默认的定位类型。14每每2个地址为一个字个地址为一个字(WORD),每个字的起始地址每个字的起始地址为为偶数偶数;最基本的类型是字节最基本的类型是字节(BYTE),字节只包含一个地字节只包含一个地址址,可以是内存的任何空间。,可以是内存的任何空间。定位类型表示所定义的段存放在内存空间时,段定位类型表示
10、所定义的段存放在内存空间时,段首地址对内存空间的要求首地址对内存空间的要求,即段起始点是放在一,即段起始点是放在一页的起点上页的起点上(PAGE)还是一段的起点上还是一段的起点上(PARA)等,等,如果不定义定位类型,编译程序将默认其为段类如果不定义定位类型,编译程序将默认其为段类型,即将段首地址放在从型,即将段首地址放在从xxxx0H开始的内存空间。开始的内存空间。15BYTE:表示本段起始单元可以从任一地址开始;表示本段起始单元可以从任一地址开始;WORD:表示本段起始单元从一个偶地址开始表示本段起始单元从一个偶地址开始;PARA:表示本段起始单元从一个段的边界开始表示本段起始单元从一个段
11、的边界开始(默认默认);段寄存器段寄存器:H,第一个偏移地址:,第一个偏移地址:0000H物理地址:物理地址:0HPAGE:表示本段起始单元从一个页的边界开始表示本段起始单元从一个页的边界开始16组合类型组合类型组合类型是告诉编译程序,所定义的段与其他段组合类型是告诉编译程序,所定义的段与其他段的关系,即将该段存放内存时,的关系,即将该段存放内存时,是否将该段与其是否将该段与其他段在物理上或逻辑上放在一起。他段在物理上或逻辑上放在一起。常常一个汇编程序可以有很多代码段、数据段或常常一个汇编程序可以有很多代码段、数据段或堆栈段,这时,就要综合考虑各段的组合类型。堆栈段,这时,就要综合考虑各段的组
12、合类型。NONE:表示本段与其他段不发生任何关系,该表示本段与其他段不发生任何关系,该段有自己的基地址,段有自己的基地址,是默认的组合关系。是默认的组合关系。PUBLIC:在满足定位类型的前提下与其他模块的在满足定位类型的前提下与其他模块的同名段连接在一起,形成一个新的逻辑段,同名段连接在一起,形成一个新的逻辑段,共用共用一个段基址一个段基址。17COMMON:表示产生一个覆盖段。连接时,把本表示产生一个覆盖段。连接时,把本段与其他段与其他也用也用COMMON说明的同名段说明的同名段置成相同的置成相同的起始地址,重叠在一起,共享相同的存储区,其起始地址,重叠在一起,共享相同的存储区,其段长度由
13、最长的段确定。段长度由最长的段确定。STACK:在每个汇编程序中,只能必须有一个堆在每个汇编程序中,只能必须有一个堆栈段,连接时,将本段与其他栈段,连接时,将本段与其他也用也用STACK说明的说明的同名段同名段连接成一个连续的大的连接成一个连续的大的STACK段,段,编译程编译程序自动初始化序自动初始化SS和和SP寄存器寄存器,使,使SS的内容为该连的内容为该连续段的首址,续段的首址,SP指向堆栈底部加指向堆栈底部加1的存储单元。的存储单元。18MEMORY:表示本段在存储器中应定位在所有其表示本段在存储器中应定位在所有其他段的最高地址。他段的最高地址。AT:表示本段从表达式指定的地址处开表示
14、本段从表达式指定的地址处开始装入,这样,在程序中用户就可以直接定义段始装入,这样,在程序中用户就可以直接定义段地址,地址,这种方式不适用于代码段这种方式不适用于代码段。类别:类别:是用单引号括起来的字符串,连接时,是用单引号括起来的字符串,连接时,LINK程序把类别相同的段放在连续的存储区中程序把类别相同的段放在连续的存储区中(可可以不同名以不同名)。类别名可以任意,但一般为。类别名可以任意,但一般为CODE,STACK,DATA等,表明该段的类型等,表明该段的类型19例如:定义堆栈段如下:例如:定义堆栈段如下:ST SEGMENT PARA STACK STACK DB 100 DUP(?)
15、ST ENDS段名段名组合类型组合类型类别类别定位类型定位类型堆栈长度堆栈长度段结束段结束通过定义,自动初通过定义,自动初始化了始化了SS和和SP。SS:0000HSS:0063HSS:0064H100字节字节SP20连接两个汇编语言目标程序时,它们的数据段同连接两个汇编语言目标程序时,它们的数据段同名,组合类型为名,组合类型为PIBLIC,定位类型为定位类型为PARA。连连接后第一个目标程序的数据段的起始物理地址是接后第一个目标程序的数据段的起始物理地址是01010H,长度为长度为17AH,则第二个目标程序数据段则第二个目标程序数据段的起始物理地址为多少?的起始物理地址为多少?01010H+
16、17AH=0118AH 因为第二个数据段的定位类型为因为第二个数据段的定位类型为PARA,故应从节故应从节(段段)的边界开始,的边界开始,01190H因为组合类型为因为组合类型为PUBLIC,所以共用一个段基址,所以共用一个段基址,在内存中顺序存放。在内存中顺序存放。21现有汇编目标程序现有汇编目标程序A和和B,它们的数据段类别名相它们的数据段类别名相同,组合类型皆为同,组合类型皆为COMMON,若若A程序数据段中程序数据段中有字符串有字符串ABC,B程序数据段中有字符程序数据段中有字符DEF,则执行连接操作则执行连接操作 LINK A+B 后,产生目标程序的后,产生目标程序的数据段中偏移地址
17、为数据段中偏移地址为0000H单元的内容是什么单元的内容是什么?43H42H41HDS:0000HA数据段数据段46H45H44HDS:0000HB数据段数据段因为因为COMMON类型为覆盖,所以组合后类型为覆盖,所以组合后B覆盖覆盖A44H22二、过程定义二、过程定义过程的含义和子程序是一样的,一个码段中可以过程的含义和子程序是一样的,一个码段中可以包含一个或许多过程。包含一个或许多过程。码段名码段名 SEGMENT过程名过程名1 PROC FAR RET过程名过程名1 ENDP过程名过程名2 PROC NEAR RET过程名过程名2 ENDP码段名码段名 ENDSFAR:该过程为远过程,调
18、该过程为远过程,调用该过程时为段间调用,用该过程时为段间调用,即即CS和和IP均要重新赋值;均要重新赋值;NEAR:该过程为近过程,该过程为近过程,调用该过程时为段内调用,调用该过程时为段内调用,只赋值只赋值IP。(默认默认)23过程名过程名1 PROC FAR RET过程名过程名1 ENDP过程名是合法的标识符;过程名是合法的标识符;一个程序的主过程一个程序的主过程(起始指令所在的过程起始指令所在的过程)应是应是FAR过程,因为该过程是过程,因为该过程是DOS调用的。过程中应有调用的。过程中应有RET指令,以便返回到调用处。指令,以便返回到调用处。过程可以嵌套调过程可以嵌套调用,但不可以嵌套
19、定义。用,但不可以嵌套定义。过程开始过程开始过程结束过程结束24例:延时例:延时100ms的子程序,编程如下:的子程序,编程如下:DELAY PROC MOV BL,10AGAIN:MOV CX,2801HWAIT:LOOP WAIT DEC BL JNZ AGAIN RETDELAY ENDP25三、段寻址三、段寻址虽然定义了段,但由于段名是任意的,编译程序虽然定义了段,但由于段名是任意的,编译程序仍然不知道哪个段是码段,哪个段是数据段等,仍然不知道哪个段是码段,哪个段是数据段等,所以在码段中要用所以在码段中要用ASSUME伪指令进行说明,伪指令进行说明,告告诉编译器不同的段寄存器分别对应哪
20、个段地址。诉编译器不同的段寄存器分别对应哪个段地址。ASSUME 段寄存器段寄存器:段名,段名,段寄存器段寄存器:段名,段名,当汇编程序遇到一个段名时,就自动地引用给出当汇编程序遇到一个段名时,就自动地引用给出的段寄存器对段名加以汇编。的段寄存器对段名加以汇编。但汇编程序将但汇编程序将DS和和ES的值赋为的值赋为PSP首址的值,在首址的值,在程序中还要由程序中还要由MOV指令重新对指令重新对DS赋值。赋值。26系统和系统和ROM占用占用用户代码段用户代码段用户堆栈区用户堆栈区用户数据区用户数据区程序段前缀程序段前缀系统占用系统占用00000HDS,ES100个字节个字节SS用户程序空间用户程序
21、空间FFFFFHCS正确的正确的DS地址地址MOV AX,数据段名数据段名MOV DS,AX编译程序指定的编译程序指定的DS,ES的地址的地址ASSUME伪伪指令指定指令指定27码段名码段名 SEGMENTASSUME CS:码段名码段名,DS:数据段名数据段名,SS:堆栈段名堆栈段名过程名过程名 PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,数据段名数据段名 MOV DS,AX RET过程名过程名 ENDP 码段名码段名 ENDS设置段寄存器设置段寄存器(除除DS,ES)设置返回设置返回DOS指令位置指令位置设置设置DS执行返回执行返回DOS命令命令过程
22、开始过程开始过程结束过程结束28四、结束语句四、结束语句 ENDENDP:过程结束过程结束ENDS:段结束段结束END:整个汇编源程序结束整个汇编源程序结束(不配对使用不配对使用)汇编程序在编译时遇到汇编程序在编译时遇到END,便得知源程序已经便得知源程序已经结束。结束。END 表达式表达式表达式为可执行程序运行的起始位置表达式为可执行程序运行的起始位置(执行的执行的第第1条语句的开始位置条语句的开始位置),一般为主过程名。,一般为主过程名。29五、五、ORGORG 表达式表达式指定了在其后的指令或数据存放的偏移地址。指定了在其后的指令或数据存放的偏移地址。ORG 0100HMOV AX,0表
23、明该指令放在码段,其偏移地表明该指令放在码段,其偏移地址为址为0100H。码段的首地址从。码段的首地址从CS:0000H处开始。处开始。CS:0000HCS:0100H30六、完整结构六、完整结构DAT1 SEGMENT X DB 3 Y DB 5DAT1 ENDSSTA SEGMENT STACK STACK DB 100 DUP(?)STA ENDSCODE1 SEGMENT ASSUME CS:CODE1,DS:DAT1,SS:STA BEGIN PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT1 MOV DS,AX RET BEGIN ENDP
24、CODE1 ENDSEND BEGIN将将PSP首址压栈,首址压栈,以便返回以便返回DOS设置设置DS段寄存器内容段寄存器内容源程序结束,第源程序结束,第一条指令的地址一条指令的地址分配段寄存器分配段寄存器主过程名主过程名数据段数据段堆栈段堆栈段返回返回DOS31 PUSH DS XOR AX,AX PUSH AX MOV AX,数据段名数据段名 MOV DS,AX标准程序前奏,一般写在代码段开始标准程序前奏,一般写在代码段开始32第二节第二节 数据定义数据定义33一、常量、变量及标识符一、常量、变量及标识符常量:常量:二进制二进制(B),八进制八进制(Q),十六进制十六进制(H),十进制十进
25、制(D)(默认默认)100 01100100B 244Q 64H变量:变量:代表存放在某些存储单元的数据,这些数代表存放在某些存储单元的数据,这些数据在程序的运行期间随时可以修改。据在程序的运行期间随时可以修改。在程序中以在程序中以变量名变量名的形式出现。的形式出现。定义变量:定义变量:给变量分配存储单元给变量分配存储单元,为这个单元起名为这个单元起名字字(变量名变量名),可以同时将这些存储单元预置初值。可以同时将这些存储单元预置初值。34每个变量都有三个属性每个变量都有三个属性1)段属性段属性(SEG)变量所在的存储单元的段基址变量所在的存储单元的段基址2)偏移量属性偏移量属性(OFFSET
展开阅读全文