微机原理:汇编语言程序设计 | 您所在的位置:网站首页 › 计算机组成原理与汇编语言程序设计第4版 › 微机原理:汇编语言程序设计 |
文章目录
一、汇编格式1、文字简述2、代码表述
二、汇编语言结构说明1、方式选择伪指令2、段定义语句3、段约定语句4、汇编结束语句5、返回DOS语句
三、实例1、例子2、汇编语言程序开发过程
四、功能调用DOS功能调用1、功能号01H2、功能号02H3、功能号09H4、功能号0AH5、举例
BIOS功能调用1、功能号00H2、功能号01H3、功能号0EH(文本)4、功能号13H
前言:本章我们就学习,如何汇编?大家对前面几章的学习,应该对于汇编代码有了一个初始的印象。
一、汇编格式
1、文字简述
一个完整的汇编语言源程序在结构上必须做到以下几点: 用方式选择伪指令说明执行该程序的微处理器类型;用段定义语句定义每一个逻辑段;用ASSUME语句说明段约定;用汇编结束语句说明源程序结束。 2、代码表述完整段定义格式: .586 ;方式定义 DATA SEGMENT USE16 ;定义数据段 ;.... DATA ENDS CODE SEGMENT USE16 ;定义代码段 ASSUME CS:CODE,DS:DATA ;说明段约定 BEG:MOV AX,DATA ;BEG为启动地址 MOV DS,AX ;.... MOV AH,4CH INT 21H ;返回DOS CODE ENDS END BEG ;汇编结束注:在汇编中,冒号后面表示注释内容。 二、汇编语言结构说明 1、方式选择伪指令功能:通知汇编程序,源程序经过汇编链接后生成哪一种CPU类型的机器指令; 应用:源程序第一条指令,指令以句号开头。 例如:.586 说明:不设置方式选择伪指令与设置.8086是等价的。 格式: 段名 SEGMENT 定位参数链接参数'分类名' 段长度 段体 段名 ENDS功能:是逻辑段的定界语句,源程序中每一个逻辑段都必须用定义语句定界。 段名:无特别限制,只是为了说明,但通常便于阅读,我们通常会把DATA作为数据段的段名,用STACK作为堆栈段的段名,CODE为代码段的段名。 格式:ASSUME 段寄存器:段名,…,段寄存器:段名 功能:ASSUME语句通知汇编程序,寻址逻辑段使用哪一个寄存器 格式1:END 程序的启动地址标号 例如:END BEGIN 功能:通知汇编程序,源程序到此结束,用BEGIN作为标号的指令是程序的启动指令。 程序在完成预定任务之后,必须返回DOS,返回DOS最常用的方法是使用DOS系统4CH功能调用,即连续执行以下2条指令: MOV AH,4CH INT 21H 三、实例 1、例子题目:加法程序实现46H+52H,并将运算结果存在在数据段SUM中。 思路:先在数据段中定义一个随机字节,在代码段中,先将46H赋值一个通用寄存器,之后实现ADD相加指令,最后赋值给SUM。 .586 DATA SEGMENT USE16 SUM DB ? DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA SEG:MOV AX,DATA MOV DS,AX MOV AL,46H ADD AL,52H MOV SUM,AL MOV AH,4CH INT 21H CODE ENDS END SEG注意:这里最后无输出,因为我们在这里只是做了相加后,存入数据段中,并没有显示在屏幕的功能。 2、汇编语言程序开发过程
通过对DOS/BIOS调用,可以实现一些功能。 了解一下: 格式: MOV AH,功能号 设置入口参数 INT 21H 分析出口参数操作图: 作用:等待输入一个字符,有回显,以该字符的ASSCII码输出在屏幕上。 入口参数:无 出口参数:AL=按键的ASCII码。若AL=0,表明按键时功能键,需再次调用本功能,才能返回按键的扩展码。 举例: MOV AH,1 INT 21H 2、功能号02H作用:显示一个字符 入口参数:DL=待显字符的ASCII码 出口参数:无 举例: MOV DL,41H ;显示‘A’ MOV AH,2 INT 21H注意:该项功能会破坏AL寄存器的内容 3、功能号09H作用:显示字符串 入口参数:DS:DX=字符首地址,字符串必须以‘$’为结束标志符。 出口参数:无 举例: .586 DATA SEGMENT USE16 MESG DB 'I AM HERE$' DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX LAST: MOV AH,9 MOV DX,OFFSET MESG INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG大家可以看出来,利用9号功能调用时候,需要把字符串的偏移地址送到DX里面。 4、功能号0AH作用:等待键入一串字符送用户程序数据缓冲区,并保存在缓冲区里,同时在屏幕上显示字符串。 入口参数: DS:DX=输入字符的缓冲区的首地址 题目:询问用户姓名并等待用户键入,用户输入姓名后敲击回车键,程序再把键入的姓名复制到屏幕上。 .586 DATA SEGMENT USE16 MESG DB 'WHAT IS YOUR NAME? $' BUF DB 30 DB ? DB 30 DUP(?) DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA BEG: MOV AX,DATA MOV DS,AX AGAIN: MOV AH,9 MOV DX,OFFSET MESG INT 21H ;询问姓名 MOV AH,0AH MOV DX,OFFSET BUF INT 21H ;存入内存 MOV BL,BUF+1 MOV BH,0 ;实际键入字符个数给BX MOV SI,OFFSET BUF+2 MOV BYTE PTR[BX+SI],'$' MOV AH,2 MOV DL,0AH ;换行 INT 21H MOV AH,9 MOV DX,OFFSET BUF+2 INT 21H MOV AH,4CH INT 21H CODE ENDS END BEG BIOS功能调用 1、功能号00H格式如下: |
CopyRight 2018-2019 实验室设备网 版权所有 |