第4章 8086汇编语言程序设计 几个概念 8086汇编语言的语句 8086汇编中的伪指令 8086汇编中的运算符 汇编语言程序设计

Slides:



Advertisements
Similar presentations
第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
Advertisements

输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
第四章 80x86汇编语言程序设计 第一节 汇编语言概述 第二节 汇编语言语句的组成 第三节 汇编语言的语句 第四节 宏汇编指令 第一节 汇编语言概述 第二节 汇编语言语句的组成 第三节 汇编语言的语句 第四节 宏汇编指令 第五节 编写完整的汇编语言程序 第六节 汇编语言程序设计.
第四章 汇编语言 程序设计 任课教师:王晓甜
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
第3章 80x86汇编语言程序设计(下).
第3章 80x86汇编语言程序设计(中) 时间不够的情况下只讲16位汇编.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
第5章 汇编语言程序设计 5.1 宏汇编语言的基本语法 5.2 伪指令 5.3 宏指令 5.4 汇编语言程序的结构
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第4章 汇编语言程序设计 4.1 汇编语言概述 4.2 汇编语言源程序格式 4.3 汇编语言程序设计 4.4 DOS功能调用.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
第八章 代码转换 8.1 概述 代码转换是在计算机程序设计中经常碰到的问题。如二进制数与十进制数的转换,ASCII码表示的十进制数与十六进制数之间的转换等等。 代码转换可以用硬件快速实现,但更常用的方法还是用软件的方法来实现。用软件处理代码转换的方法通常有以下两种方法: 1、用查表的办法:这种方法主要用于代码之间的转换关系比较复杂的情况。但码元的数量必须是有限的。
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第8章 寻址方式与指令系统.
第4章 汇编语言程序设计 4.1 程序设计语言概述 4.2 汇编语言的程序结构与语句格式 4.3 汇编语言的伪指令
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
走进编程 程序的顺序结构(二).
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
第 13 章 中断系统.
第二章 Java语言基础.
第二章 模拟量输出通道 本章要点 1.模拟量输出通道的结构组成与模板通用性; 2.8位D/A转换器DAC0832的原理组成及其接口电路
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
第八章 中断系统.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
College of Computer Science & Technology
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
Chapter 7&8 Assembly Programming
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
循环程序设计 在程序中包含重复执行的程序段称为循环程序设计。循环程序可以使程序结构性强、可读性好,从而大大提高了程序质量。
数据表示 第 2 讲.
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
微型计算机系统.
跟我一起学编程系列课程: 第一篇汇编语言 16位汇编.
Presentation transcript:

第4章 8086汇编语言程序设计 几个概念 8086汇编语言的语句 8086汇编中的伪指令 8086汇编中的运算符 汇编语言程序设计 宏定义与宏调用 汇编语言程序设计实例

几个概念 汇编语言 汇编语言源程序 汇编 汇编程序

4.1 8086汇编语言的语句 汇编语言由指令性语句和指令性语句组成 一、指令性语句格式 二、指示性语句格式 4.1 8086汇编语言的语句 汇编语言由指令性语句和指令性语句组成 一、指令性语句格式 [标号:] 操作码 [操作数1,] [操作数2] ;[注释] 二、指示性语句格式 [标识符(名字)] 指示符(伪指令) 表达式 三、有关属性 存储器操作数的属性有三种:段值、段内偏移量和类型。

4.2 8086汇编中的伪指令 一、 符号定义语句 1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 4.2 8086汇编中的伪指令 一、 符号定义语句 1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 ⑵ BUFF EQU PORT+58 ⑶ MEM EQU DS:[BP+20H] ⑷ COUNT EQU CX ⑸ ABC EQU AAA

2、等号语句 格式: NUM=34 …… NUM=34+1

二、变量定义语句 格式: 符号名 DB/DW/DD 表达式

1、定义一组数据 2、定义一串字符 例2: STR DB ‘ Welcome !’ 3、定义保留存储单元 例3: SUM DW ? , ? 例1: BUFF DW 1234H, 0ABCDH, 8EH DW –79DH, 7B6AH 2、定义一串字符 例2: STR DB ‘ Welcome !’ 3、定义保留存储单元 例3: SUM DW ? , ?

4、复制操作 复制操作符DUP(Duplication)可预置重复的数值 5、将已定义的地址存入内存单元 例5: LIT DD CYC 例4: ALL_ZERO DB 0,0,0,0,0 用复制操作可改为: ALL_ZERO DB 5 DUP(0) 5、将已定义的地址存入内存单元 例5: LIT DD CYC … CYC: MOV AX , BX

