8086 汇编语言顺序程序设计
8086指令系统及汇编语言程序设计

8086指令系统及汇编语言程序设计8086指令系统是指Intel 8086微处理器所支持的一套机器指令。
8086微处理器是Intel于1978年推出的一款16位微处理器,其指令系统设计清晰简洁,具有良好的可编程性和灵活性。
汇编语言程序设计则是使用汇编语言编写程序,通过汇编器将汇编语言转化为可执行文件的过程。
8086指令系统共有十六个16位的通用寄存器,包括AX、BX、CX和DX四个通用寄存器,在实模式下这些寄存器也可以拆分为两个8位的寄存器AH、AL、BH、BL、CH、CL、DH和DL。
另外,还有SP、BP、SI和DI四个指针寄存器,以及CS、DS、ES和SS四个段寄存器等。
这些寄存器提供了程序在内存中存储和访问数据的能力。
8086指令系统中的指令可以分为数据传输指令、算术指令、逻辑指令和控制指令等几个类别。
数据传输指令可以将数据从寄存器传输到寄存器、从存储器传输到寄存器,或者从寄存器传输到存储器等。
算术指令包括加法、减法、乘法、除法等运算指令。
逻辑指令可以执行与、或、非、异或等逻辑运算。
控制指令可以控制程序的执行流程,例如条件跳转、循环等。
汇编语言程序设计是通过使用汇编语言编写程序来实现特定功能。
汇编语言程序由一系列指令组成,每条指令由操作码和操作数组成。
操作码表示需要执行的操作,操作数则是参与操作的数据。
编写汇编语言程序需要熟悉8086指令系统的指令格式和功能,以及寄存器的使用方法。
汇编语言程序设计的开发流程包括分析问题、编写算法、编写程序、汇编和调试等步骤。
在开始编写程序之前,需要先分析问题,并根据问题需求设计算法。
然后根据算法编写汇编语言程序,并通过汇编器将其转化为机器码。
最后,通过调试工具进行程序的调试和测试,确保程序的正确性和可靠性。
总之,8086指令系统及汇编语言程序设计是一门用于编写底层程序的技术。
通过学习和掌握8086指令系统和汇编语言程序设计,可以编写高效、优化的程序,并深入了解计算机系统的底层运行原理。
8086汇编语言程序设计——第一个程序

8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。
Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。
汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。
学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。
⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。
假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。
D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。
1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。
伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。
⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。
汇编语⾔程序建⽴及汇编过程如图所⽰。
⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。
注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。
执⾏MASM和LINK命令时需要按多次回车。
3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
8086语言顺序程序设计

8086语言顺序程序设计8086是Intel8086微处理器的型号,它采用x86命令集,是早期个人计算机的重要组成部分。
8086语言顺序程序设计是使用8086汇编语言进行程序设计的过程,它是一种低级编程语言,通过直接控制计算机硬件来完成特定任务。
1.寻址方式在8086语言顺序程序设计中,可以使用多种寻址方式来访问内存数据,例如直接寻址、寄存器间接寻址、寄存器相对寻址等。
其中,直接寻址和寄存器间接寻址是使用最为广泛的,直接寻址通过给出内存地址来访问数据,寄存器间接寻址通过给出寄存器中存放的地址来访问数据。
2.数据传送数据传送是编程中最基本的操作之一、8086提供了多条数据传送指令,可以将数据从一个地方传送到另一个地方。
常用的数据传送指令有MOV、XCHG等。
MOV指令可以将一个数据从源操作数传送到目的操作数,XCHG指令可以交换两个操作数的值。
3.算术运算8086提供了多条算术运算指令,可以进行加法、减法、乘法和除法等运算。
例如,ADD指令可以用于两个操作数的加法运算,SUB指令可以用于两个操作数的减法运算,MUL指令可以用于两个操作数的乘法运算,DIV指令可以用于两个操作数的除法运算。
4.逻辑运算8086还提供了多条逻辑运算指令,可以进行与、或、非、异或等逻辑运算。
例如,AND指令可以用于两个操作数的与运算,OR指令可以用于两个操作数的或运算,NOT指令可以用于对一个操作数进行非运算,XOR指令可以用于两个操作数的异或运算。
5.循环循环是程序中常用的结构之一,8086提供了多条循环指令,可以根据特定条件来重复执行一些程序片段。
常用的循环指令有LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ等。
其中,LOOP指令可以根据CX寄存器的值来自动减1并跳转到指定的标号处。
6.过程过程是一组有关联的指令的集合,适用于在程序中被反复调用的任务。
8086提供了CALL和RET指令,可以实现过程的调用和返回。
8086汇编语言程序设计的基本方法 共24页

