微型计算机原理及应用(第三版)电子备课第7章ppt下载
爱问共享资料拥有大量关于微型计算机原理及应用(第三版)电子备课第7章.ppt的实用类文档资料计算机原理教案下载,所有文档由著名合作机构以及专业作者提供,线上总资料少于两个亿计算机原理教案下载,保证满足您的需求。
第章微型计算机汇编语言及汇编程序宏汇编语言的基本句型伪指令宏指令系统功能读取汇编程序的功能及汇编过程汇编语言程序设计例题汇编语言和机器语言相比使用汇编语言来撰写程序的突出特点就是可以使用符号详细地说就是可以用助记符来表示指令的操作码和操作数可以用标号和符号来取代地址、常量和变量。助记符通常都是表示一个操作的英语字母的简写很方便辨识和记忆。不过用汇编语言撰写的程序不能由机器直接执行而应当翻译成由机器代码组成的目标程序这个翻译过程称为汇编。在微型机中当前绝大多数状况下汇编过程是通过硬件手动完成的。拿来把汇编语言撰写的程序手动翻译成目的程序的硬件叫汇编程序。汇编过程的涵义如图所示。图用汇编语言撰写的程序叫源程序。上面讲的指令系统中的每条指令都是构成源程序的基本句子。汇编语言的指令和机器语言的指令之间有一一对应的关系。因此汇编语言是和机器紧密相关的是面向机器的语言CPU不同的机器有不同的汇编语言。选用汇编语言进行程序设计时我们可以充分运用机器的软件功能和结构特性进而可有效地推动程序的执行速率降低目标程序所占用的储存空间。因而与初级语言相比汇编语言为我们提供了直接控制目标代码的方式并且可以对键入输出端口进行控制实时功耗好执行速率快和节约储存空间等显著特点。
因此汇编语言大量被适于撰写计算机系统程序、实时通讯程序、实时控制程序等。和系统的汇编程序完全相似简称作ASM。在此基础上逐步扩充其功能成为当前广泛使用的宏汇编程序简称作MASM。单击此处编辑页脚标题式样单击此处编辑页脚副标题式样宏汇编语言的基本句型伪指令句子格式图它与指令句子不同伪指令句子(又叫命令句子)中的伪指令原本不形成对应的机器目标代码。它只是是告诉汇编程序对上面的指令句子和伪指令句子的操作数应当怎样形成机器目标代码。每一条伪指令句子共分个数组它的指令格式如图所示。标号昵称段这是一个任选数组。标号名前面不能用逗号“:”这是它与指令句子的突出差别。不同的伪指令标号名可以是常量名、变量名、过程名、结构名、记录名等。他们可以作为指令句子和伪指令句子的操作数这时标号名就表示一个常量或储存器地址。伪指令数组这是伪指令句子不可省略的主要成份。伪指令种类太多如定义数据伪指令DBDWDD段定义伪指令SEGMENT定义过程伪指令PROC…。他们是伪指令句子要求汇编程序完成的详细操作命令。操作数字段本数组是否还要还要几个):连结方法告诉连结程序本段与其他段可按某些方法连结它有种选择。PUBLIC告诉连结程序把本段与其他同名同类型的段连结上去公用一个段的起点地址产生一个数学段。
STACK表示本段是堆栈段连结方法同PUBLIC连结后的段起始地址在SS键值中。连结程序要求源程序起码要有一个堆栈段否则提示错误此刻系统取约定堆栈段值。空缺(NONE)表示本段不与任何段连结这是系统蕴涵连结模式。COMMON表示本段与同名同类型的段共用同一段起始地址即同名同类段相重叠段的宽度是最长段的厚度。MEMORY表示本段在连结时定位在所有段之上即高地址处。AT式子表示本段定位在式子值指定的段地址处。()‘类别名’:类型名是合法的自定义符它应当用单冒号括上去。但凡类型名相似的段在连结时均按先后次序连结上去。段寻址说明伪指令格式:ASSUME段寻址:段定义名[段寻址:段定义名…]该伪指令告诉汇编程序在汇编时段寻址CS:DS:SS:和ES:应具备的符号段基址从而汇编指令时确定段和完善错误信息。虽然段寻址实际值(CS除外)需要由传送指令在执行程序时形参。过程(子程序)定义伪指令格式:〈过程名〉PROC[NEAR](或[FAR])〈过程名〉ENDP过程名是自定义符。定义过程是为实现子程序读取而设的。读取格式为:CALL〈过程名〉过程由RET指令返回它可以不是最后一条指令它在过程中可以设多点返回。
过程起始名和中止名应当相似。类别NEAR和FAR默认时系统约定是近过程连任NEAR时过程是段内读取过程中的RET是段内返回。连任FAR时过程是段间读取过程中的RET是段间返回。模块开始伪指令格式:NAME模块名该伪指令指明程序模块的开始并强调模块名。模块名是自定义符它不能是系统保留字每天汇编只好出现一次。若该伪指令默认则取TITLE句子中的页标题前个字符若没有TITLE句子则取源程序文件名为模块名。模块结束伪指令格式:END[启动标号或过程名]该伪指令告诉汇编程序源文件结束并给出执行程序的入口位置。启动地址只有在主模块才有意义。定位伪指令格式:ORG〈表达式〉该伪指令把以下句子定义的显存数据或程序从式子指定的起点(偏斜地址)开始连续储存直到遇见新的ORG指令。式子的值是一个无符号数。列表伪指令()构建标题格式:TITLE标题为列表文件每篇第一行定义大标题。()构建小标题格式:SUBTTL小标题为列表文件每篇定义小标题输出在大标题后来。()手动排版(行数、列数)格式:PAGE行数行字数为列表文件定义每篇行数(~)和每行字符数(~)默认值是行列。系统蕴涵进位制伪指令格式:·RADIX式子定义在源程序内史写数据时的蕴涵进位制模式。
式子的值是~之间的十补码数要碰到新的·RADIX句子后才改变蕴涵进位制。诸如式子取值是时抒写默认后缀的数据是八补码而不是十补码。连结伪指令连结伪指令主要解决多模块的连结问题对一个大程序来说常常要分模块编程分模块调试最后再系统连结与调试。连结伪指令为多模块连结进行说明。()公用符号伪指令格式:PUBLIC〈符号名[符号名…]〉本模块用PUBLIC伪指令说明的自定义符号名可由其他程序模块引用没有说明的符号名不能被其他模块引用。符号名可以是变量名、标号、过程名或符号常量等。()引用符号伪指令格式:EXTRN〈符号名:类别[符号名:类别…]〉在本模块引用的在其他模块定义的符号名应当用EXTRN进行说明否则不能引用。之外还应留意所引用的外模块定义的符号名还应是用PUBLIC伪指令说明过的。类别是指符号名的类别他们可以是:显存变量型:BYTEWORDDWORD过程型:NEARFAR数值型:ABS()插入伪指令(或称包含伪指令)格式:INCLUDE〈模块名〉在本模块汇编时把另一模块插入该伪指令处一起汇编被插入的模块可以是不完整的。()合段伪指令(或称组合伪指令)格式:组名GROUP〈段名[段名段名…]〉把其后指定的段组合在一个KB的数学段中组名和段名都是自定义符但不可重名。
记录伪指令()记录定义伪指令格式:记录名RECORD〈字段名:数组宽[数组名:数组宽…]〉记录定义伪指令完成对显存单元二补码位的定义这在实际应用中可以实现按位继电器量或按位组合信息的处理。记录名和数组名是自定义符数组长度是~常数。记录是把~个二补码位分为段并赋予一个数组名。记录定义伪指令不真正为记录分配显存单元它也是在汇编时进行记录名、字段名以及记录宽度的说明。()记录储存单元分配及形参格式:[变量名]记录名〈字段值表〉变量名是自定义符数组值表中的各数组值赋给记录的各数组中其次序与记录定义的次序相似若数组值表中的这些项默认则默认值为。应用时尖括弧“〈〉”不能默认。诸如:TANRECORDX∶Y∶Z∶APTAN〈〉BPTAN〈〉此例在储存器中分配两个记录每位记录长是两个字节(位)。()记录操作符①WIDTH格式:WIDTH记录名(或数组名)用该操作符可求出记录或数组所占的位数。诸如:MOVAXWIDTHTANAX←MOVBHWIDTHYBH←②MASK格式:MASK记录数组名用该操作符可返回记录数组位或使用状况它是位或位二补码数表示是该数组位表示不是该数组位。诸如:MOVALMASKZAL←BMOVBLMASKXBL←B结构伪指令结构伪指令是把多个数据定义句子组织成一个结构而把每一个数据定义句子称为一个结构数组显存变量名称为数组名。
()结构定义格式:结构名STRUC〈数据定义句子〉结构名ENDS结构定义不真正为结构分配储存空间它是在汇编时进行结构说明的。()结构储存单元分配及形参格式:[变量名]结构名〈字段值表〉变量名是自定义符数组值表的各数组值赋给结构的各数组中其次序与结构定义的次序相似若数组值表中这些项默认则保留初始值。应用时尖括弧“〈〉”不能默认。诸如:TANSTRUCDDBHDDB′WTAN′SYYDBTANENDSSUNTAN〈′DOG′〉CATTAN〈′beg′〉在储存器中分配了两个结构单元。()结构引用格式:结构变量名结构数组名诸如:MOVDHSUNSYYDH←MOVALCATSYYAL←块注释伪指令格式:COMMENT定界符注释定界符定界符是自定义任何非空字符。诸如COMMENT/注释文/为了简化汇编语言源程序的抒写把一些经常出现的程序段定义为“宏指令”当程序中遇见这个程序段时只需用一条宏读取句子那样有效地降低了源程序的厚度使源程序易读也提高了因为重复抒写而导致的错误。从某些意义上讲它与前述的“过程”有相同之处也可以将构成一条宏指令的程序段定义为一个“过程”但三者具备显著的差别主要表现如下:()宏读取句子由宏汇编程序MASM中的宏处理程序来辨识并完成相应的处理而读取过程的CALL句子由CPU来执行。
宏指令()汇编语言源程序在汇编过程中要将宏指令所取代的程序段汇编成相应的机器代码并插入到源程序的目标代码中每天读取均要插入那样使用宏读取并不能降低目标代码的厚度。但被定义的“过程”经汇编后的机器代码是与主程序分开而独立存在的其目标代码在储存器中只需保留一份因而选用过程读取能有效地降低目标代码的宽度即节约显存空间而宏指令却没有这一特点。()过程读取时还要保留程序的断点和现场待过程执行完毕需要恢复现场和断点这种操作须要花费CPU的时间而宏读取则不需进行某些操作。为此过程读取可节约程序占用的储存空间但会减少程序的执行速率而宏读取不能节约储存空间却能有较快的执行速率。()在每天宏读取时容许更改有关参数并且同一条宏指令在各次读取过程中可完成不同的操作而“过程”一旦被定义通常不容许更改。所以任何一个“过程”在各次读取中只好完成完全相似的功能。从上述特征可看出当还要多次执行的程序段比较长对速率要求不很高而且不要求更改参数的状况下宜选用过程读取模式若要求多次执行的程序段比较短或希望在各次读取中能更改这些参数时则宜选用宏读取模式。在使用初级语言时各句子的定义(即它对应这些机器指令)是由相应的编译程序去处理的但宏指令却不一样它还要定义。
宏指令的使用要经过如下个方法:()宏定义:对各个宏指令进行定义并分别起一个昵称()宏读取:在须要使用的地方通过宏指令名来读取它()宏扩充:由宏汇编程序用宏定义中的指令来取代宏读取中的宏指令名。下边介绍各式宏句子及其功能。宏代换句子格式:宏名MACRO[方式参数方式参数…]宏体(指令序列)ENDM功能:宏代换句子为指令序列定义一个宏名称为宏指令宏名可以像指令一样在程序中引用。方式参数是任选项可拿来代换宏体中这些参数或符号。当代换指令中的符号时在其上面需加一个宏代换符&。诸如:AHMACROYXMOVCLXROYCLENDM经宏代换句子定义的宏名在应用时可直接引用称为宏读取。宏读取时方式参数要用实在参数代替次序也应与方式参数次序相似。诸如:AHR源程序在汇编后在引用宏名的地方插入了宏体它在LST文件列表时可以听到其中有号的指令便称为宏扩充。宏指令可以嵌套并可与子程序联合嵌套。网段符号定义句子格式:LOCAL符号[符号…]功能:强调符号符号…仅在宏代换中有意义其目的是在宏扩充时不会造成符号重复定义的错误。LOCAL句子应当紧随在MACRO后来。删掉宏定义句子格式:PURGE宏定义名[宏定义名…]功能:删掉(吊销)程序中引用的宏指令使之在宏读取的地方不再生成宏扩充。
退出宏定义格式:EXITM功能:在宏体或重复定义的句子中遇见EXITM句子时中止之后的宏扩充。重复定义句子()格式:REPT〈表达式〉}指令序列ENDM功能:重复执行REPT与ENDM之间的指令式子是重复次数。重复定义句子()格式:IRP方式参数〈参数参数…〉}指令序列ENDM功能:重复执行IRP与ENDM之间的句子每天重复将一个参数代入方式参数中直至最后一个参数代换完为止。重复定义句子()格式:IRPC方式参数字符串}指令序列ENDM功能:重复执行IRPC与ENDM之间的句子每天重复将一个字符代入方式参数中直至最后一个字符代换完为止。包含汇编句子格式:INCLUDE文件名功能:在程序汇编时把INCLUDE指示的文件插入该句子处一起汇编。单击此处编辑页脚标题式样单击此处编辑页脚副标题式样系统功能读取为给撰写汇编语言源程序提供便捷MSDOS系统中设置了几十个内部子程序他们可完成IO设备管理、存储管理、文件管理和作业管理等功能。对我们来说他们是几十个独立中断服务程序他们的入口已由系统置入中断入口地址表中在汇编语言源程序中可用软中断指令读取他们。通常我们常用的软中断指令有条系统规定他们的中断类别码为H~H他们各自的功能及入口出口参数如表所示(见书第页)。
全面备战搞点气势出来