




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、STACK_SEG SEGMENT STACK; 定义堆栈段 STACK_SEG DW 100H DUP(?) ; 分配堆栈段大小为512字节STACK_SEG ENDS ; 堆栈段结束DATA_SEG SEGMENT; 定义数据段 DATA_SEGX DB 10 ; 定义数据Y DB 5Z DB 1ANS DB ?DATA_SEG ENDS ; 数据段结束CODE_SEG SEGMENT ; 定义代码段CODE_SEG ASSUME CS:CODE_SEG, DS:DATA_SEG, SS:STACK_SEG ; 设定段寄存器与段之间的对应关系例6.1 汇编语言程序第1页/共70页START
2、: MOV AX, DATA_SEG ; 装入数据段的段地址 DS MOV DS, AX MOV AL, X; 程序代码 ADD AL, Y SUB AL, Z MOV ANS, AL MOV AX, 4C00H; 返回DOS INT 21HCODE_SEG ENDS; 代码段结束 END START ; 汇编结束 ; 程序起始点为 START例6.1 汇编语言程序第2页/共70页6.1.1 汇编语言的语句格式1. 执行性语句2. 说明性语句第3页/共70页1. 执行性语句 执行性语句是由可执行指令构成的语句,通常对应一条机器指令,以机器码的形式保存在程序的代码段中。 执行性语句的完整格式为:
3、 标号: 指令助记符 操作数 ;注释 注:一条执行性语句可分为4个字段,其中方括号中的字段为可选项。 例如: START: MOV AX, DATA_SEG ; 装入数据段的段地址 第4页/共70页1. 执行性语句 标号:用户定义的标识符,它反映了指令的位置(逻辑地址)和类型。标号后跟一个冒号分隔,通常表示转移指令或循环指令的目标地址。标号为可选项。 指令助记符:指令系统中的指令。 操作数:根据指令的不同,操作数的个数可有02个,操作数之间以逗号分隔。 注释:由分号“;”开始的部分均为注释内容,注释为可选项,通常用以增加源程序的可读性。汇编过程中不对注释做任何处理。第5页/共70页标识符和保留
4、字 标识符(Identifier)n由字母(AZ)、数字(09)及规定的特殊符号(?、-、$)组成。n数字不能作为第一个字符,而圆点仅能用作第一个字符。n标号最长为31个字符。n默认情况下,汇编程序不区别标识符中的字母大小写。n一个源程序中,每个标识符的定义是唯一的,并且不能使用汇编语言的保留字。 保留字(Reserved Word)是汇编程序已经使用的标识符(也称为关键字),主要有: 硬指令助记符例如:MOV、ADD 伪指令助记符例如:DB、DW 操作符例如:OFFSET、PTR 寄存器名例如:AX、CS第6页/共70页2. 说明性语句说明性语句是由伪指令构成的语句,它通常指示汇编程序如何汇
5、编源程序。说明性语句的完整格式为: 名字 伪指令助记符 参数 ;注释 名字:用户定义的标识符。通常用于定义变量名、过程名或者段名。名字和伪指令助记符之间用空格或制表符分隔。 伪指令助记符:伪指令不产生CPU动作,是在程序执行前由汇编程序处理的说明性指令。 参数:伪指令的参数可以是常数、变量名、表达式等,可以有多个,参数之间用逗号分隔。 第7页/共70页 源程序可采用两种格式书写:1. 完整段定义格式。2. 简化段定义格式。 MASM 5.0开始支持简化段定义格式。6.1.2 汇编语言的程序格式第8页/共70页6.1.3 伪指令 1.变量定义伪指令 2.常量定义伪指令 3.表达式操作符 4.段定
6、义伪指令 5.过程定义伪指令6.其它伪指令 第9页/共70页1. 变量定义伪指令 功能: 指定变量的类型和名称,并为变量分配存储单元。 存储单元初始化。 变量定义语句的格式: 变量名 DB/DW/DD 参数 ,参数 ,参数 DB/ DW/DD:分别定义1个字节、字(2个字节)、双字(4个字节)。 DF/DQ/DT:定义3字,4字,5字。 变量名:用户自定义的标识符,存放数据存储单元的符号地址。变量名为可选项。第10页/共70页表6.1 变量定义格式 注: 表示可缺省项;/ /表示或 。变量定义格式变量定义格式参数类型参数类型说明说明变量名变量名 DB/DW/DD 参数参数,参数参数 数值表达式
7、数值表达式为单元定义初值为单元定义初值?表达式?表达式预留单元,其内容不初始化预留单元,其内容不初始化带带DUP的表达式的表达式“参数参数”为重复项为重复项字符串字符串内存单元保存字符内存单元保存字符ASCII码码标号或变量标号或变量内存单元保存标号或变量的地址内存单元保存标号或变量的地址第11页/共70页参数类型(1)数值表达式 为存储单元赋初值,变量名为该存储单元的名称。 【例6.5】ORG 100H;从偏移地址100H处开始安排数据VAR1 DB 01H,-1VAR2 DW 1234H,78H 注意: 操作数顺序 高低字节位置第12页/共70页参数类型 (2)?表达式)?表达式 预留存储
8、单元单元,其内容不初始化。预留存储单元单元,其内容不初始化。 形式:形式:变量名变量名 DB/DW/DD ? 功能:功能:汇编程序仍然分配存储单元,但不预置确定的值。汇编程序仍然分配存储单元,但不预置确定的值。常用来存放程序的中间和最终结果。常用来存放程序的中间和最终结果。 例:例:TEMPDB ?; 分配一个字节单元分配一个字节单元RESULTDW?, ?; 分配两个字单元分配两个字单元第13页/共70页参数类型 (3)带带DUP的表达式,的表达式,“参数参数”为重复项为重复项 形式:形式:变量名变量名 DB/DW/DD n DUP DUP:重复数据定义操作符重复数据定义操作符 n:重复次数
9、重复次数 :重复内容重复内容 注意:注意:DUP操作符可嵌套使用操作符可嵌套使用 例:例:X1DB 5 DUP(0)TAB1DB 10H DUP(?);预留预留10H个字节单元个字节单元TAB2DB 2 DUP(2 DUP(3)第14页/共70页参数类型 (4) 字符串,字符串,“参数参数”为为ASCII码码 功能:功能:可用可用DB命令定义字符串命令定义字符串,为串中的每个字符分配一个字节存为串中的每个字符分配一个字节存储单元。储单元。 说明:说明: 字符串用引号(单或双)括起,字符串用引号(单或双)括起,256个字符个字符; 在内存中,字符以在内存中,字符以ASCII码表示码表示; 存放顺
10、序:自左向右按地址递增顺序存放存放顺序:自左向右按地址递增顺序存放。 注意:注意:当运用当运用DW定义字符串时,字符的个数不能超过定义字符串时,字符的个数不能超过2个,内存单元个,内存单元中高地址存放引号中的第一个字符的中高地址存放引号中的第一个字符的ASCII码,低地址存放后一个字符码,低地址存放后一个字符的的ASCII码。若引号中只有一个字符,则内存单元高地址存放码。若引号中只有一个字符,则内存单元高地址存放00H。【例例6.8】ORG 1000HDATA1DB ADATA2DB 123456DW C;等价于;等价于 DW 0043H 第15页/共70页参数类型 (5)参数为标号或变量)参
11、数为标号或变量 功能:功能:存放标号或变量的偏移地址或存放标号或变量的偏移地址或逻辑逻辑地址。地址。 当使用当使用DW只定义偏移地址只定义偏移地址 当使用当使用DD 同时定义偏移地址与段基址同时定义偏移地址与段基址 例:例:X1DWCYCLE;偏址偏址=X1X2DDCYCLE; 段址、偏址段址、偏址=X2 (高高) (低低)CYCLE:MOV AX, 3 第16页/共70页例:SUMDB1,2,3 MOVAL, SUM MOVAX, SUM 注意:注意:变量的使用要保证类型匹配变量的使用要保证类型匹配例题第17页/共70页2. 常量定义伪指令 常数常数 常数是没有任何属性的纯数值。常数分为两种
12、类型:数值常数是没有任何属性的纯数值。常数分为两种类型:数值型常数和字符串型常数。型常数和字符串型常数。l 数值型常数数值型常数 二进制数二进制数: :以字母以字母B B结尾结尾, ,如如01011101B01011101B 八进制数八进制数: :以字母以字母Q Q或或O O结尾结尾, ,如如723Q,211Q723Q,211Q。 十进制数:以字母十进制数:以字母D D( (或或省略省略) )结尾,如结尾,如1995D,35081995D,3508。 十六进制数:以字母十六进制数:以字母H H结尾,如结尾,如3A40H3A40H,8BH8BH。l 字符型常数字符型常数 用单引号括起来的字符串。
13、如用单引号括起来的字符串。如ABCDABCD,$123456$123456等。等。每个字符在机内以每个字符在机内以ASCIIASCII码存放,例如码存放,例如AA,在内存为,在内存为41H41H。 第18页/共70页 常量定义伪指令也称为符号定义语句伪指令,包括“等价EQU”和“等号”。 等值语句(EQU) 格式:符号 EQU 表达式 功能:将表达式的值赋给EQU左边的符号。表达式可以是常数、变量、标号、数值或地址表达式。 等号语句 格式:符号 = 表达式 等号语句(=)与EQU语句有同样的功能,区别在于等号语句定义的符号允许重新定义,使用更加方便灵活。2. 常量定义伪指令第19页/共70页
14、例:PORT1EQU 312PORT2EQU PORT1+1 注意: EQU语句不能重复定义。X EQU 7X EQU X + 5 是错误的 使用EQU伪指令时,表达式必须有确定的赋值。 例:LPN EQU LP112H ; LP1 应该在此句前加以定义。 只作为符号定义用,不产生任何目标代码 ,不占用存储单元。第20页/共70页常量和变量定义区别 EQU:定义立即数,不分配内存单元。 DB:定义内存操作数,分配内存单元。 例: X1DB3 ;假设X1在数据段的偏移地址为10HY1EQU 5X2DB7,8MOVAL, X1MOVBL, Y1第21页/共70页 MASM 允许使用的表达式分为两类
15、: 数字表达式 数字表达式的结果是一个数字。 地址表达式 地址表达式的结果是一个存储单元的地址。 当这个地址中存放的是数据时,称为变量; 当这个地址中存放的是指令时,则称为标号。3. 表达式运算符 第22页/共70页3. 表达式运算符 算数运算符 逻辑运算符 关系运算符 分析运算符 合成运算符 其它运算符第23页/共70页运算符运算符类型类型符号符号名称名称运算结果运算结果实例实例算术运算符算术运算符+加法加法和和减法减法差差*乘法乘法乘积乘积/除法除法商商MOD模除模除余数余数SHL左移左移左移后二进制数左移后二进制数SHR右移右移右移后二进制数右移后二进制数2+6=88-2=68 *5=4
16、022/5=412 MOD 3= 032 MOD 6= 2 0010B SHL 2=1000B1100B SHR 1=0101B(1) 算术运算符第24页/共70页【例6.11】 KEQU 5+3 ; 等价于K EQU 8 S1DB 1,3,5,7,9 MOV AL, S1+3 ; 地址表达式,AL=7注意: 当用于数值表达式,结果仍然是数值。 符号地址可用于加、减运算。 “标号或变量常量”表示同一段中给定位移量的另一存储单元的地址。 不同段的两个偏移地址的加、减没有物理意义。(1) 算术运算符第25页/共70页运算符运算符类型类型符号符号名称名称运算结果运算结果实例实例逻辑运算符逻辑运算符N
17、OT非运算非运算逻辑非结果逻辑非结果AND与运算与运算逻辑与结果逻辑与结果OR或运算或运算逻辑或结果逻辑或结果XOR异或运算异或运算 逻辑异或结果逻辑异或结果NOT 1010B=0101B1011B AND1100B=1000B1011B OR 1100B=1111B1011B XOR 1100B=0110B(2 2)逻辑运算符)逻辑运算符第26页/共70页运算符运算符类型类型符号符号名称名称运算结果运算结果实例实例关系运算符关系运算符EQ相等相等NE不等不等LT小于小于LE不大于不大于GT大于大于GE不小于不小于 6 EQ 11 = 全全06 NE 11 = 全全15 LT 8 = 全全17
18、 LE 5 = 全全06 GT 4 = 全全16 GE 7 = 全全0结果为真输出全结果为真输出全1结果为假输出全结果为假输出全0(3 3)关系运算符)关系运算符第27页/共70页 【例6.12】KEQU 0F0H AND 0FH ; 等价于K EQU 00H MOV AL, NOT K ; AL = 0FFH(2 2)逻辑运算符)逻辑运算符 【例6.13】MOV AX,5 EQ 6 ; AX=0000HMOV BX,5 LT 6 ; BX=0FFFFH(3 3)关系运算符)关系运算符第28页/共70页运算符运算符类型类型符号符号名称名称运算结果运算结果实例实例分析运算符分析运算符SEG返回段
19、基址返回段基址OFFSET返回返回偏移地址偏移地址LENGTH返回变量单元返回变量单元数数TYPE返回元素字节数返回元素字节数SIZE返回变量总字返回变量总字节数节数段基址段基址偏移地址偏移地址单元数单元数字节数字节数总字节数总字节数SEG N1=N1所在所在段段基址段段基址OFFSET N1=N1的偏移地址的偏移地址LENGTH N2=N2单元数单元数TYPE N2=N2元素字节数元素字节数SIZE N2=N2总字节数总字节数(4 4)数值返回运算符(分析运算符)数值返回运算符(分析运算符)第29页/共70页变量和标号的属性 变量和标号有三种属性: 段属性(SEG)。 偏移地址属性(OFFS
20、ET)。 类型属性(TYPE)。 变量的类型有:字节、字、双字、3字、4字、5字。 标号的类型有:近(NEAR 默认)、远(FAR)。变量变量/ /标号属性标号属性TYPETYPE返回数值返回数值字节变量字节变量1 1字变量字变量2 2双字变量双字变量4 4三字变量三字变量6 6四字变量四字变量8 8十字变量十字变量1010标号标号NEARNEAR-1-1标号标号FARFAR-2-2表6.2 属性与返回数值的关系 第30页/共70页(4 4)数值返回运算符(分析运算符)数值返回运算符(分析运算符) 数值返回运算符数值返回运算符后只跟一个操作对象,后只跟一个操作对象,这个操作对象只能是变量或标号
21、。返回结果以这个操作对象只能是变量或标号。返回结果以数值的形式表示。数值的形式表示。 【例例6.14】已知已知DS=1000H,定义了两个变,定义了两个变量量VAR1、VAR2。写出下列指令的运行结果。写出下列指令的运行结果。 MOV DI, OFFSET VAR1 ;取偏移地址,取偏移地址,DI=0100H MOV AX, SEG VAR1 ;取段地址,取段地址,AX=1000H MOV BL, TYPE VAR2 ;VAR2的类型属性为字,的类型属性为字,BL=2 第31页/共70页 SEG:取段址。 例:MOV AX , SEG OPER OFFSET:取偏移地址。 例:MOV BX,
22、OFFSET OPER = LEA BX , OPER TYPE:取类型值。 例: 若AB是DB定义的变量,执行 MOV AX ,TYPE AB; AX = 0001H LENGTH:取数据个数。 仅对DUP定义有效,否则为1。 SIZE:取字节数。 SIZE = (LENGTH) *(TYPE)(4 4)数值返回运算符(分析运算符)数值返回运算符(分析运算符)第32页/共70页 例: BUF1DB 100 DUP(0) ;LENGTH BUF1 = 100, SIZE BUF1 = 100 BUF2DW 200 DUP(0) ;LENGTH BUF2 = 200, SIZE BUF2 = 2
23、00*2 = 400 【例6.15】S1DB 5 DUP (0)S2DW 100 DUP(?)S3DB 1,2,3,4,5MOV AL, SIZE S1;AL=15=5MOV BL, SIZE S2 ;BL=2100=200MOV CL, SIZE S3;CL=11=1(4 4)数值返回运算符(分析运算符)数值返回运算符(分析运算符)第33页/共70页运算符运算符类型类型符号符号名称名称运算结果运算结果实例实例合成运算符合成运算符PTR修改类型属性修改类型属性修改后类型修改后类型THIS指定类型指定类型/距距离属性离属性指定后类型指定后类型:段前缀段前缀修改段修改段HIGH分离高字节分离高字节
24、高字节高字节LOW分离低字节分离低字节低字节低字节SHORT 短转移说明短转移说明BYTE PTRBXALPHA EQU THIS BYTEHIGH 2345H=23HLOW 2345H=45HJMP SHORT LABEL(5 5)属性运算符(合成运算符)属性运算符(合成运算符)第34页/共70页 PTR 操作符 修改变量/标号类型。 格式:类型 PTR ;变量/标号 类型:BYTE,WORD,DWORD,NEAR,FAR 功能:使PTR右边的操作数具有PTR左边的类型。 【例6.16】VAR1DB 1, 2VAR2EQU WORD PTR VAR1MOV AL, VAR1; AL=01HM
25、OV AX, WORD PTR VAR1; AX=0201HMOV AX, VAR2; AX=0201H 当传送指令的操作数位数不一致时,可以用PTR运算符改变变量属性,使两个操作数一致。(5 5)属性运算符(合成运算符)属性运算符(合成运算符)第35页/共70页 操作符PTR的应用: 1)指定内存操作数的类型 例:INC BX;非法! 合法:INC BYTE PTR BX INC WORD PTR BX 2)用EQU和PTR定义一个新变量 BUF1 DW 1234H, 5678H BUF2 EQU BYTE PTR BUF1 3)确定指令是段内转移还是段间转移 JMP NEAR PTR JM
26、P FAR PTR (5 5)属性运算符(合成运算符)属性运算符(合成运算符)第36页/共70页 (5 5)属性运算符(合成运算)属性运算符(合成运算符)符) LABEL操作符操作符 为当前为当前即将定义即将定义的存储单元定义一个指定类型的标号或变量。的存储单元定义一个指定类型的标号或变量。 1)与变量连用:)与变量连用:新的变量名、新的变量属性。新的变量名、新的变量属性。 例:例:B_VAR1 LABEL BYTE W_VAR1 DW 3456H 2)与标号连用:)与标号连用:新的标号、新的范围。新的标号、新的范围。 例例: DISTFAR LABLE FAR DISTNEAR: MOV A
27、X, BX第37页/共70页 (5 5)属性运算符(合成运算)属性运算符(合成运算符)符) THIS操作符操作符 格式:格式:THIS EQU THIS 连用,是将其后的属性赋给当前的变量或标号。连用,是将其后的属性赋给当前的变量或标号。等价于等价于LABLE。 【例例6.17】VAR1 EQU THIS BYTE ;VAR1为字节属性为字节属性VAR2 DW 5678H ;VAR2为字属性为字属性第38页/共70页 (5 5)属性运算符(合成运算)属性运算符(合成运算符)符) HIGH/LOW 高低分离运算符高低分离运算符 功能:功能:取数值的高半部分或低半部分取数值的高半部分或低半部分 【
28、例例6.19】MOV AH,HIGH 1234H;AH=12HMOV AL,LOW 1234H;AL=34H第39页/共70页运算符运算符类型类型符号符号名称名称运算结果运算结果实例实例其它运算符其它运算符( )圆括号圆括号改变运算级优先级改变运算级优先级 方括号方括号下标或间接寻址下标或间接寻址点运算符点运算符连接结构与变量连接结构与变量尖括号尖括号修改变量修改变量MASK返回字段屏返回字段屏蔽码蔽码字段屏蔽码字段屏蔽码WIDTH返回记录返回记录宽度宽度记录记录 / 字段位字段位数数(84)*4=16MOV AX,BXTABT1MASK CWIDTH W (6 6)其它运算符)其它运算符第4
29、0页/共70页运算符的优先级表运算符的优先级表优先级优先级符号符号高高低低1234567891011LENGTH,SIZE,WIDTH,MASK,( ), ,PTR,OFFSET,SEG,TYPE,THISHIGH,LOW+, (单目单目)*,/,MOD,SHL,SHR+,(双目双目)EQ,NE,LT,LE,GT,GENOTANDOR,XORSHORT采用圆括号( )操作符可以改变运算级优先级,提高程序的可读性。第41页/共70页4. 段定义伪指令 汇编语言源程序的结构特点: 分段结构 程序由若干逻辑段组成,各逻辑段都有一个段名,由段定义语句(伪指令语句)定义和说明。 包括: 代码段CS:必不
30、可少。 数据段DS:建立工作区,存放常量、变量、中间结果等。 堆栈段SS:建立堆栈区,用于中断、过程调用、参数传递。 附加段ES:建立工作区。 通常,数据段放在代码段前面。 第42页/共70页4. 段定义伪指令 汇编语言源程序的结构特点: 语句行:语句是汇编语言程序的基本组成单位。每个逻辑段由若干行汇编语句组成,每行一个语句,小于128个字符。一般只占一行,越行时用续行符号&指示。 段分配:代码段起始处,用ASSUME命令说明当前哪些逻辑段被分别定义为代码段、数据段、堆栈段和附加段。 段寄存器 DS、ES、SS 的赋值: MOV AX, DATA MOV DS, AX 结束:以END命
31、令结束汇编程序,并指明程序的入口地址。第43页/共70页4. 段定义伪指令(1)完整段定义伪指令)完整段定义伪指令 格式:格式: 段名段名 SEGMENT 定位类型定位类型 ,组合类型组合类型,字长选择字长选择,类别类别 (段体)(段体) 段名段名 ENDS l 段名:段名:自己选定,前后一致。自己选定,前后一致。l 定位类型:定位类型: PAGE:段的首地址后两位为:段的首地址后两位为00H,页边界开始。,页边界开始。 PARA:(:(隐含隐含)段的首地址后)段的首地址后1位为位为0H,节边界。,节边界。 DWORD:4的倍数。的倍数。 WORD: 偶地址偶地址BYTE:任一字节。:任一字节
32、。第44页/共70页4. 段定义伪指令l 组合类型:组合类型: NONE:(:(隐含隐含)与同名段不连接,独立存在。)与同名段不连接,独立存在。 STACK:表明该段为堆栈段,不可缺省表明该段为堆栈段,不可缺省。 AT 表达式:表示本段可定义在表达式指示的节边界上。表达式:表示本段可定义在表达式指示的节边界上。例:例:MCODE SEGMENT AT 2050H则该段的首地址为则该段的首地址为20500H。l 字长选择:字长选择: USE16:段字长为:段字长为16位,最大段长为位,最大段长为64KB。 USE32:(:(缺省缺省)段字长为)段字长为32位,最大段长为位,最大段长为4GB。l
33、类别类别:用单引号括起,分类名相同的逻辑段存放在连续存用单引号括起,分类名相同的逻辑段存放在连续存储空间。储空间。第45页/共70页 【例6.20】 堆栈段定义STACK_SEGSEGMENT STACK ;定义堆栈段STACK_SEGDW100H DUP(?) ;分配堆栈段的大小512字节STACK_SEGENDS;堆栈段结束第46页/共70页4. 段定义伪指令 (2 2)段分配语句()段分配语句(ASSUMEASSUME) 段分配语句用来完成段的分配,说明当前哪些逻辑段被段分配语句用来完成段的分配,说明当前哪些逻辑段被分别定义为代码段、数据段、堆栈段和附加段。分别定义为代码段、数据段、堆栈
34、段和附加段。 格式:格式: ASSUME ASSUME 段寄存器:段名,段寄存器:段名, 段寄存器:段名段寄存器:段名 功能:功能: 说明源程序中定义的段由哪个段寄存器去寻址。段说明源程序中定义的段由哪个段寄存器去寻址。段寄存器可以是寄存器可以是CSCS,SSSS,DSDS,ESES。第47页/共70页四、段定义伪指令 段寄存器的装入:段寄存器的装入: ASSUME语句只建立当段和段寄存器之间的联系,但语句只建立当段和段寄存器之间的联系,但ASSUME语句不能语句不能将各段的段基值装入各个段寄存器,段基址的装入是用程序实现。将各段的段基值装入各个段寄存器,段基址的装入是用程序实现。 DS和和E
35、S的装入:的装入:DS和和ES不能用立即数寻址方式直接装入,段基值需先不能用立即数寻址方式直接装入,段基值需先送入通用寄存器,再传送给段寄存器。送入通用寄存器,再传送给段寄存器。 例:例: MOV AX,DATA MOV DS,AX SS及及SP的装入:的装入:在段定义伪指令中,选用在段定义伪指令中,选用 “STACK”参数项,在参数项,在ASSUME语句中,把堆栈段分配给语句中,把堆栈段分配给SS,则,则SS和和SP自动装入。如未使用自动装入。如未使用“STACK”参数项,则用程序实现参数项,则用程序实现SS和和SP的装入。的装入。 CS及及IP的装入:的装入:由起始标号确定由起始标号确定C
36、S和和IP,自动装入。,自动装入。 第48页/共70页4. 段定义伪指令 (3 3)汇编结束伪指令)汇编结束伪指令 ENDEND 格式:格式:END 标号标号 作用:作用:表示汇编到此结束。表示汇编到此结束。 ENDEND语句指示汇编程序到此结束汇编过程。可选的标号用语句指示汇编程序到此结束汇编过程。可选的标号用于指定程序开始执行点,连接程序将据此设置于指定程序开始执行点,连接程序将据此设置CS : IPCS : IP值。值。 注意:注意:汇编结束和程序终止是两码事汇编结束和程序终止是两码事第49页/共70页5. 过程定义伪指令 在程序设计中,常把具有一定功能的程序段设计成一个在程序设计中,常
37、把具有一定功能的程序段设计成一个子程序子程序,又称为,又称为过程过程。 过程的定义由一对过程伪指令过程的定义由一对过程伪指令 PROC 和和 ENDP 来完成。来完成。 格式:格式:子程序名子程序名PROC NEAR/FARRET子程序名子程序名ENDP NEAR 属性(段内近调用)的过程只能被相同代码段的属性(段内近调用)的过程只能被相同代码段的其他程序调用;其他程序调用;FAR 属性(段间远调用)的过程可以被相同属性(段间远调用)的过程可以被相同或不同代码段的程序调用。或不同代码段的程序调用。默认采用默认采用 NEAR 属性属性。第50页/共70页过程的调用与返回CALL PROC1MOV
38、 AX, BXRET主程序主程序子程序子程序PROC1:第51页/共70页子程序的位置Codesegmentassume ds:data,cs:code,ss:stackStart:Codeendsendstart主程序主程序返回返回 DOS子程序子程序子程序安排在子程序安排在主程序执行终主程序执行终止后的位置。止后的位置。第52页/共70页例;zcx.asmstack_segsegment para stack stack db 100dup(?)stack_segendscode_segsegmentassume cs:code_seg,ss:stack_segstart:mov al,
39、?;主程序提供显示字符call dpchar;调用子程序mov ax,4c00hint 21h ;返回DOS第53页/共70页例(续)dpcharproc;过程定义,过程名为dpcharpush ax;顺序入栈,保护寄存器push bxmov bx, 0mov ah, 0eh ;显示器0EH号输出一个字符功能int 10hpop bx;逆序出栈,恢复寄存器pop axret;子程序返回dpcharendp;过程结束code_segendsend start ;汇编结束第54页/共70页6. 其它伪指令(1)定位伪指令定位伪指令 ORG: 格式:格式:ORG 表达式表达式 对于数据段,对于数据段
40、,ORG后面的数据定义从后面的数据定义从ORG指定的位置分配单元。对指定的位置分配单元。对于代码段,于代码段,ORG后面的一条指令语句从指定位置生成目标代码。后面的一条指令语句从指定位置生成目标代码。(2)当前位置计数器当前位置计数器 $: 符号符号“$”表示当前偏移地址值。表示当前偏移地址值。 【例例6.22】ORG 0100HDW 1,2,$+4,$+4VAR1DB 12,23,34LENEQU $-VAR1 指令执行后指令执行后104H=0108H、106H=10AH、LEN=3。第55页/共70页练习: ORG 0010H VAR DW 1, 2, $+2, 5, 6 则汇编后0014
41、H单元的内容是: A) 6H B) 14H C) 5H D) 16H第56页/共70页6.2 汇编语言程序的上机过程编辑编辑文本编辑器,如 EDIT.COM源程序:文件名源程序:文件名.asm汇编汇编汇编程序,如 MASM.EXE目标模块:文件名目标模块:文件名.obj连接连接连接程序,如 LINK.EXE可执行文件:文件名可执行文件:文件名.exe调试调试调试程序,如 DEBUG.EXE应用程序应用程序第57页/共70页开发过程1:源程序的编辑 源程序文件要以ASM为扩展名。 源程序文件的编辑可以通过任何一个文本编辑器实现:DOS环境中的EDIT、Windows环境中的记事本Notepad、
42、其他程序开发工具中的编辑环境。 EDIT 6_1.asm开发过程 2:源程序的汇编l汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。lMASM 5.x提供的汇编程序是MASM.EXE: MASM 6_1.asml如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(6_1.obj);否则MASM将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,再进行汇编。第58页/共70页开发过程3:目标模块的链接 连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件): LINK 6_1.obj 如果没有严重错误,LINK将生成一个可执行文件(6_1
43、.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序文件后再汇编、链接,直到生成可执行文件。开发过程4:可执行程序的调试l经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行: 6_1l如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误。采用DEBUG.EXE调试程序: DEBUG 6_1.exe第59页/共70页6.2.3 汇编语言上机实例 【例6.23】【例6.28】 演示教学第60页/共70页6.3 系统功能调用 6.3.1 概述 6.3.2 DOS系统功能调用INT 21H 6.3.3 ROM-BIOS功能调用第61页/共70页6.3
44、.1 概述 DOS系统和系统和BIOS以过中断服务程序方式提供了大量实用程以过中断服务程序方式提供了大量实用程序供程序员使用。序供程序员使用。 系统功能调用的如下四步进行:系统功能调用的如下四步进行:1、在、在AH寄存器中设置子功能号;寄存器中设置子功能号;2、在指定的寄存器中设置入口参数;、在指定的寄存器中设置入口参数;3、用相应的中断指令执行功能调用;、用相应的中断指令执行功能调用;4、根据出口参数分析功能调用的执行情况。、根据出口参数分析功能调用的执行情况。第62页/共70页6.3.2 DOS系统功能调用INT 21H 1.一个字符的输出 2.一个字符串的输出 3.一个字符的输入 4.一个字符串的输入第63页/共70页1. 一个字符的输出 子功能号:子功能号:AH=02H。入口参数:入口参数:DL=输出字符的输出字符的ASCII码。码。 执行该功能后会在显示器当前光标处显示指定的字符,执行该功能后会在显示器当前光标处显示指定的字符,且光标右移一个字符位置。且光标右移一个字符位置。【例例6.29】用用02H号号DOS系统功能调用在显示器输出一系统功能调用在显示器输出一个字符。个字符。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省司法厅直属事业单位招聘考试真题2025
- 【语文】湖南省名校联考联合体2024-2025学年高一下学期期末考试试题(解析版)
- 综合解析苏科版八年级物理下册《力与运动》同步测评试题(含答案解析)
- 重难点解析人教版八年级物理上册第5章透镜及其应用达标测试试卷(解析版含答案)
- 难点详解人教版八年级物理上册第5章透镜及其应用-透镜定向练习练习题(含答案详解)
- 税务局国考行测题库及参考答案详解【能力提升】
- 消防维保国考题库附答案详解(夺分金卷)
- 国考行测题库结构附参考答案详解(夺分金卷)
- 国考行测题库结构【名师系列】附答案详解
- 贵州行测国考题库附答案详解(突破训练)
- 四川甘孜州甘孜县招聘警务辅助人员笔试真题2024
- 牙周病学课件
- 大型体育馆满堂外脚手架施工方案
- 2025年广东佛山职业病诊断(物理因素所致职业病)模拟题库及答案
- 西宁市城中区面向社会公开招考社区工作者及储备人员的考试参考试题及答案解析
- 2025-2030中国燃气管道第三方施工破坏防控体系构建研究报告
- 数据库版本管理手册
- 2025年交管12123版学法减分全部试题及答案解析
- 建设工程造价鉴定申请书
- 安全监控设备方案
- 《工程勘察设计收费标准》(2002年修订本)
评论
0/150
提交评论