河科大微机原理课件

上传人:仙*** 文档编号:241551138 上传时间:2024-07-03 格式:PPT 页数:84 大小:366.50KB
返回 下载 相关 举报
河科大微机原理课件_第1页
第1页 / 共84页
河科大微机原理课件_第2页
第2页 / 共84页
河科大微机原理课件_第3页
第3页 / 共84页
点击查看更多>>
资源描述
用指令助记符、标号、寄存器名、数字等用指令助记符、标号、寄存器名、数字等符号构成的编写程序的语言叫符号构成的编写程序的语言叫汇编语言汇编语言。汇编语。汇编语言是机器语言的言是机器语言的符号符号表示,它比机器语言好读,表示,它比机器语言好读,比高级语言占用的内存少、执行速度快。因此汇比高级语言占用的内存少、执行速度快。因此汇编语言总是程序设计的重要手段。编语言总是程序设计的重要手段。第七章第七章 汇编语言程序设计汇编语言程序设计1.7.1 概述概述u用汇编语言编写的程序叫汇编语言程序,简称源程序。u机器语言程序称目标程序。u将源程序翻译成目标程序的过程叫做汇编。2.上机环境上机环境硬件硬件系统软件系统软件应用软件应用软件操作系统:操作系统:DOS系统系统编辑器编辑器:EDIT.exe汇编程序汇编程序:MASM.exe连接程序连接程序:LINK.exe调试程序:调试程序:DEBUG.exe用户开发的程序:用户开发的程序:ABC.exe等等CPU、存储器、存储器(ROM、RAM)、I/O接口、输入、输出设备接口、输入、输出设备3.D:EDITABC.asmD:MASMABC;有语法错,回有语法错,回EDIT下改该程序下改该程序D:LINKABC;有错,回在有错,回在EDIT下改程序下改程序D:ABC运行结果错,回运行结果错,回EDIT下改程序下改程序或在或在DEBUG下调试,找原因。下调试,找原因。D:DEBUGABC.exe 汇编语言上机过程汇编语言上机过程4.编辑源程序编辑源程序EDITABC.ASM汇编源程序汇编源程序MASMABC.ASM形成目标程序形成目标程序ABC.OBJ连接目标程序连接目标程序LINKABC.OBJ形成可执行程序形成可执行程序ABC.EXE运行程序运行程序用用DEBUG调试调试5.伪指令是汇编语言程序中的伪指令是汇编语言程序中的指示性语句指示性语句,它体,它体现程序员的汇编意图,其作用是在源程序汇编时指现程序员的汇编意图,其作用是在源程序汇编时指导汇编程序汇编,而本身不会产生目标代码和占用内导汇编程序汇编,而本身不会产生目标代码和占用内存。存。伪指令的具体功能是向汇编程序提供下列信息:伪指令的具体功能是向汇编程序提供下列信息:如何如何分段分段、段的、段的定义和说明定义和说明,段间,段间关系关系,模块的,模块的定义定义和说明以及和说明以及模块间模块间的关系,数据的的关系,数据的定义定义,开始开始汇编汇编和和结束结束汇编等。汇编等。7.2 伪指令伪指令(指示性语句指示性语句)6.l指令性语句指令性语句是用指令系统中的指令构成的语句。是用指令系统中的指令构成的语句。例例 MOV AX,BXMOV AX,BXl指示性语句指示性语句是指示汇编程序进行汇编的操作。是指示汇编程序进行汇编的操作。例例 MOV AX,4 MOV AX,4+8 8 中的中的+code code SEGMENTSEGMENT 中的中的SEGMENTSEGMENT MOV BX,MOV BX,OFFSETOFFSET string string 中的中的OFFSETOFFSET指示性语句与指令性语句:指示性语句与指令性语句:7.一个程序经汇编,连接和装入内存后,在执行一个程序经汇编,连接和装入内存后,在执行程序之前:程序之前:指示性语句的功能已经完成,故又称伪指令。指示性语句的功能已经完成,故又称伪指令。而指令性语句的功能尚未完成,需控制而指令性语句的功能尚未完成,需控制CPUCPU去去执行,才能完成。执行,才能完成。l 指示性语句与指令性语句区别指示性语句与指令性语句区别8.1、等值语句:、等值语句:格式格式 符号名符号名 EQU EQU 表达式表达式 作作用用是是用用符符号号名名等等值值指指定定的的表表达达式式。其其中中表表达达式式可可以以是是任任何何有有效效的的操操作作数数,汇汇编编时时用用语语句句中中的的表表达达式代替程序中符号所在的地方。式代替程序中符号所在的地方。应用:应用:1.1.定义符号常量,方便修改程序。定义符号常量,方便修改程序。2.2.某某表表达达式式多多次次出出现现时时,用用等等值值伪伪指指令令可可以以方方便编程。便编程。一、符号定义伪指令一、符号定义伪指令9.例如:EMP EQU 8 COUNT EQU EMP+6 2、等号语句:、等号语句:格式格式 符号名符号名 =表达式表达式 作用是用符号名等值指作用是用符号名等值指定的表达式,定的表达式,用用“=”“=”定义的符号名可重新定义。定义的符号名可重新定义。例如:NMU=6 NMU=6 NMU=NMU+6 NMU=NMU+610.格式格式格式格式 变量名变量名变量名变量名 助记符助记符助记符助记符 操作数操作数操作数操作数 ,操作数操作数操作数操作数,.,.,.,.用来定义程序中所用的内存操作数。用来定义程序中所用的内存操作数。其中其中变量名变量名指示内存操作数的地址(符号地址);指示内存操作数的地址(符号地址);助记符助记符指示内存操作数的类型指示内存操作数的类型(字节、字、双字等字节、字、双字等);操作数操作数指示内存操作数的内容。指示内存操作数的内容。二、数据定义伪指令二、数据定义伪指令11.格式格式格式格式 变量名变量名变量名变量名 助记符助记符助记符助记符 操作数操作数操作数操作数 ,操作数操作数操作数操作数,.,.,.,.常用的类型助记符有:常用的类型助记符有:DBDB 指示其后的操作数为字节类型指示其后的操作数为字节类型DWDW 指示其后的操作数为字类型指示其后的操作数为字类型DDDD 指示其后的操作数为双字类型指示其后的操作数为双字类型DQDQ 指示其后的操作数为八字节类型指示其后的操作数为八字节类型DTDT 指示其后的操作数为十字节类型指示其后的操作数为十字节类型二、数据定义伪指令二、数据定义伪指令12.例:DATA-BYTE DB 10,4,10H DATA-WORD DW 100,100H,5H DATA-DW DD 6+20,0FFFDH数据定义伪指令中的表达式也可以是字符串如:MESSDBABCD 数据定义伪指令的表达式中会出现“?”数据项,ABC DB?,?,DEF DW?,50,?这时汇编程序会对“?”数据项保留相应的存储空间,而不存入数据。13.0AH04H10HDATA-BYTE64H00HDATA-WORD00H01HFBHFFH1AH00H00H00HDATA-DW100100H-52614.MESS41H42H43H44HABCDEF32H注注意意:3 3个个及及其其以以上上的的字字符符,只只能能用用DBDB定义定义15.可可用用DUP复复制制操操作作符符定定义义相相同同的的操操作作数数,其其格式为格式为重复次数重复次数DUP(操作数操作数)例例EEDB3DUP(4)等价于等价于EEDB4,4,4例:例:EDDB10DUP(?)(?)相当于定义相当于定义10个空单元。个空单元。16.格式格式 段名段名 SEGMENT SEGMENT 定位类型定位类型组合类型组合类型类别类别 、段名段名 ENDS ENDS 段定义由伪操作段定义由伪操作SEGMENTSEGMENT开始开始、ENDSENDS结束结束。其其中中:SEGMENT SEGMENT 和和ENDS ENDS 必必须须成成对对出出现现,且且语语句句前前必必须须有有段段名,名,段名必须相同段名必须相同。SEGMENTSEGMENT和和ENDSENDS语句之间可以有指令和其他伪操作语句之间可以有指令和其他伪操作,表表示示存存放放在在该该段段内内存存的的变变量量、指指令令或或其其他他伪伪操操作作对对该该段段内内存存的处理的处理 程序中可以定义多个段。程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为一具体的段值。程序经汇编、连接及装入内存后,段名为一具体的段值。三、段定义伪操作三、段定义伪操作17.AASEGMENT;数据段数据段1str1DBHello!AAENDSBBSEGMENT;数据段数据段2str2DB6dup(?)BBENDSCCSEGMENT;代码段代码段ASSUMECS:CCASSUMEDS:AA,ES:BBstart:CLDMOVAX,AAMOVDS,AXLEASI,str1MOVAX,BBMOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HCCENDSENDstart数据传送源程序:数据传送源程序:18.定位类型、组合类型和类别说明段的属性,它们用定位类型、组合类型和类别说明段的属性,它们用方括号括起来表示可以缺省。若不缺省,各项排序不能方括号括起来表示可以缺省。若不缺省,各项排序不能错,项与项要用空格分开。错,项与项要用空格分开。定位类型有四种:定位类型有四种:PAGE(页)型要求该段物理地址低页)型要求该段物理地址低8位全为位全为0PARA(节)型要求该段物理地址低节)型要求该段物理地址低4位全为位全为0WORD型要求该段物理地址码为偶数(最低位为型要求该段物理地址码为偶数(最低位为0)BYTE型该段的物理地址可为任意值。型该段的物理地址可为任意值。组合类型组合类型说明本段与其它段的关系。说明本段与其它段的关系。类别类别它可以是任何合法的名称。它可以是任何合法的名称。19.格式格式 ASSUME ASSUME 段寄存器:段名段寄存器:段名 ,段寄存器段寄存器:段名段名,其中其中 段寄存器段寄存器为为CSCS、DSDS、ESES、SSSS中的一个中的一个 段名段名为用伪操作为用伪操作SEGMENTSEGMENT定义过的段名定义过的段名例例 ASSUME CS:CC,DS:AA ASSUME CS:CC,DS:AA四、段寄存器说明四、段寄存器说明ASSUME伪指令伪指令20.ASSUME伪操作的作用伪操作的作用指示汇编程序指令中用到的标号、过程及变量所指示汇编程序指令中用到的标号、过程及变量所在的段。在的段。其中其中对标号、过程必须用对标号、过程必须用CS段寄存器指示,段寄存器指示,对变量可用对变量可用CS、DS、ES、SS段寄存器指示。段寄存器指示。若若未未用用ASSUMEASSUME语语句句指指示示指指令令中中用用到到的的标标号号、过过程程和变量所在的段和变量所在的段,汇编程序将给出错误信息。汇编程序将给出错误信息。ASSUMEASSUME语语句句只只起起指指示示作作用用,并并无无实实际际的的操操作作。在在程程序序中中引引用用定定义义的的变变量量做做内内存存操操作作数数时时,需需按按寻寻址址方式用传送指令(如方式用传送指令(如MOVMOV)给相应的段寄存器赋值。给相应的段寄存器赋值。21.例例 用程序实现用程序实现 1234H+5678H 1234H+5678HdataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;给给DS赋值赋值MOVDS,AXMOVAX,value;取数取数ADDAX,value+2;两数相加两数相加MOVresult,AX;保存结果保存结果MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstart12H34H78H56Hvalueresult22.格式格式 过程名过程名 PROC PROC 类型类型 、过程名过程名 ENDP ENDP 过程过程定义由伪操作定义由伪操作PROCPROC开始、开始、ENDPENDP结束结束。其中:其中:PROC PROC 和和ENDP ENDP 必须成对出现必须成对出现,且语句前必须有过程名,且语句前必须有过程名,过程名必须相同过程名必须相同。PROCPROC和和ENDPENDP语句之间为子程序的指令序列。语句之间为子程序的指令序列。程序中可以定义多个过程。程序中可以定义多个过程。五、过程定义伪操作五、过程定义伪操作23.程程序序经经汇汇编编、连连接接及及装装入入内内存存后后,过过程程名名为为一一具具体体的的内存地址,指示子程序入口。内存地址,指示子程序入口。过程名常用作过程名常用作CALLCALL调用指令的操作数调用指令的操作数,子子程程的的最最后后安安排排RETRET返返回回指指令令,使使执执行行完完子子程程后后能返回调用处。能返回调用处。过程有两种类型:过程有两种类型:NEARNEAR和和FARFAR 无类型项时,无类型项时,默认为默认为NEARNEAR类型类型。当当过过程程与与调调用用指指令令不不在在同同一一段段时时,应应将将过过程程定定义义为为 FAR FAR 类型。类型。过程类型决定子程中过程类型决定子程中RETRET的返回类型的返回类型24.例例1 1 display PROC display PROC 、RET RET ;NEAR;NEAR 属性的过程对应段内返回属性的过程对应段内返回 display ENDP display ENDP例例2 2 display PROC display PROC FARFAR 、RET RET ;FAR;FAR属性的过程对应段间返回属性的过程对应段间返回 display ENDP display ENDP25.1 1、NAME NAME 和和 TITLE TITLE 伪操作伪操作 格式:格式:NAMENAME 模块名模块名 格式:格式:TITLETITLE 模块名模块名 在在源源程程序序开开始始可可用用 NAME NAME 或或 TITLE TITLE 为为模模块块命命名名,模块名的作用是指示给连接程序进行连接用。模块名的作用是指示给连接程序进行连接用。源源程程序序中中可可无无模模块块定定义义,此此时时源源文文件件名名作作为为模模块名。块名。六、模块定义和程序结束伪操作模块定义和程序结束伪操作26.格式:格式:END END 启动地址启动地址作用是指示源程序到此结束。作用是指示源程序到此结束。汇编程序对汇编程序对 END END 之后的语句不进行处理。之后的语句不进行处理。程序中所有有效语句应放在程序中所有有效语句应放在 END END 语句之前。语句之前。源程序中必须有源程序中必须有 END END 结束语句。结束语句。汇编程序对无汇编程序对无 END END 语句的源程序不进行处理语句的源程序不进行处理,只给出无只给出无 END END 语句错误信息。语句错误信息。2、END伪操作伪操作27.格式:格式:ORG ORG 数值表达式数值表达式 其功能是指定其后的程序或数据块起始地址其功能是指定其后的程序或数据块起始地址 的偏移量。数值表达式的值是一个无符号数。的偏移量。数值表达式的值是一个无符号数。七、定位伪指令七、定位伪指令 例:例:ORG 1000HORG 1000H DATA SEGMENT DATA SEGMENT 28.包括:包括:TYPE,LENGTH,SIZE,SEG,OFFSET。把一些特征或存贮器地址的一部分作为数值回送。把一些特征或存贮器地址的一部分作为数值回送。八、数值八、数值回送操作符回送操作符:29.TYPE格式:格式:格式:格式:TYPEvariable回送该变量的以回送该变量的以字节数表示的类型。字节数表示的类型。(DB为为1,DW为为2,DD为为4,DQ为为8,DT为为10)或或label标号,回送标号类型数值(标号,回送标号类型数值(NEAR为,为,FAR为为2)例:例:ARRAYDW1,2,3ADDSI,TYPEARRAY汇编程序其形式:汇编程序其形式:ADDSI,230.格式:格式:格式:格式:LENGTHvariable对于变量中使用对于变量中使用DUP汇编回送分配给变量项数,汇编回送分配给变量项数,其他情况回送其他情况回送1。例:例:FESSDW100DUP(0)对于对于MOVCX,LENGTHFESS汇编程序将其形式:汇编程序将其形式:MOVCX,100其他情况,回送其他情况,回送1。LENGTH31.例:例:ARRAYDW1,2,3对于指令对于指令MOVCX,LENGTHARRAY汇编程序将使其形式为:汇编程序将使其形式为:MOVCX,1例:例:TABLEDBABCD对于指令对于指令MOVCX,LENGTHTABLE汇编程序使其形式为:汇编程序使其形式为:MOVCX,1 LENGTH(续)(续)32.格式:格式:格式:格式:SIZEvariable回送分配给该变量的字节数回送分配给该变量的字节数LENGTH*TYPE例:例:FEESDW100DUP(0)MOVCX,SIZEARRAY将形成:将形成:MOVCX,200 SIZE33.例:例:TABLEDBABCDMOVCX,SIZETABLE将形成将形成MOVCX,1例:例:ARRAYDW1,2,3MOVCX,SIZEARRAY形式形式MOVCX,2LENGTH*TYPE=2 SIZE(续)(续)34.TYPE变量变量的返回值是类型的字节数的返回值是类型的字节数:DB为为1,DW为为2,DD为为4,DQ为为8,DT为为10TYPE标号标号的返回值是:的返回值是:NEAR为为-1,FAR为为-2。LENGTH变量变量返回返回DUP分配的项数,对于其他分配的项数,对于其他情况则返回情况则返回1。SIZE返回返回值是:值是:LENGTH和和TYPE值的乘积,值的乘积,即变量的字节数。即变量的字节数。小结:小结:35.SEG取符号地址的段地址取符号地址的段地址例例MOVAX,SEGyyOFFSET取符号地址的偏移地址取符号地址的偏移地址例例MOVBX,OFFSETyy SEG(OFFSET)36.SEG、OFFSET只能对只能对符号地址符号地址操作操作MOVAX,SEGBXMOVBX,OFFSETSI 注意:注意:37.一、概述一、概述 (一)一)判断程序质量的标准判断程序质量的标准l 简明、易读、易维护。简明、易读、易维护。l 速度快、执行时间短。速度快、执行时间短。l 占用内存空间小。占用内存空间小。7.4汇编语言程序设计汇编语言程序设计38.1.1.编写程序主体。编写程序主体。l 分析问题,建立模型,确定算法。分析问题,建立模型,确定算法。l 按算法画出程序流程图。按算法画出程序流程图。l 按流程图编写程序。按流程图编写程序。(二)(二)编写汇编语言程序步骤编写汇编语言程序步骤39.2.2.分配内存空间,编写汇编程序。分配内存空间,编写汇编程序。l 分配内存空间,规划必要的区段。分配内存空间,规划必要的区段。l 编写完整的汇编语言程序。编写完整的汇编语言程序。(二)(二)编写汇编语言程序步骤编写汇编语言程序步骤 3.3.调试、优化。调试、优化。l 检查源程序,优化结构。检查源程序,优化结构。l 上机运行,调试。上机运行,调试。40.l顺序结构顺序结构l分支结构分支结构l循环结构循环结构l 子程序结构子程序结构(三)几种程序结构(三)几种程序结构41.顺序结构顺序结构42.两个分支两个分支YN、CMPAL,BLJGgreatJMPexitgreat:exit:、ALBL处理处理AL BL处理处理分支结构分支结构43.三个分支三个分支、CMPAL,0JGgreatJLlessJMPexitless:JMPexitgreat:exit:、AL=0处理处理AL0处理处理AL0处理处理YYNN分支结构分支结构44.循环结构循环结构当型循环当型循环(当条件成立进入循环当条件成立进入循环)循环初始设置循环初始设置循环体循环体循环条件判断循环条件判断?YN直到型循环直到型循环(直到条件成立退出循环直到条件成立退出循环)YN循环初始设置循环初始设置循环体循环体循环条件判断循环条件判断?45.多多处处调调用用完完成成同同一一功功能能的的子程序:子程序:code SEGMENTcode SEGMENTstart:start:、CALL subCALL sub 、CALL subCALL sub 、CALL subCALL sub 、MOV AH,4CH MOV AH,4CH INT 21H INT 21Hsub PROCsub PROC 、RETRETsub ENDPsub ENDPcode ENDScode ENDSEND startEND start子程序结构子程序结构46.例例:试设计一个对两个试设计一个对两个32位位二进制数相加的程序。设被二进制数相加的程序。设被加数加数2A3B078EH和加数和加数4C508F55H从数据段的从数据段的BGS单元单元(令(令BGS=2000H)开始依次)开始依次存放,要求将两数和放在加存放,要求将两数和放在加数之后。数之后。分析:分析:这是一个简单的加法问题,因为数据不长,可采这是一个简单的加法问题,因为数据不长,可采用顺序程序设计方法。用顺序程序设计方法。因为是两个因为是两个32位数相加,应先加低位数相加,应先加低16位,再加高位,再加高16位,位,加高加高16位时还要考虑低位时还要考虑低16位相加产生的进位,应选用位相加产生的进位,应选用带带进位进位加法指令。还要注意,多字节数在内存是放在连续加法指令。还要注意,多字节数在内存是放在连续的存储单元中,且高字节放高地址单元,低字节放低地的存储单元中,且高字节放高地址单元,低字节放低地址单元。址单元。二、汇编语言程序设计举例二、汇编语言程序设计举例47.内存单元分配如下:BGS=2000H8EH07H3BH2AH55H8FH50H4CH被加数加数和48.DATA SEGMENT ORG 2000HBGS DD 2A3B078EH,4C5D8F55H DD?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000HSTART:MOV AX,DATA MOV DS,AX MOV BX,BGS49.MOV AX,BX MOV BX,BGS+4 ADD AX,BX MOV BX,BGS+8 MOV BX,AX MOV BX,BGS+2 MOV AX,BX MOV BX,BGS+6 ADC AX,BX MOV BX,BGS+10 MOV BX,AX低4位高4位50.MOV AH,4CH INT 21HCODE ENDS END START返回DOS 同一问题,若数据很长,或采用字节加法,则重复很多次,可考虑采用循环程序设计方法:DATA SEGMENT ORG 2000HBGS DB 8EH,07H,3BH,2AH DB 55H,8FH,5DH,4CH DB 4 DUP(?)DATA ENDS51.CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 1000HSTART:MOV AX,DATA MOV DS,AX MOV CX,4 CLC MOV SI,BGS LOOP1:MOV AX,SI ADC AX,SI+4 MOV SI+8,AX 一次加法52.INC SI LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START53.例例:已知从内存已知从内存10000H单元开始连续存放着大小不单元开始连续存放着大小不同的两个同的两个16位二进制无符号数位二进制无符号数X1和和X2。试设计一个程。试设计一个程序,将其中的大数放到序,将其中的大数放到10050H单元,小数放到单元,小数放到10052H单元。单元。解:解:显然,这是一个双分支程序。显然,这是一个双分支程序。根据比较结果根据比较结果(CF标志标志)用条件转移指令实现分支。用条件转移指令实现分支。X1LX1HX2LX2H10000H10050H大数大数小数小数54.DATASEGMENTORG 0000HMADDWX1,X2ORG0050HMAXDW2DUP(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0000H55.MOVBX,0002HCMPAX,BXJNCLOP1MOVMAX,BXMOVMAX+2,AXLOPT:MOVAH,4CH INT21HLOP1:MOVMAX,AXMOVMAX+2,BXJMPLOPTCODEENDSENDSTART56.例例 将将寄寄存存器器BXBX中中的的内内容容以以十十六六进进制制形形式式显显示示出出来来。(二进制二进制 十六进制)十六进制)有关字符、数码转换的处理有关字符、数码转换的处理1.1.计计算算机机处处理理字字符符时时,常常用用的的字字符符编编码码是是ASCII ASCII 码。码。2.2.数字和字母的数字和字母的ASCIIASCII码是一个有序序列码是一个有序序列数字数字09 09 :30H 39H30H 39H大写字母大写字母AZ AZ:41H 5AH41H 5AH小写字母小写字母az az :61H 7AH61H 7AH57.3.3.计算机处理信息时,其对象都是二进制数。计算机处理信息时,其对象都是二进制数。外外设设(显显示示器器、打打印印机机、键键盘盘等等)用用ASCIIASCII码码与与CPUCPU进行信息传送。进行信息传送。例例如如:1)1)在在键键盘盘上上按按下下某某一一字字符符键键 (如如9)9),键键盘盘接接口口向向键键盘盘缓缓冲冲区区送送去去的的是是该该字字符符的的ASCIIASCII码码(如如39H)39H),不是送数字,不是送数字09H09H。2)2)在在文文本本方方式式下下,要要在在显显示示器器上上显显示示某某一一字字符符(如如A),A),须须将将该该字字符符的的ASCIIASCII码码(如如41H)41H)送显示缓冲区,送显示缓冲区,不是送数字不是送数字0AH0AH。计算机要利用显示器、键盘等外设时,计算机要利用显示器、键盘等外设时,须据程序设计的需要进行有关转换。须据程序设计的需要进行有关转换。58.例例1 将将BX寄寄存存器器中中的的内内容容以以十十六六进进制制形形式式显显示示出来。出来。BX是一个是一个16位寄存器位寄存器二进制二进制1010100100111110用十六进显示时,每用十六进显示时,每4位用一个字符显示,共位用一个字符显示,共4个个其中其中0000030H,1010A41H0001131H,1011B42H、1001939H,1111F46H?十六进制十六进制A93E屏幕上的显示屏幕上的显示A93E对应的对应的ASCII41H39H33H45H59.算法算法:取出要显示的某取出要显示的某4位,转换为对应的位,转换为对应的ASCII码码,再调用再调用DOS系统功能进行显示。系统功能进行显示。1)对于对于00001001(09),先扩展成一个字节,高先扩展成一个字节,高4位位清清0,加上加上30H后后,即可得字符即可得字符09对应的对应的ASCII码。码。00000001B+30H=31H;00001001B+30H=39H0001B11001B92)对于对于10101111(AF),先扩展成一个字节,高先扩展成一个字节,高4位位清清0,加上,加上30H后后,还要再加上还要再加上07H,才能得到,才能得到AF对应的对应的ASCII码码00001010B+30H+07H=41H1010BA00001111B+30H+07H=46H1111BF60.CODESEGMENTASSUMECS:codestart:MOVCH,4;字符个数字符个数MOVCL,4;循环移位次数循环移位次数next:ROLBX,CL;取显示位的值取显示位的值MOVDL,BL;保存在保存在DL中中ANDDL,0FH;清除高清除高4位位ADDDL,30H;转变为数字的转变为数字的ASCIICMPDL,39H;大于大于39H,则应转变则应转变JLEprint;为字母为字母AF的的ASCIIADDDL,07H61.print:MOVAH,02H;显示显示DL中的字符中的字符INT21HDECCH;显示结束?显示结束?JNZnextMOVAH,4CH;返回返回DOSINT21HCODEENDSENDstart62.编编程程将将CPUCPU内内SPSP、BPBP、SISI、DI4DI4个个1616位位寄寄存存器器当当前前的内容分别用十六进制形式显示出来。的内容分别用十六进制形式显示出来。要点:要点:将上例改写为一个子程,入口参数为将上例改写为一个子程,入口参数为BXBX 子程中注意寄存器值的保存和恢复子程中注意寄存器值的保存和恢复 注意注意CS CS、IPIP、PSWPSW寄存器值的获取方法寄存器值的获取方法63.CODESEGMENTASSUMECS:CODEstart:MOVBX,SP;显示显示SPCALLLISTBXMOVBX,BP;显示显示BPCALLLISTBXMOVBX,SI;显示显示SICALLLISTBXMOVBX,DI;显示显示DICALLLISTBXMOVAH,4CH;返回返回DOSINT21H64.LISTBXPROCPUSHF;保存寄存器保存寄存器MOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOV AH,02H;输出字符输出字符INT21HDECCHJNZnextMOVDL,20H;显示空格符显示空格符MOVAH,02HINT21HRET;子程返回子程返回LISTBXENDPCODEENDENDstart65.子程与主程的参数传送:子程与主程的参数传送:1)1)用寄存器传送用寄存器传送2)2)用定义的变量传送用定义的变量传送3)3)3)3)利用地址表传送利用地址表传送4)4)用堆栈传送用堆栈传送66.一、概述一、概述一、概述一、概述:例例:编写完整汇编语言程序,要求:清屏,显示编写完整汇编语言程序,要求:清屏,显示“Hello China!”Hello China!”方法:将方法:将0AH0AH功能输入的字符串功能输入的字符串,用用09H09H功能显示出来。功能显示出来。结果如下结果如下:dataSEGMENTmaxDB12,?,4DUP(?)stringDBHelloWorld!,$dataENDS7.7 DOS功能调用功能调用67.code SEGMENTASSUME CS:code,DS:datastart:MOVAX,data;置缓冲区地址于置缓冲区地址于DS:DXMOVDS,AXLEADX,maxMOVAH,0AH;调用调用0AH输入功能输入功能INT21HLEADX,stringMOVAH,09H;调用调用09H显示功能显示功能INT21HMOVAH,4CHINT21H;返回;返回DOScodeENDSENDstart68.PCDOS是是IBMPC微型计算机的磁盘操作系统。微型计算机的磁盘操作系统。它为用户提供了许多命令,也有它为用户提供了许多命令,也有80多个子程序可供用户多个子程序可供用户调用。这些子程序的功能主要是实现对存储器和基本调用。这些子程序的功能主要是实现对存储器和基本I/O设备的管理等。为了便于调用将所有子程序顺序编设备的管理等。为了便于调用将所有子程序顺序编号,如号,如PCDOS2.0有有87个子程序,编号从个子程序,编号从0开始到开始到57H。用户编程原则:用户编程原则:尽可能使用尽可能使用DOSDOS的系统功能调用,提高程序可移的系统功能调用,提高程序可移 植性。植性。在在DOSDOS功能不能实现情况下,考虑用功能不能实现情况下,考虑用BIOSBIOS功能调功能调 用。用。在在DOSDOS和和BIOSBIOS的中断子程不能解决问题时的中断子程不能解决问题时,使用使用 IN/OUTIN/OUT指令直接控制硬件。指令直接控制硬件。69.1.调用方法调用方法DOS系统功能调用是一种内部中断方式,它是通系统功能调用是一种内部中断方式,它是通过过INT21H指令进入功能调用,再通过功能号进入指令进入功能调用,再通过功能号进入具体子程序。具体子程序。需要三个语句:需要三个语句:将入口参数送指定寄存器将入口参数送指定寄存器将功能号将功能号(057H)送送AH寄存器寄存器使用内部中断指令:使用内部中断指令:INT21H70.设置入口参数设置入口参数在在AH设置功能号设置功能号m执行中断指令执行中断指令INTN分析、应用出口参数分析、应用出口参数1.调用方法调用方法71.使用使用DOS功能调用还要注意下列问题:功能调用还要注意下列问题:(1)从键盘输入的字符由系统自动转换为)从键盘输入的字符由系统自动转换为ASCII码,在进行数据处理时要特别注意;码,在进行数据处理时要特别注意;(2)需要在屏幕上显示的字符要在程序中将其转)需要在屏幕上显示的字符要在程序中将其转换为换为ASCII码。码。2、DOS功能调用要注意的问题功能调用要注意的问题72.1.1.1.1.显示单字符显示单字符显示单字符显示单字符(02H(02H(02H(02H功能功能功能功能)入口参数入口参数 DL=DL=要显示字符的要显示字符的ASCII ASCII 码码 功能号功能号 AH=02HAH=02H类型号类型号 INT 21HINT 21H出口参数出口参数 无无实现功能实现功能 显示指定字符,光标随动。显示指定字符,光标随动。例例 显示字符显示字符A A MOV DL,A MOV DL,A MOV AH,02H MOV AH,02H INT 21H INT 21H二、二、DOS系统功能调用系统功能调用(21H类型中断调用类型中断调用)73.入口参数入口参数 定义要显示的字符串,定义要显示的字符串,字符串尾字符串尾 应为应为$,作为结束显示的标志。,作为结束显示的标志。DS:DX=DS:DX=字符串的首地址字符串的首地址功能号功能号 AH=09 HAH=09 H类型号类型号 21H21H出口参数出口参数 无无实实现现功功能能 显显示示字字符符串串,遇遇$停停止止显显示示,光光 标随动。标随动。2.显示字符串显示字符串(09H功能功能)74.例例 编编 程程 显显 示示 字字 符符 串串 Tsinghua Tsinghua UniversityUniversitydata SEGMENTdata SEGMENT ;定义显示的子符串定义显示的子符串stri DB Tsinghua Universitystri DB Tsinghua University,$data ENDSdata ENDScode SEGMENTcode SEGMENT ASSUME CS:code,DS:data ASSUME CS:code,DS:datastart:MOV AX,start:MOV AX,datadata ;置缓冲区地址于置缓冲区地址于DS:DX DS:DX MOV MOV DSDS,AX ,AX LEA LEA DX,stri DX,stri MOV AH,09H MOV AH,09H ;调显示功能调显示功能 INT 21HINT 21H MOV AH,4CH MOV AH,4CH ;返回返回DOSDOS INT 21H INT 21H code ENDScode ENDS END startEND start75.入口参数入口参数 无无 功能号功能号 AH=01HAH=01H 类型号类型号 21H21H 出口参数出口参数 AL=AL=键入字符的键入字符的ASCIIASCII码码 实现功能实现功能 等待从键盘输入一个字并在屏等待从键盘输入一个字并在屏 幕上回显,光标移动幕上回显,光标移动,检测检测 Ctrl-BreakCtrl-Break键键3.单字符输入单字符输入(01H、07H功能功能)76.例例 利用键盘输入的字符产生分支:利用键盘输入的字符产生分支:MOV AH,1 MOV AH,1 INT 21H INT 21H ;等待从键盘输入等待从键盘输入 CMP AL,YCMP AL,Y ;是是Y?Y?JZ yes JZ yes no:.no:.JMP exit JMP exityes:.yes:.exit:.exit:.77.入口参数入口参数 无无 功能号功能号 AH=07HAH=07H类型号类型号 21H21H出口参数出口参数 AL=AL=键入字符的键入字符的ASCIIASCII码码实现功能实现功能 等待从键盘输入一个字符等待从键盘输入一个字符,不在屏幕上回显,不在屏幕上回显,不检测不检测Ctrl-BreakCtrl-Break键键 续78.例例 用不带回显功能输入密码时:用不带回显功能输入密码时:input:input:MOV AH,07HMOV AH,07H ;等待从键盘输等待从键盘输 INT 21H INT 21H MOV DI,AL MOV DI,AL ;存入缓冲区存入缓冲区 CMP AL,0DH CMP AL,0DH ;是回车符?是回车符?JNZ input JNZ input ;不是,继续输入不是,继续输入 check:check:、79.入口参数入口参数 DS:DX=DS:DX=缓冲区的首地址缓冲区的首地址 (DS:DX)=(DS:DX)=限制最多输入的字符数限制最多输入的字符数 功能号功能号 AH=0AHAH=0AH类型号类型号 21H 21H出出口口参参数数 (DS DS:DX+1 DX+1)=实实际际键键入入的的字字符符(不不含含回回车车符符)从从(DS DS:DX+2 DX+2)开开始始顺顺序序存存放放键键入入的的字字符符串串,回回车车符符0DH0DH为为串尾最后一字符。串尾最后一字符。实实现现功功能能 等等待待从从键键盘盘输输入入字字符符串串,并并存存入入设设定定的的缓缓冲冲区区内内,同时回显字符串,光标随着移动回车符使光标回到行首。同时回显字符串,光标随着移动回车符使光标回到行首。注意事项:注意事项:应按要求先定义缓冲区,再调用。应按要求先定义缓冲区,再调用。4.字符串输入字符串输入(0AH 功能功能)80.例例 应用应用0AH0AH功能输入字符串。功能输入字符串。data SEGMENT ;data SEGMENT ;定义缓冲区定义缓冲区max DB 11max DB 11 ;定义限制最多输入个数定义限制最多输入个数lenth DB?lenth DB?;用于存放实际输入个数用于存放实际输入个数stri DB 11 DUP(?)stri DB 11 DUP(?);用于存放输入的字符串用于存放输入的字符串data ENDSdata ENDScode SEGMENTcode SEGMENT ASSUME CS:code,DS:data ASSUME CS:code,DS:data81.start:MOV AX,data ;start:MOV AX,data ;置缓冲区地址于置缓冲区地址于DS:DX DS:DX MOV MOV DS DS,AX ,AX LEA LEA DXDX,max ,max MOV AH,0AH MOV AH,0AH INT 21H INT 21H ;调调0A0A输入功能输入功能 MOV CH,0 MOV CH,0 MOV CL,lenth MOV CL,lenth ;取字符串长度放取字符串长度放CXCX中中 LEA LEA BX BX,stristri ;取取 字字 符符 串串 首首 址址 于于 BXBX中中 MOV AL,MOV AL,BXBX ;应用输入字符应用输入字符 、code ENDScode ENDS82.dataSEGMENT;定义缓冲区定义缓冲区maxDB11;定义限制最多输入个数定义限制最多输入个数lenthDB?;用于存放实际输入个数用于存放实际输入个数striDB11DUP(?);用于存放输入的字符串用于存放输入的字符串dataENDS从键盘输入从键盘输入ABCD,回车,内存的存放结果回车,内存的存放结果:0B 04 41 42 43 44 0D 00max0700 00 00 00 00 00 00 0080a 0b0f12345690c 0d 0elenthstri地址地址内容内容DS:DX83.个人观点供参考,欢迎讨论!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!