–
MOV CX,AX
;计算X*Y
;用CX存储结果低 位
IDIV W MOV AH,4CH INT 21H CODE ENDS END START
–
MOV BX,DX
;用BX存储结果高位
–
MOV AX,Z
;计算X*Y+Z
第5章 汇编语言程序设计
• 例3 把非压缩十进制数DAT1转换为压缩十进制数。
第5章 汇编语言程序设计
例题
• 例7 把从BUF单元开始的80个16位无符号数按从大到小的顺 序排列。
第5章 汇编语言程序设计
例题
• 例4-26 把从BUF单元开始的80个16位无符号数按从大到小的
顺序排列。
LOOP2:MOV AX,[SI]
DSEG SEGMENT
BUF DW 80 DUP(?)
SSEG SEGMENT STACK STK DB 20 DUP (0) SSEG ENDS
第5章 汇编语言程序设计
DSEG SEGMENT ARG DW 7138H,84A6H,29EH MAX DW ? DESG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG FMAX:MOV AX,DSEG
AL←X
AL≥0? Y N
Y←-1
AL=0 Y N
Y←1
Y←0
结束
实现符号函数程序的流程图
第5章 汇编语言程序设计
编写程序如下: DSEG SEGMENT
VARX DB -25 VARY DB ? DSEG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG START: MOV AX, DSEG
第九讲 8086汇编语言程序设计(3)

•第四章 8086/8088汇编语言程序设计
• 图 4 . 1 顺 序 运 算 程 序 流 程 图
•第四章 8086/8088汇编语言程序设计 源程序如下: DATA SEGMENT X DW 200
EXIT: MOV AH,4CH
END
START
•第四章 8086/8088汇编语言程序设计
例4.4:试编一程序,求三个带符号字数据中的最大值,并 将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。 程序流程图如下图所示
例4.4程 序流程图
•第四章 8086/8088汇编语言程序设计
Y
Z V
DW
DW DW
100
3000 10000
W DW
2 DUP(?)
DATA ENDS STACK SEGMENT PARA STACK ’STACK’ DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK
•第四章 8086/8088汇编语言程序设计 START:MOV AX,DATA MOV MOV DS,AX AX,X ;DATA→AX
•第四章 8086/8088汇编语言程序设计 程序如下: DATA SEGMENT DATA1 DB 80 DUP(?);学生成绩 DATA2 DB 5 DUP(0);为统计结果留出存储单元 DATA ENDS ; CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV CX,80 LEA SI,DATA1 LEA DI,DATA2
8086 汇编语言顺序程序设计

