微型计算机原理及应用课件

上传人:无*** 文档编号:241891485 上传时间:2024-08-03 格式:PPT 页数:80 大小:959.50KB
返回 下载 相关 举报
微型计算机原理及应用课件_第1页
第1页 / 共80页
微型计算机原理及应用课件_第2页
第2页 / 共80页
微型计算机原理及应用课件_第3页
第3页 / 共80页
点击查看更多>>
资源描述
大家好大家好微型计算机原理及应用微型计算机原理及应用章汇编语言程序设计章汇编语言程序设计主要内容主要内容汇编语言源程序的结构汇编语言源程序的结构汇编语言语句格式汇编语言语句格式伪指令伪指令功能调用功能调用汇编语言程序设计汇编语言程序设计4.1 4.1 汇编语言源程序汇编语言源程序了解:了解:计算机的三种语言计算机的三种语言源程序的结构源程序的结构汇编语言语句格式汇编语言语句格式1.计算机设计语言计算机设计语言机器语言机器语言汇编语言汇编语言高级语言高级语言面向机器面向机器 的语言的语言机器语言机器语言汇编语言汇编语言高级语言高级语言用二进制数码表示指令用二进制数码表示指令和数据的语言和数据的语言执行速度快,占用内存少不执行速度快,占用内存少不直观,不易理解和记忆直观,不易理解和记忆用汇编语言编写用汇编语言编写的程序的程序4.1 4.1 汇编语言源程序汇编语言源程序2.2.汇编程序汇编程序汇编语言源程序汇编语言源程序用助记符编写用助记符编写源程序的编译程序源程序的编译程序汇编程序汇编程序(assemble)汇编语言源汇编语言源程序程序机器语言目机器语言目标程序标程序ASMMASM汇编语言程序设计与执行过程:汇编语言程序设计与执行过程:输入汇编语言源程序输入汇编语言源程序 源文件源文件.ASMASM汇编(编译)汇编(编译)目标文件目标文件.OBJOBJ链接链接 可执行文件可执行文件.EXEEXE调试调试 最终程序最终程序4.1 4.1 汇编语言源程序汇编语言源程序4.1.14.1.1汇编语言结构汇编语言结构 段名段名1SEGMENT段名段名1ENDS段名段名2SEGMENT 段名段名2ENDS段名段名nSEGMENT 段名段名nENDS END一个完整的用汇编语言写的源程序,由可执行指令组成的一个完整的用汇编语言写的源程序,由可执行指令组成的指令指令性语句性语句和由对符号定义、分配存储单元、分段等和由对符号定义、分配存储单元、分段等指示性语句指示性语句组成。组成。一个完整的程序包括四种段:由源程序组成的一个完整的程序包括四种段:由源程序组成的代码段代码段,堆栈操作所,堆栈操作所需要的需要的堆栈段堆栈段和存放数据的和存放数据的数据段数据段以及以及附加段附加段。例例4-1 编写一个两个字相加的程序。编写一个两个字相加的程序。DSEGSEGMENTDATA1 DW 0F865HDATA2 DW360CH DSEG ENDS;ESEG SEGMENT SUM DW 2 DUP(?)ESEG ENDS CSEG SEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG定义数定义数据段据段定义被定义被加数加数定义加定义加数数定义附定义附加段加段START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,DATA1 ADD AX,DATA2 MOV ES:SI,AX HLTCSEG ENDS ENDSTART4.1.14.1.1汇编语言结构汇编语言结构 4.1.2汇编语言言语句句类型及格式型及格式指令性语句指令性语句:由指令组成的由:由指令组成的由CPU执行的语句。执行的语句。指示性语句指示性语句:不是由:不是由CPU执行的语句,而是用来告诉汇编程序如执行的语句,而是用来告诉汇编程序如何对程序进行汇编的指令,这类指令不能生成目标代码。何对程序进行汇编的指令,这类指令不能生成目标代码。指令性语句的格式:指令性语句的格式:标号:标号:前缀前缀 助记符助记符 操作数操作数,操作数操作数 ;注释;注释 指令的符号地址,指令的符号地址,标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号指示性语句格式指示性语句格式:名字名字 伪指令助记符伪指令助记符 操作数操作数 ,操作数,操作数,;注释;注释 变量的符号地址,变量的符号地址,其后不加冒号其后不加冒号指示性语句中至指示性语句中至少有一个操作数少有一个操作数标号、名字的区别标号、名字的区别标号后有冒号,在指令性语句前;名字后不加冒号,在指示标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。性语句前。英文字母、数字及专用字符组成英文字母、数字及专用字符组成,最大长度不能超过最大长度不能超过3131个个,且且不能由数字打头不能由数字打头,不能用保留字不能用保留字(如寄存器名如寄存器名,指令助记符指令助记符,伪伪指令指令)。例例:START:MOV AX,DATADATA1 DB 11H,22H,33H4.1.24.1.2汇编语言语句类型及格式汇编语言语句类型及格式操作码操作码指令码指令码 命令命令CPUCPU要完成的操作要完成的操作伪指令助记符伪指令助记符指示汇编程序要完成的操作指示汇编程序要完成的操作用来定义变量用来定义变量,分配存储单元分配存储单元指示程序开始和结束等指示程序开始和结束等注释注释 用分号作为注释的开始,用于说明程序或语句的功能,以用分号作为注释的开始,用于说明程序或语句的功能,以便于阅读和理解。便于阅读和理解。4.1.24.1.2汇编语言语句类型及格式汇编语言语句类型及格式4.1.3数据数据项及表达式及表达式 常量(常量(Constant):):指令中出现的固定值指令中出现的固定值,包括数字常量和字符包括数字常量和字符 串常量。串常量。寄存器寄存器存储器单元存储器单元常量常量变量或标号变量或标号表达式表达式操作数操作数数据项数据项数字常量数字常量字符串常量字符串常量十进制常量,十进制常量,23D二进制常量,二进制常量,1010010B十六进制常量,十六进制常量,64H,0F8H汇编时被译成对应的汇编时被译成对应的ASCII码码41414141H H H H,42424242H H H H,43H43H43H43H,44H44H44H44H:用引号引起的字符或字符串,例:用引号引起的字符或字符串,例:A,ABCD 标号标号是为了使程序便于理解和书写所使用的一些字符串,常作是为了使程序便于理解和书写所使用的一些字符串,常作为一段程序的开头,一个数据块的开头。如规范程序中的为一段程序的开头,一个数据块的开头。如规范程序中的DA1、BUFFER、START等等,它不能与指令助记符或伪指令重名它不能与指令助记符或伪指令重名,也不允也不允许由数字打头。许由数字打头。保留字保留字是汇编语言中预先保留下来的具有特殊含义的符号,只是汇编语言中预先保留下来的具有特殊含义的符号,只能作为固定用途。能作为固定用途。由程序员确定,不能与助记符或伪指令重名代表存放一条指令由程序员确定,不能与助记符或伪指令重名代表存放一条指令的存储单元的符号地址标号的属性:的存储单元的符号地址标号的属性:段段 标号所在段的段地址标号所在段的段地址 偏移量偏移量 标号单元地址与段首地址之间的位移量。标号单元地址与段首地址之间的位移量。类型类型 字节型、字型和双字型字节型、字型和双字型4.1.3数据数据项及表达式及表达式变量变量名由字母开头名由字母开头,其长度不能超过其长度不能超过31个字符个字符,类型有类型有BYTE、WORD、DWORD等等。等等。代表内存中的数据区,程序中视为存储器操作数代表内存中的数据区,程序中视为存储器操作数变量的属性:变量的属性:段段 值值 变量所在段的段地址变量所在段的段地址 偏移量偏移量 变量单元地址与段首地址之间的位移量。变量单元地址与段首地址之间的位移量。类类 型型 字节型、字型和双字型字节型、字型和双字型使用时要注意:使用时要注意:变量类型与指令的要求相符;变量类型与指令的要求相符;MOV AX,VAR1 MOV AL,VAR2 定义变量时,变量名对应的是数据区的首地址。定义变量时,变量名对应的是数据区的首地址。NUN DB 11H,22H,33H MOV AL,NUM+24.1.3数据数据项及表达式及表达式用一个用一个运算符运算符可以对一个操作数或几个操作数进行运算,这就构可以对一个操作数或几个操作数进行运算,这就构成了一个表达式,从而得到一个新的值。成了一个表达式,从而得到一个新的值。运算符包括:算术运算符、运算符包括:算术运算符、逻辑运算符、关系运算符、分析运算符各综合运算符逻辑运算符、关系运算符、分析运算符各综合运算符。表达式表达式由操作数和运算符组成,不是指令,不能执行,是一个本由操作数和运算符组成,不是指令,不能执行,是一个本身已确定的操作数,在汇编时表达式得到一个值。身已确定的操作数,在汇编时表达式得到一个值。算术运算和逻辑运算符算术运算和逻辑运算符:算术运算符算术运算符+,-,*,/,MODMOD逻辑运算符逻辑运算符 ANDAND,OROR,NOTNOT,XORXOR例:例:MOV ALMOV AL,8 AND 48 AND 4 MOV AL MOV AL,8+4-18+4-1关系运算符:关系运算符:参与关系运算的必须是两个数值参与关系运算的必须是两个数值关系不成立,结果为关系不成立,结果为0 0;关系成立,结果为关系成立,结果为FFFFHFFFFH。包括:包括:EQEQ(等于)、(等于)、NENE(不等(不等于)、于)、LTLT(小于)、(小于)、GTGT(大于)、(大于)、LELE(小于等于)(小于等于)GEGE(大于等于)(大于等于)4.1.3数据数据项及表达式及表达式 取值运算符取值运算符:用于分析存储器操作数的属性用于分析存储器操作数的属性OFFSET 取得其后变量或标号的偏移地址取得其后变量或标号的偏移地址SEG 取得其后变量或标号的段地址取得其后变量或标号的段地址TYPE 取取变量的类型变量的类型变量的类型变量的类型LENGTH 取所定义存储区的长度取所定义存储区的长度SIZE 取所定义存储区的字节数取所定义存储区的字节数MOV BX,OFFSET DATA LEA BX,DATA若若BUFFERBUFFER存储区是用如下伪指令定义:存储区是用如下伪指令定义:BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0)则:则:TYPETYPE BUFFER BUFFER 等于等于2 2 LENGTH BUFFERLENGTH BUFFER等于等于200200 SIZE BUFFERSIZE BUFFER等于等于4004004.1.3数据数据项及表达式及表达式综合运算符综合运算符PTRPTR用来指定位于其后的存储器操作数的类型用来指定位于其后的存储器操作数的类型。比如:。比如:MOVBYTE PTR 1000,0 此语句用此语句用BYTE和和PTR规定规定1000单元作为字节单元,执行结果是单元作为字节单元,执行结果是使使1000单元清单元清0。MOVWORD PTR 1000,0 则对则对1000、1001两单元清两单元清0,因为这里用,因为这里用WORD和和PTR规定规定1000作为一个字的开始。作为一个字的开始。PTR也用来更改一些已经规定了类型的存储单元的类型。也用来更改一些已经规定了类型的存储单元的类型。SEG运算符用来得到一个标号或变量的段地址。如:运算符用来得到一个标号或变量的段地址。如:MOVAX,SEGDATA MOVDS,AX这两个语句使得这两个语句使得DS中存放对应于中存放对应于DATA的段地址。的段地址。4.1.34.1.3数据项及表达式数据项及表达式其它运算符其它运算符方括号方括号 方括号中内容为操作数的偏移地址方括号中内容为操作数的偏移地址段重设符段重设符 段寄存器名:段寄存器名:用于修改默认的段基地址用于修改默认的段基地址4.1.34.1.3数据项及表达式数据项及表达式4.2 4.2 伪指令伪指令掌握:掌握:伪指令的格式及实现的操作伪指令的格式及实现的操作伪指令的应用伪指令的应用 指示性语句中的伪操作命令,在形式和所处语句中位置,指示性语句中的伪操作命令,在形式和所处语句中位置,都与都与CPUCPU指令相似,称为指令相似,称为伪指令伪指令。由汇编程序执行的由汇编程序执行的“指令系统指令系统”用于定义变量、分配存储区、定义逻辑段、指示程序开始和结束用于定义变量、分配存储区、定义逻辑段、指示程序开始和结束等等4.24.2伪指令伪指令4.2.1 4.2.1 数据定义伪指令数据定义伪指令用于定义数据区中变量的类型,数据定义伪指令的一般格式:用于定义数据区中变量的类型,数据定义伪指令的一般格式:变量名变量名伪操作伪操作操作数,操作数,操作数,操作数,伪指令助记符伪指令助记符DB 定义的变量为字节型定义的变量为字节型DW 定义的变量为字类型(双字节)定义的变量为字类型(双字节)DD 定义的变量为双字型(定义的变量为双字型(4字节)字节)DQ 定义的变量为定义的变量为4字型(字型(8字节)字节)DT 定义的变量为定义的变量为10字节型字节型DATA DB 11H,33H ;定义包含两个元素的字节变量;定义包含两个元素的字节变量DATANUM DW 100588;定义一个字类型变量;定义一个字类型变量NUM,初值为表达,初值为表达 式的值式的值STR DB Hello!;定义一个字符串,字符串的首地址为;定义一个字符串,字符串的首地址为STRDATA1 DB?;在该单元中没有放初值,汇编程序会在该处留出一?;在该单元中没有放初值,汇编程序会在该处留出一 个单元。个单元。DATA1DB20DUP(?);为变量(?);为变量DATA1分配分配20个字节的空个字节的空 间,初值为任意值。间,初值为任意值。DATA2DW?;为变量?;为变量DATA2分配分配2个字节的空个字节的空 间,间,值为任意值值为任意值数据定义伪操作数的操作数还可以是问号数据定义伪操作数的操作数还可以是问号“?”,此时仅给变,此时仅给变量保留相应的存储单元。量保留相应的存储单元。当同样的操作数重复多次时,可用重复操作符当同样的操作数重复多次时,可用重复操作符“DUP”表示。表示。DATA3DB20DUP(30H);为变量);为变量DATA3分配分配20个字节个字节 的空间,初值均为的空间,初值均为30HSTDBHow are you?格式:格式:变量名变量名 伪指令助记符伪指令助记符 n DUP(初值,初值,)4.2.1 4.2.1 数据定义伪指令数据定义伪指令例例:DATA1 DB 11HDATA1 DB 11H,22H22H,33H33H,44H44HDATA2 DW 11HDATA2 DW 11H,22H22H,3344H3344HDATA3 DD 11H*2DATA3 DD 11H*2,22H22H,33445566H33445566HSUM DQ 0011223344556677HSUM DQ 0011223344556677HABC DT 1234567890HABC DT 1234567890H以上变量在内存以上变量在内存中的存放形式中的存放形式4.2.1 4.2.1 数据定义伪指令数据定义伪指令伪指令的性质决定所定义变量的属性伪指令的性质决定所定义变量的属性定义字符串必须用定义字符串必须用DBDB伪指令伪指令 例例:DATA1 DB ABCDDATA1 DB ABCD,66H66HABCD41H42H43H44H66H4.2.1 4.2.1 数据定义伪指令数据定义伪指令4.2.24.2.2符号定义伪指令符号定义伪指令EQUEQU EQUEQU不仅可以使一个标号等于一个数值,也可以使一个标号等不仅可以使一个标号等于一个数值,也可以使一个标号等于另一个标号。于另一个标号。EQUEQU说明的表达式不占用内存空间。其两种使用格说明的表达式不占用内存空间。其两种使用格式:式:名字名字 EQUEQU表达式表达式新名字新名字EQUEQU旧名字旧名字CREQU0DH;使标号;使标号CR为数值为数值0DHXYZEQUABC;使;使XYZ和和ABC等同等同COUNTEQUCX;使;使COUNT和寄存器和寄存器CX具有相具有相 同的意义。同的意义。例例:CR EQU 0DHTEN EQU 0AHAA EQU ASCII_TABLEVAR EQU TEN*2+1024ADR EQU ES:BP+DI+5GOTO EQU JMPMOV AL,CRCMP AL,TENGOTO WORD PTR ADR4.2.24.2.2符号定义伪指令符号定义伪指令EQUEQU4.2.34.2.3段定义伪指令段定义伪指令伪指令伪指令SEGMENTSEGMENT、ENDSENDS总是成对使用的。用这一对伪指令可将汇总是成对使用的。用这一对伪指令可将汇编语言源程序分成几个段,通常分为数据段、堆栈段和代码段。格编语言源程序分成几个段,通常分为数据段、堆栈段和代码段。格式为:式为:段名段名SEGMENTSEGMENT定位类型定位类型 组合类型组合类型 类别类别定位类型定位类型:PARAPARA:段的起点从节边界开始(段的起点从节边界开始(1616个字节为个字节为1 1节)节)BYTEBYTE:段的起点从存储器任何地址开始段的起点从存储器任何地址开始WORDWORD:段的起点从偶地址开始段的起点从偶地址开始PAGEPAGE:段的起点从页边界开始(段的起点从页边界开始(256256个字节为个字节为1 1页)页)组合类型:组合类型:与其它模块中的同名段在满足定位类型的前提下具有的组合方式与其它模块中的同名段在满足定位类型的前提下具有的组合方式:NONENONE:不组合不组合PUBLICPUBLIC:依次连接(顺序由依次连接(顺序由LINKLINK程序确定)程序确定)COMMONCOMMON:覆盖连接覆盖连接STACKSTACK:堆栈段的依次连接堆栈段的依次连接AT AT 表达式:表达式:段定义在表达式值为段基的节边界段定义在表达式值为段基的节边界MEMORYMEMORY:相应段在同名段的最高地址处相应段在同名段的最高地址处类别类别:不同模块连接时将相同类别的段放在连续的内存区域中不同模块连接时将相同类别的段放在连续的内存区域中4.2.34.2.3段定义伪指令段定义伪指令例例:DATA SEGMENT PUBLIC CODEDATA SEGMENT PUBLIC CODEMEM1 DB 11HMEM1 DB 11H,22H22HDATA ENDSDATA ENDS4.2.34.2.3段定义伪指令段定义伪指令模块模块1STACK SEGMENT STACK DB 100 DUP(?)STACK EDNSDATA SEGMENT COMMONAREA1 DB 1024 DUP(?)DATA ENDSCODE SEGMENT PUBLICCODE ENDS模块模块2STACK SEGMENT STACK DB 50 DUP(?)STACK EDNSDATA SEGMENT COMMONAREA1 DB 8192 DUP(0)DATA ENDSCODE SEGMENT PUBLICCODE ENDS END4.2.34.2.3段定义伪指令段定义伪指令例例题4-34.2.4设定段寄存器定段寄存器伪指令指令伪指令伪指令ASSUMEASSUME则告诉汇编程序,哪一个段为数据段哪一个段为堆栈则告诉汇编程序,哪一个段为数据段哪一个段为堆栈段,哪一个段为代码段。段,哪一个段为代码段。ASSUMEASSUME段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,例例4-4:CODE SEGMENT PARA PUBLIC CODE ASSUME CS:CODE,DS:DATA,ES:EDATA,SS:STACK MOV AX,DATA MOV DS,AX MOV AX,EDATA MOV ES,AX MOV AX,STACK MOV SS,AX CODE ENDS4.2.44.2.4设定段寄存器伪指令设定段寄存器伪指令4.2.5 定定义过程程伪指令指令ASM-86ASM-86语言中,过程的含义和子程序是一样的,一个过程可以语言中,过程的含义和子程序是一样的,一个过程可以被其他程序所调用,它的最后一条指令总是返回指令,以控制此过被其他程序所调用,它的最后一条指令总是返回指令,以控制此过程在执行完毕后,返回到主程序。程在执行完毕后,返回到主程序。定义过程的伪指令的一般格式:定义过程的伪指令的一般格式:过程名过程名PROCPROCNEAR/FARNEAR/FAR RETRET过程名过程名ENDPENDP伪指令伪指令ENDEND用来表示源程序到此结束,指示汇编程序停止汇编。用来表示源程序到此结束,指示汇编程序停止汇编。END END标号标号4.2.6 宏命令宏命令伪指令指令宏命令宏命令源程序中由汇编程序识别的具有独立功能的一段源程序中由汇编程序识别的具有独立功能的一段 程序代码程序代码格式:格式:宏命令名宏命令名 MACRO MACRO ENDM ENDM宏体宏体宏命令宏命令与与子程序子程序的区别:的区别:(1 1)宏命令伪指令有汇编程序)宏命令伪指令有汇编程序MASMMASM在反汇编过程中进行处理,在反汇编过程中进行处理,在每个宏调用处,在每个宏调用处,MASMMASM都用其对应的宏定义体替换。都用其对应的宏定义体替换。(2 2)宏指令简化了源程序,但不能简化目标程序)宏指令简化了源程序,但不能简化目标程序(3 3)宏指令执行的速度快)宏指令执行的速度快4.2.7 模模块定定义与与链接接伪指令指令ORG ORG 段内程序代码或变量的起始偏移地址段内程序代码或变量的起始偏移地址格式:格式:ORG ORG 表达式表达式例:例:ORG 2000HORG 2000H计算值为计算值为非负常数非负常数NAMENAME为目标程序设定一个名字为目标程序设定一个名字格式:格式:NAME NAME 模块名模块名TITLETITLE为程序清单指定打印标题为程序清单指定打印标题格式:格式:TITLE TITLE 标题名标题名END 表示源程序结束表示源程序结束格式:格式:END END 标号标号 一个完整源程序结构例一个完整源程序结构例DSEG SEGMENTDATA1 DB 1,2,DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT STACK STACK DB 200 DUP(?)(?)SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX CSEG ENDS END START一个完整源程序结构例一个完整源程序结构例 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX CSEG ENDS END START源程序源程序 代码代码例例4-7求从求从TABLE开始的开始的10个无符号字节数的和,结果放个无符号字节数的和,结果放SUM字单元中。字单元中。DATASEGMENT;定义数据段定义数据段TABLE DB 12H,23H,34H,45H,56H DB 67H,78H,89H,9AH,0FDH;10个加数个加数SUM DW?DATA ENDS;数据段结束;数据段结束;STACKSEGMENT;定义;定义50个字节的堆栈段个字节的堆栈段DB 50 DUP(?);STACKENDS;附加段结束;附加段结束;CODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX MOV AX,STACK MOVSS,AX LEA SI,TABLE MOVCX,10 XORAX,AXNEXT:ADD AL,SI ADC AH,0 INC SI LOOP NEXT MOV SUM,AXHLTCODE ENDS END START4.3 4.3 DOS 功能调用功能调用 微型机的系统软件(如操作系统)提供了很多可供用户调用微型机的系统软件(如操作系统)提供了很多可供用户调用的功能子程序。主要分为的功能子程序。主要分为DOSDOS和和BIOSBIOS功能调用。功能调用。DOSDOS功能调用不依功能调用不依赖具体的硬件系统。赖具体的硬件系统。所有的所有的DOSDOS系统功能调用都是利用软中断指令系统功能调用都是利用软中断指令INT 21HINT 21H来实现来实现的。的。INT 21H 是一个具有是一个具有90多各子功能的中断服务程序,每个子多各子功能的中断服务程序,每个子功能都进行了编号功能都进行了编号称为功能号。用户通过指定功能号来调用称为功能号。用户通过指定功能号来调用INT 21H的不同子功能。的不同子功能。DOS系统功能调用的使用方法如下:系统功能调用的使用方法如下:AH功能号;功能号;在其他寄存器中放入在其他寄存器中放入该功能所要求的入口参数;功能所要求的入口参数;执行行INT 21H指令;指令;分析出口参数。分析出口参数。例例4-8从键盘输入一个从键盘输入一个“Y”或或“N”字符。字符。KEY:MOV AH,1;有回显的键盘输入。功能号;有回显的键盘输入。功能号1送送(AH)INT 21H CMP AL,Y JE YES CMP AL,N JE NOT JMP KEYYES:NOT:1、从键盘输入单个字符、从键盘输入单个字符4.3 4.3 DOS 功能调用功能调用2、从键盘输入字符串、从键盘输入字符串AH AH 功能号功能号OAHOAHDSDS:DX DX 字符串在内存中的存放地址字符串在内存中的存放地址INT 21HINT 21H定义字符缓冲区定义字符缓冲区0DHN1N2整个缓冲区整个缓冲区最大键入字符数最大键入字符数实际键入字符数实际键入字符数4.3 4.3 DOS 功能调用功能调用输入字符串程序段输入字符串程序段 DAT1 DB 20 DAT1 DB 20,?,?,20 DUP20 DUP(?)(?)LEA DX LEA DX,DAT1DAT1 MOV AH MOV AH,0AH0AH INT 21H INT 21H在数据段在数据段中定义中定义输入缓冲区输入缓冲区14H?定义后的输入缓定义后的输入缓冲区初始状态:冲区初始状态:4.3 4.3 DOS 功能调用功能调用4.3 4.3 DOS 功能调用功能调用 3.显示器(显示器(CRT)输出)输出 要将一个字符串送到显示器显示,可调用要将一个字符串送到显示器显示,可调用DOS功能的功能的2,6,9号功能实现。其中,功能号功能实现。其中,功能2,6用于显示单个字符,功能用于显示单个字符,功能9显示一个显示一个字符串。字符串。MOV DL,要显示的字符要显示的字符 MOV AH,2 INT 21H要显示的字符的要显示的字符的ASCII代码代码DOS功功能号能号4.3 4.3 DOS 功能调用功能调用AH 功能号功能号O2HDL 待输出字符待输出字符INT 21H 注:注:功能功能2、6、9都可以接受键盘输入,都可以接受键盘输入,2、6显示单个字符,显示单个字符,9显示一个字符串显示一个字符串1)单字符显示输出单字符显示输出 MOVAH,02 MOVDL,41H INT21H执行结果:执行结果:屏幕显示屏幕显示A4.3 4.3 DOS 功能调用功能调用例例:AH AH 功能号功能号O9HO9HDSDS:DX DX 待输出字符串的偏移地址待输出字符串的偏移地址INT 21HINT 21H 被显示的字符串必须被显示的字符串必须以以$结束结束,且所显示的内容不应出现非且所显示的内容不应出现非可见的可见的ASCII码码2 2)字符串输出显示)字符串输出显示DATA SEGMENTMESS1 DB Input String:0DH,0AH,$DATA ENDSCODE SEGMENT MOVAH,09MOVDX,OFFSET MESS1INT21H 4.3 4.3 DOS 功能调用功能调用 4.退回到退回到DOS 一个实际可运行的用户程序在执行完后,应该返回到一个实际可运行的用户程序在执行完后,应该返回到DOS提示符提示符状态,这时需要调用状态,这时需要调用4CH 号功能:号功能:MOV AH,4CH INT 21HDOS功功能号能号4.44.4汇编语言程序设计基础汇编语言程序设计基础 4.4.14.4.1程序设计概述程序设计概述 1 1、程序质量的评价标准、程序质量的评价标准 衡量一个程序的质量通常有以下几个标准:衡量一个程序的质量通常有以下几个标准:(1 1)程序的正确性和完整性;)程序的正确性和完整性;(2)程序的易读性:程序的易读性:(3 3)程序的执行时间和效率:)程序的执行时间和效率:(4 4)程序所占内存的大小。)程序所占内存的大小。编写一个程序首先要保证它的正确性,包括语法上和功能编写一个程序首先要保证它的正确性,包括语法上和功能上:针对汇编语言程序较难读、难理解的缺点,设计时应尽量上:针对汇编语言程序较难读、难理解的缺点,设计时应尽量采用结构化、模块化的程序设计方法,每个模块都由基本结构采用结构化、模块化的程序设计方法,每个模块都由基本结构程序组成,在语句后边添加一定的注释说明,并配以完整的文程序组成,在语句后边添加一定的注释说明,并配以完整的文档资料。以便于阅读、测试和维护等:另外,程序的响应时间、档资料。以便于阅读、测试和维护等:另外,程序的响应时间、实时处理能力、输入输出方式和结果、内存占用大小及安全可实时处理能力、输入输出方式和结果、内存占用大小及安全可靠性等,也都是非常重要的性能指标。靠性等,也都是非常重要的性能指标。2、程序设计的一般步骤、程序设计的一般步骤 依照软件工程理论,汇编语言的程序设计与高级语言的程序设计依照软件工程理论,汇编语言的程序设计与高级语言的程序设计一样可分为以下几个步骤:一样可分为以下几个步骤:(1)分析实际问题并抽象出系统数学模型,建立模块结构并画出结分析实际问题并抽象出系统数学模型,建立模块结构并画出结构框图;构框图;(2)确定求解各模块的数据结构及算法。确定求解各模块的数据结构及算法。(3)画程序流程图画程序流程图;(4)用指令或伪指令为数据和程序代码分配内存单元和寄存器,这用指令或伪指令为数据和程序代码分配内存单元和寄存器,这是汇编语言程序设计的一个重要特点名是汇编语言程序设计的一个重要特点名;(5)编写源程序并保存,形成源程序文件(编写源程序并保存,形成源程序文件(ASM);(6)通过汇编生成目标代码文件(通过汇编生成目标代码文件(OBJ),同时完成静态的语法检查:,同时完成静态的语法检查:(7)通过链接生成可执行文件(通过链接生成可执行文件(EXE);(8)程序调试,通过后可进行整个系统的测试。程序调试,通过后可进行整个系统的测试。4.4汇编语言程序言程序设计基基础 3、程序设计的一般步骤、程序设计的一般步骤 任何一个复杂的程序都是由简单的基本程序构成的,同高任何一个复杂的程序都是由简单的基本程序构成的,同高级语言类似,汇编语言程序的设计也常用到以下这样几种基本级语言类似,汇编语言程序的设计也常用到以下这样几种基本程序结构:程序结构:顺序程序顺序程序 分支程序分支程序 循环程序循环程序 子程序子程序顺序程序是直线运动的,既顺序程序是直线运动的,既无分支,也无循环或转移,无分支,也无循环或转移,是最简单的一种程序结构。是最简单的一种程序结构。经常会碰到因不同的条经常会碰到因不同的条件去执行不同的程序件去执行不同的程序需要反复做同样工作的情需要反复做同样工作的情况况,循环程序中需要有循循环程序中需要有循环准备、结束判断等指令环准备、结束判断等指令又称过程,相当于高级又称过程,相当于高级语言中的函数或过程,语言中的函数或过程,是具有独立功能的模块。是具有独立功能的模块。4.4汇编语言程序言程序设计基基础 4.4.24.4.2顺序程序顺序程序例例4-11 对于三个无符号数编写对于三个无符号数编写S86H34H21H。DATASEGMENTMUN DB 86H,34H,21H RESULT DW?DATAENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,MUN LEA DI,RESULT MOV AL,SISTARTS1S2S3结束结束4.4汇编语言程序言程序设计基基础 MOV BL,SI1 MULBLMOVBL,SI2MOVBH,0SUBAX,BXMOVDI,AXMOV AH,4CHINT21HCODEENDSENDSTART4.4.24.4.2顺序程序顺序程序例例4-12 内存自内存自TABLE开始的连续开始的连续16个单元中存放着个单元中存放着0-15的平方的平方值,查表求值,查表求DATA中任意数中任意数X(0X15)的平方值,并将结果放的平方值,并将结果放RESULT中。中。程序:程序:DSEGSEGMENTTABLE DB0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225;定义平方表定义平方表DATA DB?RESULT DB?DSEG ENDSSSEG SEGMENT STACK STACK DB 100 DUP(?)SSEG ENDSCSEG SEGMENT ASSUMECS:CSEG,DS:DSEG,SS:SSEG4.4.24.4.2顺序程序顺序程序BEGIN:MOVAX,DSEG;初始化数据段初始化数据段 MOVDS,AX MOVAX,SSEG;初始化堆栈段初始化堆栈段MOVSS,AX;LEABX,TABLE;置数据指针;置数据指针MOVAH,0;MOVAL,DATA;取待查数;取待查数ADDBX,AX;查表;查表MOVAL,BX;MOVRESULT,AL;平方数存;平方数存RESULT单元单元MOVAH,4CHINT21HCSEG ENDS ENDBEGIN4.4.24.4.2顺序程序顺序程序4.4.3分支程序分支程序 分支程序是利用条件转分支程序是利用条件转移指令,使程序执行到某一指移指令,使程序执行到某一指令后,根据条件是否满足,来令后,根据条件是否满足,来改变程序执行的顺序。改变程序执行的顺序。条件条件1 1条件条件2 2分支程序段分支程序段2 2分支程序段分支程序段3 3结束结束是是否否否否分支程序段分支程序段1 1是是结束结束例例4-13 编写程序,将数据区中以字节变量编写程序,将数据区中以字节变量BUFFER为首地址的为首地址的100个单元清零。个单元清零。程序段如下:程序段如下:DATASEGMENTBUFFERDB 100 DUP(?)COUNT DB 100DATAENDSSTACK SEGMENT DW 32 DUP(?)STACK ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK4.4.34.4.3分支程序分支程序START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV CL,COUNT;置单元长度置单元长度 LEA BX,BUFFERAGAIN:MOV BX,0;实现实现100个单元清零个单元清零 INC BX CMP BX,COUNT JB AGAIN MOV AH,4CH INT 21HCODE ENDS END START4.4.34.4.3分支程序分支程序例例4-14 在当前数据段的在当前数据段的DATA开始的顺序开始的顺序80个单元中,存放个单元中,存放80位位同学某门课程的考试成绩(同学某门课程的考试成绩(0-100)。编写程序统计)。编写程序统计90分,分,80-89分,分,70-79分,分,60-69分以及分以及60分的人数。并将结果放到同一数据分的人数。并将结果放到同一数据段的段的DATA2开始的开始的5个单元。个单元。程序:程序:DATASEGMENTDATA1 DB 80 DUP(?)DATA2 DB 5 DUP(0)DATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,80;共统计共统计80个学生的成绩个学生的成绩4.4.34.4.3分支程序分支程序LEA SI,DATA1LEA DI,DATA2AGAIN:MOV AL,SICMP AL,90;大于大于90分吗?分吗?JC NEXT1INC BYTE PTRDI;90分以上的人数加分以上的人数加1JMP STONEXT1:CMP AL,80;大于大于80分吗?分吗?JC NEXT2INC BYTE PTRDI+1;80分以上的人数加分以上的人数加1JMP STO4.4.34.4.3分支程序分支程序NEXT2:CMP AL,70;大于大于70分吗?分吗?JC NEXT3INC BYTE PTRDI+2;70分以上的人数加分以上的人数加1JMP STONEXT3:CMP AL,60;大于大于60分吗?分吗?JC NEXT4INC BYTE PTRDI+3;60分以上的人数加分以上的人数加1NEXT4:INC BYTE PTRDI+4;60分以下的人数加分以下的人数加1STO:INC SILOOP AGAIN4.4.34.4.3分支程序分支程序CODE ENDS END START循环循环体体循环循环初态初态循环循环结束结束条件条件4.4.4 4.4.4 循环程序设计循环程序设计例例3-50 统计以统计以BUFFER为起始地址的为起始地址的100个单元中负数的个数个单元中负数的个数,并将统计出来的负数个数送并将统计出来的负数个数送NUM单元。(单元。(P145)XOR BL,BL;存放负数的个数存放负数的个数MOV CX,100;统计次数统计次数LEA SI,BUFFERCLDNEXT:LODSB;取一个数取一个数TEST AL,80HJZ GOONINC BLGOON:LOOP NEXT;是负数,计数器加是负数,计数器加1MOV NUM,BL4.4.4 4.4.4 循环程序设计循环程序设计4.4.54.4.5子程序子程序设计例例4-16从一个字符串删去一个字符。从一个字符串删去一个字符。DATASEGMENTSTRING DB ExxperinceLENGTHDW$_STRINGKEYDB XDATAENDSCODESEGMENTASSUME CS:CODE,DS:DATAMAINPROC FARSTART:MOV AX,DATAMOV DS,AXLEA BX,STRING多余的多余的字符字符LEA CX,LENGTHPUSH BXPUSH CXMOV AL,KEYCALL DELCHARMOV AH,4CHINT 21HMAINENDPDELCHARPROCPUSH BPMOV BP,SPPUSH SIPUSH DIPUSH CX程序执行时堆栈最满时的状态程序执行时堆栈最满时的状态4.4.5 4.4.5 子程序设计子程序设计CLDMOV SI,BP4MOV CX,SIMOV DI,BP6REPNE SCASBJNE DONEMOV SI,BP4 DEC WORDPTRSIMOV SI,DIDEC DIREP MOVSBDONE:POPCX POPDI POPSI POPBP RET4DELCHAR ENDPCODE ENDS ENDSTART4.4.5 4.4.5 子程序设计子程序设计例例4-18当当I/O状态端口状态端口0378H的的Bit1为为0时,表示外设忙;为时,表示外设忙;为1则表示外则表示外设可以接收数据。现将当前数据段中从设可以接收数据。现将当前数据段中从BUFFER开始的连续开始的连续100个字节的内个字节的内容从容从I/O数据端口数据端口03F8H输出到外设。输出到外设。SENDATAPROC FARPUSH AXPUSH DXPUSH SIPUSH CXLEA SI,BUFFERMOV CL,100AGAIN:MOV DX,378HWAIT:IN AL,DXTEST AL,02HJZ WAIT4.4.5 4.4.5 子程序设计子程序设计MOVAL,SIMOV DX,3F8HOUT DX,ALINC SIDEC CLJNZAGAINPOP CXPOPSIPOPDXPOP AXRETSENDATAENDP4.4.5 4.4.5 子程序设计子程序设计4.54.5常见程序设计举例常见程序设计举例DATA SEGMENTMASC DB 2,6,A,1MBIN DB 2 DUP(?)(?)DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATABEGIN:MOV AX,DATA MOV DS,AX MOV CL,4 MOV CH,CL LEA SI,MASC CLD 例例4-194-19把把ASCIIASCII码形式表示的数转换为二进制码。码形式表示的数转换为二进制码。ASCIIASCII码存放码存放在以在以MASCMASC为首地址的内存单元中,转换结果放为首地址的内存单元中,转换结果放MBINMBIN。XOR AX,AX XOR DX,DXNEXT1:LODS MASC AND AL,7FH CMP AL,0 JL ERROR CMP AL,9 JG NEXT2 SUB AL,30H JMP SHORT NEXT3NEXT2:CMP AL,A JL ERROR CMP AL,F4.54.5常见程序设计举例常见程序设计举例 JG ERROR SUB AL,37HNEXT3:OR DL,AL ROR DX,CL DEC CH JNZ NEXT1 MOV WORD PTR MBIN,DX MOV AH,4CH INT 21HCODE ENDS EDN BEGIN4.54.5常见程序设计举例常见程序设计举例例例4-20把存放在把存放在BUFF中的中的16位二进制数转换为位二进制数转换为ASCII表示的表示的等值数字字符串。例如等值数字字符串。例如FFFFH转换成等值的数字字符串转换成等值的数字字符串65535。DATA SEGMENTBUFF DW 4FB6HASCC DB 5 DUP(?)(?)DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,5 LEA DI,ASCC XOR DX,DX MOV BX,0AH4.54.5常见程序设计举例常见程序设计举例AGAIN:DIV BX ADD DL,30H MOV DI,DL JL ERROR INC DI AND AX,AX JZ STO MOV DL,0 LOOP AGAINSTO:MOV AX,4CH INT 21HCODE ENDS END START4.54.5常见程序设计举例常见程序设计举例例例4-21两个多字节二进制数求和。两个多字节二进制数求和。DATA SEGMENTBUFF1 DB 4FH,0B6H,7CH,34H,56H,1FHBUFF2 DB 13H,24H,57H,68H,FDH,9AH SUM DB 6 DUP(?)(?)CONT DB 3DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUFF1 MOV DI,OFFSET BUFF2 MOV BX,OFFSET SUM4.54.5常见程序设计举例常见程序设计举例 MOV CL,CONT ADD DL,30H MOV CH,0 CLCGOON:MOV AX,SI ADC AX,DI ADD SI,2 ADD DI,2 MOV BX,AX ADD BX,2 LOOP GOON MOV AX,4CH INT 21HCODE ENDS END START4.54.5常见程序设计举例常见程序设计举例例例4-22把一个二进制数转换为把一个二进制数转换为BCD码。码。分析:将一个二进制数转换为分析:将一个二进制数转换为BCD码,可以把该二进制数不断地除码,可以把该二进制数不断地除以以10,并记下余数,直到商为,并记下余数,直到商为0。余数序列就是所求的。余数序列就是所求的BCD码,第码,第一个余数为该一个余数为该BCD的最低位。的最低位。转换出的转换出的BCD码是扩展码是扩展BCD码,要得到压缩的码,要得到压缩的BCD码,要取码,要取各数字的低四位,将其拼接在一起。各数字的低四位,将其拼接在一起。DATA SEGMENTMBIN DW 4FB6HMBCD DB 5 DUP(?)(?)DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA4.54.5常见程序设计举例常见程序设计举例START:MOV AX,DATA MOV DS,AXMOV AX,MBIN LEA BX,MBCD XORDX,DX MOV CX,0AH DIV CX MOV BX,DL MOV DL,0 DIV CX INC BX MOV BX,DL MOV DL,0 DIV CX INC BX MOV BX,DL MOV DL,0 DIV CX INC BX MOV BX,DL INC BX MOV BX,AL MOV AH,4CH INT 21HCODE ENDS END START作业作业1.在下列程序运行后,请给相应的寄存器及存储单元填入运行的结在下列程序运行后,请给相应的寄存器及存储单元填入运行的结果。果。MOVAL,10HMOVCX,1000HMOVBX,2000HMOVCX,ALXCHGCX,BXMOV DH,BXMOV DL,01HXCHGCX,BXMOVBX,DLHLT2.在下列程序运行后,请给相应的寄存器及存储单元填入运行的在下列程序运行后,请给相应的寄存器及存储单元填入运行的结果。结果。MOVAL,20HMOVBP,1000HMOVBX,2000HMOVBP,ALMOVDH,20HMOVBX,DHMOVDL,01HMOVDL,BXMOVCX,3000HHLT3.利用变址寄存器,编写一个程序,把自利用变址寄存器,编写一个程序,把自1000单元开始的单元开始的100个个数传送到自数传送到自0170H开始的存储区中去。开始的存储区中去。编程题编程题1.在自在自0500H单元开始,存有单元开始,存有100个数(字节)。要求把它传送个数(字节)。要求把它传送到到1000H开始的存储区,但在传送过程中要检查数的值,遇到每一开始的存储区,但在传送过程中要检查数的值,遇到每一个零就停止传送。个零就停止传送。2.自自0500H单元开始,有单元开始,有10个无符号数,编写一个程序求这个个无符号数,编写一个程序求这个10个数的和(用个数的和(用8位数运算指令),把和放到位数运算指令),把和放到050A及及050B单元中单元中(和用两个字节表示),且高位在(和用两个字节表示),且高位在050B单元。单元。3.若在若在0600H单元有一个数单元有一个数x,把此数有前四位变,把此数有前四位变0,后四位维持,后四位维持不变,并送回同一单元不变,并送回同一单元
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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