09 第四章1 伪指令与顺序结构
单片机伪指令详解

伪指令依照其用途可分为五类:定义类、存储类、存储定义类、条件类及汇编方式类。
它们的具体分类及用途详见伪指令的类别一览类别a定义类用于对以下内容进行定义的伪指令:1.程序;2.程序中所用数据的性质、范围或结构;3.宏或结构4.程序5.其它1CODE、DATA、TEXT2IRAM、ISRAM、ORAM、OSRAM、RAM、SRAM3MACRO、MACEXIT、ENDM4PROC、ENDP、STRUCT、ENDS;5.DEFINE、VAR、PUBLIC、EXTERNAL、EQU、VDEFb存储类以指定的数据类型存储数据或设定程序地址等DW、DD、FLOAT、DOUBLE、ENDc存储定义类定义若干指定数据类型的数据存储单元DUPd条件类对汇编指令进行条件汇编IF、ELSE、ENDIF;IFMA、IFDEF、IFNDEFe汇编方式类包含汇编文件或创建用户定义段INCLUDE;SECTION详解:定义类伪指令DEFINE【类别】定义类【功能描述】定义常量符号【语法格式】.DEFINE variable[value][,…]【应用解释】给常量符号所赋之值既可是一已定义过的常量符号,亦可是一表达式。
切忌符号超前引用,即如果赋值引用的符号不是在引用前定义的,则会出现“非法超前引用”的错误。
【举例】.DEFINE BODY1;.DEFINE IO_PORT0x7016;.IFDEF BODY;R1=0xFFFF;[IO_PORT]=R1;.ENDIFPUBLIC【类别】定义类【功能描述】声明将被引用在其它文件中的全局标号【语法格式】.PUBLIC label[,label][,…]【应用解释】本伪指令用来在文件中声明将被引用在外部文件中的全局标号。
故在外部文件中用伪指令EXTERNAL所声明的标号必须是用PUBLIC伪指令声明过的。
类似地,当要声明多个全局标号时,要用逗号(,)将每一标号分开。
【举例】.PUBLIC sym1//声明要引用在其它文件中的全局标号.PUBLIC sym1,sym2//声明多个全局标号需用逗号将每一标号分开,空格会被忽略。
汇编语言伪指令

汇编语言伪指令汇编语言作为一种低级编程语言,广泛应用于嵌入式系统、驱动程序开发和操作系统内核等领域。
在进行汇编语言编程时,我们常常会使用到一些伪指令。
本文将介绍一些常见的汇编语言伪指令及其用法。
1. 数据定义伪指令数据定义伪指令用于声明并初始化数据。
在汇编语言中,我们可以使用以下伪指令来定义不同类型的数据:1.1 DB(Define Byte):用于定义一个字节的数据。
例如:DB 10 ;定义一个字节的数据,值为101.2 DW(Define Word):用于定义一个字的数据。
例如:DW 100 ;定义一个字的数据,值为1001.3 DD(Define Doubleword):用于定义一个双字的数据。
例如:DD 1000 ;定义一个双字的数据,值为10001.4 DQ(Define Quadword):用于定义一个四字的数据。
例如:DQ 10000 ;定义一个四字的数据,值为100001.5 DT(Define Ten Bytes):用于定义一个十个字节的数据。
例如:DT 1234567890 ;定义一个十个字节的数据,值为12345678902. 代码段和数据段伪指令在汇编语言中,我们通常需要将代码和数据分开存放,以便于管理和执行。
以下是一些常用的代码段和数据段伪指令:2.1 CODE SEGMENT:用于定义代码段。
例如:CODE SEGMENT;代码段内容CODE ENDS2.2 DATA SEGMENT:用于定义数据段。
例如:DATA SEGMENT;数据段内容DATA ENDS2.3 STACK SEGMENT:用于定义堆栈段。
例如:STACK SEGMENT;堆栈段内容STACK ENDS3. 控制指令伪指令控制指令伪指令用于控制程序的执行流程。
以下是一些常见的控制指令伪指令:3.1 IF-ELSE-ENDIF:用于条件判断。
例如:IF 条件;条件为真时执行的代码ELSE;条件为假时执行的代码ENDIF3.2 REPEAT-UNTIL:用于循环执行一段代码直至满足条件。
汇编语言程序设计1(汇编语言源程序的结构、语句格式、伪指令)