汇编语言程序设计实验报告学院: 计算机科学与技术学院专业: 计算机科学与技术班级:计科131MOV AX,WORD PTR N1MOV DX,WORD PTR N1+2MOV CX,WORD PTR N2MOV BX,WORD PTR N2+2ADD AX,CXADC DX,BXMOV WORD PTR N3,AXMOV WORD PTR N3+2,DXMOV AH,4CHINT 21HCODE ENDSEND START使用相应的文本编辑器建立文件two、asm,内容如上所示。
二、生成可执行文件:1、汇编:C:\masm> masm two;2、连接:C:\masm> link two;三、运行及调试:1、运行:C:\masm>debug two、exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查瞧原始数据就是否正确-G=0 1F ;运行程序至断点1F 处-D0 ;查瞧程序运行结果2、调试:若要判断此程序对于其它32 位数相加就是否正确,则需要使用DEBUG 进行程序调试。
实验二:编程实现:将从2000H 单元开始的连续128 个单元的内容进行清零一. 编程CODE SEGMENTASSUME CS:CODE,DS:CODESTART:MOV BX,2000HMOV CX,128MOV AL,00HL1:MOV [BX],ALINC BXLOOP L1MOV AH,4CHINT 21HCODE ENDSEND START二.使用编辑器建立源程序文件four、asm。
三.生成可执行文件:1、汇编:C:\masm> masm four;2、连接:C:\masm> link four;四、运行及调试:1、运行:C:\masm>debug four、exe-D2000;-R;-D CS:2000;-G;-D2000;实验三:编程实现:将3000H 单元的一个字节的内容进行拆分,高半字节放进3001H 单元的低半部分,其低半字节放进3002H 单元的低半部分一、编程源程序:DATA SEGMENTN0 DW 3000HN1 DW 3001HN2 DW 3002HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX,N0AND BX,0FHMOV AX,N2MOV AX,[BX]MOV BX,N0MOV CL,4SHR AX,CLMOV AX,N1MOV AX,[BX]MOV AH,4CHINT 21HCODE ENDSEND START二.使用编辑器建立源程序文件five、asm。
微机原理第4章8086汇编语言程序设计

[标识符(名字)] 指示符(伪指令) 表达式
三、有关属性
存储器操作数的属性有三种:段值、段内偏移量 和类型。
整理ppt
2
4.2 8086汇编中的伪指令
一、 符号定义语句
1、等值语句 格式:符号名 EQU 表达式 例: ⑴ PORT EQU 1234 ⑵ BUFF EQU PORT+58 ⑶ MEM EQU DS:[BP+20H] ⑷ COUNT EQU CX ⑸ ABC EQU AAA
POP AX
ENDM
……
DATA SEGMENT
XX DB 12
YY DB 34
ZZ DW ?
……
MULTY XX,YY,ZZ ;宏调用,实参替代虚参
……
整理ppt
24
4.6汇编语言程序设计实例
1、算术运算例题
例1:在偏移首地址为ARRAY的内存储区,有 100个字型数据,要求将数组的每个元素加1, 试编写汇编语言程序完成该要求。
整理ppt
22
4.5 宏定义与宏调用
1、宏定义 宏指令名 MACRO <形式参量表>
… … ENDM 2、宏调用 宏指令名 实元表
整理ppt
23
例:
MULTY MACRO OPR1,OPR2,RESULT
;宏定义
PUSH AX
MOV AL, OPR1
MOV AH, OPR2
IMUL OPR2
M段定义语句
1、 段定义语句格式:
段名 SEGMENT [定位类型] [组合类型] [‘类别’]
…… 段名 ENDS
整理ppt
8
2、段假设语句
ASSUME 段寄存器名:段名[,…]
汇编语言程序设计实验篇(emu8086)

1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
8086汇编实现冒泡排序、直接插入排序、折半查找

(2)直接插入法 直接插入排序:将一个数据插入到一个已排好序的数据中,主要步骤如下:
① 查找应该插入的位置,这个过程免不了要比较数据的大小; ② 找到位置后,需将这个位置以及其后的数据都向后移动一位,空出此位置,等待插入 ③ 插入数据。
其 C 语言版的代码如下:
for(int i=2;i<=100;i++)
DSEG SEGMENT SCORE DB 31H,02H,15H,4H,5H,6H,7H,8H,9H,10H,90 DUP(05H) MAX DB ? MIN DB ?
DSEG ENDS CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG START: MOV AX,DSEG
MOV DS,AX
;相当于 i
L2: MOV AL,[BX+DI] ; L2 为内循环,(DI)为循环变量,相当于 j
CMP AH,AL
JAE L3
MOV DH,AH
;AH<Al,交换两个数
MOV AH,AL
MOV AL,DH
MOV [BX+DI],AL ;将交换后的数存入存储器
MOV [BX+SI],AH ;这两步很重要
L4: MOV DL,[BX+DI] ;从内存中取出 a[j],给(DL)
CMP DH,DL
;比较 a[0]和 a[j]
JAE L5
;a[0]<a[j],向后移
MOV [BX+DI+1],DL ;存入内存,实现真正的后移
DEC DI
;j--
JMP L4
L5: MOV [BX+DI+1],DH ;a[0]>=a[j],a[0]—>a[j+1],实现直接插入
第四章:8086汇编语言程序设计

