8086汇编程序设计_基本语法
8086汇编语言

DATA_WORD DW 100, 100H
DATA_BYTE DB 100 DUP (?)
MESS1
DB ‘AB’
MESS2
DW ‘AB’
例: OPER1 DB 1, 2 OPER2 DW 1234H, 5678H … MOV AX, WORD PTR [ OPER1+1] MOV AL, BYTE PTR [OPER2]
伪指令--供汇编过程的20种伪操作。 3、操作数 (1)常数类:
二、八、十、十六进制、科学表示法、字符串等
(2)变量(标号):所有的变量和标号都有三种属性
段值(SEG) 偏移量(OFFSET) 类型(TYPE):变量(BYTE/WORD/DWORD)
标号(NEAR / FAR)
(3)表达式
A、算术操作符: , , ,
AX=3402H AL=34H
OPER1 01 02
OPER2 34 12 78 56
低地址 高地址
三、段定义伪操作
格式: 段名 SEGMENT [定位类型, 组合类型, 类别]
……
段名 ENDS 例:定义用户堆栈
stack segment qqq dw 40H dup (?) stack ends code segment
start: mov ax, data1
mov ds, ax
mov ax, data2
mov es, ax
; 段地址段寄存器
…
code ends
end start
四、程序开始和结束伪操作 ORG 常数表达式 ;使下一地址是常数表达式的值 ORG 100H START: …...
END [程序首地址标号] 五、过程定义 PROC
微机原理8086汇编语言

微机原理8086汇编语言微机原理和8086汇编语言是计算机科学与技术领域中的重要基础知识,对于理解计算机的运行原理和编程开发具有关键作用。
本文将全面介绍微机原理和8086汇编语言的基本概念、功能特点以及应用实践。
一、微机原理概述微机原理是指微型计算机的构成、工作原理、体系结构和外围设备等的基本原理。
微机由中央处理器(CPU)、存储器和输入输出设备等组成,其内部实现了数据的存储和处理,并能够与外部环境进行交互。
微机原理的研究与应用对于计算机硬件的设计和控制至关重要。
二、8086汇编语言介绍8086汇编语言是在微机原理基础上发展起来的一种低级程序设计语言。
它以机器指令的形式直接对CPU发出控制命令,实现数据处理和操作。
8086汇编语言具有直观、高效的特点,可以对计算机内部各种硬件资源进行精细控制,实现复杂的算法和功能。
三、8086汇编语言的基本语法8086汇编语言的基本语法包括指令、寻址方式和操作数等。
指令通常由操作码和操作数组成,用于执行特定的操作。
寻址方式指定操作数在内存中的位置,可以是直接寻址、寄存器间接寻址、立即数寻址等多种方式。
操作数表示要进行操作的数据,可以是寄存器、内存单元或立即数。
四、8086汇编语言的常用指令8086汇编语言提供了丰富的指令集,包括数据传输指令、算术运算指令、逻辑运算指令、条件转移指令、无条件转移指令等。
通过这些指令的组合和调用,可以实现各种复杂的功能和处理需求。
五、8086汇编语言的应用实践8086汇编语言广泛应用于嵌入式系统设计、驱动程序开发、操作系统编程以及性能优化等领域。
在嵌入式领域,汇编语言可以直接操作硬件资源,实现高效的数据处理和控制;在操作系统编程中,汇编语言可以直接访问操作系统内核,实现底层功能的扩展和优化。
六、8086汇编语言的优势与不足8086汇编语言具有高效、灵活的优势,可以直接操作硬件资源和内存,实现高性能的程序。
然而,汇编语言的开发和调试困难,可读性低,维护成本高,对程序员的要求较高。
四章节8086汇编语言程序设计

一、汇编语言程序设计基本步骤 1. 分析问题,确定模型 2. 确定算法 3. 绘制流程图 4. 编写程序 5. 检查和调试
二、汇编语言程序的基本结构
1、顺序结构
举例
完成 x1*x2x3 x1:byte x2:word x3 34bit
2、分支结构
举例
实现
1 x 0
y
0
x0
1 x 0
用查表法确定分支 a、对8种产品进行编号0,1,……7 b、每一个编号对应一个入口地址 proc0,proc1,……proc7 步骤: a、把入口地址放在Table开始的内存单元; b、根据key内容进行查表实现分支转移
3、循环结构
举例
例1、计算y=0+2+4+……+1998 ydxax
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
复制操作符DUP(Duplication)可预置重复的数值 例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、 段定义语句格式:
2)THIS操作符 格式: THIS 类型(或属性)
例:FIRST EQU THIS BYTE SECOND DW 100 DUP (?)
第三章 8086基本语法

