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”部分可以分别输入相应的变量定义和指令。
- 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环境中对程序进行调试、运行。
特别要注意的还是用记事本输入源程序时要注意在英文模式下输入,尤其是一些符号,在调试运行之前最好多检查几遍以确保实验的顺利完成。
指
导
教
师
意
见
签名:年月日。