第 4章
汇编语言程序设计
汇编语言程序设计
(2)尽量采用循环结构和子程序 (2)尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少、 采用循环结构和子程序可以使程序的长度减少、 占用内存空间减少。 占用内存空间减少。 多重循环,注意各重循环的初值和循环结束条件, 多重循环,注意各重循环的初值和循环结束条件, 死循环”现象; 避免出现 “死循环”现象; 通用的子程序, 通用的子程序,除了用于存放子程序入口参数的寄 存器外, 存器外,子程序中用到的其它寄存器的内容应压入堆栈 进行现场保护, 进行现场保护,并要特别注意堆栈操作的压入和弹出的 平衡; 平衡; 中断处理子程序除了要保护程序中用到的寄存器外, 中断处理子程序除了要保护程序中用到的寄存器外, 还应保护标志寄存器。 还应保护标志寄存器。
1、汇编语言的语句格式
汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言一般由四部分组成。 汇编语言一般由四部分组成。
其典型的汇编语句格式: 其典型的汇编语句格式: 标号: 标号:操作码
例如: 例如: START: START:MOV AL,30H AL,30H ;(AL)=30H (AL)=30H 30
第 4章
汇编语言程序设计
汇编语言程序设计
经过任务分析、算法优化后, 经过任务分析、算法优化后, 在微型机上使用编 首先, 首先,要对单片机应用 就可以进行程序的总体构思, 就可以进行程序的总体构思, 辑软件编写源程序, 辑软件编写源程序, 系统预完成的任务进行 确定程序的结构和数据形式, 确定程序的结构和数据形式, 在使用交叉汇编的 深入的分析, 深入的分析,明确系统 并考虑资源的分配和参数的 方法对源程序进行 的设计任务、 的设计任务、功能要求 计算等。 计算等。然后根据程序运行 汇编, 汇编,然后采用串 和技术指标。其次, 和技术指标。其次,要 的过程, 的过程,勾画出程序执行的 算法是解决具体问题 行通信的方法, 行通信的方法,把 对系统的硬件资源和工 逻辑顺序, 。同一个问题 逻辑顺序,用图形符号将总 的方法。 的方法 汇编得到的目标程 作环境进行分析。 ,, 作环境进行分析。这是 体设计思路及程序流向绘制 的算法可以有多种, 的算法可以有多种 序传送到单片机内, 序传送到单片机内 单片机应用系统程序设 在平面图上, 在平面图上,从而使程序的 结果也可能不尽相同, 结果也可能不尽相同, 并进行程序运行和 计的基础和条件 结构关系直观明了, 结构关系直观明了,便于检 所以, 调试 所以,应对各种算法 查和修改。 查和修改。 进行分析比较,并进 进行分析比较, 行合理的优化
第3章 8086的汇编语言程序设计-设计基础

(3)子程序定义 过程名 PROC 类型 : (RET) 过程名 ENDP 过程名——入口标号 类型——指明是段内还是段间调用。有 FAR和NEAR(缺省值)
2)子程序应用中应注意的问题
(1)主程序与子程序的连接 例:实验中,调用程序和过程在同一代码段, 用NEAR。使用了过程嵌套。主程序定义为 FAR,把主过程看作DOS调用的子过程。 例: CODE SEGMENT ASSUME ……. STRT PROC FAR ……. MOV AL,DATX PUSH BX
INT 21H
• 或等于:INT 20H
3.3.3 分支结构程序
• 大部分程序要求计算机根据判断作出不 同的处理,这要用分支结构程序。 • 1、分支程序的二要素 • 1)判断 • 经过运算,结果影响状态标志CF、PF、 ZF、SF、OF等,以此作为判断的依据。 • 2)转移(形成分支) • 1)无条件转移 • 2)条件转移
• CODE SEGMENT • ASSUME CS:CODE,DS:DATA,SS:STACK • START PROC FAR • BEGIN: PUSH DS • MOV AX,0 • PUSH AX • MOV AX, SEG DATA;MOV AX,DA • MOV DS,AX • MOV BX,OFFSET TABLESQ;LEA BX • MOV AH,0 • MOV AL,XX
3.3 汇编语言程序设计基础
• • • • • • • 3.3.1 概述 1、程序设计的步骤 1)分析课题 2)确定算法 3)画流程图 4)编写程序 要求:简单明了、层次清晰、运算迅速、 少占内存。 • 5)上机调试、修改
• • • • • • • •
第5章8086汇编语言程序设计

