
汇编语言程序设计2(汇编语言源程序的结构、语句格式、伪指令).ppt
63页第4章 汇编语言程序设计mov ax,12h call display Jmp 1234h1主要内容:n汇编语言源程序的结构n汇编语言语句格式n伪指令n功能调用n汇编语言程序设计231. 汇编语言语句类型指令性语句指示性语句CPU执行的语句, 能够生成目标代码CPU不执行,而由汇 编程序执行的语句, 不生成目标代码342. 汇编语言语句格式指令性语句:[标号:] [前缀] 助记符 [操作数],[操作数] [ ;注释]指令的符号地址标号后要有冒号操作码 注释前加分号45指示性语句格式[名字] 伪指令助记符 操作数 [,操作数,…] [ ;注释]变量的符号地址其后不加冒号指示性语句中至 少有一个操作数56常用伪指令数据定义伪指令符号定义伪指令段定义伪指令结束伪指令过程定义伪指令宏命令伪指令67一、数据定义伪指令n用于定义数据区中变量的类型及大小n格式:[变量名] 伪指令助记符 操作数,… ;[注释 ]符号地址定义变量类型定义变量值 及区域大小781. 数据定义伪指令助记符nDB 定义的变量为字节型nDW 定义的变量为字类型(双字节)nDD 定义的变量为双字型(4字节)nDQ 定义的变量为4字型(8字节)nDT 定义的变量为10字节型892. 重复操作符n作用:q为一个数据区的各单元设置相同的初值n目的:q常用于声明一个数据区n格式:[变量名] 伪指令助记符 n DUP(初值 ,…)n例:BW 20 DUP(0) M1 DB 10 DUP(0)9103. “?”的作用n表示随机值,用于预留存储空间nMEM1 DB 34H,’A’,?DW 20 DUP(?)预留40个字节单元,每单元为随机值随机数 占1个字节单元104.2.2 符号定义伪指令把一个表达式用一个符号表示,以后凡出 现该表达式的地方都可用这个符号表示。
类 似于C语言中的#define符号定义伪指令有两种:EQU,=ü用EQU定义的符号未清除前,不能重新定义 清除EQU定义可用PURGE伪指令ü用”=”定义的符号可在任何时候进行重 定义ü二者均不占用存储空间,仅是给符号赋值 1112三、段定义伪指令n说明逻辑段的起始和结束;n说明不同程序模块中同类逻辑段之间的联系形态1213段定义伪指令格式段名 SEGMENT [定位类型] [组合类型] [’类别’]┇段名 ENDS 说明逻辑 段的起点说明不同模块中同名 段的组和连接方式1314定位类型nPARA: 段的起点从节边界开始(16个字节为1节)nBYTE: 段的起点从存储器任何地址开始nWORD:段的起点从偶地址开始nPAGE: 段的起点从页边界开始(256个字节为1页)1415组合类型n与其它模块中的同名段在满足定位类型的 前提下具有的组合方式:qNONE: 不组合qPUBLIC: 依次连接(顺序由LINK程序 确定)qCOMMON: 覆盖连接qSTACK: 堆栈段的依次连接qAT 表达式:段定义在表达式值为段基的 节边界qMEMORY: 相应段在同名段的最高地址 处。
154.2.3 段定义伪指令Ø汇编语言程序是按段来组织程序和数据的和存储器的物理段相对应,汇编语言程序中的段称 为逻辑段汇编连接后被映射到物理段中Ø3/4类段:代码(程序)、数据/附加数据、堆栈Ø段定义伪指令:SEGMENT、ENDS、ASSUME、ORGØ定义一个段的基本格式:段名 SEGMENT [定位类型][组合方式][类别]段名 ENDS16Ø这两个伪指令总是成对出现,二者前面的段名应一致 SEGMENT说明了一个段的开始,ENDS说明了一个段的结束 Ø 对数据段和堆栈段,段中的语句一般是变量定义对代码段则是指令语句如: data SEGMENTdata ENDS SEGMENTSEGMENT和ENDSENDS伪指令伪指令1718四、设定段寄存器伪指令n说明所定义逻辑段的性质n格式:ASSUME 段寄存器名:段名[,段寄存器名:段名 ,…]18ASSUME伪指令Ø在代码段中,还必须明确段和段寄存器的关系,这 由ASSUME语句来指定如ASSUME CS:code,DS:data,ES:data,SS:stack语句中的code和data为段名这个语句说明:(1) CS将指向名字为code的代码段(2) DS和ES将指向名字为data的数据段1920五、结束伪指令n表示源程序结束n格式:END [标号]2021汇编语言源程序结构数据段名 SEGMENT… 数据段名 ENDS附加段名 SEGMENT… 附加段名 ENDS堆栈段名 SEGMENT… 堆栈段名 ENDS代码段名 SEGMENT… 代码段名 ENDSEND 2122六、过程定义伪指令n用于定义一个过程体n格式:过程名 PROC [ NEAR / FAR ]┇RET过程名 ENDPP157例过程入口的 符号地址2223七、宏命令伪指令n 源程序中由汇编程序识别的具有 独立功能的一段程序代码n格式:宏命令名 MACRO ┇┇ENDM宏体宏2324其它伪指令nNAME-------为目标程序设定一个名字n格式:NAME 模块名nTITLE-------为程序清单指定打印标题n格式:TITLE 标题名244.3 功能调用DOS 功能调用 高级调用,操作系统提供BIOS功能调用 低级调用253. 调用方法设置入口参数在AH设置功能号m执行中断指令INT N分析、应用出口参数26例1 单字符显示功能调用MOV DL, ‘A’ ;设置入口参数MOV AH, 02H ;设置功能号 INT 21H ;执行中断调用 例2 单字符输入功能调用MOV AH, 01H ;设置功能号 INT 21H ;执行中断调用CMP AL, 0DH ;分析、应用出口参数JZ exit、、、27二、BIOS功能调用l 基本输入/输出模块BIOS:实现对输入/输出设备的控制,内含0 – 1CH 等类型中断子程,包括显示器、磁盘、键盘、打印机等标准外设的驱动程序。
参看中断类型分配表)l BIOS功能调用指对BIOS模块中的中断子程的调用28l 有关显示器① 显示器通过显卡(显示适配器)连接到计算机上② 单色显示器只能显示黑白两色彩色显示器能显示多种颜色291.设置显示方式入口参数 AL = 显示方式值00 40×25 黑白文本方式 01 40×25 彩色文本方式 02 80×25 黑白文本方式 03 80×25 彩色文本方式 04 320×320 彩色图形方式 功能号 AH = 00H 类型号 10H 出口参数 无 实现功能 将显示方式设置为指定形式例 将显示方式设置为 80×25 彩色文本方式MOV AL, 03HMOV AH, 00INT 10H302. 清屏、清窗口功能入口参数 AL = 0CH = 窗口左上角行号CL =窗口左上角列号DH = 窗口右下角行号DL =窗口右下角列号 BH = 窗口属性功能号 AH = 06H 或 AH = 07H类型号 10H出口参数 无 实现功能 按给定属性清除指定的窗口内容31例 清除屏幕显示,将其属性置为反白(白底黑字)显示。
MOV AL, 0 ;清屏功能 MOV BH, 70H ;白底黑字 MOV CH, 0 ;左上角 行号MOV CL, 0 ;左上角 列号 MOV DH, 24 ;右下角 行号 MOV DL, 79 ;右下角 列号 MOV AH, 6 ;功能号 INT 10H ;中断调用323. 置光标位置l 光标控制开始显示的位置,计算机有专门的硬件控制光标的显示大小、位置l 光标只在文本方式中出现,在图形方式下光标消失~~~~~~~~~~~~~~~~0 列 0 行79 列24 行5 列1 列1 行 2 行33置光标位置入口参数 DH = 行号DL = 列号BH = 页号功能号 AH= 02H类型号 10H出口参数 无 实现功能 将光标设置在指定的位置34例 将光标设置在2行5列的位置MOV DH, 2MOV DL, 5MOV BH, 0MOV AH, 2INT 10H~~~~~~~~~~~~~~~~0列0 行79列24行5列1列1 行 2 行35DOS 功能调用n包含多个子功能的功能包,用软中断指 令调用,中断类型码固定为21Hn各子功能采用功能号来区分附录C36DOS 功能调用设备管理 目录目录管理管理 文件管理文件管理 其其 他他37三、DOS系统功能调用 (21H类型中断调用)1.显示单字符 ( 02H功能 )2.显示字符串 ( 09H功能 )3.单字符输入 ( 01H、07H、08H功能 )4.字符串输入 ( 0AH功能 )5.检测键盘状态 ( 0BH功能 )6.保存中断向量 ( 35H功能 ) (第六章介绍)7.设置中断向量 ( 25H功能 )38DOS 功能调用n调用格式:MOV AH,功能号INT 21H391.从键盘输入单字符并显示n调用方法:MOV AH,01INT 21Hn输入的字符在AL中40单字符输入例GET_KEY: MOV AH,1INT 21HCMP AL,’Y’ JZ YES CMP AL,’N’ JZ NO JNZ GET_KEY YES: ┇NO: ┇交互式应答程序412. 从键盘输入字符串nAH 功能号OAHnDS:DX 字符串在内存中的存放地址nINT 21H42定义字符缓冲区n用户自定义缓冲区格式:0DHN1N2整个缓冲区最大键入字符数实际键入字符数43输入字符串程序段n DAT1 DB 20,?,20 DUP(?)n LEA DX,DAT1MOV AH,0AHINT 21H在数据段 中定义44输入缓冲区14H?20个字节定义后的输入缓 冲区初始状态:453. 单字符显示输出nAH 功能号O2HnDL 待输出字符nINT 21H46单字符显示输出例n MOV AH,02n MOV DL,41Hn INT21H执行结果: 屏幕显示A474. 字符串输出显示nAH 功能号O9HnDS:DX 待输出字符串的偏移地址nINT 21H48字符串输出显示n被显示的字符串必须以‘$’结束,且所显示的内容不应出现非可见的ASCII码49字符串输出显示例DATA SEGMENT MESS1 DB ‘Input String:’ 0DH,0AH,’$’ DATA ENDS CODE SEGMENT┇ MOVAH,09 MOVDX,OFFSET MESS1 INT 。
