




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微型计算机原理及应用微型计算机原理及应用第四章汇编语言程序设计第四章汇编语言程序设计主要内容主要内容 汇编语言源程序的结构汇编语言源程序的结构 汇编语言语句格式汇编语言语句格式 伪指令伪指令 功能调用功能调用 汇编语言程序设计汇编语言程序设计4.1 4.1 汇编语言源程序汇编语言源程序了解:了解:计算机的三种语言计算机的三种语言源程序的结构源程序的结构汇编语言语句格式汇编语言语句格式1. 计算机设计语言计算机设计语言机器语言机器语言汇编语言汇编语言高级语言高级语言面向机器面向机器 的语言的语言机器语言机器语言汇编语言汇编语言高级语言高级语言用二进制数码表示指令用二进制数码表示指令和数据的语言和
2、数据的语言执行速度快,占用内存少不执行速度快,占用内存少不直观,不易理解和记忆直观,不易理解和记忆用汇编语言编写用汇编语言编写的程序的程序4.1 4.1 汇编语言源程序汇编语言源程序2. 2. 汇编程序汇编程序汇编语言源程序汇编语言源程序用助记符编写用助记符编写源程序的编译程序源程序的编译程序汇编程序汇编程序(assemble)汇编语言源汇编语言源程序程序机器语言目机器语言目标程序标程序ASMMASM汇编语言程序设计与执行过程:汇编语言程序设计与执行过程:输入汇编语言源程序输入汇编语言源程序 源文件源文件 . .ASMASM汇编(编译)汇编(编译) 目标文件目标文件 . .OBJOBJ链接链接
3、 可执行文件可执行文件 . .EXEEXE调试调试 最终程序最终程序4.1 4.1 汇编语言源程序汇编语言源程序4.1.14.1.1汇编语言结构汇编语言结构 段名段名1SEGMENT段名段名1ENDS段名段名2SEGMENT段名段名2ENDS段名段名nSEGMENT段名段名nENDS END一个完整的用汇编语言写的源程序,由可执行指令组成的一个完整的用汇编语言写的源程序,由可执行指令组成的指令指令性语句性语句和由对符号定义、分配存储单元、分段等和由对符号定义、分配存储单元、分段等指示性语句指示性语句组成。组成。一个完整的程序包括四种段:由源程序组成的一个完整的程序包括四种段:由源程序组成的代码
4、段代码段,堆栈操作所,堆栈操作所需要的需要的堆栈段堆栈段和存放数据的和存放数据的数据段数据段以及以及附加段附加段。 例例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 MO
5、V ES,AX MOV AX,DATA1 ADD AX,DATA2 MOV ES:SI,AX HLTCSEG ENDS ENDSTART4.1.14.1.1汇编语言结构汇编语言结构 4.1.24.1.2汇编语言语句类型及格式汇编语言语句类型及格式指令性语句指令性语句:由指令组成的由:由指令组成的由CPU执行的语句。执行的语句。指示性语句指示性语句:不是由:不是由CPU执行的语句,而是用来告诉汇编程序如执行的语句,而是用来告诉汇编程序如何对程序进行汇编的指令,这类指令不能生成目标代码。何对程序进行汇编的指令,这类指令不能生成目标代码。指令性语句的格式:指令性语句的格式: 标号:标号: 前缀前缀
6、助记符助记符 操作数操作数 , 操作数操作数 ;注释;注释 指令的符号地址,指令的符号地址,标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号指示性语句格式指示性语句格式: : 名字名字 伪指令助记符伪指令助记符 操作数操作数 ,操作数,操作数, ;注释;注释 变量的符号地址变量的符号地址,其后不加冒号,其后不加冒号指示性语句中至指示性语句中至少有一个操作数少有一个操作数标号、名字的区别标号、名字的区别标号后有冒号,在指令性语句前;名字后不加冒号,在指示标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。性语句前。英文字母、数字及专用字符组成英文字母、数字及专用字符组成
7、, ,最大长度不能超过最大长度不能超过3131个个, ,且且不能由数字打头不能由数字打头, ,不能用保留字不能用保留字( (如寄存器名如寄存器名, ,指令助记符指令助记符, ,伪伪指令指令) )。 例例:START:MOV AX,DATADATA1 DB 11H,22H,33H4.1.24.1.2汇编语言语句类型及格式汇编语言语句类型及格式操作码操作码指令码指令码 命令命令CPUCPU要完成的操作要完成的操作伪指令助记符伪指令助记符指示汇编程序要完成的操作指示汇编程序要完成的操作用来定义变量用来定义变量, ,分配存储单元分配存储单元指示程序开始和结束等指示程序开始和结束等注释注释 用分号作为注
8、释的开始,用于说明程序或语句的功能,以用分号作为注释的开始,用于说明程序或语句的功能,以便于阅读和理解。便于阅读和理解。4.1.24.1.2汇编语言语句类型及格式汇编语言语句类型及格式4.1.34.1.3数据项及表达式数据项及表达式 常量(常量(Constant):):指令中出现的固定值指令中出现的固定值,包括数字常量和字符包括数字常量和字符 串常量。串常量。寄存器寄存器存储器单元存储器单元常量常量变量或标号变量或标号表达式表达式操作数操作数数据项数据项数字常量数字常量字符串常量字符串常量十进制常量,十进制常量,23D二进制常量,二进制常量,1010010B十六进制常量,十六进制常量,64H,
9、0F8H汇编时被译成对应的汇编时被译成对应的ASCII码码:用引号引起的字符或字符串,例:用引号引起的字符或字符串,例:A,ABCD 标号标号是为了使程序便于理解和书写所使用的一些字符串,常作是为了使程序便于理解和书写所使用的一些字符串,常作为一段程序的开头,一个数据块的开头。如规范程序中的为一段程序的开头,一个数据块的开头。如规范程序中的DA1、BUFFER、START等等,它不能与指令助记符或伪指令重名它不能与指令助记符或伪指令重名,也不允也不允许由数字打头。许由数字打头。 保留字保留字是汇编语言中预先保留下来的具有特殊含义的符号,是汇编语言中预先保留下来的具有特殊含义的符号,只能作为固定
10、用途。只能作为固定用途。 由程序员确定,不能与助记符或伪指令重名代表存放一条指令由程序员确定,不能与助记符或伪指令重名代表存放一条指令的存储单元的符号地址标号的属性:的存储单元的符号地址标号的属性: 段段 标号所在段的段地址标号所在段的段地址 偏移量偏移量 标号单元地址与段首地址之间的位移量。标号单元地址与段首地址之间的位移量。 类型类型 字节型、字型和双字型字节型、字型和双字型4.1.34.1.3数据项及表达式数据项及表达式变量变量名由字母开头名由字母开头,其长度不能超过其长度不能超过31个字符个字符,类型有类型有BYTE、WORD、DWORD等等。等等。代表内存中的数据区,程序中视为存储器
11、操作数代表内存中的数据区,程序中视为存储器操作数变量的属性:变量的属性: 段段 值值 变量所在段的段地址变量所在段的段地址 偏移量偏移量 变量单元地址与段首地址之间的位移量。变量单元地址与段首地址之间的位移量。 类类 型型 字节型、字型和双字型字节型、字型和双字型使用时要注意:使用时要注意: 变量类型与指令的要求相符;变量类型与指令的要求相符; MOV AX, VAR1 MOV AL, VAR2 定义变量时,变量名对应的是数据区的首地址。定义变量时,变量名对应的是数据区的首地址。 NUN DB 11H,22H,33H MOV AL, NUM+24.1.34.1.3数据项及表达式数据项及表达式用
12、一个用一个运算符运算符可以对一个操作数或几个操作数进行运算,这就可以对一个操作数或几个操作数进行运算,这就构成了一个表达式,从而得到一个新的值。构成了一个表达式,从而得到一个新的值。运算符包括:算术运运算符包括:算术运算符、逻辑运算符、关系运算符、分析运算符各综合运算符算符、逻辑运算符、关系运算符、分析运算符各综合运算符。 表达式表达式由操作数和运算符组成,不是指令,不能执行,是一个由操作数和运算符组成,不是指令,不能执行,是一个本身已确定的操作数,在汇编时表达式得到一个值。本身已确定的操作数,在汇编时表达式得到一个值。 算术运算和逻辑运算符算术运算和逻辑运算符: :算术运算符算术运算符 +
13、+,- -,* *,/ /,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.
14、1.34.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) 则:
15、则: TYPETYPE BUFFER BUFFER 等于等于2 2 LENGTH BUFFERLENGTH BUFFER等于等于200200 SIZE BUFFERSIZE BUFFER等于等于4004004.1.34.1.3数据项及表达式数据项及表达式综合运算符综合运算符PTRPTR用来指定位于其后的存储器操作数的类型用来指定位于其后的存储器操作数的类型。比如:。比如: MOVBYTE PTR 1000,0 此语句用此语句用BYTE和和PTR规定规定1000单元作为字节单元,执行结果是单元作为字节单元,执行结果是使使1000单元清单元清0。 MOVWORD PTR 1000,0 则对则对10
16、00、1001两单元清两单元清0,因为这里用,因为这里用WORD和和PTR规定规定1000作为一个字的开始。作为一个字的开始。 PTR也用来更改一些已经规定了类型的存储单元的类型。也用来更改一些已经规定了类型的存储单元的类型。SEG运算符用来得到一个标号或变量的段地址。如:运算符用来得到一个标号或变量的段地址。如: MOVAX,SEGDATA MOVDS,AX这两个语句使得这两个语句使得DS中存放对应于中存放对应于DATA的段地址。的段地址。 4.1.34.1.3数据项及表达式数据项及表达式其它运算符其它运算符方括号方括号 方括号中内容为操作数的偏移地址方括号中内容为操作数的偏移地址段重设符段
17、重设符 段寄存器名:段寄存器名: 用于修改默认的段基地址用于修改默认的段基地址4.1.34.1.3数据项及表达式数据项及表达式4.2 4.2 伪指令伪指令掌握:掌握:伪指令的格式及实现的操作伪指令的格式及实现的操作伪指令的应用伪指令的应用 指示性语句中的伪操作命令,在形式和所处语句中位置,指示性语句中的伪操作命令,在形式和所处语句中位置,都与都与CPUCPU指令相似,称为指令相似,称为伪指令伪指令。由汇编程序执行的由汇编程序执行的“指令系统指令系统”用于定义变量、分配存储区、定义逻辑段、指示程序开始和结用于定义变量、分配存储区、定义逻辑段、指示程序开始和结束等束等4.24.2伪指令伪指令4.2
18、.1 4.2.1 数据定义伪指令数据定义伪指令用于定义数据区中变量的类型,数据定义伪指令的一般格式:用于定义数据区中变量的类型,数据定义伪指令的一般格式:变量名变量名伪操作伪操作操作数,操作数,操作数,操作数,伪指令助记符伪指令助记符DB 定义的变量为字节型定义的变量为字节型DW 定义的变量为字类型(双字节)定义的变量为字类型(双字节)DD 定义的变量为双字型(定义的变量为双字型(4字节)字节)DQ 定义的变量为定义的变量为4字型(字型(8字节)字节)DT 定义的变量为定义的变量为10字节型字节型DATA DB 11H,33H ;定义包含两个元素的字节变量;定义包含两个元素的字节变量DATAN
19、UM DW 100588 ;定义一个字类型变量;定义一个字类型变量NUM,初值为表达,初值为表达 式的值式的值STR DB Hello! ;定义一个字符串,字符串的首地址为;定义一个字符串,字符串的首地址为STRDATA1 DB ?;在该单元中没有放初值,汇编程序会在该处留出一?;在该单元中没有放初值,汇编程序会在该处留出一 个单元。个单元。DATA1DB20DUP(?);为变量(?);为变量DATA1分配分配20个字节的空个字节的空 间,初值为任意值。间,初值为任意值。DATA2DW?;为变量?;为变量DATA2分配分配2个字节的空个字节的空 间,间, 值为任意值值为任意值数据定义伪操作数的
20、操作数还可以是问号数据定义伪操作数的操作数还可以是问号“?”,此时仅给变,此时仅给变量保留相应的存储单元。量保留相应的存储单元。当同样的操作数重复多次时,可用重复操作符当同样的操作数重复多次时,可用重复操作符“DUP”表示。表示。DATA3DB20DUP(30H);为变量);为变量DATA3分配分配20个字节个字节 的空间,初值均为的空间,初值均为30HSTDBHow are you?格式:格式: 变量名变量名 伪指令助记符伪指令助记符 n DUP(初值,初值,)4.2.1 4.2.1 数据定义伪指令数据定义伪指令例例:DATA1 DB 11HDATA1 DB 11H,22H22H,33H33
21、H,44H44HDATA2 DW 11HDATA2 DW 11H,22H22H,3344H3344HDATA3 DD 11HDATA3 DD 11H* *2 2,22H22H,33445566H33445566HSUM DQ 0011223344556677HSUM DQ 0011223344556677HABC DT 1234567890HABC DT 1234567890H以上变量在内存以上变量在内存中的存放形式中的存放形式4.2.1 4.2.1 数据定义伪指令数据定义伪指令伪指令的性质决定所定义变量的属性伪指令的性质决定所定义变量的属性定义字符串必须用定义字符串必须用DBDB伪指令伪指令
22、 例例 : DATA1 DB ABCDDATA1 DB ABCD,66H66HABCD41H42H43H44H66H4.2.1 4.2.1 数据定义伪指令数据定义伪指令4.2.24.2.2符号定义伪指令符号定义伪指令EQUEQU EQUEQU不仅可以使一个标号等于一个数值,也可以使一个标号等不仅可以使一个标号等于一个数值,也可以使一个标号等于另一个标号。于另一个标号。 EQUEQU说明的表达式不占用内存空间。其两种使用格说明的表达式不占用内存空间。其两种使用格式:式: 名字名字 EQUEQU表达式表达式新名字新名字EQUEQU旧名字旧名字CREQU0DH;使标号;使标号CR为数值为数值0DHX
23、YZEQUABC;使;使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总是成对使用的。用这一对伪指令可将总是成对使
24、用的。用这一对伪指令可将汇编语言源程序分成几个段,通常分为数据段、堆栈段和代码段。汇编语言源程序分成几个段,通常分为数据段、堆栈段和代码段。格式为:格式为:段名段名SEGMENTSEGMENT定位类型定位类型 组合类型组合类型 类别类别定位类型定位类型:PARAPARA: 段的起点从节边界开始(段的起点从节边界开始(1616个字节为个字节为1 1节)节)BYTEBYTE: 段的起点从存储器任何地址开始段的起点从存储器任何地址开始WORDWORD: 段的起点从偶地址开始段的起点从偶地址开始PAGEPAGE: 段的起点从页边界开始(段的起点从页边界开始(256256个字节为个字节为1 1页)页)组
25、合类型:组合类型:与其它模块中的同名段在满足定位类型的前提下具有的组合方式与其它模块中的同名段在满足定位类型的前提下具有的组合方式: :NONENONE: 不组合不组合PUBLICPUBLIC: 依次连接(顺序由依次连接(顺序由LINKLINK程序确定)程序确定)COMMONCOMMON: 覆盖连接覆盖连接STACKSTACK: 堆栈段的依次连接堆栈段的依次连接AT AT 表达式:表达式: 段定义在表达式值为段基的节边界段定义在表达式值为段基的节边界MEMORYMEMORY: 相应段在同名段的最高地址处相应段在同名段的最高地址处类别类别:不同模块连接时将相同类别的段放在连续的内存区域中不同模块
26、连接时将相同类别的段放在连续的内存区域中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 SEG
27、MENT STACK DB 50 DUP(?)STACK EDNSDATA SEGMENT COMMONAREA1 DB 8192 DUP(0)DATA ENDSCODE SEGMENT PUBLICCODE ENDS END4.2.34.2.3段定义伪指令段定义伪指令 例题例题4-34-34.2.44.2.4设定段寄存器伪指令设定段寄存器伪指令伪指令伪指令ASSUMEASSUME则告诉汇编程序,哪一个段为数据段哪一个段为堆则告诉汇编程序,哪一个段为数据段哪一个段为堆栈段,哪一个段为代码段。栈段,哪一个段为代码段。 ASSUMEASSUME段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,
28、段寄存器名:段名,例例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 4.2.5 定义过程伪指令定义过程伪指令ASM-86ASM-86语言中,过程的含义和子程序是一样的,一个过程可语言中,过程的含义和子程序是一样的,一个过程可以被其他程序所调用,它的最后一条指令总是返回指令,
29、以控制以被其他程序所调用,它的最后一条指令总是返回指令,以控制此过程在执行完毕后,返回到主程序。此过程在执行完毕后,返回到主程序。定义过程的伪指令的一般格式:定义过程的伪指令的一般格式: 过程名过程名PROCPROCNEAR/FARNEAR/FAR RETRET过程名过程名ENDPENDP伪指令伪指令ENDEND用来表示源程序到此结束,指示汇编程序停止汇编。用来表示源程序到此结束,指示汇编程序停止汇编。 END END标号标号4.2.6 4.2.6 宏命令伪指令宏命令伪指令宏命令宏命令源程序中由汇编程序识别的具有独立功能的一段源程序中由汇编程序识别的具有独立功能的一段 程序代码程序代码格式:格
30、式: 宏命令名宏命令名 MACRO MACRO ENDM ENDM宏体宏体宏命令宏命令与与子程序子程序的区别:的区别:(1 1)宏命令伪指令有汇编程序)宏命令伪指令有汇编程序MASMMASM在反汇编过程中进行处理,在反汇编过程中进行处理,在每个宏调用处,在每个宏调用处,MASMMASM都用其对应的宏定义体替换。都用其对应的宏定义体替换。(2 2)宏指令简化了源程序,但不能简化目标程序)宏指令简化了源程序,但不能简化目标程序(3 3)宏指令执行的速度快)宏指令执行的速度快4.2.7 4.2.7 模块定义与链接伪指令模块定义与链接伪指令ORG ORG 段内程序代码或变量的起始偏移地址段内程序代码或
31、变量的起始偏移地址格式:格式: 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
32、 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
33、 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个字节的堆栈段个字节的
34、堆栈段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 功能调用功能调用 微型机的系统软件(如操作系统)提供了很多可供用户调用微型机的系统软件(如操作系统)提供
35、了很多可供用户调用的功能子程序。主要分为的功能子程序。主要分为DOSDOS和和BIOSBIOS功能调用。功能调用。DOSDOS功能调用不依功能调用不依赖具体的硬件系统。赖具体的硬件系统。 所有的所有的DOSDOS系统功能调用都是利用软中断指令系统功能调用都是利用软中断指令INT 21HINT 21H来实现来实现的。的。 INT 21H 是一个具有是一个具有90多各子功能的中断服务程序,每个子多各子功能的中断服务程序,每个子功能都进行了编号功能都进行了编号称为功能号。用户通过指定功能号来调用称为功能号。用户通过指定功能号来调用INT 21H的不同子功能。的不同子功能。DOS系统功能调用的使用方法
36、如下:系统功能调用的使用方法如下: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
37、 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 ?定义后的输入
38、缓定义后的输入缓冲区初始状态:冲区初始状态: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
39、 待输出字符待输出字符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
40、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程
41、序设计概述程序设计概述 1 1、程序质量的评价标准、程序质量的评价标准 衡量一个程序的质量通常有以下几个标准:衡量一个程序的质量通常有以下几个标准:(1 1)程序的正确性和完整性;)程序的正确性和完整性;(2)程序的易读性:程序的易读性:(3 3)程序的执行时间和效率:)程序的执行时间和效率:(4 4)程序所占内存的大小。)程序所占内存的大小。 编写一个程序首先要保证它的正确性,包括语法上和功能编写一个程序首先要保证它的正确性,包括语法上和功能上:针对汇编语言程序较难读、难理解的缺点,设计时应尽量上:针对汇编语言程序较难读、难理解的缺点,设计时应尽量采用结构化、模块化的程序设计方法,每个模块都
42、由基本结构采用结构化、模块化的程序设计方法,每个模块都由基本结构程序组成,在语句后边添加一定的注释说明,并配以完整的文程序组成,在语句后边添加一定的注释说明,并配以完整的文档资料。以便于阅读、测试和维护等:另外,程序的响应时间、档资料。以便于阅读、测试和维护等:另外,程序的响应时间、实时处理能力、输入输出方式和结果、内存占用大小及安全可实时处理能力、输入输出方式和结果、内存占用大小及安全可靠性等,也都是非常重要的性能指标。靠性等,也都是非常重要的性能指标。 2、程序设计的一般步骤、程序设计的一般步骤 依照软件工程理论,汇编语言的程序设计与高级语言的程序设依照软件工程理论,汇编语言的程序设计与高
43、级语言的程序设计一样可分为以下几个步骤:计一样可分为以下几个步骤:(1) 分析实际问题并抽象出系统数学模型,建立模块结构并画出结分析实际问题并抽象出系统数学模型,建立模块结构并画出结构框图;构框图;确定求解各模块的数据结构及算法。确定求解各模块的数据结构及算法。 画程序流程图画程序流程图;(4) 用指令或伪指令为数据和程序代码分配内存单元和寄存器,这用指令或伪指令为数据和程序代码分配内存单元和寄存器,这是汇编语言程序设计的一个重要特点名是汇编语言程序设计的一个重要特点名;(5) 编写源程序并保存,形成源程序文件(编写源程序并保存,形成源程序文件(ASM);(6) 通过汇编生成目标代码文件(通过
44、汇编生成目标代码文件(OBJ),同时完成静态的语法检,同时完成静态的语法检查:查:(7) 通过链接生成可执行文件(通过链接生成可执行文件(EXE);(8) 程序调试,通过后可进行整个系统的测试。程序调试,通过后可进行整个系统的测试。4.44.4汇编语言程序设计基础汇编语言程序设计基础 3、程序设计的一般步骤、程序设计的一般步骤 任何一个复杂的程序都是由简单的基本程序构成的,同高任何一个复杂的程序都是由简单的基本程序构成的,同高级语言类似,汇编语言程序的设计也常用到以下这样几种基本级语言类似,汇编语言程序的设计也常用到以下这样几种基本程序结构:程序结构: 顺序程序顺序程序 分支程序分支程序 循环
45、程序循环程序 子程序子程序顺序程序是直线运动的,既顺序程序是直线运动的,既无分支,也无循环或转移,无分支,也无循环或转移,是最简单的一种程序结构。是最简单的一种程序结构。经常会碰到因不同的条经常会碰到因不同的条件去执行不同的程序件去执行不同的程序需要反复做同样工作的情需要反复做同样工作的情况况,循环程序中需要有循循环程序中需要有循环准备、结束判断等指令环准备、结束判断等指令又称过程,相当于高级又称过程,相当于高级语言中的函数或过程,语言中的函数或过程,是具有独立功能的模块。是具有独立功能的模块。4.44.4汇编语言程序设计基础汇编语言程序设计基础 4.4.24.4.2顺序程序顺序程序例例4-1
46、1 对于三个无符号数编写对于三个无符号数编写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.44.4汇编语言程序设计基础汇编语言程序设计基础 MOV BL,SI1 MULBLMOVBL,SI2MOVBH,0SUBAX,BXMOVDI,AXMOV AH,4CHINT21HCODEENDSENDSTART4
47、.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 SEG
48、MENT 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.34.4.3分支程序分支程序
49、分支程序是利用条件转分支程序是利用条件转移指令,使程序执行到某一指移指令,使程序执行到某一指令后,根据条件是否满足,来令后,根据条件是否满足,来改变程序执行的顺序。改变程序执行的顺序。条件条件1 1条件条件2 2分支程序段分支程序段2 2分支程序段分支程序段3 3结束结束是是否否否否分支程序段分支程序段1 1是是结束结束例例4-13 编写程序,将数据区中以字节变量编写程序,将数据区中以字节变量BUFFER为首地址的为首地址的100个单元清零。个单元清零。程序段如下:程序段如下:DATASEGMENTBUFFERDB 100 DUP(?)COUNT DB 100DATAENDSSTACK SEG
50、MENT 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
51、在当前数据段的在当前数据段的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 D
52、S,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
53、 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个单元中负数的个数个单元中负
54、数的个数,并将统计出来的负数个数送并将统计出来的负数个数送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.5 4.4.5 子程序设计子程序设计例例4-16从一个字符串删去一个字符。从一个字符串删去一个字符。DATASEGMENTSTRING DB ExxperinceL
55、ENGTHDW $_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 子程序设计子程序设计CLDMO
56、V 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个字节的内个
57、字节的内容从容从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常见程序设计举例常见程序设计举例
58、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,DXNEXT
59、1: 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
60、中的中的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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业选择测试题库及答案
- 中职建筑专业试题及答案
- 医药工程专业试题及答案
- 黑龙江省大庆市2025-2026学年高三第一次教学质量检测历史试题(含答案)
- 河北省唐山市2025-2026学年高三上学期开学语文试题(含答案)
- 特种专业试题及答案
- 贵州省毕节市梁才学校2024-2025学年七年级上学期期末定时训练数学试卷(含答案)
- 广东省2025-2026年高三上9月月考地理试卷(部分解析)
- 女神节女装活动策划方案
- 安徽省六安市独山中学2024-2025学年高二上学期11月期中地理试卷(含答案)
- GB∕T 1186-2016 压缩空气用织物增强橡胶软管 规范
- 轧机设备安装施工方案
- DB31∕T 926-2015 城镇供水管道水力冲洗技术规范
- (完整版)IATF16949新版过程乌龟图的编制与详解课件
- 制药企业仓库温湿度分布的验证
- 满堂脚手架工程施工方案
- LY∕T 2705-2016 樟脑磺酸
- GB∕T 3099.4-2021 紧固件术语 控制、检查、交付、接收和质量
- 透析器的分类和选择
- 山东临清实验中学2012学年八年级语文 7课背影共3课时教案(表格版) 人教新课标版
- 蜗轮蜗杆计算
评论
0/150
提交评论