(一)通用传送指令
1)最基本的传送指令 格式:MOV dest,src (B/W)
reg reg
sreg sreg
mem mem
data8/data16 功能: dest src 说明:
(1) dest,src类型要一致,不能同时为内 存单元或同为sreg,至少有一个为寄存器, 决定数据位数;
前缀指令指定可用CS、ES、SS)
串操作目的操作数 ES DI
3)寻址方式
对应不同寻址方式,由形式地址计算EA的 方法不同。16位段偏移量可以是8或16位位 移量(Disp8/Disp16)、寄存器值或位移 量加寄存器值。
1)直接寻址
指令直接提供16位EA ( EA= Disp16) 例:设(DS)=2100H,(CS)=1000H, MOV AL,[0158H] 物理地址=(DS)左移4位+Disp=21158H CS:MOV AX,[0158H] 物理地址=(CS)左移4位+Disp=10158H
FAR:段间转移;NEAR:
段内转移(不改变CS值)。
若转移范围在当前指令的-128~+127内,在 操作数前加SHORT。
例2:段间直接转移寻址
JMP FAR PTR START
2)段内寄存器寻址
指令中寄存器内容是转移地址,适用于段 内转移,寄存器可用通用寄存器。
例:JMP BX ;BX IP
2)物理地址的产生
物理地址:单元地址用20位二进制数表 示,CPU与存储器间数据交换用,唯一的。 范围:00000H~FFFFFH
逻辑地址:由段基值和段内偏移量构成, 以16位二进制数表示,编程时用,不唯 一。偏移量范围:0000H~FFFFH
8086汇编语言

8086汇编语言8086汇编语言是一种低级计算机语言,广泛用于基于Intel 8086或8088微处理器架构的计算机系统中。
它是一种面向机器的语言,直接操作计算机硬件和寄存器,提供了对计算机底层功能的精细控制。
本文将介绍8086汇编语言的基本概念、语法和应用。
一、8086汇编语言的概述8086汇编语言是由一系列机器指令组成的,每条指令都对应着特定的操作。
它使用英文助记符表示指令操作,如MOV、ADD、SUB等。
通过组合和使用这些指令,程序员可以编写出完成各种任务的程序。
8086汇编语言基于汇编指令集架构,这意味着汇编语言指令与机器指令一一对应。
不同的指令可以执行不同的操作,如数据传输、算术运算、逻辑运算、转移跳转等。
程序员需要根据具体需求选择合适的指令组合和使用方式。
二、8086汇编语言的语法8086汇编语言具有一定的语法规则,以便计算机能够正确解析和执行汇编程序。
下面是一些基本的语法规则:1. 指令和操作数的顺序在大多数8086汇编指令中,指令名称出现在操作数之前。
例如,"MOV AX, BX"是将BX寄存器的值复制到AX寄存器中的指令。
这个顺序有时也被称为“源操作数,目标操作数”。
2. 寄存器和内存的表示8086汇编语言使用通用寄存器来进行数据的处理,如AX、BX、CX、DX等。
这些寄存器分别表示累加器、基址、计数和数据寄存器。
另外,内存地址可以用直接地址或偏移地址来表示。
直接地址使用段地址和偏移地址的组合来表示内存位置,而偏移地址仅表示内存中的偏移量。
在汇编语言中,可以使用方括号"[ ]"表示内存操作数。
3. 伪指令和标号伪指令是汇编程序中不直接对应机器指令的指令,它们只在编译器处理过程中起作用。
伪指令用于定义常数、变量、宏、程序段等。
标号是一种用于标识程序位置的符号,通常用冒号":"表示。
每个标号在程序中应该是唯一的,并且可以被其他指令或转移指令引用。
第6章8086汇编语言程序设计

2、语句的格式 指令语句的格式: [ 标号 :] 指令助记符 [ 操作数1] [,操作数2 ] [;注释 ]
伪指令语句的格式: [ 名字] 伪指令定义 [ 参数1,…,参数n ] [;注释 ]
6.1.2 数值表达式
1、常量 (1)数值常量:MOV AX,1F00h (2)字符常量:MOV AL,’a’ MOV CX,[ BX+20 ] CMP BX,’ab’
例如,使喇叭发出“嘟”声的程序: MOV DL,07 MOV AH,2 INT 21H 4.3.2 基本的 I/O 功能调用 1、带回显的键盘输入---- 1 号调用 功 能:从标准的输入设备(键盘)读一个字符,并在标准的 输出设备(显示器)上显示出来。 入口参数:(无) 出口参数:AL = 输入字符的 ASCII 码值。 说 明:如果读到的字符为 Ctrl +C 和 Ctrl + Break 则结束程序。 *注,该功能每次只能从键盘上读取一个字符(ASCII 码)
2、数值表达式 (1)算术运算 MOV AX,100*4+7 (2)关系运算 MOV AX,1234 GT 1024 等效:MOV AX,0FFFFh 关系运算符有:GT—大于、LT—小于、NE—等于 EQ—等于、LE—小于等于、GE—大于等于 在关系运算时,关系成立返回值 FFFF ,否则返回 0 。 (3)逻辑运算 MOV AX,1024 AND 0FFh AND BX,3 AND 47h
6.3.1 汇编语言段的定义 1、段的定义 格式: 段名 SEGMENT [定位类型] [组合类型][‘别名’] (段的内容:如数据段定义数据,代码段书写 代码等) 段名 其中: (1)定位类型:指段起始地址值的要求,有如下关键字: PARA(默认):低 4 位为0 ; WORD:最低位为 0 BYTE:无要求 ; PAGE:低L = 输出字符的 ASCII 码值。 出口参数: (无) 说 明:如果读到的字符为 Ctrl +C 和 Ctrl + Break 则结束程序。
第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)上机调试、修改
• • • • • • • •
8086汇编基本语法