三、段定义语句 1、 段定义语句格式: 只需要掌握 段名 SEGMENT 段名 SEGMENT [定位类型] [组合类型] [‘类别’] 1、 段定义语句格式: 段名 SEGMENT [定位类型] [组合类型] [‘类别’] …… 段名 ENDS 只需要掌握 段名 SEGMENT

2、段假设语句 ASSUME 段寄存器名:段名[,…] 3、 ORG伪指令与地址计数器 $ ORG伪指令格式: ORG <表达式> 4、PUBLIC和 EXTRN伪指令

四、过程定义语句 过程名 PROC NEAR/FAR …… RET 过程名 ENDP

4.3 8086汇编中的运算符 一、常用运算符 1、算术运算符 2、逻辑运算符 +(加)、-(减)、*(乘)、/(除)、MOD(求余)。 4.3 8086汇编中的运算符 一、常用运算符 1、算术运算符 +(加)、-(减)、*(乘)、/(除)、MOD(求余)。 2、逻辑运算符 AND、OR、XOR、NOT

3、关系运算符 例: MOV DL , 10H LT 16 EQ(相等)、NE(不等、) LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 例: MOV DL , 10H LT 16 例: AND AX , 555 GT 222

二、 常用的操作符 例:MOV BX , OFFSET BUFF 4、分析操作符 1)SEG操作符 2)OFFSET操作符 二、 常用的操作符 4、分析操作符 1)SEG操作符 例: MOV AX , SEG BUFF 2)OFFSET操作符 例:MOV BX , OFFSET BUFF

3)TYPE操作符 对于变量有3种: 1 字节型; 2 字型; 4 双字型; 对于标号有2种:-1 NEAR(段内), 对于变量有3种: 1 字节型; 2 字型; 4 双字型; 对于标号有2种:-1 NEAR(段内), -2 FAR(段间)。 例: BUFF DB 20H MOV BX , OFFSET BUFF  MOV BX,01

4)LENGTH操作符 5)SIZE操作符 SIZE=TYPE×LENGTH 例:BUFF DB 10DIP(?) MOV CX,LENGTH BUF  MOV CX,10 MOV CX,SIZE BUF  MOV CX,20

5、综合运算符(合成操作符) 1)PTR运算符 格式: 类型 PTR 表达式 例:INC WORD PTR [BX] 2)THIS操作符 例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?)

4.4汇编语言程序设计 常用的汇编语言程序框架: DATA SEGMENT ;定义数据段 VAL1 DB 12H , 8EH ;定义变量 …… DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME DS:DATA , CS: CODE ;段属性说明 START: MOV AX , DATA ;初始化DS MOV DS , AX MOV AX , 4C00H ;返回DOS INT 21H CODE ENDS ;代码段结束 END START ;源程序结束

一、汇编语言程序设计基本步骤 分析问题-> 绘制流程图->编写程序->检查和调试 二、汇编语言程序的基本结构

1、顺序结构

2、分支结构

3、循环结构

4、子程序 Call proc1 ret

4.5 宏定义与宏调用 1、宏定义 宏指令名 MACRO <形式参量表> … ENDM 2、宏调用 宏指令名 实元表

…… 例: MULTY MACRO OPR1,OPR2,RESULT ;宏定义 PUSH AX MOV AL, OPR1 MOV AH, OPR2 IMUL OPR2 MOV RESULT , AX POP AX ENDM …… DATA SEGMENT XX DB 12 YY DB 34 ZZ DW ? MULTY XX,YY,ZZ ;宏调用,实参替代虚参

4.6汇编语言程序设计实例 1、算术运算例题 例1:在偏移首地址为ARRAY的内存储区,有100个字型数据,要求将数组的每个元素加1,试编写汇编语言程序完成该要求。 DATA SEGMENT ARRAY DW 100 DUP (?) ;定义100个字型随机数 DATA EDNS CODE SEGMENT ASSUME DS:DATA,CS:CODE ……

完整程序请参看教材 LEA BX , ARRAY ;设数组首地址指针 MOV CX , LENGTH ARRAY ;数组数据长 AA1: INC WORD PTR [BX] , 1 ;指定为字型数加1 ADD BX , 2 ;移动地址指针 LOOP AA1 ;循环操作 …… 完整程序请参看教材

