第3章 8086汇编语言程序设计

上传人:今*** 文档编号:106941202 上传时间:2019-10-17 格式:PPT 页数:86 大小:1.82MB
返回 下载 相关 举报
第3章 8086汇编语言程序设计_第1页
第1页 / 共86页
第3章 8086汇编语言程序设计_第2页
第2页 / 共86页
第3章 8086汇编语言程序设计_第3页
第3页 / 共86页
第3章 8086汇编语言程序设计_第4页
第4页 / 共86页
第3章 8086汇编语言程序设计_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《第3章 8086汇编语言程序设计》由会员分享,可在线阅读,更多相关《第3章 8086汇编语言程序设计(86页珍藏版)》请在金锄头文库上搜索。

1、1,第3章 8086汇编语言程序设计,3-1 汇编语言程序格式,3-2 MASM中的表达式,3-3 伪指令语句,3-4 DOS和BIOS中断调用,3-5 程序设计方法,2,3-1 汇编语言程序格式,3,一个汇编语言程序可由若干个(此例有3个)段组成。每个段均以SEGMENT开始以ENDS结束。 每个段可以包含若干语句,而语句又可以是指令语句或伪指令语句两种。如程序中用到的ASSUME,DB,SEGMENTENDS等为伪指令语句。 每条语句可由标识符、保留字、表达式等元素组成。,4,一、 指令性语句 指令性语句与机器指令相对应,汇编程序可将它翻译成目标代码。语句格式为: 标号:指令助记符 操作数

2、,操作数;注释 标 号 符号地址,后跟“:”,使用英文大小写字母阿拉伯字 母和特殊字符,第一个非数字,31个 助记符 与指令对应,不可省。 操作数 参加运算的数据,用常数、变量、标号、寄存器名或 表达式。 注 释 说明一指令或程序功能。可省略。用“ ;”隔离。,5,二、伪指令语句 伪指令语句无对应的机器指令,汇编程序汇编源程序时对伪指令进行处理,它可完成数据定义,存储区分配,段定义,段分配,指示程序结束等功能。语句格式为: 名字 伪指令指示符 操作数,操作数;注释 名 字:赋予伪指令的名称,名字后不允许带冒号“:”,可省略。 名字常为变量名、段名、过程名、符号名等。 指示符: 汇编程序MASM

3、规定的符号,各种定义语句后详述。 操作数:按伪指令要求可有可无,操作数可以是常数、变量、字 符串、表达式等。 注 释:功能和使用与指令性语句相同。,6,三、数据项常数、变量和标号是三种基本数据项。 1常数 二进制 (B)、八进制 (Q或O) 、十进制 (D) 、十六进 制(H) 、 ASCll码字符串(用单引号abcd )。 2变量 常指存放在M中的数值,程序运行中可修改。 三个属性: 段值(SEGMENT):变量所在段的段基址。 段偏移地址(OFFSET):变量地址与所在段首地址之间的地址偏移字节数。 类型(TYPE):变量中每个元素包含的字节数,有字节变量(BYTE), 字变量(WORD)

4、及双字变量(DWORD)等,7,3标号 指令语句的地址的符号表示,可作为JMP指令和调用指令CALL的目标操作数,以确定程序转向的目标地址。 三个属性: 段值(SEGMENT): 标号所在段的段基址。 段内偏移地址(OFFSET): 标号地址与所在段的段首址之间的偏移地址字节数 类型(TYPE):指转移指令中标号可转移的距离。近标号(NEAR),远标号(FAR)。 NEAR指针长度2字节 FAR 指针长度4字节,8,3-2 MASM中的表达式,运算对象 运算符,表达式 汇编运算 结果作为语句中操作数,运算对象:常数、变量、标号 运算结果:常数或存储器地址(变量或标号),8086汇编语言中的运算

