1、2020/12/271第第4 4章章汇编语言程序设计汇编语言程序设计2020/12/272主要内容主要内容n汇编语言源程序的结构汇编语言源程序的结构n汇编语言语句格式汇编语言语句格式n伪指令伪指令n功能调用功能调用n汇编语言程序设计汇编语言程序设计2020/12/2734.1 汇编语言源程序汇编语言源程序了解:了解:n汇编语言源程序的结构汇编语言源程序的结构n汇编语言语句类型及格式汇编语言语句类型及格式2020/12/274一、汇编语言源程序结构一、汇编语言源程序结构2020/12/2751.汇编语言源程序与汇编程序汇编语言源程序与汇编程序n汇编语言源程序汇编语言源程序n汇编程序汇编程序用助记
2、符编写用助记符编写汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序源程序的编译程序源程序的编译程序2020/12/2762.汇编语言程序设计与执行过程汇编语言程序设计与执行过程n输入汇编语言源程序(输入汇编语言源程序(EDIT)n汇编(汇编(MASM)n链接(链接(LINK)n调试(调试(TD)源文件源文件.ASM目标文件目标文件.OBJ可执行文件可执行文件.EXE最终程序最终程序2020/12/2773.汇编语言源程序结构汇编语言源程序结构数据段名数据段名 SEGMENT 数据段名数据段名 ENDS附加段名附加段名 SEGMENT 附加段名附加段名 ENDS堆栈段
3、名堆栈段名 SEGMENT 堆栈段名堆栈段名 ENDS代码段名代码段名 SEGMENT 代码段名代码段名 ENDS END 2020/12/278二、汇编语言语句类型及格式二、汇编语言语句类型及格式2020/12/2791.汇编语言语句类型汇编语言语句类型指令性语句指令性语句指示性语句指示性语句CPU执行的语句,执行的语句,能够生成目标代码能够生成目标代码CPU不执行,而由汇不执行,而由汇编程序执行的语句,编程序执行的语句,不生成目标代码不生成目标代码2020/12/27102.汇编语言语句格式汇编语言语句格式 指令性语句:指令性语句:标号:标号:前缀前缀 助记符助记符 操作数操作数,操作数操
4、作数 ;注释;注释指令的符号地址指令的符号地址标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号2020/12/2711指示性语句格式指示性语句格式名字名字 伪指令助记符伪指令助记符 操作数操作数,操作数,操作数,;注释;注释变量的符号地址变量的符号地址其后不加冒号其后不加冒号指示性语句中至指示性语句中至少有一个操作数少有一个操作数2020/12/27123.标号、名字标号、名字n标号后有冒号,在指令性语句前;名字后不加标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。冒号,在指示性语句前。n英文字母、数字及专用字符组成英文字母、数字及专用字符组成,最大长度不最大长度
5、不能超过能超过3131个个,且不能由数字打头且不能由数字打头,不能用保留字不能用保留字(如寄存器名如寄存器名,指令助记符指令助记符,伪指令伪指令)。2020/12/27134.操作码操作码n指令码指令码n伪指令助记符伪指令助记符n指示汇编程序要完成的操作。指示汇编程序要完成的操作。n作用:作用:n定义变量定义变量n分配存储单元分配存储单元n指示程序开始和结束等指示程序开始和结束等命令命令CPU要完成的操作要完成的操作2020/12/27145.注注 释释n用分号作为注释的开始;用分号作为注释的开始;n用于说明程序或语句的功能,以便于阅读用于说明程序或语句的功能,以便于阅读和理解和理解2020/
6、12/27156.操作数操作数寄存器寄存器存储器单元存储器单元常量常量变量或标号变量或标号表达式表达式2020/12/2716常常 量量n数字常量数字常量n字符串常量字符串常量n例:例:A nMOV AL,An例:例:ABCD汇编时被译成对应的汇编时被译成对应的ASCII码码用单引号引起的字符或字符串用单引号引起的字符或字符串2020/12/2717变变 量量n代表内存中的数据区,程序中视为存储器代表内存中的数据区,程序中视为存储器操作数操作数n变量的属性:变量的属性:变量所在段的段地址变量所在段的段地址 变量单元地址与段首地址之变量单元地址与段首地址之 间的位移量。间的位移量。字节型、字型和
7、双字型字节型、字型和双字型段段 值值偏移量偏移量类类 型型2020/12/2718表达式表达式算术运算算术运算逻辑运算逻辑运算关系运算关系运算取值运算和属性运算取值运算和属性运算其它运算其它运算2020/12/2719算术运算和逻辑运算符算术运算和逻辑运算符n算术运算符算术运算符n+,-,*,/,MODn逻辑运算符逻辑运算符nAND,OR,NOT,XORn例:例:nMOV AL,8 AND 4nMOV AL,8+4-12020/12/2720关系运算符关系运算符n表示关系是否成立的运算符表示关系是否成立的运算符n参与关系运算的必须是两个数值参与关系运算的必须是两个数值n关系成立,结果关系成立,
8、结果=FFFFHn关系不成立,结果关系不成立,结果=0。n运算符:运算符:nEQ,NE,LT,GT,LE,GE例:例:MOV ALMOV AL,3 LT 43 LT 42020/12/2721取值运算符取值运算符取得其后变量或标号的偏移地址取得其后变量或标号的偏移地址取得其后变量或标号的段地址取得其后变量或标号的段地址TYPE 取取LENGTH 取所定义存储区的长度取所定义存储区的长度SIZE 取所定义存储区的字节数取所定义存储区的字节数n 用于分析存储器操作数的属性用于分析存储器操作数的属性OFFSETSEG2020/12/2722取值运算符例取值运算符例 MOV AX,SEG DATA M
9、OV DS,AX MOV BX,OFFSET DATA LEA BX,DATA等价于等价于2020/12/2723取值运算符例取值运算符例n若若BUFFER存储区用如下伪指令定义:存储区用如下伪指令定义:BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0)则:则:TYPETYPE BUFFER BUFFER 等于等于2 2 LENGTH BUFFERLENGTH BUFFER等于等于200200 SIZE BUFFERSIZE BUFFER等于等于4004002020/12/2724属性运算符属性运算符n 用于指定其后存储器操作数的类型用于指定其后存储器操作数的类型
10、n 运算符:运算符:PTRn 例:例:MOV BYTR PTRBX,12H2020/12/2725其它运算符其它运算符n方括号:方括号:n段重设符段重设符 段寄存器名:段寄存器名:方括号中内容为操作数的偏移地址方括号中内容为操作数的偏移地址用于修改默认的段基地址用于修改默认的段基地址2020/12/27264.2 伪指令伪指令掌握:掌握:n伪指令的格式及实现的操作伪指令的格式及实现的操作n伪指令的应用伪指令的应用2020/12/2727伪指令伪指令n由汇编程序执行的由汇编程序执行的“指令系统指令系统”n作用:作用:n定义变量;定义变量;n分配存储区分配存储区n定义逻辑段;定义逻辑段;n指示程序
11、开始和结束;指示程序开始和结束;n定义过程等。定义过程等。2020/12/2728常用伪指令常用伪指令数据定义伪指令数据定义伪指令符号定义伪指令符号定义伪指令段定义伪指令段定义伪指令结束伪指令结束伪指令过程定义伪指令过程定义伪指令宏命令伪指令宏命令伪指令2020/12/2729一、数据定义伪指令一、数据定义伪指令n用于定义数据区中变量的类型及大小用于定义数据区中变量的类型及大小n格式:格式:变量名变量名 伪指令助记符伪指令助记符 操作数,操作数,;注释注释表示符号地址表示符号地址定义变量类型定义变量类型定义变量值定义变量值及区域大小及区域大小2020/12/27301.数据定义伪指令助记符数据
12、定义伪指令助记符nDB 定义的变量为字节型定义的变量为字节型nDW 定义的变量为字类型(双字节)定义的变量为字类型(双字节)nDD 定义的变量为双字型(定义的变量为双字型(4字节)字节)nDQ 定义的变量为定义的变量为4字型(字型(8字节字节)nDT 定义的变量为定义的变量为10字节型字节型2020/12/2731数据定义伪指令例数据定义伪指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 11H*2,22H,33445566H以上变量在内存以上变量在内存中的存放形式中的存放形式2020/12/2732数据定义伪指令的几点说
13、明数据定义伪指令的几点说明n伪指令的性质决定所定义变量的属性;伪指令的性质决定所定义变量的属性;n定义字符串必须用定义字符串必须用DB伪指令伪指令n例:例:DATA1 DB ABCD,66HABCD41H42H43H44H66H2020/12/27332.重复操作符重复操作符n作用:作用:n为一个数据区的各单元设置相同的初值为一个数据区的各单元设置相同的初值n目的:目的:n常用于声明一个数据区常用于声明一个数据区n格式:格式:变量名变量名 伪指令助记符伪指令助记符 n DUP(初值,初值,)n例:例:BW 20 DUP(0)2020/12/27343.“?”的作用的作用n表示随机值,用于预留存
14、储空间表示随机值,用于预留存储空间nMEM1 DB 34H,A,?,?DW 20 DUP(?)(?)预留预留40个字节单元,每单元为随机值个字节单元,每单元为随机值随机数随机数占占1个字节单元个字节单元2020/12/2735数据定义伪指令例数据定义伪指令例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)变量在内存中的分区变量在内存中的分区2020/12/2736数据定义伪指令例数据定义伪指令例M1How aM211H11H00H44H33H r e you?11H00H00
15、H随机数随机数M311H22H11H22H11H22HXXXXXXXXXXXXXX2020/12/2737二、符号定义伪指令二、符号定义伪指令n格式:格式:符号名符号名 EQUEQU 表达式表达式n操作:操作:用符号名取代后边的表达式,不可重新定义用符号名取代后边的表达式,不可重新定义n例:例:CONSTANTCONSTANTEQUEQU100100 VAR EQU 30H+99HVAR EQU 30H+99HEQU说明的表达式不占用内存空间说明的表达式不占用内存空间2020/12/2738三、段定义伪指令三、段定义伪指令n说明逻辑段的起始和结束;说明逻辑段的起始和结束;n说明不同程序模块中同
16、类逻辑段之间的联系形说明不同程序模块中同类逻辑段之间的联系形 态态2020/12/2739段定义伪指令格式段定义伪指令格式段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDSENDS说明逻辑说明逻辑段的起点段的起点说明不同模块中同名说明不同模块中同名段的组和连接方式段的组和连接方式2020/12/2740定位类型定位类型nPARA:段的起点从节边界开始段的起点从节边界开始 (16个字节为个字节为1节)节)nBYTE:段的起点从存储器任何地址开始段的起点从存储器任何地址开始nWORD:段的起点从偶地址开始段的起点从偶地址开始nPAGE:段的起
17、点从页边界开始段的起点从页边界开始 (256个字节为个字节为1页)页)2020/12/2741组合类型组合类型n与其它模块中的同名段在满足定位类型的前提与其它模块中的同名段在满足定位类型的前提 下具有的组合方式:下具有的组合方式:nNONE:不组合不组合nPUBLIC:依次连接(顺序由依次连接(顺序由LINK程序确定)程序确定)nCOMMON:覆盖连接覆盖连接nSTACK:堆栈段的依次连接堆栈段的依次连接nAT 表达式:段定义在表达式值为段基的节边界表达式:段定义在表达式值为段基的节边界nMEMORY:相应段在同名段的最高地址处。相应段在同名段的最高地址处。2020/12/2742类别类别n不
18、同模块连接时将相同类别的段放在连不同模块连接时将相同类别的段放在连续的内存区域中续的内存区域中2020/12/2743段定义伪指令例段定义伪指令例DATA SEGMENT PUBLIC CODEMEM1 DB 11H,22HDATA ENDS2020/12/2744四、设定段寄存器伪指令四、设定段寄存器伪指令n说明所定义逻辑段的性质说明所定义逻辑段的性质n格式:格式:ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存器名:段名,2020/12/2745五、结束伪指令五、结束伪指令n表示源程序结束表示源程序结束n格式:格式:END 标号标号2020/12/2746一个完整
19、源程序结构例一个完整源程序结构例DSEG SEGMENTDATA1 DB 1,2,DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT STACK STACK DB 200 DUP(?)(?)SSEG ENDS2020/12/2747一个完整源程序结构例一个完整源程序结构例 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 MO
20、V SS,AX CSEG ENDS END START源程序源程序 代码代码2020/12/2748六、过程定义伪指令六、过程定义伪指令n用于定义一个过程体用于定义一个过程体n格式:格式:过程名过程名 PROC NEAR/FAR RET 过程名过程名 ENDPP162例例过程入口的过程入口的符号地址符号地址2020/12/2749七、宏命令伪指令七、宏命令伪指令n 源程序中由汇编程序识别的具有独源程序中由汇编程序识别的具有独 立功能的一段程序代码立功能的一段程序代码n格式:格式:宏命令名宏命令名 MACRO ENDM宏体宏体P163例例宏宏2020/12/2750八、其它伪指令八、其它伪指令
21、段内程序代码或变量的起始偏移地址段内程序代码或变量的起始偏移地址n格式:格式:ORG 表达式表达式n例:例:ORG 2000H计算值为计算值为非负常数非负常数ORG2020/12/2751其它伪指令其它伪指令nNAME-为目标程序设定一个名字为目标程序设定一个名字n格式:格式:NAME 模块名模块名nTITLE-为程序清单指定打印标题为程序清单指定打印标题n格式:格式:TITLE 标题名标题名可以缺省可以缺省2020/12/27524.3 功能调用功能调用DOS 功能调用功能调用 BIOS功能调用功能调用2020/12/2753DOS 功能调用功能调用n包含多个子功能的功能包,用软中断指包含多
22、个子功能的功能包,用软中断指 令调用,中断类型码固定为令调用,中断类型码固定为21H;n各子功能采用功能号来区分。各子功能采用功能号来区分。附录附录D2020/12/2754DOS 功能调用功能调用设备设备管理管理2020/12/2755DOS 功能调用功能调用n调用格式:调用格式:MOV AH,功能号功能号 INT 21H2020/12/2756一、单字符输入一、单字符输入n调用方法:调用方法:MOV AH,01 INT 21Hn输入的字符在输入的字符在AL中中2020/12/2757单字符输入例单字符输入例GET_KEY:GET_KEY:MOVMOVAH,1AH,1 INTINT21H21
23、H CMPCMPAL,Y AL,Y JZ JZ YESYES CMP CMPAL,N AL,N JZ JZ NONO JNZ JNZGET_KEYGET_KEY YES:YES:NO:NO:交互式应交互式应 答程序答程序2020/12/2758二、字符串输入二、字符串输入n注意问题:注意问题:n调用格式调用格式n字符输入缓冲区的定义字符输入缓冲区的定义2020/12/27591.调用格式调用格式 功能号功能号OAH 字符串在内存中的存放地址字符串在内存中的存放地址nINT 21Hn AHn DS:DX2020/12/27602.定义字符缓冲区定义字符缓冲区n用户自定义缓冲区格式:用户自定义缓冲
24、区格式:0DHN1N2整个缓冲区整个缓冲区最大可键入字符数最大可键入字符数实际键入字符数实际键入字符数存放键入的字符存放键入的字符存放字符个数:存放字符个数:655332020/12/2761输入字符串程序段输入字符串程序段n DAT1 DB 20,?,?,20 DUP(?)(?)n LEA DX,DAT1 MOV AH,0AH INT 21H在数据段在数据段中定义中定义2020/12/2762输入缓冲区输入缓冲区14H?20个字节个字节定义后的输入缓定义后的输入缓冲区初始状态:冲区初始状态:2020/12/2763三、单字符显示输出三、单字符显示输出 功能号功能号O2H 待输出字符待输出字符
25、nINT 21Hn AHn DL2020/12/2764单字符显示输出例单字符显示输出例nMOVAH,02nMOVDL,41HnINT21H执行结果:执行结果:屏幕显示屏幕显示A2020/12/2765四、字符串输出显示四、字符串输出显示 功能号功能号O9H 待输出字符串的偏移地址待输出字符串的偏移地址nINT 21Hn AHn DS:DX2020/12/2766字符串输出显示字符串输出显示n被显示的字符串必须以被显示的字符串必须以$结束结束,且所显且所显示的示的 内容不应出现非可见的内容不应出现非可见的ASCIIASCII码码2020/12/2767字符串输出显示例字符串输出显示例DATA
26、SEGMENTMESS1 DB Input String:0DH,0AH,$DATA ENDSCODE SEGMENT MOV AH,09MOV DX,OFFSET MESS1INT21H 2020/12/27684.4 汇编语言程序设计汇编语言程序设计设计步骤:设计步骤:n根据实际问题抽象出数学模型根据实际问题抽象出数学模型n确定算法确定算法n画程序流程图画程序流程图 n分配内存工作单元和寄存器分配内存工作单元和寄存器n程序编码程序编码n调试调试2020/12/2769程序流程图符号程序流程图符号起始:起始:功能:功能:判断:判断:子过程:子过程:2020/12/2770汇编语言程序结构汇编
27、语言程序结构n顺序结构顺序结构n循环结构循环结构n先判定型先判定型n后判定型后判定型n分枝结构分枝结构n单分枝单分枝n多分枝多分枝n子程序结构子程序结构2020/12/2771本章注意点本章注意点n完整的汇编语言源程序结构完整的汇编语言源程序结构n定义逻辑段,说明段的含义,初始化段寄存器定义逻辑段,说明段的含义,初始化段寄存器n伪指令伪指令n数据定义方式数据定义方式n字符及字符串的输入和显示输出字符及字符串的输入和显示输出n字符输入缓冲区的定义,输出字符串的定义字符输入缓冲区的定义,输出字符串的定义n源程序的编写源程序的编写n几种结构(顺序、循环、分枝等)几种结构(顺序、循环、分枝等)2020/12/2772作业:作业:n作业请从服务器下载作业请从服务器下载n本章书后习题可根据个人情况选择练习本章书后习题可根据个人情况选择练习