DO
SUM=SUM+I I=I+1 WHILE I>10
第5章 分支与循环程序设计
循环程序结构
第5章 分支与循环程序设计
设计循环结构程序时,要注意的问题: 选用计数循环还是条件循环? 采用直到型循环结构还是当型循环结构? 要综合考虑循环执行的条件和循环退出的条 件: 可以用循环次数、计数器、标志位、变量 值等多种方式来作为循环的控制条件 特别注意: 不要把初始化部分放到循环体中。 循环体中要有能改变循环条件的语句。
第5章 分支与循环程序设计
【例5-4】(续)
MOV AX,-3 CMP AX,0 JGE ISNN LEA DX,N MOV AH,9 INT 21H JMP FINISH
第5章 分支与循环程序设计
【例5-4】(续)
ISNN: LEA DX,NN MOV AH,9 INT 21H MOV AH,4CH INT 21H ENDS END START
第5章 分支与循环程序设计
ISPN: ISZN:
【例5-5】(续)
FINISH: MOV AH,4CH INT 21H CODE ENDS END START 本例实现的是多分支结构。 设计多分支结构程序时,应注意:
要为每个分支安排出口; 各分支的公共部分尽量集中,以减少程序代码; 无条件转移没有范围的限制,但条件转移指令只能在 -128~+127字节范围内转移; 调试程序时,要对每个分支进行调试。
第5章 分支与循环程序设计
第5章 分支与循环程序设计
【例5-7】(续)
CODE SEGMENT ASSUME CS:CODE START: MOV AX,DATA MOV DS,AX MOV BX,20 MOV CX,16 ; 计数器CX,置初值16 NEXTCHAR: ROL BX,1 ;显示顺序是从左往右, MOV DL,BL ;要显示的值仅占最低位D0 AND DL,1 ;清除D7~D1 OR DL,30H MOV AH,2 INT 21H ;利用2号DOS调用显示 LOOP NEXTCHAR ;循环执行16次 FINISH: MOV DL,'B' MOV AH,2 INT 21H ;利用2号DOS调用,显示'B‘ MOV AH,4CH INT 21H ; 返回操作系统 CODE ENDS END START
第4.4章 8086汇编语言程序设计

第四节 8086汇编语言程序设计 p75
在软件中采用模块结构化的程序设计方法。所以,一 个好的程序不仅能正常运行,完成预定任务,还应满足下 列设计要求: (1)程序结构应模块化,程序应简明、易读、易调试、 易维护(修改、扩充等)。 (2)程序运行速度要快。 (3)占用内存空间要少。 程序执行速度快,又要占内存空间少,两者是有矛盾的, 应权衡利弊,侧重某一方面来设计。随着计算机应用的发 展,程序的日渐庞大和复杂,使程序模块化,写好程序文 件,以便于阅读、调试和扩展,已显得越来越重要。
第四章 汇编语言程序设计
MOV BX,OFFSET DTM ;取数据表偏移地址 MOV CX,LENGTH DTM ;取数据表的长度 MOV DX,0 ;负数个数为0 LP: MOV AL,[BX] ;取数 CMP AL,0 ;与0比较(条件) JGE US ;正数(不满足),转移 INC DX ;(满足),负数个数加1(循环体) US: INC BX ;指向下一数 DEC CX ;总数减1 JNZ LP ;未查完,转移 MOV NUM,DX ;存负数总数 RET ;返回DOS(PSP段基址→CS,0000H→IP) START ENDP ;过程START 结束 CODE ENDS ;主程序段结束 END START ;主程序从 START开始执行
第四章 汇编语言程序设计
例:求和 p79
(设Y<=FFFFH)
DATA SEGMENT PARA PUBLIC ‘DATA‘ ;定义数据段 TABLE DW a1,a2,……,a100 ;数据表 YAD DW ? ;YAD字单元存累加和 DATA ENDS STACK SEGMENT PARA STACK‘STACK‘ ST DB 100 DUP(?) TP EQU LENGTH ST STACK ENDS
8086指令系统及汇编语言程序设计