例2: 有两个无符号字节型数组,设数组元素个数相等,编程将数组中的对应元素相加,结果存入另一内存区。 DATA SEGMENT M1 DB 20 DUP (?) M2 DB 20 DUP(?) M3 DW 20 DUP (0) DATA ENDS CODE SEGMENT ……

…… LEA SI , M1 ; 设数组1的地址指针 LEA DI , M2 ;设数组2的地址指针 LEA BX , M3 ;设结果区的地址指针 MOV CX , 20 AA1: MOV AL , [SI] ADD AL , [DI] MOV [BX] ,AL ADC BYTE PTR[BX+1] ,0 ;存结果的进位 INC SI INC DI ADD BX , 2 LOOP AA1

2、逻辑处理题 例1:将寄存器AL中高、低4位交换 …… MOV AL , 0ABH MOV CL , 4 ROL AL , CL ;移出位补充移空位4次

例2:将AX中的内容按相反顺序存入BX中 …… MOV AL , 1234H MOV CX , 16 AA1: SHL AX , 1 ;移出的位进到CF RCR BX , 1 ;AX中移出的位进入BX LOOP AA1

例1:编程将以$结束的字符串中的小写字母改为大写字母。 3、代码转换例题 例1:编程将以$结束的字符串中的小写字母改为大写字母。 DATA SEGMENT STR DB ‘heLLo,eveRyboBY !’,’$’ DATA ENDS ……

LEA BX , STR A1: MOV AL ,[BX] CMP AL , ‘$’ ;是$符,则结束 JE DONE CMP AL , ‘a’ JB NEXT ;低于,则为大写字母 CMP AL ,’z’ JA NEXT ;高于,则不是字母 SUB AL , 20H ;将小写字母改为大写 MOV [BX] , AL NEXT: INC BX JMP A1 ……

例2:十六进制数到十进制数的转换。 除10取余法

…… MOV AX , 4B6CH MOV CX , 0 ;统计除法次数 MOV BX , 10 ; A1: MOV DX , 0 ;被除数扩展为32位 DIV BX PUSH DX ;将转换好的数存入堆栈 INC CX OR AX , AX ;转换直到商为0 JNZ A1

4、表格处理题 例1:编程序将0-9的数字转换成所要求的密码 明码和密码的映射关系为: 0 1 2 3 4 5 6 7 8 9 0  1 2 3 4 5 6 7 8 9 2  7 1 6 9 0 8 3 4 5 DATA SEGMENT TABLE DB 2,7, 1, 6 ,9, 0, 8, 3, 4, 5 ;密码表 VAL1 DB 8, 4, 1, 7, 5 ; 被加密码(明码) VAL2 DB 5 DUP(?) DATA ENDS ……

…… MOV SI , OFFSET VAL1 MOV DI , OFFSET VAL2 MOV CX , 5 LEA BX , TABLE ;表格首地址指针 A1: MOV AL ,[SI ] ;取明码 XLAT ;转换为密码 MOV [DI] , AL INC SI INC DI LOOP A1

6、按数据大小排序题 例1:编程序实现,从一串带符号字型数据中找出最大值。 …… DATA SEGMENT BLOCK DW 762EH,6A8BH,-664AH,0B945H,-85DH COUNT EQU ($-BLOCK)/2 DATA ENDS ……

LEA SI , BLOCK MOV CX , COUNT MOV AX , [SI] ;取第1个数 DEC CX ;准备与下个数比较 AA1: ADD SI , 2 CMP AX , [SI] ;与下个数比较 JG AA2 ;前一个数大,则保留下次再比 MOV AX , [SI] ;否则,取后一个数下次再比 AA2: LOOP AA1 ……

4.7 DOS功能调用与子程序设计 调用过程为: ⑴ DOS功能调用号送AH寄存器; ⑵ 如果需要,按要求给定输入参数(有的不需要输入参数); ⑶ 写入中断指令INT 21H。 调用结束,按功能使用其输出参数。

1、单字符输入-1号 功 能:从键盘输入1个字符 输入参数:无 输出参数:AL=ASCII码

2、单字符输出-2号 例:从键盘输入两个1位十进制数,求两数之和并在屏幕上显示结果。 功 能:在屏幕上显示1个字符(ASCII码) 输入参数:DL=ASCII码 输出参数:无 例:从键盘输入两个1位十进制数,求两数之和并在屏幕上显示结果。