PTR
Hello
有三个属性:
DB 06H,45H,44H
段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR:(SHORT ?) NEAR—表示标号所在语句与转移指令/调用指令在 同一码段内,跳转时只需改变IP即可。 FAR —标号所在语句与转移指令/调用指令不在同 一代码段内。跳转时需改变CS和IP即可。 若没有对类型进行说明,默认为NEAR。 标号通常作为转移指令或CALL指令的转移地址。
逻辑运算符只能用于数字表达式中。 例: MOV CL,36H AND 0FH 经汇编后:MOV CL,06H
注意: 不要把逻辑运算符与逻辑运算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与 AND AX, 3F00H等价。
25
3)关系运算符——EQ、NE、LT、GT、LE、GE
代码段
9ቤተ መጻሕፍቲ ባይዱ
分段结构
0000:0~3FF
环境与代码运行
中断向量区 (系统专用) 堆栈段
SS:SP 栈底 最多4 个活 动段 DS
ES
数据段
CS:IP
代码段
FFFF:0
系统起始运行程序
10
4.1.2 汇编语言的语句与格式
汇编语言的语句有两种:
指令性语句——由8086指令助记符(真指令)构成 的语句 指示性语句——由伪指令构成的语句
操作数可能放在存储器中,这就涉及操作数的地址。 程序中遇到转移指令或调用指令,也需要知道转移地址, 若采用具体地址就很不方便,一旦有错,改动也很麻烦。 于是人们采用标号或符号来代替地址,例:
单片机学习第四章汇编语言程序设计

ORG START:CLR
MOV SUBB JC MOV XCH MOV NEXT: NOP SJMP END
1000H C A,60H A,61H NEXT A,60H A, 61H 60H,A
$
;0→CY
;做减法比较两数 ;若(60H)小,则转移
;交换两数
整理课件
【例4.6】将R2中的一位十六进制数转换为 ASCII码,结果仍存放于R2中。
MOV R0, #0 SJMP NEXT4 NEXT2:MOV R0,A DEC R0 NEXT4:MOV 31H,R0 SJMP $ END
;取X ;与5比较
;X<5,则转NEXT2 ; ;设10<X,Y=X十1
;与1l比较 ;x>10,则转NEXT4
;5≤X≤10,Y=0
;X<5,Y=X-1 ;存结果
MOV
@R0,A
;保存结果
SJMP $
;原地踏步
END
整理课件
【例4.2】假设两个双字节无符号数,分别存 放在R1R0和R3R2中,高字节在前,低字 节在后。编程使两数相加,用R2R1R0存放 和。 对多字节的加法,存在最高位的进位问题。 如果最高位有进位,则和的字节数要比加 数或被加数的字节数多一个。
经常用于定义一个地址表。Yi为双字节数据, 它可以为十进制或十六进制的数,也可以 为一个表达式。高位数在前,低位数在后。
整理课件
• 例如: ORG 1000H DATA:DW 3241H,1234H,78H 上述程序将对从1000H单元开始的6个单元 赋值,赋值情况如何呢? (1000H)=32H,(1001H)=41H, (1002H)=12H,(1003H)=34H, (1004H)=00H,(1005H)=78H。
指令、伪指令、伪操作的概念及其作用。