5、符,9,一 算术运算符 所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常是在标号上加减某一个数字量,对地址乘是没有意义的。,例 源程序指令格式如下: DA EQU 300 MOV AX,DA-80 MOV BX,DA MOD 100 MOV CX,DA/100 MOV DH,01100100B SHR 2,汇编时计算表达式形成指令为 DA EQU 300 MOV AX,220 MOV BX,0 MOV CX,3 MOV DH,19H,10,二 逻辑运算符 逻辑运算符是按位运算的只能对常数进行运算,得到结果也是常数。 逻辑运算符与8086指令系统中的指令助记符

6、AND、OR、NOT、XOR符号完全相同, 但二者是不会混淆的。作为MASM的运算符是在汇编过程中进行计算的,而指令助记符是在程序执行时进行运算的。 例:AND DX,PORT AND 0FEH,逻辑运算符汇编时 计算产生一立即数,指令助记符程 序执行时运算,11,三 关系运算符 所连接两操作数必为两数据或同一段内的两个存储单元的地址 运算结果:真0FFFFH,假0 常与逻辑运算符组合使用,例 MOV AX,10H GT 16 ADD BL,6 EQ 0110B MOV CX,(PORT LT 5) AND 100) OR (PORT GE 5) AND 200),汇编时形成指令为: MOV

7、AX,0 MOV BL,0FFH MOV CX,100 ;PORT5时,12,四 数值返回运算符(分析运算符),13,TYPE运算符返回值,14,例: M1 DW 100 DUP(?) M2 DW 1,2,3 M3 DB ABCD L1: MOV AH,TYPE M1 MOV AL,TYPE M3 MOV BH,TYPE L1 MOV CX,LENGTH M1 MOV BL,LENGTH M2 MOV CX,SIZE M1 MOV BL,SIZE M2 MOV AL,SIZE M3,汇编时形成指令: MOV AH,2 MOV AL,1 MOV BH,0FFH MOV CX,100 MOV BL

8、,1 MOV CX,200 MOV BL,2 MOV AL,1,15,五 修改属性运算符(综合或合成运算符) 1.段操作符 段前缀:变量或地址表达式 表示某个变量或地址被修改到哪个段寄存器提供的段基址中 如: MOV AX,ES:BX,16,2.PTR 类型/距离 PTR 变量或标号 功能:将PTR左边的类型属性赋给右边的变量或标号。PTR本身并不分配存储单元,仅给已分配的存储单元赋予新的属性,这样可以保证运算时操作数类型的匹配,常与类型BYTE、WORD、NEAR、FAR等连用。,例: DATA1 DB 10H,20H,30H ;数据定义 DATA2 DW 4023H,0A845H MOV

9、BX,WORD PTR DATA1 ;2010H 传送到 BX MOV AL,BYTE PTR DATA2 ;23H 传送到 AL MOV WORD PTR BX,10H ;BX,BX+10010H,17,3.THIS 变量/标号 EQU THIS 类型/距离 功能:将EQU THIS右边的类型距离属性,赋给左边的变量标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同,例: MY_BYTE EQU THIS BYTE MY_WORD DW 1122H MOV AL,MY_BYTE ;将22H传送给寄存器AL MOV BX,MY_WORD ;将1122H传送给寄存器BX,18,例:

10、THIS 操作符对于建立FAR属性是方便的 START EQU THIS FAR MOV CX,100 赋予传送指令(MOV)有一个FAR属性的地址START,允许其他段的转移指令(JMP)直接转移到START.,19,4.SHORT 格式:JMP SHORT 标号 功能:指定转移的距离属性为短,实际转移范围为-128127字节。,例: JMP SHORT NEAR_LABEL NEAR_LABEL: ,20,5.HIGH和LOW 分离字节运算符 HIGH分离高字节 LOW 分离低字节,例 K1 EQU 0ABCDH K2 EQU 1234H MOV AH,HIGH K1 ;AH0ABH MO

11、V BL,LOW K2 ;BL34H,21,六 其它运算符 1.圆括号( ) 圆括号用来改变运算符的优先级别,( )中的运算符具有最高优先权。 2.方括号 方括号主要用来表示地址表达式或多重变量的下标值。,M1 DB 10H,20H,30H,40H M2 DW 1234H,5678H,9ABCH M3 DW 5 DUP(?) MOV BX,OFFSET M1 MOV CL,BX ;CL10H MOV BX,OFFSET M2 MOV DX,BX+2 ;DX5678H MOV AL,M13 ;AL40H,22,3.尖括号及圆点 运算符在结构中专用,表示结构中的变量在预置结构付本时是否修改,修改成