一、汇编语言概述汇编语言是一种面向机器的程序设计语言,与机器硬件密切相关,具有自己独特的编程优势和专门的应用领域。
汇编语言程序运行速度快、占用资源少,可以充分利用硬件资源,设计完成任意功能的程序。
但学习、编程较难,编程效率低,兼容性差。
因此,主要用于系统软件和控制软件的设计。
远不如高级语言应用广泛。
1. 汇编语言程序的执行步骤第一步:使用一种文本编辑软件编写汇编语言源程序,保存为文本文件。
第二步:使用系统软件“汇编程序”将汇编语言源程序汇编成目标程序,目标程序即为机器语言程序。
在汇编的过程中,汇编程序会发现程序中的语法错误,并指出在哪一行,是什么类型的错误。
如没有错误,汇编成功,但这时程序还不能执行。
注:机器语言程序即为二进制程序,所有高级语言和汇编语言都需要最后转换成二进制程序才能够被计算机系统执行。
第三步:使用系统软件“链接程序”将目标程序连接、装配形成可执行程序,在该链接过程中排查错误通过后,即可装入主存运行。
二、汇编语言的语句类型和格式2.1 汇编语言语句的类型:◆指令语句:包含在指令集中,每一个语句汇编后产生一组二进制数目标代码,可被CPU执行。
◆伪指令语句:汇编后不产生目标代码,用于定义段、子程序、常量、变量,以及给变量分配存储单元。
◆宏指令语句:用户定义的一个指令序列集合,汇编后在引用的地方展开成相应的指令序列。
用于提高编程效率2.2 汇编语言语句的格式汇编语言程序中每个语句可以由4项组成,格式如下:指令中的各项要用分隔符分开,名字项是标号时后面要有冒号作为分隔开,为增加查询可读性,对指令做解释时,要将指令和解释内容用分号分隔开,操作数之间用逗号分开,其他用空格分开。
(1) 名字项:用来标识段名、子程序名、宏指令名、标号、变量名和常量名等。
1.可用符号包括数字、字母和特殊符号“?”、“$”、“@”、“_”;2.数字不能作为名字(变量或标号)的第一个符号;3.名字长度不能超过31个字符;4.汇编语言中有特定含义的保留字,如操作码、寄存器名等,不能作为名字使用;5.汇编语言不区分字母的大小写。
8086汇编语言程序设计

② 在代码段结束之前(即CODE ENDS之前)增加两句:
MOV AH,4CH
INT 21H
;4CH号的DOS系统功能调用
2020/5/12
4.1.2 8086汇编语言的语句
源程序是一个语句序列,每条语句规定一个基本操作,语句 序列完成某个特定的操作任务。
一、语句的种类与格式 1. 语句的种类
(1)指令语句 ____可执行语句,对应CPU指令系统规定的一条指令。
almovaxmovax48natoguniversitynatoguniversity祈通中西祈通中西力求精进力求精进50作为运算符时是在程序汇编时由汇编程序计算的计算结果充是在程序汇编时由汇编程序计算的计算结果充当指令的某一个操作数或构成操作数的部分当指令的某一个操作数或构成操作数的部分作为指令助记符时是在程序运行时被执行操作对象可以是是在程序运行时被执行操作对象可以是寄存器或存储器操作数
2020/5/12
二、源程序与PC DOS的接口
汇编语言源程序(.ASM)经过汇编转变为目标程序(.OBJ), 当用链接程序对其进行链接和定位时,操作系统为每个用户程序 建立:
① 一个256字节的程序段前缀区 (PSP),存放用户程序信息。
在PSP的开始处(偏移地址0000H) 安排一条INT 20H 软中断指令。 INT 20H功能是使系统返回到DOS管 理状态。因此,用户执行程序完后, 必须能够转到PSP起始处执行INT 20H指令。
本章将首先介绍8086宏汇编语言的基本语法及常用伪 指令,然后用实例说明8086宏汇编语言源程序的设计 方法。
2020/5/12
1. 3种语言
机器语言:当指令和数据都用二进制代码表示时,
计算机能够直接识别与执行,因而称
第5章_8086_汇编语言程序设计

