




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 8086汇编语言程序设计,由于汇编语言具有执行速度快和易于实现对硬件的控制等独特的优点,所以至今它仍然是用户使用得较多的程序设计语言。特别是在对于程序的空间和时间要求很高的场合,以及需要直接控制设备的应用场合,汇编语言更是必不可少了。 由于汇编语言本身的特点,本章将选择目前国内广泛使用的IBM PC机作为基础机型,着重讨论8086汇编语言的基本语法规则和程序设计的基本方法,以掌握一般汇编语言程序设计的初步技术。,4.1 汇编语言的格式,8086的汇编语句一般由4个字段组成如下: 1.指令语句的格式 CYCLE: CMP SUM,100 ;SUM单元与100相比较 标号 操作码 操作数 ;注释 标号代表“:”后面的指令所在的存储地址(这里是逻辑地址),供JMP、CALL和LOOP等指令作操作数使用,以寻找转移目标地址。除此之外,它还具有一些其他“属性”。,2. 段,汇编源程序一般由若干段组成,每个段都有一个名字(叫段名),以SEGMENT作为段的开始,以ENDS作为段的结束,这两者(伪指令)前面都要冠以相同的名字。 段可以从性质上分为代码段、堆栈段、数据段和附加段4种,整个源程序必须以END语句来结束,它通知汇编程序停止汇编。END后面的标号START表示该程序执行时的起始地址。 每一条汇编语句最多由4个字段组成,它们均按照一定的规则分别写在一个语句的4个区域内 ,各区域之间用空格或制表符(TAB键)隔开。,4.2 语句行的构成,4.2.1.标记 字符集:字母,数字,特殊字符 常量:数字常量与字符串常量 标识符:程序员定义的字符序列 保留字:指令助记符,命令与寄存器名等 注释:增加程序的可读性,4.2.2. 符号,寄存器:字节寄存器,字寄存器,一位寄存器 变量:存储单元地址的符号 三属性:段值(SEGMENT),偏移地址(OFFSET), 类型(TYPE)字节,字,双字 标号:标号表示指令地址,是指令的符号地址,用来作为汇编 语言源程序中转移、调用以及循环等指令的操作数 程序转移的目标地址。它具有3种属性和2个类型 3种属性:段值,偏移地址,类型 2个类型:表示该标号所代表指令的转移范围, NEAR(CS不变、IP改变) FAR (CS改变、IP改变) 段内转移或调用采用NEAR类型;若为段间转移或调用采用FAR类型。,4.2.3. 表达式,汇编时产生一个值 1.操作数(Operand) 操作数的汇编语言表示法及规则比较复杂,这是因为操作数的表示既要能充分体现出汇编语言中使用符号操作数和指令助记符的优越性,使程序员能尽可能地减少在存储分配和地址计算方面的工作,又要能被汇编程序有效地翻译成对应的特定处理器所具有的各种寻址方式。,()立即操作数 立即操作数在指令中直接给出,不需要使用寄存器,也不涉及访问数据区的操作,只能作为源操作数。立即操作数是整数,可以是字节或字节。在汇编语言中,立即操作数用常量(包括数值常量和符号常量)以及由常量与有关运算符组成的数值表达式表示。 如:MOV BX,1000+5*3 (2)寄存器操作数 寄存器的内容作为操作数 (3)存储器操作数 以指定的存储单元中的内容作为指令的处理对象,汇编指令中的存储器操作数实际上是存储单元的逻辑地址。,2. 运算符,(1)算术运算符 + - * / MOD 求余 注意:对存储器的操作是对其地址的操作,而不是对其内容的操作。对存储器的操作加、减是有意义的,而乘、除运算是无效的。 MOD(14/3):汇编时该表达式的值取余为2,(2). 逻辑运算符,AND,OR,XOR,NOT;存储器地址操作数不能进行逻辑运算 例: AND AX, (NUMB LT 5)AND 30) OR (NUMB GE 5) AND 20) 运算符为真时取值为OFFH(或0FFFFH)反之为0 , 当时,指令含意为 ,; 当时,指令含意为 ,。 此例中,操作符与操作数表达式中的具有不同的含意,前者是助记符,后者是伪指令。,(3). 关系运算符,EQ,NE,LT,GT,LE,GE 若关系是假,则结果为0; 若关系是真,则结果为0FFFFH或0FFH。 例如:MOV BL,PORT_VAL LT 5 设PORT_VAL =2,则 表达式 :PORT_VAL LT 5为真,BL=0FFH 设PORT_VAL =7,则 表达式 :PORT_VAL LT 5为假,(BL)=0H,4.2.4 语句,1 语句的种类 在8086汇编语言中,有3种基本语句: 指令语句 伪指令语句 宏指令语句,指令语句:是一种执行性语句,它在汇编时,汇编程序将为之产生一一对应的目标机器代码。 汇编指令 机器码 MOV DS,AX 8E D8 ADD AX,BX 03 C3 伪指令:是一种说明性语句,它在汇编时只为汇编程序提供进行汇编所需要的有关信息,如定义符号,分配存储单元,初始化存储器等,而本身并不代表生成目标代码 DATA SEGMENT AA DW 20H,-30H DATA ENDS,2.伪指令语句的格式,指令性语句 标号: 助记符 参数,参数;注释 指示性语句(伪指令) 名字 命令 参数,参数;注释 其中,“名字”可以是标识符定义的常量名、变量名、过程名、段名以及宏名等。所谓标识符是由字母开头,由字母、数字、特殊字符(如?、下划线、等)组成的字符串。 汇编程序是不区分大、小写字母的。 注意:伪指令名字的后面没有冒号,这是伪指令语句同指令语句在格式上的主要区别。,4.3 伪指令语句,伪指令语句又称为说明性指令或指示语句。 高级语言程序中的可执行语句被翻译成机器语言时,必须有非执行语句用于实现赋值、保留存储器,给常数分配符号名字、形成数据结构和终止编译等。 当汇编语言被翻译成机器语言时,也必须包括有执行类似任务的伪指令。同时,由于还依靠段寄存器工作,所以,还必须包括有一些在汇编过程中能告诉汇编程序把某个段分配给哪一个段寄存器的伪指令。 符号定义语句,数据定义语句,段定义语句,过程定义语句,结束语句,1.等值语句 格式为:符号名 EQU 表达式 或:新符号名 EQU 老符号名 例:CONSTANT EQU 100 NEW_PORT EQU PORT_VAL+1 EQU伪指令在未解除前,不能重新定义 2.解除语句Purge 已经用EQU命令定义的符号,若以后不再用了就可以用Purge语句来解除,用Purge语句解除后的符号可以重新定义 Purge语句的格式为: Purge 符号1,符号2,符号M,4.3.1 符号定义语句,4.3.2. 数据定义语句,格式: 变量名 数据定义伪操作 表达式 数据定义伪操作:DB、DW、DD ; 表达式: 数值表达式、ASCII表达式、地址表达式,例1: A DB 10*20 STR1 DB HI OK!,0DH,0AH, $ DATA1 DW 2 DUP(?) SUM DW ? TABLE DB 2 DUP(3 DUP (3),7) DBPTR DD TABLE,分析运算符 1)SEG 2)OFFSET 3)TYPE 4)SIZE 5)LENGTH,在一个程序中对它的数据段有如下定义: DTTABLES SEGMENT 2000:1000 BUFFER1 DB 100 DUP(0) BUFFER2 DW 200 DUP(20H) BUFFER3 DD 100 DUP(13) ARX DW 1234H,5678H DTTABLES ENDS SEG BUFFER1 SEG BUFFER2 SEG BUFFER3 OFFSET BUFFER1 OFFSET BUFFER2 OFFSET BUFFER3,LENGTH BUFFER1=100 LENGTH BUFFER2=200 LENGTH BUFFER3=100 LENGTH ARX=0,SIZE BUFFER1=100 SIZE BUFFER2=400 SIZE BUFFER3=400 SIZE ARX=0,MOV BX,OFFSET BUFFER1 MOV SI, OFFSET BUFFER2 MOV DI, OFFSET BUFFER3 MOV BX,AL MOV SI,CX MOV WORD PTR DI,DX,TYPE 存储器操作数 TYPE 数据字节(DB) 1 数据字(DW) 2 数据双字(DD) 4 NEAR指令单元 -1 FAR指令单元 -2 LENGTH 返回与存储器地址操作数相联系的单元数,存储区必须用DUP( )定义;其他情况返回0. LENGTH BUFFER1=100 LENGTH BUFFER2=200 LENGTH BUFFER3=100,SIZE SIZELENGTH*TYPE 返回一个为存储器地址操作数所分配的字节数。 SIZE BUFFER1=100 SIZE BUFFER2=400 SIZE BUFFER3=400,合成运算符(PTR、THIS) 属性(类型)运算符PTR,用来对存储单元规定或重新规定类型,通常和伪指令BYTE,WORD,DWORD等连起来使用。 例:MOV BYTE PTRDI,0 MOV WORD PTRDI,0 PTR也可用来对已经规定了类型进行更改 例:STRI1 DW ? ;定义为字类型 可用如下语句: PP EQU BYTE PTR STRI1 QQ EQU BYTE PTR STRI1+1 通过PP,QQ把STRI1和STRI1+1又规定为字节类型。,4.3.3 段定义语句,段定义伪指令指示汇编程序应如何按段来组织程序和使用存储器。所用命令主要有,等。 ()和伪指令 和伪指令用来把程序模块中的指令或语句分成若干逻辑段,其格式如下: 段定义 段名 SEGMENT 参数 。 段名 ENDS,堆栈段的设置,sseg segment stack sseg sd dw 100 dup(?) top equ length sd sseg ends 设置堆栈段的深度定义为200个字节,栈顶指针指向最高处,即Sp=00C8H. 堆栈段的主要作用:中断返回地址指针,子程序调用返回地址指针的自动保存;临时数据的存放。 见书P140,ASSUME说明程序的段结构 格式: ASSUME 段寄存器名:段名,段寄存器名:段名,. ASSUME伪指令只是告知汇编程序有关段寄存器与段的关系,并没有给段寄存器赋予实际的初值。真正把段地址装入段寄存器(称为段初始化)的操作需要由程序员自己完成。 如程序中用到堆栈段,也需装入实际的初值。而代码段不需要用户装,由初始化程序装入。,ORG 定义段的起始地址或偏移地址 格式:ORG 表达式的值即为段内的起始地址或偏移地址,从此地址起连续存放程序或数据,4.3.4 过程定义语句,1、CALL RET NEAR(CS不变,IP变) FAR (CS变,IP变) 调用一个过程的格式为:CALL 过程名 2、PROC ENDP 过程定义: NAME1 PROC (NEAR) : RET NAME1 ENDP NAME2 PROC FAR : RET NAME2 ENDP,4.3.5 结束语句,END 整个程序的结束 格式:END 表达式产生存储器的地址值 例:START: : END START,Dseg segment ARX dw 1234H,-5678H 。 Dseg ends sseg segment stack sseg sd dw 100 dup(?) top equ size sd sseg ends 主程序: CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP, TOP 。 。 CALL SUBNAME ;(段内直接调用) SUBNAME PROC ; procedure 。 RET (或 RET n) SUBNAME ENDP CSEG ENDS END START,4.3.6 有关I/O的DOS功能调用,系统所配置的硬件设备和软件程序。在应用过程中,实际上是指构成基本系统软件的一些中断例行程序。 中断服务程序:入口地址中断矢量表, 执行过程同外部中断 可用软中断指令直接调用。 系统(DOS、BIOS)功能调用 INT 21H 功能号- AH 入口(调用)参数 出口(返回)参数 注意:用TDEBUG 调试程序时,对功能调用INT 21H不可用单步执行进入。否则调试出错!,一键盘输入 1 键盘DOS操作,例1:当按下S键时,程序就从START处开始执行;否则重新按键输入。 L: MOV AH,1 INT 21H ;从键盘输入一个字符(ASC码),放在AL中 CMP AL,S JE START JMP L START:(略),二 数据显示 1 DOS显示功能调用,作业七 一.补充题1: 填空 DATA SEGMENT ORG 2000H ARY DW -1, 2, -3, 4 CNT DW $-ARY VAR DW ARY, $+4 MAX EQU 0EEH MMM EQU MAX MOD 10 NNN EQU (MMM LT 30H) OR 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 窗帘干洗协议书
- 2025年温州永嘉县桥头镇中心卫生院招聘临时医务人员3人考前自测高频考点模拟试题带答案详解
- 2025年肾脏科常见疾病诊断考试答案及解析
- 省属公费师范生协议书
- 中美协议书房价
- 2025年皮肤科常见皮肤病诊断考核答案及解析
- 代销合作协议书
- 2025年心理咨询师心理评估与干预技巧答案及解析
- 2025年陶瓷器皿行业智能陶瓷器皿市场前景研究报告
- 2025年安防行业智能安防技术应用研究报告
- 《建筑消防设施检测技术规程》
- 2024年农商银行担保合同样本
- 英才计划面试问题
- 七十岁老人三力测试题
- 小儿结核病教案
- 【高二 拓展阅读-科技】Wind Energy
- 我的家乡滕州市宣传简介
- 法院起诉收款账户确认书范本
- 15ZJ001 建筑构造用料做法
- 初中历史小论文现状分析与写作探讨
- 燕山石化聚丙烯工艺综述最好实习报告内容
评论
0/150
提交评论