12、什么数值。 运算符在结构中专用,表示结构付本名与变量名连接在一起,作为预置的结构付本中的各个变量。 4.MASK和WIDTH MASK和WIDTH运算符在记录中专用.,23,七 优先级,24,6-3 伪指令语句,数据定义语句 格式1:变量名 助记符 操作数,操作数, ;注释 格式2:变量名 助记符 n DUP (操作数,操作数,);注释 助记符:DB 定义字节 DW 定义字 DD 定义双字 DQ 定义四字 DT 定义十字节 变量名符号表示,可省略。作其后第一字节符号地址。 操作数常数,字符串,变量,标号,表达式 n DUP() n为整数,表示括号中操作数重复次数。,25,注意: 定义多字节字符

13、串用DB,DW只允许包含两个字符。 操作数用?定义不确定值变量,以保留存储空间存放运算结果。 用DW和DD可以将变量或标号逻辑地址存入存储器。当用DD来定义时,原变量或标号的偏移地址存入低位字中,原变量或标号的段基址存入高位字中。,26,例: DATA SEGMENT DA1 DB 10H DA2 DW 1122H DA3 DD 0A0H ST1 DB HOW ST2 DB OK ST3 DW OK M DW 2 DUP(?) ADR1 DW ST1 ADR2 DD ST2 DATA ENDS,27,表达式赋值语句 1 赋值语句EQU 格式:符号 EQU 表达式 功能:用来给变量,标号,常数,

14、指令,表达式等定义一个符号名,在同一个程序模块中不能重新定义。,A EQU 7 ;将7赋予符号名 A B EQU A-2 ;将A-2的值5赋予符号名 B COUT EQU CX ;将COUT作为寄存器CX的同义名,PURGE语句可以解除对某一标号的赋值,使它在后面可以重新定义。 PURGE COUNT ;COUNT不再代替CX,28,2 等号语句 = 等号语句“=”与EQU语句具有相同功能,区别仅在于EQU中左边的标号不允许重新定义,而用“=”定义的语句允许重复定义。,A = 7 ;正确 A = 19 ;正确 A EQU 7 ;正确 A EQU 19 ;再次定义,错误,29,段定义、分配语句

15、段定义语句 格式:段名 SEGMENT 定位类型 组合类型 分类名 . 段名 ENDS 段名: 是逻辑段的标识符,不可省略,它确定了逻辑段在存储器中的地址,SEGMENT和ENDS前的段名必须相同。 SEGMENTENDS: 是段定义的伪指令助记符,任何一个逻辑段必须以SEGMENT开始,ENDS结束,不可省略,并且必须成对出现,两者之间是本逻辑段的内容。,30,定位类型对该段起始地址定位 PAGE(页)起始地址可以被256整除(XXX00H) PARA(节)起始地址可以被16整除(XXXX0H) DWORD(字)起始地址可以被4整除(XXXXNH)(N为4的倍数) WORD(字)起始地址可以

16、被2整除(XXXXNH)(N为偶数) BYTE(字节)起始地址可以被1整除(XXXXXH) 缺省为PARA,31,组合类型表示段与段之间的连接 NONE: 该段与其它同名段不进行连接,各段独立存在于存储器中,NONE可作为缺省参数。 PUBLIC: 该段与其它模块中的同名段连接时,由低地址到高地址连接起来,组成一个逻辑段,连接次序由连接命令指定,连接时满足定位类型要求。 COMMON: 该段在连接时与其它模块中的同名段有相同的起始地址,采用覆盖的方式在存储器中存放,连接长度为各分段中最大长度。 AT表达式: 定位该段的起始地址在表达式所指定的节(16的整数倍)边界上。一般情况下各个逻辑段在存储器中的位置由系统自动分配,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号