微机 —— 汇编语言程序设计
汇编语言程序设计
名词解释
机器语言、汇编语言、高级语言
1、机器语言:用二进制表示指令和数据,能被机器直接识别的计算机语言 —— 面向机器的语言
是计算机唯一能够直接理解和执行的程序
优点:执行速度快、占用内存少
缺点:不直观、不易理解和记忆
2、汇编语言:采用助记符表示的程序设计语言。—— 面向机器的语言
优点:占用内存空间少、执行速度快
缺点:需要较多的软件开发时间、增加程序中出错的可能性
3、高级语言:使用一些接近人们书写习惯的英语和数学表达式形式的语句编制程序 —— 面向用户的语言
优点:直观、有利于人们理解和记忆
缺点:生成的目标程序冗长、占用较多的内存空间、执行时间长
指令语句、伪指令语句、宏指令语句
1、指令语句:是能产生目标代码,CPU可以执行并能完成特定功能的语句
2、伪指令语句:是一种不产生目标代码的语句,仅在汇编过程中告诉汇编程序应如何汇编
3、宏指令语句:是一种用户利用伪指令语句自己定义的语句
汇编语言的语句格式
汇编语言的语句格式由四部分组成:
[名字] 助记符 [操作数] [; 注释]
[名字]
在指令语句中,名字是一个标号,指令语句中的标号实质上就是指令的符号地址。
并不是每条指令语句必须有标号;
标号有三种属性:段、偏移量和类型
标号的类型属性有两种:NEAR和FAR
前一种标号可以在段内被引用,地址指针为2字节;
后一种标号可以在其他段被引用,地址指针为4字节
如果定义一个标号时后跟冒号,则汇编程序确认其类型为NEAR
伪指令语句中的名字也可以是 变量名、段名、过程名;
变量也有三种属性: 段、偏移量、类型
变量的类型属性有BYTE(字节)、WORD(字)、 DWORD (双字)、 QWORD (四字)等,表示数据区中存取操作对象的大小。
伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别
要注意:
标号可以由字母、数字和下划线组合,一个标号的最大长度不能超过31个字符。
标号不能以数字开头,但数字可以出现在标号符的中间或末尾。
助记符
助记符是表示不同操作的指令,可以是指令的助记符,也可以是伪指令
具体的助记符内容可见 助记符详细介绍
[操作数]
操作数是指令执行的对象;
可以作为操作数的有 常数、寄存器、标号、变量和表达式等
[; 注释]
并不是必要的,但是加上适当的注释,可以增加源程序的可读性
伪指令语句
汇编语言和DOS操作系统的接口
1.标准方法
首先将用户程序的主程序定义成一个FAR过程,其最后一条指令为RET。
然后在代码段的主程序(即FAR过程)的开始部分用如下三条指令将PSP中INT 20H 指令的段地址及偏移地址压入堆栈:
PUSH DS ;保护PSP段地址
MOV AX,0 ;保护偏移地址0
PUSH AX
这样,当程序执行到主程序的最后一条指令RET时,由于该过程具有FAR属性,故存在堆栈内的两个字就分别弹出到CS和IP,从而执行INT 20H指令,使控制返回到DOS状态。
返回DOS的标志就是程序运行完后出现一个DOS的标识符,如C:\>。
2. 非标准方法
在用户的程序中不定义过程段,只在代码段结束之前(即CODE ENDS之前)增加两条语句:
MOV AH,4CH
INT 21H
则程序执行完后也会自动返回DOS状态。
注意:
由于开始执行用户程序时,DS并不设置在用户的数据段的起始处,ES同样也不设置在用户的附加段起始处,因而在程序开始处(或在保护了PSP段地址和偏移地址0以后),应该使用以下方法重新装填DS和ES的值使其指向用户的数据段:
MOV AX,段名
MOV 段寄存器名,AX ;段寄存器名可以是DS、ES之一
常用系统功能调用和BIOS中断调用
1、系统功能调用
系统功能调用是微机的磁盘操作系统DOS为用户提供的一组例行子程序,因而又称为DOS系统功能调用。
这些子程序可分为以下四个主要方面:
(1) 磁盘的读/写及控制管理。
(2) 内存管理。
(3) 基本输入/输出管理(如键盘、打印机、显示器等)。
(4) 其他管理(如时间、日期等)。
键盘和显示器的DOS调用:
对于所有的功能调用,使用时一般需要经过以下三个步骤:
(1) 子程序的入口参数送相应的寄存器。
(2) 子程序编号送AH。
(3) 发出中断请求:INT 21H(系统功能调用指令)。
1号功能调用
调用格式:
MOV AH,1
INT 21H
系统执行该功能时将扫描键盘,等待键入。一旦有键按下,就将键值(相应字符的ASCII码值)读入,先检查是否是Ctrl–Break。若是,则退出命令执行;否则将键值送入AL寄存器,同时将这个字符显示在屏幕上。
2号功能调用
调用格式:
MOV DL,待显示字符的ASCII码
MOV AH,2
INT 21H
本调用执行后,显示器显示其ASCII码值放入DL中的字符。
9号功能调用
调用格式:
MOV DX,待显示字符串首字符的偏移地址
MOV AH,9
INT 21H
本调用执行后,显示器显示待显示的字符串。调用时,要求DS:DX必须指向内存中一个以“$”作为结束标志的字符串
10号功能调用
调用格式:
MOV DX,数据区的首偏移地址
MOV AH,10
INT 21H
该功能调用将从键盘接收的字符串送到内存数据区。
2、BIOS中断调用
BIOS是固化在ROM中的一组I/O驱动程序,它为系统各主要部件提供设备级控制,还为汇编语言程序设计提供了字符I/O操作。
BIOS的特点:
(1)调用BIOS中断程序比调用DOS中断程序复杂,但是运行速度快,功能更强;
(2)DOS中断功能只是在DOS的环境下适用,而BIOS功能调用不受任何操作系统的约束;
(3) 某些功能只有BIOS具有。
BIOS中断功能按功能分有两种:
(1)系统服务程序
(2)设备驱动程序
INT 16H 调用键盘服务程序中断
INT 17H 调用打印机服务程序中断
INT 10H 调用显示器服务程序的中断