《最新微机原理章PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新微机原理章PPT课件.ppt(123页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会想起进入夏天,少不了一个热字当头,电扇空调陆续登场,每逢此时,总会想起那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记忆中的故那一把蒲扇。蒲扇,是记忆中的农村,夏季经常用的一件物品。记忆中的故乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老少,个个手持乡,每逢进入夏天,集市上最常见的便是蒲扇、凉席,不论男女老少,个个手持一把,忽闪忽闪个不停,嘴里叨叨着一把,忽闪忽闪个不停,嘴里叨叨着“怎么这么热怎么这么热”,于是三五成群,聚在大树,于是三五成群,聚在大树下,或站着,或随即坐在石头上,手持那把扇子,边唠嗑边乘凉。孩
2、子们却在周下,或站着,或随即坐在石头上,手持那把扇子,边唠嗑边乘凉。孩子们却在周围跑跑跳跳,热得满头大汗,不时听到围跑跑跳跳,热得满头大汗,不时听到“强子,别跑了,快来我给你扇扇强子,别跑了,快来我给你扇扇”。孩。孩子们才不听这一套,跑个没完,直到累气喘吁吁,这才一跑一踮地围过了,这时子们才不听这一套,跑个没完,直到累气喘吁吁,这才一跑一踮地围过了,这时母亲总是,好似生气的样子,边扇边训,母亲总是,好似生气的样子,边扇边训,“你看热的,跑什么?你看热的,跑什么?”此时这把蒲扇,此时这把蒲扇,是那么凉快,那么的温馨幸福,有母亲的味道!蒲扇是中国传统工艺品,在是那么凉快,那么的温馨幸福,有母亲的味
3、道!蒲扇是中国传统工艺品,在我国已有三千年多年的历史。取材于棕榈树,制作简单,方便携带,且蒲扇的表我国已有三千年多年的历史。取材于棕榈树,制作简单,方便携带,且蒲扇的表面光滑,因而,古人常会在上面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即面光滑,因而,古人常会在上面作画。古有棕扇、葵扇、蒲扇、蕉扇诸名,实即今日的蒲扇,江浙称之为芭蕉扇。六七十年代,人们最常用的就是这种,似圆非今日的蒲扇,江浙称之为芭蕉扇。六七十年代,人们最常用的就是这种,似圆非圆,轻巧又便宜的蒲扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,圆,轻巧又便宜的蒲扇。蒲扇流传至今,我的记忆中,它跨越了半个世纪,也走过了我们的半个人
4、生的轨迹,携带着特有的念想,一年年,一天天,流向长也走过了我们的半个人生的轨迹,携带着特有的念想,一年年,一天天,流向长长的时间隧道,袅长的时间隧道,袅微机原理章汇编语言程序的处理过程汇编语言程序的处理过程编编辑辑源程序:文件名源程序:文件名.asm.asm汇汇编编目标程序:文件名目标程序:文件名.obj.obj链链接接可执行程序:文件名可执行程序:文件名.exe.exe调调试试运行应用程序运行应用程序运行运行错误错误错误错误错误错误错误错误负责把汇编源程序翻译负责把汇编源程序翻译成目标程序的一种系统成目标程序的一种系统软件。又称软件。又称汇编程序。汇编程序。不同汇编器的语法和功不同汇编器的语
5、法和功能相差很多能相差很多 MASM(宏汇编)宏汇编)MASM4.0 MASM5.0 MASM6.15 TASM汇编语言概述选择选择汇编编译器汇编编译器是开始工作的是开始工作的第一步第一步链接链接:LINKLINKassembler 2一、语句的种类和格式一、语句的种类和格式l指令语句指令语句由由CPUCPU指令系统中的指令构成语句,能够生指令系统中的指令构成语句,能够生成目标代码(机器码),只出现在程序的代码段中。成目标代码(机器码),只出现在程序的代码段中。标号:标号:前缀前缀 指令助记符指令助记符 操作数,操作数操作数,操作数 ;注释;注释l伪指令语句伪指令语句由汇编程序汇编源程序时处理
6、的语句。没由汇编程序汇编源程序时处理的语句。没有对应的机器码。可完成汇编程序结构的定义、数据的定有对应的机器码。可完成汇编程序结构的定义、数据的定义和存储区的分配。义和存储区的分配。名字名字 伪指令助记符伪指令助记符 操作数,操作数操作数,操作数 ;注释;注释指令的符号地址,指令的符号地址,标号后要有冒号标号后要有冒号常量名(符号名)、变量名、段名或过程名,常量名(符号名)、变量名、段名或过程名,其后不加冒号其后不加冒号4.14.1 汇编语言程序语句的格式汇编语言程序语句的格式9标号和名字的标号和名字的 命明规则命明规则:以字母开头以字母开头由字母由字母AZ(不分大小写)、数字(不分大小写)、
7、数字(09)及部分特)及部分特殊字符(?殊字符(?$和和 下划线下划线_等)组成等)组成字符串长度不超过字符串长度不超过31个个标识符不能是汇编语言中有特定意义的保留字、助记标识符不能是汇编语言中有特定意义的保留字、助记符、符、Reg等。等。10二、操作数(数据项、表达式)二、操作数(数据项、表达式)l指令语句的指令语句的操作数操作数可以是可以是立即数、寄存器和存储器操作立即数、寄存器和存储器操作数数及变量、标号或及变量、标号或表达式表达式。l伪指令的伪指令的操作数操作数可以是常数、变量、表达式等,可以有可以是常数、变量、表达式等,可以有多个,参数之间用逗号分隔。多个,参数之间用逗号分隔。语句
8、操作数有更丰富的表达方式语句操作数有更丰富的表达方式方便方便:操作数的表示要能充分体现出汇编语言中使用符号操作数和指令助记符的优越性,使程序员能尽可能地减少在存储分配和地址计算方面的工作。本质没变本质没变:要能被汇编程序有效地翻译成对应的特定处理器所具有的各种寻址方式。111、常量:、常量:汇编时已有确定数值的量,在程序运行期间也不汇编时已有确定数值的量,在程序运行期间也不会变化,即固定的值会变化,即固定的值。用于做立即数、端口地址、存储器操作数的组成部分或数用于做立即数、端口地址、存储器操作数的组成部分或数据定义语句中给变量赋初值。据定义语句中给变量赋初值。数字常量:数字常量:300(300
9、D),),01001011B ,0A4H 字符串常量:单引号内的字符串常量:单引号内的12个字符;个字符;A=41H ,AB=4142H 多于两个字符的字符串。多于两个字符的字符串。ABC(只能在只能在DB 指令中用)指令中用)12l变量:专指存放在存储单元中的数据,数据的值是可变的。变量:专指存放在存储单元中的数据,数据的值是可变的。在程序中以在程序中以变量名变量名形式出现,是数据在内存中存放地址形式出现,是数据在内存中存放地址的符号表示。的符号表示。l标号:某条指令的符号地址。是程序转移指令的操作数。标号:某条指令的符号地址。是程序转移指令的操作数。l变量和标号都和存储器地址相关连。变量和
10、标号都和存储器地址相关连。l变量和标号都具有三种属性:变量和标号都具有三种属性:段属性段属性、偏移量属性、类型属性、偏移量属性、类型属性 变量类型:字节(变量类型:字节(BYTE)、字()、字(WORD)、)、双字(双字(DWORD),四字,十字。),四字,十字。标号的类型(距离属性):标号的类型(距离属性):NEAR 、FAR,缺省类型为,缺省类型为NEAR。2、变量、标号(存储器操作数)、变量、标号(存储器操作数)133、表达式操作数、表达式操作数l表达式用来做操作数表达式用来做操作数l表达式由运算符、操作符和运算对象组成表达式由运算符、操作符和运算对象组成运算对象:常量、变量、标号、各种
11、存储器寻址运算对象:常量、变量、标号、各种存储器寻址方式方式运算符、操作符:运算符、操作符:IBMIBM宏汇编中有宏汇编中有5 5种运算符种运算符表达式的值:运算结果。表达式的值:运算结果。l表达式不是指令,由汇编程序对源程序进行表达式不是指令,由汇编程序对源程序进行汇编时运算,结果作为操作数参加指令规定汇编时运算,结果作为操作数参加指令规定的操作。的操作。14lIBM宏汇编中有宏汇编中有5种运算符种运算符,即即:算术运算符算术运算符(Arithmetic operators)逻辑运算符逻辑运算符(Logical operators)关系运算符关系运算符(Relational operator
12、s)数值返回(分析运算符,数值返回(分析运算符,Analytic operators)修改属性(合成运算符,修改属性(合成运算符,Synthetic operators)其他运算符其他运算符 方括号方括号:寻址寻址 ()()圆括号圆括号 :改变运算符优先级:改变运算符优先级 15l表达式运算结果的类型(汇编语言中有表达式运算结果的类型(汇编语言中有2 2种)种)数值表达式数值表达式:在汇编时产生一数值,仅具有大:在汇编时产生一数值,仅具有大小而无其他属性。小而无其他属性。可作为指令中的立即数和数据定义伪指令中数可作为指令中的立即数和数据定义伪指令中数据区中的初值使用。据区中的初值使用。地址表达
13、式地址表达式:它表示存储器地址,地址中存放:它表示存储器地址,地址中存放和数据和指令。具有变量和标号的三种属性。和数据和指令。具有变量和标号的三种属性。16一、数据定义一、数据定义伪指令伪指令语句语句l格式:格式:变量名变量名 数据定义符数据定义符 操作数操作数,操作数,操作数 l功能功能:为某一类型的数据项分配存储单元;为某一类型的数据项分配存储单元;可用一个变量名做存储单元的名称(变量名具有三种属性),可用一个变量名做存储单元的名称(变量名具有三种属性),该变量名指向所分配空间的首单元地址;该变量名指向所分配空间的首单元地址;空间大小由操作数部分决定,也可由操作数初始化存储单元。空间大小由
14、操作数部分决定,也可由操作数初始化存储单元。初值表初值表DBDWDD DQ 定义的变量为定义的变量为4字型(字型(8字节)字节)DT 定义的变量为定义的变量为10字节型字节型可选的可选的17初值表初值表l初值表初值表:用来用来给出要申请给出要申请 内存空间的大小,和初值内存空间的大小,和初值 的多个数据(用逗号分隔)的多个数据(用逗号分隔)。l主要由数值常数、表达式、字符串、?、主要由数值常数、表达式、字符串、?、DUP等组等组成成?表示初值不确定,即未赋初值,实际为表示初值不确定,即未赋初值,实际为0;DUP重复操作符。表示重复初值。重复操作符。表示重复初值。18数据定义语句的具体形式和功能
15、数据定义语句的具体形式和功能1、X DB 25H Y DW 4142H Z DD 12345678H A DB?B DW?2、B_TABLE DB 1,4,2,7,16 W_TABLE DW 1122H,3 XYZ12H34H56H78H41H42H25HB_TABLE 167241191、算术运算符算术运算符l +-*/MODl 运算对象:常量、标号、变量运算对象:常量、标号、变量l 可构成数值表达式或地址表达式可构成数值表达式或地址表达式例:例:3+4 19 MOD 7 结果为数值结果为数值 197 L2-L1 同一段内两个标号相减,结果为数值同一段内两个标号相减,结果为数值 B_TABL
16、E+1 Y-1 只能做只能做+-结果为存储单元的地址结果为存储单元的地址MOV AL,B_TABLE+1202、逻辑运算符、逻辑运算符l AND、OR、XOR、NOTl运算对象:只能是常数,结果为数值运算对象:只能是常数,结果为数值例例l 10101010B AND 00001111B =00001010Bl NOT 11111111B =00000000Bl AND DX,0ADH AND 0EAHl 1111 0000B XOR SUM213、关系运算符、关系运算符l运算对象:同为数值,或为同一段内的存储器地址(变量)运算对象:同为数值,或为同一段内的存储器地址(变量)l结果为一数值:关系
17、不成立结果为一数值:关系不成立 为为 0 关系成立关系成立 为为 0FFFFH例:例:3 GT 4 SUM1 LT SUM2 一般关系运算符和逻辑运算符组合使用一般关系运算符和逻辑运算符组合使用 AND BX,(,(PORT LT 5)AND 30EQ(=)(=)NE()LT()GT()LE()GE()22对对存储器操作数的存储器操作数的属性属性进行操作进行操作4、数值返回运算符(分析)、数值返回运算符(分析)5、修改属性运算符(合成)、修改属性运算符(合成)6、其他运算符、其他运算符 :表示地址表达式或多重变量的下标值表示地址表达式或多重变量的下标值 BX+2 、M10、M1323运算符和操
18、作符的优先权等级:运算符和操作符的优先权等级:不同级时先高后低不同级时先高后低 同级时先左后右同级时先左后右 SHORT11OR,XOR10AND9NOT8EQ,NE,LT,LE,GT,GE7,(双目),(双目)6*,/,MOD,SHL,SHR5,(单目),(单目)4HIGH,LOW(操作数高、低字节)操作数高、低字节)3PTR,OFFSET,SEG,TYPE,THIS,段寄存名,段寄存名:(加段前缀加段前缀)2LENGTH,SIZE,WIDTH,MASH,(),(),1高低运 算 符 和 操 作 符优 先 级244.2 伪指令语句伪指令语句l宏汇编中的伪指令语句宏汇编中的伪指令语句:数据定义
19、语句数据定义语句 DB 、DW、DD表达式赋值语句(符号定义)表达式赋值语句(符号定义)EQU 、PURGE 、=段定义语句段定义语句 SEGMENT、ENDS ASSUME过程定义过程定义语句语句 PROC、ENDP程序开始和结束语句程序开始和结束语句 NAME ORG ENDl功能:功能:变量定义、存储器分配、指示程序开始和变量定义、存储器分配、指示程序开始和结束、段定义、段分配等。结束、段定义、段分配等。l简单了解简单了解4.2.6、4.2.7、4.2.8内容内容25一、数据定义语句一、数据定义语句l格式:格式:变量名变量名 助记符助记符 操作数,操作数操作数,操作数 l功能功能:将操作
20、数存入变量名指定的存储单元中,或者只分将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据。配存储空间不存入数据。为某一类型的操作数分配存储单元;为某一类型的操作数分配存储单元;可用一个变量名做存储单元的名称(变量名具有三种属性),可用一个变量名做存储单元的名称(变量名具有三种属性),该变量名指向所分配空间的首单元地址;该变量名指向所分配空间的首单元地址;操作数操作数:可以是常数、字符串、变量、标号、表达式等。多个操作可以是常数、字符串、变量、标号、表达式等。多个操作数用逗号分隔。操作数给出要申请数用逗号分隔。操作数给出要申请 内存空间的大小,和初值内存空间的大小,和初值DBDWD
21、D DQ DT可选的可选的n DUP(操作数,操作数操作数,操作数)26l数据定义语句的具体形式和功能数据定义语句的具体形式和功能1、操作数是常数或表达式、操作数是常数或表达式 X DB 25H Y DW 4142H Z DD 12345678H A DB?B DW?B_TABLE DB 1,4,-2,7,16 W_TABLE DW 1122H,3*20H XYZ12H34H56H78H41H42H25HB_TABLE 167241见例见例4.21见例见例4.19272、定义字符串、定义字符串 AB CD41H42H43H44H41HASTRING2 STRING1 DB A,B,C,D ST
22、RING2 DB ABCD,41Hv 当字符串长度为两个字符时,也可以当字符串长度为两个字符时,也可以 用用 DW来定义。来定义。例:例:STRING1 DBAB STRING2 DWAB STRING3 DWAB,CDv 注意注意:3个及其以上的字符,个及其以上的字符,只能用只能用DB定义。定义。例:例:str1 DW abc str2 DD abcd43H44H41H42H41H42H42H41HSTRING1STRING2STRING3见例见例4.20283、重复数据定义操作符、重复数据定义操作符 DUPl格式:格式:重复次数重复次数 DUP(重复参数重复参数)l功能:为一个数据区的各单
23、元设置相同的初值功能:为一个数据区的各单元设置相同的初值例:例:ALL_ZERO DB 0,0,0,0 ALL_ZERO DB 4 DUP(0)DW 20 DUP(0)DB 3 DUP(22H,11H,?),?)DB 3 DUP(1,2,3 DUP(0)见例见例4.22294、当操作数是变量和标号或表达式时、当操作数是变量和标号或表达式时可用可用DW或或DD将标号或变量操作数的偏移地址或全地址存入将标号或变量操作数的偏移地址或全地址存入存储器。存储器。例:例:ONE DW DEMO1,DEMO1+3 ;偏移地址;偏移地址 TWO DD DEMO1 ;全地址;全地址 为数值表达式时为数值表达式时
24、 DEMO6 DW DEMO5-DEMO4 注意:变量名在不注意:变量名在不同场合的用法。同场合的用法。见例见例4.23305、变量名及其表达式作指令语句的操作数变量名及其表达式作指令语句的操作数 DEMO1 DB 3 DEMO2 DB 5,7,8,l mov al,demo2l mov bl,demo2+2llea bx,demo2l add demo2 ,2l INC DEMO1 ;字节加;字节加l mov al,demo2bx 一个变量名加一个变量名加/减一个减一个数字后形成新的变量,有数字后形成新的变量,有相同的类型,变量所指存相同的类型,变量所指存储单元与原单元地址不同,储单元与原单
25、元地址不同,类型要类型要匹配匹配见例见例4.2431二、表达式赋值语句二、表达式赋值语句1、等值语句、等值语句 EQUl格式:符号名格式:符号名 EQU 表达式表达式 l功能:给表达式赋予功能:给表达式赋予 一个名字。表达式可以是其它的符号名,一个名字。表达式可以是其它的符号名,常量常量,变量、标号、指令、寄存器名、表达式等。但并不申请,变量、标号、指令、寄存器名、表达式等。但并不申请内存空间。内存空间。l例:例:SUM EQU 1 SUM2 EQU SUM+1 A1 EQU BX+SI LD EQU MOV SUM3 EQU SUM2 PORT1 DB 35H ;事先定义好的变量事先定义好的
26、变量 OUT_PORT EQU PORT1 ;再起个别名;再起个别名322、解除语句、解除语句 PURGEl格式:格式:PURGE 符号符号1,符号,符号2,符号,符号nl例:例:SUM EQU 212 PURGE SUM SUM EQU 3133、等号语句、等号语句 =l格式:格式:名字名字 =参数参数 l功能:功能:与与EQU类似,但可对符号再定义类似,但可对符号再定义l例:例:SUM =1 SUM =2 SUM =SUM+1 ;SUM=?33功能:用于返回变量或标号(存储器操作数)的功能:用于返回变量或标号(存储器操作数)的属性属性格式:运算符格式:运算符 标号或变量标号或变量l OFF
27、SET 析取变量或标号的偏移地址析取变量或标号的偏移地址 SEG 析取变量或标号的段基址析取变量或标号的段基址 TYPE 取取变量和标号的类型(见表变量和标号的类型(见表4.24.2)LENGTH 取所定义变量所包含的元素个数取所定义变量所包含的元素个数 SIZE 取所定义变量包含的总字节数取所定义变量包含的总字节数 LENGTH*TYPEv 数值返回运算符数值返回运算符34l例:例:DEMO1 DW 3,4 DEMO2 DW 6 DUP(9)MOV AX,SEG DEMO1 MOV DS ,AX MOV BX,OFFSET DEMO1 ;LEA BX,DEMO1 MOV BX,TYPE DE
28、MO1 ;1 MOV CX,LENGTH DEMO2 ;6 LENGTH DEMO1 ;1 SIZE DEMO1 ;1 LEA BX,DI MOV BX,OFFSETDI351、PTR 运算符运算符功能功能:PTR是类型运算符,它用来说明其后变量或标号的是类型运算符,它用来说明其后变量或标号的类型。使其类型。使其临时临时兼有与原定义所不同的类型属性。但它们兼有与原定义所不同的类型属性。但它们原来的段属性和偏移地址属性保持不变。原来的段属性和偏移地址属性保持不变。格式格式:类型类型 PTR 地址表达式地址表达式标号、变量及标号、变量及各种存储器寻各种存储器寻址方式址方式根据地址表达式的不同性质,
29、类根据地址表达式的不同性质,类型可以是型可以是BYTE、WORD、DWORD、NEAR、FAR等。等。v修改属性(合成)运算符修改属性(合成)运算符 PTR PTR、THISTHIS 由已存在的存储器操作数生成一个由已存在的存储器操作数生成一个段值和偏移量相同段值和偏移量相同,而而类型不同类型不同的新的存储器操作数。的新的存储器操作数。36例例:lADD BYTE PTRDI,23HlDATA SEGMENT BUF1 DB 30H,60H DATA ENDS L1:MOV AL,BUF1 ;AL=30H MOV AX,WORD PTR BUF1 ;AX=6030H l BUF2 EQU WO
30、RD PTR BUF1 MOV AX,BUF2lJMP FAR PTR L1类型要匹配类型要匹配372、THISl格式格式:THIS 类型类型l功能功能:为当前存储单元指定一个新的属性。:为当前存储单元指定一个新的属性。l使用方法:使用方法:标号或变量名标号或变量名 EQU THIS 类型类型例例:lBUF1 EQU THIS BYTE BUF2 DW 1,2,3 ,4 ;BUF1是由是由BUF2新建的存储器操作数,但类型不同。新建的存储器操作数,但类型不同。l L1 EQU THIS FAR MOV AL,30H JMP L1 ;在其他段远跳到在其他段远跳到L13、SHORT 标号标号 4、
31、段前缀、段前缀 MOV AX,ES:BX5、HIGH/LOW 它后面能分配的第它后面能分配的第一个存储单元。一个存储单元。38 指示汇编程序如何按段来组织程序和使用内存区域。指示汇编程序如何按段来组织程序和使用内存区域。SEGMENT/ENDS,ASSUME,ORG,GROUP1、段定义伪指令段定义伪指令SEGMENT ENDS 格式:格式:段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 分类名分类名 段名段名 ENDS 段名不可省略,隐含该段的段名不可省略,隐含该段的首地址,即段基址首地址,即段基址 三、段定义语句三、段定义语句l SEG1 SEGMENT SEG1 ENDS
32、MOV AX,SEG1 MOV DS,AX逻辑段内容,即语句序列逻辑段内容,即语句序列39参数用来增加类型及属性说明参数用来增加类型及属性说明定位类型:确定逻辑段的起始边界地址。定位类型:确定逻辑段的起始边界地址。4种。种。缺省为缺省为PARA,段首址段首址 XXXX0H组合类型:确定在组合类型:确定在不同模块不同模块程序程序中同名段的组合连接方式中同名段的组合连接方式。6种。种。缺省为缺省为NONE,独立,独立 通常堆栈段定为通常堆栈段定为 STACK ,会自动初始化,会自动初始化SS和和SP。覆盖方式组合。覆盖方式组合。AT 表达式表达式 ,由表达式指定段首址的高,由表达式指定段首址的高1
33、6位。位。xxxx0H,但不能用来指定代码段。但不能用来指定代码段。类别名:为单引号括的字符串。类别名:为单引号括的字符串。不同模块不同模块连接时将相同类别连接时将相同类别的段组成一个段组,放在连续的内存区域中的段组成一个段组,放在连续的内存区域中。如如stack ,code,data,也可为其它名。也可为其它名。STACK1 segment stack DW 100 dup(0)STACK1 ends40lPARA:不要搭接,段的起点从节边界开始不要搭接,段的起点从节边界开始(16个字节为个字节为1节)节)lBYTE:段的起点从存储器任何地址开始段的起点从存储器任何地址开始lWORD:允许搭
34、接,允许搭接,段的起点从偶地址开始段的起点从偶地址开始lPAGE:段的起点从页边界开始(段的起点从页边界开始(256个字节个字节 为为1页)页)定位类型定位类型41组合类型组合类型与其它模块中的同名段在满足定位类型的前提下与其它模块中的同名段在满足定位类型的前提下具有的组合方式:具有的组合方式:lNONE:不组合不组合lPUBLIC:依次连接(顺序由依次连接(顺序由LINK程序确定)程序确定)lCOMMON:覆盖连接覆盖连接lSTACK:堆栈段的依次连接堆栈段的依次连接,且自动初始化且自动初始化SS和和SP。lAT 表达式:段定义在表达式值为段基的节边界表达式:段定义在表达式值为段基的节边界l
35、MEMORY:相应段在同名段的最高地址处。相应段在同名段的最高地址处。422、段分配语句、段分配语句ASSUME 格式格式:ASSUME CS:段名,:段名,DS:段名,:段名,SS:段名,:段名,ES:段名:段名功能:功能:定义定义4个逻辑段,指明段寄存器与段的关系。通知个逻辑段,指明段寄存器与段的关系。通知 MASM 用指定的用指定的段寄存器段寄存器来寻址对应的逻辑段。来寻址对应的逻辑段。但但ASSUME伪指令伪指令并未真正将段基址装入相应的段寄存器并未真正将段基址装入相应的段寄存器。ASSUME ES:NOTHING 也可取消关系也可取消关系43?段寄存器如何赋值段寄存器如何赋值连接程序
36、连接程序LINK 和和DOS将正确设置将正确设置CS:IP 。DS、ES中的段基址是在程序开头部分写相应的赋值代码中的段基址是在程序开头部分写相应的赋值代码(段初始化程序),在执行代码时装入的。(段初始化程序),在执行代码时装入的。堆栈段的定义和堆栈段的定义和SS、SP赋值的几种情况:赋值的几种情况:1、程序中定义堆栈段,并程序中定义堆栈段,并给给该段设置了组合类型参数为该段设置了组合类型参数为 STACK,则,则LINK程序会程序会自动自动给给SS与与SP 赋值。用户不用再赋值了。赋值。用户不用再赋值了。2、程序中定义堆栈段,程序中定义堆栈段,但没给但没给该段设置组合类型参数该段设置组合类型
37、参数 STACK,则要在主程序开头部分写代码给则要在主程序开头部分写代码给SS与与SP赋值。赋值。3、不定义堆栈段,连接程序会自动为程序设置堆栈段,位置在程、不定义堆栈段,连接程序会自动为程序设置堆栈段,位置在程序段前缀里。但堆栈空间大小有限。序段前缀里。但堆栈空间大小有限。44DATA1 SEGMENT X DB 16 DUP(5)DATA1 ENDSDATA2 SEGMENT Y DB 32 DUP(3)DATA2 ENDSSTACK SEGMENT STACKSTT DB 100 DUP(?)TOP EQU LENGTH STTSTACK ENDSCODE SEGMENT ASSUME
38、CS:CODE,DS:DATA1,ES:DATA2,SS:STACKSTART:MOV AX,DATA1 MOV DS ,AX例:例:把段基把段基址赋给址赋给DS MOV AX,DATA2 MOV ES,AX MOV AX ,STACK MOV SS ,AX MOV SP ,TOP MOV BL ,X ;MOV BL ,0000H MOV CL ,Y ;MOV CL ,ES:0000H CODE ENDS END START把段基址赋把段基址赋给给ES把段基址赋给把段基址赋给SS,并设,并设SP的的值值汇编程序会根据数据所在的逻辑段,在汇编程序会根据数据所在的逻辑段,在需要时自动插入段超越前缀
39、。这是需要时自动插入段超越前缀。这是 ASSUME 伪指令的主要功能。伪指令的主要功能。45l格式:格式:END 标号或标号或 过程名过程名l功能:功能:四、四、程序开始和结束语句程序开始和结束语句 NAME 、ORG、END 1、END是汇编结束的标志;是汇编结束的标志;指明指明主主程序执行时,第一条要程序执行时,第一条要执行的指令的地址。执行的指令的地址。用在子模块时不能带参数用在子模块时不能带参数462、ORG格式:格式:ORG 偏移地址值偏移地址值功能:段内数据从偏移地址处开始分配空间功能:段内数据从偏移地址处开始分配空间例:例:DATA SEGMENT ORG 0004H BUF1
40、DB 5DUP(08H)ORG 000CH BUF2 DB 3 DATA ENDSDATABUF108H08H08H08H08H0004H3000CHBUF247五、过程定义语句五、过程定义语句l格式:格式:过程名过程名 PROC 类型类型 RET 过程名过程名 ENDP 过程名代表过程中第一条要执行的指令的地址过程名代表过程中第一条要执行的指令的地址l过程被过程被CALL语句调用语句调用 NEAR 为段内调用和段内返回为段内调用和段内返回 FAR 为段间调用和段间返回为段间调用和段间返回 过程中一定要有过程中一定要有RET语句,它是该过程执行时最后一条被执行的语句,它是该过程执行时最后一条被
41、执行的指令。指令。l过程是模块式程序设计的基础过程是模块式程序设计的基础NEARFAR过程体过程体48CODE SEGMENT ASSUME CS:CODE,START:.MOV AH,4CH INT 21HPRO1 PROC P1:.RETPRO1 ENDPPRO2 PROC P2:.RETPRO2 ENDPCODE ENDSEND START 非标序时程序结构非标序时程序结构CODE SEGMENT ASSUME CS:CODE,MAIN PROC FAR L1:PUSH DS MOV AX,0 PUSH AX RET START ENDPPRO1 PROC P1:.RETPRO1 END
42、PPRO2 PROC P2:.RETPRO2 ENDPCODE ENDSEND MAIN 标准序时程序结构标准序时程序结构主主程程序序主主程程序序子过子过程程子过子过程程子过子过程程子过子过程程49伪指令小结伪指令小结l伪指令不是可执行指令,不翻译成伪指令不是可执行指令,不翻译成机器码机器码。在。在汇编时起到帮助汇编程序正确汇编硬指令的作汇编时起到帮助汇编程序正确汇编硬指令的作用。用。l但但数据定义伪指令数据定义伪指令汇编后要产生目标码。是对汇编后要产生目标码。是对申请的内存空间进行初始化的申请的内存空间进行初始化的数据数据。l最后生成的最后生成的*.EXE.EXE 文件由文件由数据数据和和机
43、器码机器码组成。组成。l指令只能写在代码段,而伪指令可以写在任意指令只能写在代码段,而伪指令可以写在任意一个段。一个段。50 一个完整汇编程序的要点一个完整汇编程序的要点:1、段的定义:数据,堆栈,代码、段的定义:数据,堆栈,代码2、代码段的功能结构要点、代码段的功能结构要点 :程序的结构程序的结构:由主程序(主过程)和若干子过程构成:由主程序(主过程)和若干子过程构成始点:主程序要执行的第一条指令性语句;始点:主程序要执行的第一条指令性语句;END 始点始点如有必要需给如有必要需给DS、ES、SS(SP)段寄存器赋值;)段寄存器赋值;主程序结束时,要有退出程序返回主程序结束时,要有退出程序返
44、回DOS的语句的语句;51l解释:数据定义语句的分配内存空间并初始化是解释:数据定义语句的分配内存空间并初始化是如何实现的?如何实现的?52 my_data segment buf db 16 dup(01h)my_data ends my_stack segment stack db 16 dup(0)my_stack ends my_code segment assume cs:my_code,ds:my_data,ss:my_stackL1:mov ax,data mov ds,ax int 20h my_code ends end L101h 01h 01h 01h 01h 01h 0
45、1h 01h 01h 01h 01h01h 01h 01h01h01h 00h00h00h00h 00h00h00h00h 00h00h00h00h 00h00h00h00h B8 机器码机器码.汇编时生成的汇编时生成的53l解释:数据定义语句的分配内存空间并初始化是解释:数据定义语句的分配内存空间并初始化是如何实现的?如何实现的?程序段前缀程序段前缀256个字节个字节返回返回DOS的指令的指令程序的程序的数据与数据与机器码机器码DOS把它把它装装入入内存内存执行执行数据数据堆栈堆栈代码代码内存内存存放在硬盘里的存放在硬盘里的 *.EXE 1 2 4 354实验实验2:两个组合:两个组合BCD
46、数的相乘数的相乘.DATA SEGMENT A1 DB 54H A2 DB 61HSUM DW 0000HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX MOV AL,0 MOV CH,0 MOV CL,A2 LEA BX,SUMAGAIN:MOV AL,BX ADD AL,A1 DAA MOV BX,AL MOV AL,BX+1 ADC AL,0 DAA MOV BX+1,AL MOV AL,CL SUB AL,1 DAS MOV CL,AL OR CX,CX JNE AGAIN MOV AH,4C
47、H INT 21H CODE ENDS END START LEA BX,STRING1 MOV CH,4 MOV AX,SUM MOV CL,4L1:ROL AX ,CL MOV DL,AL AND DL,0FH OR DL,30H MOV BX,DL INC BX DEC CH JNE L1 LEA DX,STRING1 MOV AH,09H INT 21HSTRING1 DB 4 DUP(0),$输出结果的代码输出结果的代码55l当程序中要使用键盘、显示器、打印机或串口等当程序中要使用键盘、显示器、打印机或串口等硬件设备进行硬件设备进行 I/0(输入输出)(输入输出)时,要编制相应的时,
48、要编制相应的程序段来实现这些功能。程序段来实现这些功能。l可直接调用可直接调用DOS、ROM-BIOS提供的提供的I/O功能功能(一些子程序)。(一些子程序)。l以中断服务程序的形式提供。以中断服务程序的形式提供。中断向量号中断向量号 中断向量中断向量 中断服务程序的入口地址中断服务程序的入口地址4.3 DOS功能调用、功能调用、ROM-BIOS调用调用 56调用步骤调用步骤:给出入口参数给出入口参数。在指定寄存器中设置入口参数。在指定寄存器中设置入口参数(根据所调功能的规定设置)(根据所调功能的规定设置)在在AH中设置子程序编号(功能号)中设置子程序编号(功能号)发软中断命令:发软中断命令:
49、INT N常用的有常用的有INT 21H(DOS)或或 INT 10H(BIOS)相应的中断服务程序运行完返回后,可按规定取得出口参数相应的中断服务程序运行完返回后,可按规定取得出口参数(返回值)。(返回值)。57lDOS常用软中断常用软中断INT 20HINT2FHl其中其中 21H 中断号称为中断号称为DOS系统功能调用。系统功能调用。l退出程序软件中断退出程序软件中断 INT 20H INT 27H INT 22H、INT 23H、INT 24H MOV AH,4CH INT 21H58DOS的系统功能调用的系统功能调用l中断向量号为中断向量号为21H的中断服务程序。的中断服务程序。l该
50、程序对应该程序对应100多个子程序,每个子功能由多个子程序,每个子功能由功功能号能号来区分。来区分。l我们这里只讲其中的我们这里只讲其中的一个字符的输入输出、字一个字符的输入输出、字符串的输入输出。符串的输入输出。(DOS键盘和显示功能调键盘和显示功能调用)用)l功能号:一个字符的输入功能号:一个字符的输入 01H 输出输出 02H 字符串的输入字符串的输入 0AH 输出输出 09H591、一个字符的输入、一个字符的输入功能号:功能号:AH=01H出口参数:出口参数:AL中存放输入的字符的中存放输入的字符的ASCII码码功能:功能:等待键盘输入,直到按键后才读取该键等待键盘输入,直到按键后才读