指令、伪指令、伪操作的概念及其作用。
指令、伪指令和伪操作是计算机中常见的概念,它们在计算机系统中起着重要的作用。
本文将分别介绍这三类概念,并探讨它们在计算机系统中的作用。
指令是计算机程序中的基本操作单位,用于告诉计算机要执行的操作。
指令通常由操作码和操作数两部分组成,操作码表示要执行的操作类型,操作数表示该操作所需的数据。
指令可以是计算机硬件所支持的真正的操作,也可以是一些高级语言编译成的机器码。
指令在计算机系统中起着至关重要的作用,它们决定了程序的执行流程和计算结果。
计算机通过执行指令来完成各种任务,包括数据处理、运算、存储等。
伪指令是一种不是真正被计算机执行的指令。
它们通常是由汇编语言编写的,用于在程序的编译或汇编过程中指示编译器或汇编器执行一些特定的操作。
伪指令不是计算机硬件所支持的真正的操作,而是一些在编译或汇编过程中产生的辅助指令。
它们可以是一些声明、调用、分支等指令,用于指示程序的结构和执行流程。
伪指令在编译和汇编过程中扮演着重要的角色,它们可以帮助程序员控制程序的编译和执行过程,提高程序的效率和可维护性。
伪操作是一种在程序编译或汇编过程中执行的操作,它们通常是由汇编器或编译器实现的一些特定功能。
伪操作也是一种在程序编译过程中产生的辅助操作,它们可以用来定义一些数据、常量、符号等内容,或者执行一些初始化、分配内存等操作。
伪操作在程序编译和汇编过程中起着非常重要的作用,它们可以帮助程序员更好地管理程序的数据和符号,提高程序的可读性和可维护性。
指令、伪指令和伪操作在计算机系统中有着不同的作用和重要性。
指令是计算机程序中的基本操作单位,决定了程序的执行流程和计算结果,是程序的核心部分。
伪指令和伪操作则是在程序编译和汇编过程中起着辅助作用,帮助程序员控制程序的结构和执行流程,提高程序的效率和可维护性。
三者在计算机系统中相互配合,共同构成了程序的编译和执行过程。
指令、伪指令和伪操作的作用可以从以下几个方面来分析:首先,指令是计算机程序的基本操作单位,它决定了程序的执行流程和计算结果。
第4章(伪指令)