MOV AH , 1 ;DOS调用输入第一个数 INT 21H MOV BL , AL ;保存输入的第一个数 MOV AH , 1 ADD AL , BL ;两个ASCII码相加 AAA ; 调整加法结果为非压缩BCD数 MOV DL , AL ADD DL , 30H ;加法结果转换成ASCII码 MOV AH , 2 ;DOS调用输出到屏幕

3、多字符输入-0AH 功 能: 多个字符输入到缓冲区 输入参数:DS:DX=输入缓冲区首地址 输出参数:DS:DX=输入字符串所在缓冲区 功 能: 多个字符输入到缓冲区 输入参数:DS:DX=输入缓冲区首地址 输出参数:DS:DX=输入字符串所在缓冲区 地址

4、多字符输出-9号 功 能:多个字符输出到屏幕显示 输入参数:DS:DX=输出字符缓冲区首地址 输出参数:无 功 能:多个字符输出到屏幕显示 输入参数:DS:DX=输出字符缓冲区首地址 输出参数:无 例1:在屏幕上显示一串字符 。 DATA SEGMENT BUFF DB ‘How do you do?’,0DH,0AH,’$’ DATA ENDS

CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX , DATA MOV DS , AX LEA DX , BUFF MOV AH , 9 INT 21H ……

5、单字符输入/输出-6号 6号DOS功能实际上是1号和2号功能的组合,当DL寄存器的内容为0FFH时,6号功能与1号功能同,即从键盘输入单个字符;而当DL寄存器中放入字符的ASCII值,它就是2号功能。

6、过程终止-4CH号 该调用的功能是结束当前程序,并返回调用它的程序,如在DEBUG状态下运行,则返回DEBUG;如果在DOS下运行,则返回DOS。在汇编语言程序结束处放上MOV AX ,4C00H和INT 21H两条指令,以利于程序执行完毕,返回操作系统控制。

7、子程序设计 设计子程序要提供以下信息: ⑴子程序的功能 ⑵调用时需要的输入参数(入口参数) ⑶调用后提供的输出参数(出口参数) ⑷子程序中所使用的寄存器(以便调用前做必要的保护)

例1:编写一子程序,完成一个2位十六进 制数到对应的ASCII码的转换。 子程序名: CONHA 功 能: 将2位十六进制数转换成对应 功 能: 将2位十六进制数转换成对应 的ASCCII码 输入参数: AL=待转换的数 输出参数: BX=转换好的ASCII码 使用寄存器:AL、AH、BX、CL

CONHA PROC FAR MOV AH , AL ;保存待转换的数 AND AL , 0FH ;处理十六进制数低位 CMP AL , 0AH ;是16进制中的字母吗? JB ASC1 ;否,转移 ADD AL , 07 ;是,先加7 ASC1: ADD AL , 30H ;转换为ASCII码 MOV BL , AL ;保存转换好的低位 MOV CL , 4 ;移位控制 SHR AH , CL ;将原数右移,处理高位 CMP AH , 0AH ;是16进制中的字母吗? JB ASC2 ;否,转移 ADD AH , 07 ;是,先加7 ASC2: ADD AH, 30H MOV BH , AH ;保存转换好的高位 RET CONHA ENDP

例2:用子程序调用形式,编写从键盘输入4位16进制数的程序。 子程序名: ZH 功 能:检查键盘输入错误,将键入值转换成16进制数 输入参数:AL 输出参数:AL 使用寄存器:BX,CX

CODE SEGMENT ASSUME CS :CODE START: MOV CX , 4 ;输入4次 MOV DX , CX ; 转换4次 MOV BX , 0 ;用BX保存输入数 RE1: MOV AH , 1 ; 从键盘输入 INT 21H CALL ZH ;通过子程序转换 SHL BX , CL ;组合成16进制数

ADD BL , AL DEC DX JNZ RE1 ;循环输入4个数 MOV AX , 4C00H INT 21H

ZH PROC CMP AL , ‘9’ ;将ASCII码转换为16进制 JBE A2 ;键入值≤’9’(’0’-‘9’)则减30H CMP AL, ‘a’ ;键入值<’a’(‘A’-‘F’) 则减37H JB A1 SUB AL , 20H ;值在’a’ -‘f’则先减20H,再减37H A1: SUB AL , 7 A2: SUB AL , 30H RET ZH ENDP CODE ENDS END START