使用目标程序汇编软件 MASM.EXE 产生目标程序文件 如: *.OBJ
• 执行程序的连接
使用执行程序连接软件 LINK.EXE 产生执行程序文件 如: *.EXE
14
汇编源程序实例(一)
Shanghai Jiao Tong University
在具体讨论8086 汇编语言的繁琐语法规则之前,先举一 个具有完整段定义格式的汇编源程序(即MASM程序)实例, 以便对汇编语言的有关规定和格式有个初步了解。 例:求从1开始连续50个奇数之和,并将结果存放在名字 为SUM的字存储单元中。
15
汇编源程序实例(二)
Shanghai Jiao Tong University
DATA SUM DATA CODE ASSUME START:
SEGMENT DW ENDS SEGMENT DS:DATA,CS:CODE MOV AX, DATA MOV DS, AX 0
;定义数据段,DATA为段名 ;由符号(叫变量名)SUM指定 ;的内存单元类型定义为一个 ;字,初值为0 ;数据段结束
18
汇编源程序实例(五)
Shanghai Jiao Tong University
提示
每一行只有一条语句,且不能超过128个字符(从MASM 6.0开始可以是512个字符),但一条语句允许有后续行, 最后均以回车作结束。 整个源程序须以END语句结束,通知汇编程序停止汇编。 END后面的标号START表示该程序执行时的起始地址。 每一条汇编语句最多由4个字段组成,均按照一定规则分 别写在一个语句的4个区域内,各区域之间用空格或制表 符(TAB键)隔开。
由于汇编语言本身的特点,本章将选择目前国内广泛使 用的IBM PC机作为基础机型,着重讨论8086汇编语言的 基本语法规则和程序设计的基本方法,以掌握一般汇编 语言程序设计的初步技术。
8086汇编语言程序设计的基本方法

8086汇编语言程序设计的基本方法8086汇编语言程序设计是一种低级编程语言,广泛应用于计算机系统的底层硬件控制与操作。
其基本方法包括程序结构设计、数据传输与处理、条件和循环控制以及输入输出等方面。
下面将对这些基本方法进行详细描述,以便更好地理解8086汇编语言程序设计。
1.程序结构设计:在8086汇编语言程序的设计中,程序结构是基本的骨架。
程序的结构应根据具体应用的需求来设计,一般包括程序的初始化、主程序(或主循环)、子程序(过程或函数)以及程序的结束等部分。
通过嵌套使用循环和条件控制语句,可以灵活地控制程序的流程,实现复杂的逻辑功能。
2.数据传输与处理:8086汇编语言提供了多种数据传输和处理指令,用于在寄存器和内存之间传输数据,以及对数据进行各种运算和处理。
常用的数据传输指令包括MOV(将数据从一个位置复制到另一个位置)、LEA(加载有效地址)、PUSH(将数据压入栈中)以及POP(将数据从栈中弹出)等。
数据处理的指令包括运算指令(如ADD、SUB、MUL、DIV等)和逻辑指令(AND、OR、NOT、XOR等),可以对数据进行加减乘除、位运算以及逻辑运算等操作。
3.条件和循环控制:条件和循环控制是在程序中实现有选择地执行一些代码块或多次执行一些代码块的关键部分。
8086汇编语言提供了多种条件和循环控制指令,如CMP(比较操作数)、JE(等于则跳转)、JNE(不等于则跳转)、JG(大于则跳转)、JL(小于则跳转)等。
通过这些指令的灵活运用,可以实现条件判断和循环控制的功能,从而实现复杂的逻辑操作。
4.输入输出:在8086汇编语言程序设计中,输入输出是与外部设备进行交互的重要环节。
输入输出可以通过中断机制来实现,其中INT21H是最常用的中断类型,可用于键盘输入、屏幕输出、磁盘文件读写等。
通过相应的系统调用,可以从用户获取输入数据,并将结果输出到屏幕或其他设备上。
此外,还可以使用IN和OUT指令直接与输入输出端口进行数据传输,实现与设备的硬件交互。
8086汇编语言程序设计

8086汇编语言程序设计
(1)汇编语言介绍
汇编语言(简称汇编)是一种低级语言,它能够与计算机硬件的指令
指令很好地接轨,是一种可靠的,有效的,灵活的编程语言。
主要用于编
写微型机,微处理器,单片机及PC机的程序。
汇编器是汇编语言的翻译器,它将高级语言(如C、C++等)翻译为机器语言指令,以达到执行程
序源代码的目的。
汇编语言程序设计(Assembly Language Programming)是以汇编语
言编写程序以满足特定应用的过程。
它主要用于写微机、微处理器等的控
制程序和系统程序,具有立即计算,快速反应,低耗能,成本低廉的优点。
(2)汇编语言编程
汇编语言编程主要是为了让CPU以机器语言运行,编程时可使用指令
集合或者标准指令。
根据指令可以让CPU执行计算机的功能,原理上看,
汇编语言编程是一种字节操作。
汇编程序编程需要使用CPU的指令集,这些指令可以被用来控制CPU
执行。
指令集又可分为实指令集和抽象指令集。
对于不同的CPU,他们的
指令集也是不一样的,因此需要根据CPU的不同选择合适的指令集。
在汇编语言编程中,常见的指令有加法,减法,乘法,除法,移位,
现行,条件转移等等。
汇编第4章 8086汇编语言程序设计