为第二操作数使用的,而ARM对数字常量的第二操作数有诸多
限制(必须为移位后构成的数),给寄存器加载一个任意数往往不 能使用一条指令实现,而使用伪操作LDR则可以解决此类问题。
第4章 嵌入式式程序设计基础
第4章 嵌入式程序设计基础 ·举例
第4章 嵌入式程序设计基础 该指令常用于加载芯片外围功能部件的寄存器地址(32位立 即数),以实现各种控制操作: a. 读控制寄存器 ……
据域(即MAP定义的内存表要和引用内存表的LDR指令相距不超
过4KB)。
第4章 嵌入式程序设计基础
第4章 嵌入式程序设计基础
2.3.2.3 内存单元分配伪操作
a. 功能 该伪指令用来分配一片连续的存储区域并将其初始化为0, 也可以用“%”来代替。 b. 语法
第4章 嵌入式程序设计基础 2.3.2.4 字节分配内存单元伪操作DCB
a. 功能
用来分配一段连续的双字内存单元,并用双精度的浮点数初 始化,DCFD分配的内存字对齐,DCFDU则不一定。 b. 语法
第4章 嵌入式程序设计基础 2.3.2.8 字分配内存单元伪操作DCFS和DCFDU
a. 功能
用来分配一段连续的字内存单元,并用单精度的浮点数初 始化,DCFS分配的内存字对齐,DCFSU则不一定。 b. 语法
• SETL—给一个逻辑变量赋值 • SETS—给一个字符串变量赋值
第4章 嵌入式程序设计基础 d.定义通用寄存器列表名称伪操作
该伪操作定义的寄存器列表主要用在堆栈操作或LDM/STM
多寄存器传送指令中。
第4章 嵌入式程序设计基础 2.2 语法
第4章 嵌入式程序设计基础 2.3 数据定义伪指令
器将其转化为LDR r0, [ PC,#offset ]的形式。
《汇编语言》学习笔记6——伪指令
《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。
它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。
但程序中没伪指令,则系统就⽆法完成编译。
2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。
⼀般的,段名和段的意义⼀致,便于识别。
2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。
3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。
2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。
在连接时,类别标识相同的段放在连续的存储区中。
(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。
汇编 第四章伪指令及汇编语言源程序结构
MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆
第二部分 汇编语言程序设计——伪指令
例3.2:数据定义综合应用-2/2
.code .startup mov bl,bvar mov ax,word ptr dvar[0] mov dx,word ptr dvar[2] ;取双字到DX.AX mov dx,offset msg mov ah,09h CALLDOS .exit 0 end
运算符
算术运算符 + - * / MOD 逻辑运算符 AND OR XOR NOT 移位运算符 SHL SHR 关系运算符 EQ NE GT LT GE LE 高低分离符 HIGH LOW HIGHWORD LOWWORD
地址型参数
汇编语言程序中,指令参数还有地址型,
它的主要形式是标号和名字(变量名、段 名、过程名等) 硬指令的操作数有存储单元;存储单元就 应该用地址型参数(存储器操作数)表达
定义字节单元伪指令DB
DB伪指令用于分配一个或多个字节单元, 并可以将它们初始化为指定值 初值表中每个数据一定是字节量 (Byte),存放一个8位数据: 可以是0~255的无符号数 或是-128~+127带符号数 也可以是字符串常数
data X Y data
segment ;数据段 db 'a',-5 db 2 dup(100),? db 'ABC' ends
例3.4:属性及其应用-2/5
.code .startup mov al,byte ptr v_word ;用PTR改变v_word的类型,否则类型不匹配 dec al mov v_byte,al ;对v_word的头一个字节操作,原为32H、现为31H n_label: cmp flag,1 jz s_label ;flag单元为1转移 inc flag jmp n_label ;进行短转移
ch4-1汇编语言程序设计(伪指令)
由汇编程序执行的“指令系统” 用于定义变量、分配存储区、定义逻辑段、
指示程序开始和结束等 在汇编时被解释执行,不产生任何目标代码
常用伪指令分类
数据定义伪指令 符号定义伪指令 段定义伪指令 过程定义伪指令 宏命令伪指令 结束伪指令
第四章 汇编语言程序设计
第四章 汇编语言程序设计
data SEGMENT
名字 Hello DB ‘Hello, world!’,0DH,0AH,’$’
data ENDS prog SEGMENT
伪指令
ASSUME CS:prog ,DS:data
start: MOV AX,data
MOV DS,AX
标号
LEA DX,hello
MOV AH,9
INT 21H 指令码 MOV AH,4CH
NUM:ADD AL,30H
RET
第四章 汇编语言程序设计
2.汇编语言与高级语言
• 汇编语言是一种依赖于计算机微处理器的语言 • 汇编语言一般不具有通用性和可移植性 • 进行汇编语言程序设计必须熟悉机器的硬件资
源和软件资源 • 高级语言是面向过程的语言 • 高级语言具有很好的通用性和可移植性
第四章 汇编语言程序设计
INT 21H
prog ENDS
操作数
END start
(4)操作数
常量 变量或标号 表达式 寄存器 存储器单元
第四章 汇编语言程序设计
第四章 汇编语言程序设计
表达式: 算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出
注意:
名字和标号: 标号后有冒号,在指令性语句前;名字后不加
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言——指令助记符,符号地址,标号,伪指 汇编语言 指令助记符,符号地址,标号, 指令助记符 令等语言元素的集合以及这些元素使用的规则。 令等语言元素的集合以及这些元素使用的规则。 用汇编语言编写的程序叫汇编语言源程序 汇编语言源程序。 用汇编语言编写的程序叫汇编语言源程序。
名字
标号
该实例的紧凑格式: 该实例的紧凑格式: hello1.asm
.model small .data Hello DB ‘Hello, world!’,0DH,0AH, $’ Hello, world! ,0DH,0AH,’$ ,0DH,0AH,
名字
.code start: MOV AX,@data AX,@
汇编语言的一个实例: 汇编语言的一个实例: hello.asm
data Hello data prog
SEGMENT ‘Hello, world! ,0DH,0AH, $’ ,0DH,0AH,’$ DB Hello, world!’,0DH,0AH, ENDS SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello ;取字符串首地址 MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH 退回DOS INT 21H ;退回DOS prog ENDS END start
4.1.4 汇编语言源程序的结构
P.116
• 汇编语言源程序通常由一个或几个程序模块组成
• 每个程序模块一般由三个逻辑段组成 每个程序模块一般由三个逻辑段组成: 数据段——存放数据、变量 存放数据、 数据段 存放数据 堆栈段——堆栈区域 堆栈段 堆栈区域 代码段——存放程序指令 代码段 存放程序指令 •一个基本的汇编语言程序框架示例如下: 一个基本的汇编语言程序框架示例如下: 一个基本的汇编语言程序框架示例如下
轻重不分
(1)不需要写全部操作过程,每 一步T执行结果不一定都要写; (2)和实验内容无关的东西不要 写,不是你的程序也不用写; (3)尽量用图表说明问题; (4)多写总结性的内容。 (5)无人写程序调试步骤和寄存 器尤其是FLAGS的内容查看方法。
结论空洞
(1)这次实验的目的是熟悉汇编程序使用及调试。经过这次实验, 言之无 让我们更近一步了解了DEBUG,了解了他的各个指令。刚生动深入 物 的了解了汇编的思想,知道寄存器等术语,了解了汇编的语句。 (2)这次实验,操作比较多,让我们真正算是熟悉了DEBUG的操作, 对一些指令也有了进一步了解。我们进行一系列的讨论和修改,最终 经过多次试验,总算完成得差不多。当然要学习的还有很多,多操作,高度概 多看,多分析结果,才会有更多收获。 括 (3)本次实验对DEBUG的运用又多了一步的了解与熟悉,对汇编语 言的运用也能略懂一些。完成了三个课堂习题,将老师在上课讲的一 些指令能够基本掌握 ,主要是一些DEBUG语句,以及输入指令后输 出的代码,已经能够完全读懂,对汇编中的一些数据传输与数据运算 不知所 也已有了初步掌握,这都是在进步。 云 (4)1.使用DEBUG可以方便地对汇编语言进行调试,时时监控信息, 使找出错误更加容易。2.使用反汇编可以看到程序,定位程序段,方 便找到错误语句。还可以了解是哪些语句作出什么命令,省去了复杂 的机器码命令。3.使用A命令可以中途修改汇编程序,对汇编程序的 测试十分有用。4.通过对DEBUG命令的执行,让我更全方位地了解到 近于完 8086的结构,工作特点,使自己对微机更加了解。5.DEBUG还有许多 其它命令,使使用更加方便,操作更加简单,DEBUG程序真是太好 美 了,太有用了。
汇编语言与机器语言程序形式[ 汇编语言与机器语言程序形式[例]:找最小数
START: AX,3000H START:MOV AX,3000H ;设数据段 MOV DS,AX SI,0200H ;SI指向BLOCK数据缓冲区首单元 指向BLOCK MOV SI,0200H ;SI指向BLOCK数据缓冲区首单元 CX,64H 100个数 个数( C8个单元 个单元) MOV CX,64H ;100个数(占0C8个单元) DEC CX ;置循环99次 ;置循环99次 置循环99 AX, ;取第一个数 MOV AX,[SI] ;取第一个数 SI, ;SI指向新的一个数 AGAIN: ADD SI,2 ;SI指向新的一个数 AX, ;与新的一个数比较 CMP AX,[SI] ;与新的一个数比较 NEXT[0117H]; 0117H] AX)≤新的这个数 新的这个数, JLE NEXT[0117H];若(AX)≤新的这个数,转NEXT AX, ;新的这个数小则送入 新的这个数小则送入AX MOV AX, [SI] ;新的这个数小则送入AX NEXT: AGAIN[010EH];未完继续转回AGAIN [010EH] AGAIN循环 NEXT:LOOP AGAIN[010EH];未完继续转回AGAIN循环 [02C ;存最小数结果到MIN单元 存最小数结果到MIN MOV [02C8H],AX ;存最小数结果到MIN单元 ;返回 返回DOS INT 20H ;返回DOS
5.段寄存器指定伪指令 5.段寄存器指定伪指令(ASSUME ) 段寄存器指定伪指令 在代码段首先明确段和段寄存器的关系, 在代码段首先明确段和段寄存器的关系,如 首先明确段和段寄存器的关系 ASSUME CS:code,DS:data,ES:data,SS:stack CS:code,DS:data,ES:data,SS:stack code,DS:data,ES:data,SS:
8086汇编语言源程序语法 4.2 8086汇编语言源程序语法
P.117 P.117
4.2.1 汇编语言源程序的结构 4.2.2 汇编语言语句的格式 4.2.3 伪指令 4.2.4 简化段的定义
ห้องสมุดไป่ตู้.2.1 汇编语言语句的格式 汇编语言的语句有两种: 汇编语言的语句有两种: • 指令性语句:由8086指令助记符构成的语句 指令性语句: 8086指令助记符构成的语句
标号
MOV DS,AX LEA DX,hello MOV AH,9 INT 21H MOV AH,4CH INT 21H END
;取字符串首地址 ;显示字符串 ;退回DOS 退回DOS
4.3 伪指令
P.121
由汇编程序执行的指令, 由汇编程序执行的指令,它本身不被汇编 成机器指令代码,只影响汇编工作。 成机器指令代码,只影响汇编工作。 常用的伪指令有: 常用的伪指令有:
汇编程序 汇编语言源程序需翻译成机器语言程序, 汇编语言源程序需翻译成机器语言程序,变
成可执行文件,才能机器由执行, 成可执行文件,才能机器由执行,这个翻译过程 汇编” 执行翻译的程序称为“ 叫“汇编”。执行翻译的程序称为“汇编程 用汇编程序进行翻译的过程称为“ 序”,用汇编程序进行翻译的过程称为“机器 汇编” 汇编” 。 通过人工查表、 通过人工查表、编码产生机器语言目标程 序的过程称为“人工汇编” 序的过程称为“人工汇编”
汇编语言 源程序
汇编
机器语言 目标程序
汇编程序(软件) 汇编程序(软件)
高级语言: 高级语言:比较接近于人的自然语言及学科 语言的编程语言。面向过程、面向对象, 语言的编程语言。面向过程、面向对象,具 有良好的通用性及可移植性。 有良好的通用性及可移植性。但与机器语言 相差甚远。 相差甚远。 把高级语言翻译为机器语言程序的过程为 解释” 编译” “解释”或“编译”。
指令除了操作码以外,还有一个操作数问题。 指令除了操作码以外,还有一个操作数问题。 操作数可能放在存储器中, 操作数可能放在存储器中,这就涉及操作数的地 程序中遇到转移指令或调用指令, 址。程序中遇到转移指令或调用指令,也需要知道转 移地址,若采用具体地址就很不方便,一旦有错, 移地址,若采用具体地址就很不方便,一旦有错,改 动也很麻烦。于是人们采用标号或符号来代替地址 采用标号或符号来代替地址、 动也很麻烦。于是人们采用标号或符号来代替地址、 数据, 数据,例:
1.段定义伪指令 1.段定义伪指令 5.段寄存器指定伪指令 5.段寄存器指定伪指令 2.符号定义伪指令 2.符号定义伪指令 3.数据定义伪指令 3.数据定义伪指令 4.过程定义伪指令 4.过程定义伪指令 6.程序结束伪指令 6.程序结束伪指令 7.其他伪指令 7.其他伪指令 -》代码 -》代码 -》数据 -》数据 -》代码 -》代码
标号: 指令助记符 目的操作数,源操作数 ;注释 标号: 目的操作数,
• 伪指令(指示性)语句:由伪指令构成的语句 伪指令(指示性)语句:
名字 伪指令 操作数1,操作数2,…,操作数n 操作数1,操作数2, 操作数n 1,操作数 ;注释
指令性语句汇编时生成机器码,可由CPU执行; 指令性语句汇编时生成机器码,可由CPU执行; 生成机器码 CPU执行 指示性语句汇编时不生成机器码,不可执行。 指示性语句汇编时不生成机器码,不可执行。 不生成机器码
编译/解释程序(软件) 编译 解释程序(软件) 解释程序
高级语言 源程序 机器语言 目标程序
编译/解释 编译 解释
汇编语言程序调试过程
• 输入汇编语言源程序 • 汇编 • 链接 • 调试
MASM EDIT
源文件 .ASM
目标文件 .OBJ 可执行文件 .EXE 最终程序
LINK DEBUG 验证、诊断、 验证、诊断、修改
第四章 汇编语言的程序设计
• 机器语言、汇编语言与高级语言 机器语言、 • 8086汇编语言程序结构 8086汇编语言程序结构 • 汇编语言中的数据 • 基本结构的程序设计 • 宏汇编技术 伪指令和完整汇编语言程序
实验报告中的问题
(1)目标不明; (2)轻重不分; (3)结论空洞。
目标不明
(1)要解决什么问题? (2)所用例证,分析过程; (3)结论归纳。