8086指令系统及汇编语言程序设计8086指令系统是指8086微处理器能够支持和执行的一系列指令。
8086微处理器是Intel公司于1978年推出的一款16位微处理器,是一个革命性的产品,为个人计算机的发展奠定了基础。
8086微处理器采用的是复杂指令集(CISC)架构,其指令系统非常丰富,共有近1000条指令,能够完成各种复杂的计算和操作。
8086指令系统主要分为数据传输指令、算术运算指令、逻辑运算指令、移位指令、控制转移指令等几类。
数据传输指令主要用于数据在寄存器和存储器之间的传输,其中包括直接传输和间接传输两种方式。
算术运算指令用于执行各种加减乘除运算,包括有符号数和无符号数的运算。
逻辑运算指令用于执行逻辑操作,如与、或、异或等。
移位指令用于对数据进行位移操作,包括左移、右移等。
控制转移指令用于改变程序的执行顺序,包括无条件跳转、条件跳转等。
在汇编语言程序设计中,我们使用汇编语言来编写针对8086微处理器的程序。
汇编语言是一种低级编程语言,与机器语言直接对应,使用助记符代表机器指令。
汇编语言程序通过汇编器进行编译,生成可执行的机器码文件。
编写汇编语言程序的过程一般包括以下几个步骤:设计程序的逻辑结构、确定程序的算法、编写汇编语言源程序、进行程序调试、优化程序性能。
汇编语言程序设计可以用于解决各种计算机软件和硬件问题。
它可以用来编写底层驱动程序、操作系统、嵌入式系统等,也可以用来进行系统调试和性能优化。
总而言之,8086指令系统及汇编语言程序设计是计算机科学领域中重要的内容。
了解8086指令系统和掌握汇编语言程序设计对于理解计算机底层原理和解决一些底层问题非常有帮助。
同时,汇编语言程序设计也是一门艺术,通过编写高效的汇编语言程序,可以提高计算机的性能和响应速度。
第4章8086汇编语言程序设计

1.算术操作符
❖算术操作符有:加(+)、减(-)、乘(* )、除(/)和取余(MOD)。
❖参加运算的数和运算的结果都是整数。 ❖除法运算的结果是商的整数部分。 ❖取余操作的结果是两个整数相除后得到的
余数。
第4章 8086汇编语言程序设计
❖算术操作符可以用于数值表达式或地址表达式。 ❖当它用于地址表达式时,仅当其结果有明确的物
CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA
START:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX
第4章 8086汇编语言程序设计
MOV ADD MOV RET MAIN ENDP CODE ENDS END START
第4章 8086汇编语言程序设计
❖【例4-1】 编写汇编程序,计算2010H +2011H ,并把和存入RESULT单元。
DATA SEGMENT
;定义数据段
X DW 2010H
;定义被加数
Y DW 2011H
;定义加数
RESULT DW ? ;分配和数存放单元
DATA ENDS
;数据段定义结束
第4章 8086汇编语言程序设计
第4章 8086汇编语言程序设计
(1)数值常量(续)
❖十六进制常量表示为以字母H(或h)结尾 的由数字0~9、字母A~F(或a~f)组成 的序列,例如,653AH。
❖十进制常量表示为以字母D(或d)结尾的 由数字0~9组成的序列。汇编语句中的数 据默认采用十进制表示形式,所以,采用 十进制数时,也可省略结尾的字母。例如 ,101D或100。
第3章 8086∕8088汇编语言程序设计