第4章 8086汇编语言程序设计
(1)数值常量(续)
十六进制常量表示为以字母H(或h)结尾 的由数字0~9、字母A~F(或a~f)组成 的序列,例如,653AH。 十进制常量表示为以字母D(或d)结尾的 由数字0~9组成的序列。汇编语句中的数 据默认采用十进制表示形式,所以,采用 十进制数时,也可省略结尾的字母。例如 ,101D或100。
第4章 8086汇编语言程序设计
1.常量(续)
(2)字符常量 字符常量是用单引号括起来的单个字符, 如'a'、'1'等。字符常量在操作中体现出 的值是其ASCII码值。
第4章 8086汇编语言程序设计
1.常量(续)
(3)符号常量 符号常量是用名字来标识的常量。以符号 常量代替常量,可以增加程序的可读性及 通用性。
[操作数] [;注释]
第4章 8086汇编语言程序设计
4.汇编语句格式说明
(1)关于格式的几个组成部分 汇编语句的格式中带中括号的部分是可选项。 各部分之间必须用空格(SPACE)或水平制表符 (TAB)隔开。 操作数项由一个或多个表达式组成,它为执行语 句所要求的操作提供需要的信息。
第4章 8086汇编语言程序设计
第4章 8086汇编语言程序设计
伪指令语句的格式为:
[符号名]
伪指令助记符
[操作数] [;注释]
第4章 8086汇编语言程序设计
3.宏指令语句
宏是一个以宏名定义的指令序列。一旦把某程序 段定义成宏,则可以用宏名代替那段程序。在汇 编时,要对宏进行宏展开,即把以宏名表示的地 方替换为该宏对应的指令序列的目标代码。宏指 令可以看成指令语句的扩展,相当于多条指令语 句的集合。 宏指令格式为: [宏名] 宏指令助记符
第4章8086汇编语言程序设计

(2)段属性——定位类型,组合方式,类别 定位类型——定位段的起始地址 BYTE——字节型,段可从任意地址开始 WORD——字型,段从偶数地址开始 PARA——节型(默认),16字节为1节,段起始地址能被16 整除:XXXX0H PAGE——页型,256字节为1页,段起始地址能被256整除: XXX00H 组合方式——不同模块间同名段的连接与组合 NONE——默认为独立段,不组合 PUBLIC——公共段,各公共段连接形成大逻辑段 STACK——堆栈段,各堆栈段连接形成大逻辑段 AT——由表达式值定本段起始地址 类别——类别名用引号括起,相同类别名的段装入连续存储 区
JNL NEXT
JMP MAX STOP:MOV NUM2,AX
;若≥,则转NEXT
;若<,则转MAX ;最大值存入NUM2字单元
MOV AH,4CH
INT 21H CODE ENDS END START
例:编写程序,统计ARRAY字数组中正数、 负数和零的个数,并分别保存在变量 BUF1、BUF2、BUF3中。
例:编写程序,将包含10个字节数据的数组 ARRAY分成正数组ARYP和负数组 ARYM,并统计它们的长度。
DATA SEGMENT ARRAY DB 1,-2,3,-6,5,4,8,34,-67,20 ARYP DB 10 DUP(?) ;正数组 PNUM DB 0 ;正计数 ARYN DB 10 DUP(?) ;负数组 NNUM DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,ARRAY ;ARRAY数组指针 LEA SI,ARYP ;ARYP数组指针 LEA DI,ARYN ;ARYN数组指针 MOV CX,10
8086汇编语言的基本语法

② 宏操作助记符共有8个,分别是MACRO、ENDM、EXITM、LOCAL、REPT、IRPC、IRP、PURGE;
③ 其余同指示性语句。
3. 汇编语言源程序结构
汇编语言源程序是以模块为单位独立汇编的。一个完整的源程序,至少由一个模块组成。
较大的应用程序可由多个模块组成,每个模块具有不同的功能,把这些模块分别汇编成目标代码后,再用连接程序把它们连接成一个可执行程序。
⑤ 操作数可以是一个、两个或没有,由指令类型决定,若有两个操作数,前面为目的操作数,后面为源操作数,中间用逗号隔开;
⑥ 注释是以“;”开始的字符串,不影响程序的汇编与执行,仅用于增加源程序的可读性。
2)指示性语句结构
[名字] 伪指令助记符 [操作数][;注释]
说明:
① 名字可以是符号常量名、变量名、过程名、段名等,名字后面不能有“:”;
指示性语句(也称伪指令语句):知识给汇编程序提供一些控制信息,帮助汇编程序正确汇编指令性语句,在汇编时被执行,没有对应的机器码;
宏指令语句:是指令性语句和指示性语句的复合体,是按照一定规则,根据用户需要定义的新指令;在汇编时被展开,在形成执行文件时执行其展开体。
1)指令性语句结构
一个源程序模块又分成若干个段。
③ 一个标识符的长度可以由1~31个字符组成。
注意点:不能使用系统中已经定义过的符号,如寄存器名、分支条件用标志、助记符、定义等等。
2. 语句类型与结构
有三种类型:
指令性语句:是机器指令的符号表示,经汇编程序汇编后能产生对应的机器指令代码,在形成执行文件时执行;
[标号:][前缀] 指令助记符 [操作数][;注释]
说明:
① 方括号表示的成分可以选用或缺省;
8086汇编语言程序设计的基本方法

