前言:在“编程有料”后台回复“大礼包”上可以获得近1000本帮助编程道路的电子书
汇编语言编程1、汇编语言编程概述1、编程语言2、汇编语言源程序3、汇编语言程序开发过程2、汇编语言基本语法(重点) 1、汇编语言的句型2、常量、标识符和表达式
一、汇编语言编程概述1、编程语言机器语言
通过二进制表示,机器可以直接识别汇编语言
使用助记符号表示机器命令的高级语言
接近自然语言2,组装语言源程序
汇编语言源程序是程序员根据具体问题的算法用汇编语言语句编写的程序文本,通常以.asm作为扩展文件名。
在汇编语言编程中,由于对开发环境的支持不同,有完整段程序和简化分段程序。
3、汇编语言程序开发过程的基本步骤:
编辑(保存XXX.ASM
生成(汇编) XXX.OBJ
连接(生成XXX.EXE
调试运行
二、汇编语言的基本语法(要点) 1、汇编语言的句型命令性语句)指令组成,与机器指令一一对应。 例如:
START: MOV AX、DATA; 程序段初始化
祁使句:由指令(伪指令)构成,是程序员发送到汇编器的指令,没有对应的机器指令。 例如:
数据分段
2 )常数、标识符、公式常数
指令中出现的固定值在程序执行过程中不变。 分为数值常数、字符常数、符号常数3种识别符(指令中的即时数、MEM直接地址) )
具有特定意义的字符串,可用作符号常量、名称、变量、标签等。 (注意**? *不能单独作为标识符。 公式
由操作数(常数、变量、标签)和运算符组成。 汇编时完成适当运算的(数字常数)、(OBJ )目标程序中不存在表达式,APP应用程序调试中无法看到表达式。 3 )汇编语言程序伪指令(重点)程序退出伪指令
格式:结束标签
说明:标签是程序第一个命令语句的标签
gxdjb伪指令
1,gxdjb语句8086分阶段访问存储器。
格式:
段名SEGMENT [定位方式] [组合方式] [‘类别名’]
.
段名称ENDS
2 )隐形纸飞机说明疑似指令
格式: ASSUME隐形纸飞机:段名1,隐形纸飞机:段名2…
说明:代码段告诉汇编器CS、DS、ES和SS应具有的符号段地址,但看不见的纸飞机(CS除外)必须通过传输命令赋值。 通常紧跟在SEGMENT语句之后。
进程定义的伪指令
格式:
进程名称PROC NEAR[FAR]
.
进程名称ENDP
说明: NEAR近过程(主、次同段) ) ) ) ) ) ) )。
FAR远程处理(主、子位于两个不同的代码段中) ) )。
数据定义伪指令
数据定义语句用于将存储单元分配给数据,而所有数据段、附加段和堆栈段都存储数据。 这里使用的语句主要是数据定义语句。
命令)是DB字节(8位) 1字节存储器单元DW字(16位) 2个连续字节存储单元DD双字(32位) 4个连续字节存储单元DQ双字(64位) 8个连续字节
对应存储单元内的数据可以是数值常数、字符常数、符号常数中的任意一个,如果被保留,则使用问号(请参阅。 参数可以是多个,也可以相互之间用逗号(,)分隔,如果连续的多个数据重复,可以使用复制因子DUP轻松编写。 DUP的使用方法为:
赋值次数DUP (数据) )
示例:阵列数据库10 dup (12h ) )。
符号定义伪指令
)1)应用命令EQU和PURGE
格式:符号常数EQU表达式
说明:如果需要为分配的名称分配新值,请使用PURGE语句以以下格式取消原始分配:
PURGE的名称
PURGE可以同时取消一些分配的值。
例如:
计数equ 20 add ax,计数purge count count equ 30 add ax,count(2)应用命令“=”
格式:符号常数=表达式
说明:其功能类似于EQU,唯一的区别在于命令“=”允许您随时为名称指定新值,而无需使用PURGE命令。
例如:
COUNT=20ADD AX,COUNTCOUNT=30ADD AX,COUNT变量
(1)“$”的含义
数据中心
Y DB 10H, 5AH, 0C7H, 98H, 'ABCD'COUNT EQU $-ARRAYMAXDB 12HDATAENDS说明:$表示该行的偏移地址,此处COUNT 表示ARRAY 有多少个元素。
(2) 变量的五种属性
段基址偏移地址符号名的类型值长度属性规模属性(3) 类型指定运算符 PTR
格式:类型 PTR 表达式
说明:类型可以是BYTE、WORD、DWORD、NEAR、FAR
作用:按PTR 前面指定的类型去寻址
例:INC BYTE PTR [2000H]
4,DOS系统功能调用(重点)什么叫DOS 系统功能调用
为提高汇编程序的编程效率,减少重复开发过程,MS-DOS操作系统内置了几十个子程序,这些子程序能够完成大量底层功能,用户程序可以通过软中断的方式使用这些子程序,软中断号为21H。指令为INT 21H。
DOS 系统功能子程序使用的基本要求有:
1)传送入口参数到指定寄存器中;
2)调用子功能的功能编号放在AH 寄存器中;
3)执行INT 21H指令。
1、键盘单字符输入(1号)
MOV AH,1
INT 21H
功能:等待从键盘输入一个字符。
返回:(AL)=ASCII 码,并回显在显示器上。
2、输出单字符(2号)
MOV DL,‘A’
MOV AH,2
INT 21H
功能:将DL中字符从屏幕上输出。
返回:无返回
3、输出字符串(09号)
MOV DX,OFFSET BUF
MOV AH,09
INT 21H
功能:BUF中以’$'为结束标志的字符串显示在屏幕上。当无结束标志时会出现乱码。
4、键盘输入字符串 (OAH号)
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。
键盘缓冲区定义:
BUF DB 81 ;缓冲区的大小
DB? ;实际输入的字符个数
DB 80 DUP(?) ;字符串存放区
5、返回操作系统(4CH)
MOV AH,4CH
INT 21H
功能:将控制权交给操作系统。
格式:CALL 过程名(子程序地址)
功能:
下条指令的地址压入堆栈。主子同段(段内调用):只将IP的值压入堆栈
段间调用:先将CS的值压入堆栈,再将IP的值压入堆栈。
转入子程序运行(子程序的地址送入CS: IP) 2,子程序的返回格式:RET
说明:子程序的最后一条指令,用于返回CALL指令的下条指令继续执行。无论对哪一种调用方式其返回指令都相同。
功能:
主程序调用子程序必须传递入口参数,子程序返回必须传递出口参数。
常用的方法有:
寄存器:适用于参数少的情况。约定单元:适用于参数多的情况。要事先建立参数数据缓冲区。堆栈:适用于参数较多,且子程序嵌套,递归调用的情况。