JL LESS MOV AL,0 JMP DONE GREAT:MOV AL,1 JMOV Y,AL MOV AX,4C00H INT 21H CODE ENDS END START
2.跳转表法分支程序设计 【例3.9】根据变量BR_N中的值(0~3),实 现4路分支。 此程序利用跳转表——查表法实现多分支的功 能。程序如下: BRDATA SEGMENT BR_TAB DD SUB0 DD SUB1 DD SUB2 DD SUB3
MOV [BX], AL INC BX JMP NEXT DONE:MOV LEN, CL 此程序功能利用DOS功能调用一样可以完 成。但下面的例子所要求的功能, DOS调用无法实现。
【例3.3】 置光标到屏幕指定位置,并以 蓝底红色显示2个小星号。 MOV AH, 2 ;置光标位置功能号 MOV BH, 0 ;选择0页 MOV DH, 20 ;屏幕的20行 MOV DL, 25 ;屏幕的25列 INT 10H ;屏幕ROM调用 MOV AH, 9 ;显示字符及属性 MOV AL, ‘*’ ;星号
3.3 分支程序设计
1.测试法分支程序设计 【例3.7】将一位用ASCII码表示十六进制数 转换为对应的数值。程序如下: DATA SEGMENT ACS DB 45H NUM DB ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA
START:MOV AX, DATA MOV DS, AX MOV AL, ASC SUB AL, 48 ;减30H,将ASCII码 变为数值 CMP AL, 10 ;判断是否是字母A~F JC DONE SUB AL, 7 ;再减7,将字母变为 数值 DONE: MOV NUM, AL
第04章8086汇编语言程序设计

4.2.5 结束语句
格式:END 常数或表达式
功能:该语句标志整个程序的结束,是源程序的 最后一条语句。
4.3 8086汇编语言中的运算符
4.3.1 常用运算符和操作符
+(加)、-(减)、*(乘)、/(除)、 MOD(求余)。
1、算术运算符
2、逻辑运算符 AND、OR、XOR、NOT
3、关系运算符 EQ(相等)、NE(不等、)、 LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 关系成立,全1 关系不成立,全0 例: MOV DL , 10H LT 16 ; MOV DL,0 例: AND AX , 555 GT 222 ; AND AX,0FFFFH
存储器操作数的三种属性: 段值属性(SEGMENT):存储器操作数的段起始地 址,此值必须在一个段寄存器中,而标号的段则总 是在CS寄存器中。 段内偏移量属性(OFFSET):代表从段起始地址到该 操作数所在位置之间的字节数。等于当前地址计数 器(可用$表示)的值。 类型属性(Type):表示变量占用存储单元的字节 数。用DB定义的变量类型属性为字节;用DW定义 的变量类型属性为字(2B);用DD定义的变量类 型属性为双字(4B)。指出标号在本段内还是在其 他段中引用,段内称NEAR,指针长度为2字节;段 间FAR,4字节。
4、复制操作 复制操作符DUP(Duplication)可预置重复的数值 n DUP (表达式) 例4:ALL_ZERO DB 0,0,0,0,0 用复制操作可改为: ALL_ZERO DB 5 DUP(0) 为若干重复数据单元分配存储单元。
4.2.3 段定义语句 1、段定义语句格式:
段名 段名 SEGMENT …… ENDS [定位类型] [组合类型] [‘类别’]
第5章 8086 8088汇编语言程序设计