– ·STACK 64H
– ·DATA
–
DAT1 DW 0908H
;非压缩十进制数0908H
– ·CODE
– BEGIN: MOV AX,@DATA
–
MOV DS,AX
–
MOV AX,DAT1
;AX←0908H
–
MOV CL,4
;CL ←4
–
SAL AH,CL
;09字节左移4位,AH=90H
–
ROL AX,CL
–
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转换为压缩十进制数。
分支程序结构也称条件结构,通常是在两种或两 个以上的不同的操作中选择其中的一个,如下图所示:
条件 Y N
S1
S2
条件 Y N
S
条件
… S1 S2 Sn
分支是通过条件转移指令来实现的。分支结构有 一个共同点:运行方向总是向前的。IP受标志位的影 响而跳变,影响标志的指令CMP、TEST、JXX
第5章 汇编语言程序设计
– X DB ?
– Y DB ?
– DATA ENDS
– CODE SEGMENT ;代码段
– START:PROC FAR
– ASSUME CS:CODE,DS:DATA
4-9汇编语言基本语法规则

8086汇编语言程序基本结构DATA SEGMENTBUF1 DB 34HBUF2 DB 2AHSUM DB ? DATA ENDS CODE SEGMENTASSUME CS:CODE, DS:DATA SS:SSEG START: MOV AX, DATAMOV DS, AXMOV AL, BUF1ADD AL, BUF2MOV SUM, ALMOV AH, 4CHINT 21HCODE ENDSEND STARTSSEG SEGMENT STACKDB 512 DUP(0) SSEG ENDS8086⏹SEGMENT ENDS代码段堆栈段数据段附加段4⏹128⏹☐⏹☐⏹☐指令助记符⏹☐☐☐☐☐指示性语句⏹格式☐[名字]伪操作命令[操作数表][;注释]X1 DB 40H,50H ;在内存中定义两个字节数据X2 DW 100,300,500 ;在内存中定义两个字数据⏹98⏹⏹⏹☐⏹☐☐☐表达式为常数、寄存器名、标号/变量与运算符的组合例如:12*160+36*2A+BBX+2BX+SIA[2]+5运算符⏹算术运算符(+、-、×、/、MOD)⏹逻辑运算符(AND、OR、XOR、NOT)⏹关系运算符(EQ、NE、LT、GT、LE、GE)⏹数值返回运算符(SEG、OFFSET、TYPE、LENGTH、SIZE)⏹属性运算符(PTR、SHORT、THIS、HIGH、LOW)注意运算符和指令的区别ADD AX, 3+217/5VAL AND 01H DAT GT 0CH DAT LE 0CH数值返回运算符运算符作用对象功能地址回送SEG标号或变量返回其所在段的段基址值OFFSET标号或变量返回其相对段基址的偏移量符号特征回送TYPE标号或变量返回用数字表示的类型属性LENGTH变量若变量用DUP定义,则返回定义元素个数,否则返回1 SIZE变量返回用DUP定义的存储空间(LENGTH*TYPE之积)TYPE对象种类TYPE对象类型TYPE运算结果变量DB/DW/DD/DQ/DT1/2/4/8/10标号NEAR/FAR-1/-2数值返回运算符DSEG SEGMENT NUM1 DB 10 DUP(10NUM2 DW 20 DUP(0, 4 DUP(2))NUM3 DB 10H, 5 DUP(?)NUM4 DB ‘STRING’DSEG ENDS MOV AH, TYPE NUM2 ;2→AHMOV BH, LENGTH NUM2 ;20→BH(指最外层参数)MOV AL, LENGTH NUM3 ;1→AL(指第一个参数)MOV CL, SIZE NUM2 ;20*2→CL MOV CH, SIZE NUM4 ;1*1→CH MOV AX, SEG NUM1 ;等价于AX←(DS)MOV BX, SEG NUM2 ;AX 与BX 值相同MOV SI, OFFSET NUM1 ;NUM1相对于段的偏移量→SI MOV DI, OFFSET NUM2 ;等价于LEA DI, NUM2属性运算符DATA1 DB 10H, 20H, 30HDATA2 DW 0123HDATA3 DW 2345H……MOV AX, WORD PTR DATA1 ;(AX)←2010HMOV BL, BYTE PTR DATA2 ;(BL)←23HMOV BYTE PTR[SI], 60H;字节传送SUB WORD PTR[BX], 36H ;字数据相减JMP FAR PTR SUB_P1 ;段间直接转移JMP WORD PTR[BX] ;段内间接转移MOV AH, HIGH DATA3;等价于MOV AH,23HMOV AL, LOW DATA3;等价于MOV AL, 45H运算符优先级优先级运算符类别1()、[]、LENGTH、SIZE数值回送运算符2OFFSET、SEG、TYPE、PTR属性和数值回送运算符3*、/、MOD算术运算符4+、-算术运算符5EQ、NE、LT、GT、LE、GE关系运算符6NOT逻辑运算符7AND逻辑运算符8OR、XOR逻辑运算符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• MASM源程序的书写格式 – 完整段定义的格式 VS 简化段定义的格式
汇编语言的基本语法
• • • • • 汇编语言程序的格式 常量、标识符和表达式 指示性语句 指令性语句 宏指令
示例程序
DATA SEGMENT NUM DW 0011101000000111B NOTES DB ‘The result is :’,’$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA BEGIN: MOV AX, DATA MOV DS, AX MOV DX, OFFSET NOTES MOV AH, 9H INT 21H; 显示字符串 MOV BX, NUM MOV CH, 4 ROTATE : MOV CL, 4 ROL BX, CL MOV AL, BL AND AL, 0FH ADD AL, 30H CMP AL, ’9’ JLE DISPLAY ADD AL, 07H DISPLAY: MOV DL, AL MOV AH, 2 INT 21H; 显示一个字符 DEC CH JNZ ROTATE MOV AX, 4C00H INT 21H;终止并退出 CODE ENDS END BEGIN
• 优点 – 可充分利用机器的硬件功能和结构特点,加快程序的 执行速度,减少目标程序所占用的存储空间。 – 常用来编写实时控制程序、实时通信程序,有时也用 来编制某些系统软件程序。 缺点 – 编程效率低(与人们描述计算过程的需要差距大)。 – 与机器硬件的具体结构联系过于紧密。 在一种结构的机器上开发的程序极难移植到另一种 不同结构的机器上去。
汇编语言程序的格式
Data SEGMENT -------Data ENDS STACK SEGMENT STACK -------STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: -------mov AL, 30H; -------CODE ENDS END START
指示性语句
• 程序开始和结束 – NAME,TITLE,END等。
• 段定义
• 过程定义
• 数据定义
• 符号定义 • 名字和变量 • 地址计数器和偏移地址定位
定义程序开始和结束的伪指令
• NAME伪指令 – 主要作用:在程序的开始可以用NAME定义模块的名字。 – 格式: NAME MODULE_NAME – 汇编后,MODULE_NAME就成为模块的名字。 • TITLE伪指令 – 主要作用:指定列表文件的每一页上打印的标题。 – 格式: TITLE TEXT – 如果程序中没有使用NAME伪指令,也可使用TITLE伪指 令指定模块名。汇编程序将用TEXT中的前6个字符作为模 块名。TEXT最多可有60个字符。
MOV BX, DA MOD 10 MOV CX, DA/25
MOV DH, 01100100B SHR 2 MOV DH, 19H MOV AL, DA LT 120 MOV AL, DA GT 120
MOV AL, 0FFH
MOV AL, 00H
汇编语言的基本语法
• • • • • 汇编语言程序的格式 常量、标识符和表达式 指示性语句 指令性语句 宏指令
(部分)
.map文件
• 地址分配文件(.map)用于描述文件中各段的浮动起始地 址、结束地址、占用空间、段名和‘类别’,还列出了各 模块中所定义的公共符号及其偏移地址,主要用于程序调 试和资料归档。
调试程序
DEBUG PROG.EXE – u (反汇编) – g =起始地址 断点地址 – t = 地址 指令条数 –r –d – ……
汇编语言程序的开发过程
编辑程序 Edit.exe Prog.obj 文件 Prog.asm 文件 Asm.exe 汇编程序 或Masm.exe
Prog.exe 文件
连接程序 Link.exe
编译过程的目的
1. 检查源程序,测出源程序中的语法错误,并给出 出错信息; 2. 展开宏指令。 3. 产生目标文件(.OBJ)。 • 同时,也可给出: 列表文件(同时列出汇编语言源程序和机器语 言目标程序的文件,称之为.LST文件); 交叉索引文件(列出程序中使用的符号、变量 和标号以及引用情况,称之为.CRF文件 或.SBR文件)。
• 段名:通常段名确定了段的首地址,整个逻辑段存放在首地 址开始的一片连续存储单元中。 • 源程序在进行汇编连接时,系统分配给段一个段基值,设为 2000H。这时段名STACK就可以作为段基值2000H被引用。
段定义-定位类型
• 定位类型:说明段的起始地址应有怎样的边界值,取值为: ① PARA:指定段的起始地址必须从节的边界开始,即段 起始地址最低4位必须为0。这样,偏移地址可从0开始。 MASM把1M字节存储空间从0开始,每16个存储单 元叫一节。 ② BYTE:该段可以从任何地址开始。这样,段起始地址 的偏移地址可能不是0。 ③ WORD:该段必须从字的边界开始,即段起始地址必 须为偶数(形如xxxx xxxx xxxx xxxx xxx0B)。 ④ PAGE:该段必须从页的边界开始,即段起始地址的最 低两个十六进制数位必须为0(该地址能被256整除)。 定位类型的默认项是PARA。
8086汇编程序设计
汇编语言的基本语法
Assemble Language
• 汇编语言是机器语言的符号化描述。 – 一种面向机器的程序设计语言,通常是为特定计 算机或计算机系列专门设计的。 • 利用机器指令的助记符、符号地址和标号来编写程 序。 – 基本语句是机器指令系统中的指令。
汇编语言程序设计的优点和缺点
汇编语言程序的格式
• 两大特点: – 分段结构 – 语句行 • 指令性语句 • 指示性语句
指令性语句和指示性语句
1. 指令性语句 – 指令语句即由8086/8088提供的指令形成的语 句,它能够被翻译成机器代码,并完成一定操 作功能。 – 格式:【标号:】操作码 【操作数】【;注释】 • 例、 – LOP: ADD AL, [BX] ;把AL和[BX]相加
.LIB
LINK /m *.obj • 汇编之后生成的OBJ文件必须经过链接过程,才能成为扩 展名.EXE的可执行文件。 • 链接的过程就是调用连接程序(LINK.EXE),对OBJ文件 进行定位、链接,最后生成扩展名为EXE的可执行文件。 如果需要,也可生成MAP文件。
.lst文件
• 汇编表(源程序、目标代码、地址、错误信息) • 段(组)表:源程序中各段的名字、大小及其特征。 • 符号表:定义或引用的全部标号、变量、符号的属性值及其 特征等。
常量
• 数字常量 – 1001B ,1037Q ,166D(或166),6AH • 字符常量 – 字符:‘A’, – 字符串:’abcd’ • 符号常量 – COM_REG EQU 26H – COMREG=62H
• MOV AX, COMREG等价于MOV AX, 62H
标识符
• 标识符是程序员在编程时建立的有特定意义的字符序列, 可以用作常量名、变量名 、标号、名字(如过程名)等。 1. 组成标识符的字符:英文字母(A~Z,a~z),数字 (0~9),特殊符号(?,@,_,$)等组成。 2. 数字不能作为名字的第一个符号。 3. 单独的问号(?)不能作为标识符。 4. 一个名字的最大有效长度为31,超过31的部分将不再被识 别。 5. 不能用保留字,保留字包括指令和命令的助记符。 • 如AX,MOV,SEGMENT等。
关于MASM
• MASM:Microsoft Macro Assembler • MASM的版本 – 5.0及其以前:MS-DOS;5.x~6.0:MS-DOS和OS/2 – 6.1x:Windows,MASM 与 LINK 整合为 ML。
• MASM.EXE和LINK.EXE,ML.EXE,ML64.EXE
• 程序开始结束 • 段定义
– 段定义:SEGMENT...ENDS
– 段分配:ASSUME
• 过程定义
• 数据定义 • 符号定义 • 名字和变量 • 地址计数器和偏移地址定位
段定义
段名 SEGMENT [定位类型][组合类型][‘类别’] ---------; 段名 ENDS STACK STA TOP STACK SEGMENT PARA STACK ‘STACK’ DB 50 DUP (?) EQU LENGTH STA ENDS
表达式
• 表达式由操作数和运算符组成。 – 操作数:常量、变量、标号等。
– 运算符: • 算术、逻辑、关系 • 分析运算符:返回变量、标号等的属性。 –offset、seg、type、length、size。 • 合成运算符:修改变量、标号的属性。 –PTR等。
表达式中的运算符
1. 括号中的项,即(…)和[…]。 优 先 级 从 高 到 低 2. LENGTH,SIZE,WIDTH,MASK 3. PTR,OFFSET,SEG,TYPE,THIS
指令性语句和指示性语句
2. 指示性语句 – 也叫伪指令语句,它只是为汇编程序在翻译汇 编语言源程序时提供有关信息,并不翻译成机 器代码。 – 伪指令没有对应的机器指令。 – 格式:【名字/变量】 命令 参数【;注释】 • 例、 – DATA SEGMENT AT 2000H
汇编语言的基本语法
• • • • • 汇编语言程序的格式 常量、标识符和表达式 指示性语句 指令性语句 宏指令
• 表示源程序结束的伪指令的格式为: END [LABEL] – 标号LABEL指示程序开始执行的起始地址。 – 如果多个程序模块相连接,则只有主程序要使用 标号,其他子程序模块则只用END而不必指定标 号。 • 注意:汇编程序将在遇END时结束汇编,而程序则 将从主模块的第一个标号处开始执行。
指示性语句