CODE
5.5 子程序设计
5.5.1 子程序的构造
在一个程序的不同的地方需要多次使用的某个程序段,将其进行独 立编制,而在主程序中需要使用该功能时,就转移到该程序段执行,执 行完后又返回原程序继续执行。这样的程序结构称为子程序设计。 子程序名 PROC 保存信息 …… 恢复信息 RET
……
[NEAR / FAR]
;返回到DOS,返回码为0
CODE
ENDS
END
5.2 顺序结构程序设计
程序有三种基本形式:顺序结构、分支结构和循环结构。 顺序程序结构 —— 是指完全按照顺序逐条执行的指令序列。
开始 语 句1 语 句2 语 句3 结束
顺序程序的结构形式
例1: 试编写一程序计算以下表达式: Z = (3X+Y-5) / 2 设X、Y的值存放在字变量VARX、VARY中, 结果放在VARZ中。 开始 计算 3X 计算 3X+Y 计算 3X+Y-5 计算 (3X+Y-5)/2 存结果 结束
MOV AX, DATA MOV DS,AX MOV AX,VARX SRL AX,1 ADD AX,VARX ADD AX,VARY SUB AX,5 SAR AX,1 MOV VARZ,AX RET COMP ENDP CODE ENDS END COMP
; 初始化DS ;(AX) ⇐X ;(AX) ⇐2X ;(AX) ⇐3X ;(AX) ⇐3X+Y ;(AX) ⇐3X+Y-5 ;(AX) ⇐(3X+Y-5)/2 ;存结果 ;返回DOS
BEGIN CODE DATA STACK1 STACK1 CODE
BEGIN:
SEGMENT ENDS SEGMENT PARA STACK DW 20H DUP(0) ENDS SEGMENT MOV AX,DATA MOV DS,AX
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计实验报告
学院:计算机科学与技术学院专业:计算机科学与技术班级:计科131
MOV AX,WORD PTR N1
MOV DX,WORD PTR N1+2
MOV CX,WORD PTR N2
MOV BX,WORD PTR N2+2
ADD AX,CX
ADC DX,BX
MOV WORD PTR N3,AX
MOV WORD PTR N3+2,DX
MOV AH,4CH
INT 21H
CODE ENDS
END START
使用相应的文本编辑器建立文件two.asm,内容如上所示。
二. 生成可执行文件:
1.汇编:
C:\masm> masm two;
2.连接:
C:\masm> link two;
三.运行及调试:
1. 运行:
C:\masm>debug two.exe
-U0 ;通过反汇编查找程序的断点
-T=0 2 ;加载数据段
-D0 ;查看原始数据是否正确
-G=0 1F ;运行程序至断点1F 处
-D0 ;查看程序运行结果
2.调试:
若要判断此程序对于其它32 位数相加是否正确,则需要使用DEBUG 进行程序调试。
实验二:编程实现:将从2000H 单元开始的连续128 个单元的内容进行清零
一. 编程
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START:
MOV BX,2000H
MOV CX,128
MOV AL,00H
L1:
MOV [BX],AL
INC BX
LOOP L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
二.使用编辑器建立源程序文件four.asm。
三.生成可执行文件:
1.汇编:
C:\masm> masm four;
2.连接:
C:\masm> link four;
四.运行及调试:
1. 运行:
C:\masm>debug four.exe
-D2000;
-R;
-D CS:2000;
-G;
-D2000;
实验三:编程实现:将3000H 单元的一个字节的内容进行拆分,高半字节放进3001H 单元的低半部分,其低半字节放进3002H 单元的低半部分
一、编程
源程序:
DATA SEGMENT
N0 DW 3000H
N1 DW 3001H
N2 DW 3002H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV BX,N0
AND BX,0FH
MOV AX,N2
MOV AX,[BX]
MOV BX,N0
MOV CL,4
SHR AX,CL
MOV AX,N1
MOV AX,[BX]
MOV AH,4CH
INT 21H
CODE ENDS
END START
二.使用编辑器建立源程序文件five.asm。
三.生成可执行文件:
1.汇编:
C:\masm> masm five;
2.连接:
C:\masm> link five
四.运行及调试:
1. 运行:
C:\masm>debug five.exe
-D3000;
实验结果实验一:
实验二:从2000H 单元开始的连续128 个单元的内容全部清零
实验三:
实
验总结
通过本次实验,我掌握了如何使用masm,熟练了如何在debug环境中对程序进行调试、运行。
特别要注意的还是用记事本输入源程序时要注意在英文模式下输入,尤其是一些符号,在调试运行之前最好多检查几遍以确保实验的顺利完成。
指
导
教
师
意
见
签名:年月日。