第10节汇编程序常用伪指令简介PPT课件
完整版汇编语言中常用的伪指令档
完整版汇编语言中常用的伪指令档汇编语言是一种低级的程序设计语言,它用于编写底层计算机程序。
在汇编语言中,伪指令是一类特殊的指令,它们在程序运行时不会被计算机执行,而是在编译或汇编时被处理器或汇编器解释和展开。
伪指令在汇编语言中起到辅助编程、优化代码和声明常量等作用。
本文将介绍完整版汇编语言中常用的伪指令档。
一、伪指令的定义和作用伪指令是汇编语言中的一类特殊指令,它们不是真正的指令,不会被计算机执行,而是在编译或汇编的过程中被汇编器或处理器解释和处理。
伪指令主要用于辅助编程、优化代码和声明常量等作用。
伪指令的格式一般与真正的指令相似,但一般不包含操作码。
在一些汇编语言中,伪指令以特殊的标记或符号来区分,比如以“.”开头的指令。
二、常用的伪指令档1. ORG指令ORG指令用于指定程序的起始地址。
在汇编程序中,使用ORG指令可以将程序的代码段或数据段放置在指定的内存地址处。
其格式一般为:ORG 地址其中,地址为16进制数或表示内存单元的符号。
2. EQU指令EQU指令用于定义符号常量或符号变量。
它将一个符号与一个数值或地址进行关联,使得在程序中使用该符号时可以被汇编器或处理器替换为对应的数值或地址。
其格式一般为:符号 EQU 数值或地址其中,符号为一个标识符,数值或地址可以是16进制数、10进制数或表示内存单元的符号。
3. DB指令DB指令用于定义字节型数据。
它可以用于声明字符、整数等字节型数据,并将这些数据存储在指定的内存地址中。
其格式一般为:标号 DB 表达式其中,表达式可以是一个字节常量、字符常量或表示内存单元的符号。
4. DW指令DW指令用于定义字型数据。
它可以用于声明无符号整数等字型数据,并将这些数据存储在指定的内存地址中。
其格式一般为:标号 DW 表达式其中,表达式可以是一个字常量或表示内存单元的符号。
5. DD指令DD指令用于定义双字型数据。
它可以用于声明无符号双字整数等双字型数据,并将这些数据存储在指定的内存地址中。
汇编语言PPT课件
第3章
汇编语言源程序
➢源程序分别用两种格式书写 ❖第一种格式从MASM 5.0开始支持
简化段定义格式
❖第二种格式MASM 5.0以前就具有
完整段定义格式
Hello, Everybody !
程序功能
.
;lt301a.asm(文件名)
.model small ;定义程序的存储模式
.stack
;定义堆栈段
这时应根据错误信息,重新编辑修改源 程序后,再进行汇编
开发过程3:目标模块的连接
连接程序能把一个或多个目标文件和库 文 件 合 成 一 个 可 执 行 程 序 ( .EXE 、 .COM 文 件):
LINK lt301a.obj
如果没有严重错误,LINK将生成一个可 执行文件(lt301a.exe);否则将提示相应 的错误信息
data ends
code segment ’code’ ;定义代码段
assume cs:code,ds:data,ss:stack
start: mov ax,data ;建立DS段地址
mov ds,ax
code
mov dx,offset string
mov ah,9
int 21h
mov ax,4c00h
本课的程说采明用性微语软句宏,汇例编如程,序数M据AS说M明6、.11变 量定义等等
➢ 伪指令与具体的处理器类型无关,但 与汇编程序的版本有关
.
第3章
3.1 汇编语言程序的开发
➢本节从汇编语言程序的语句格式出 发,给出第一个示范性的汇编语言 源程序,并演示汇编语言程序的过 程:
编辑 汇编 连接 调试
;(注3)
;SampleC.ASM
新版汇编语言程序设计 变量定义及常用伪指令共35页
10、一个人应该:活泼而守纪律,天 真而不 幼稚, 勇敢而 鲁莽, 倔强而 有原则 ,热情 而不冲 动,乐 观而不 盲目。 ——马 克思
谢谢你的阅读
❖ 知识就是财富 ❖ 丰富你的人生
71、既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。——康德 72、家庭成为快乐的种子在外也不致成为障碍物但在旅行之际却是夜间的伴侣。——西塞罗 73、坚持意志伟大的事业需要始终不渝的精神。——伏尔泰 74、路漫漫其修道远,吾将上下而求索。——屈原 75、内外相应,、纪律是自由的第一条件。——黑格 尔 7、纪律是集体的面貌,集体的声音, 集体的 动作, 集体的 表情, 集体的 信念。 ——马 卡连柯
8、我们现在必须完全保持党的纪律, 否则一 切都会 陷入污 泥中。 ——马 克思 9、学校没有纪律便如磨坊没有水。— —夸美 纽斯
DSP汇编伪指令集讲解PPT课件
文本段(.text):通常包括可执行代码。
数据段(.data):通常包括已初始化的数据。
预留段(.bss):通常保留用于未初始化变量的空 间。
第6页/共34页
三. 伪指令的功能 伪指令的功能包括:
• 1.把代码和数据汇编到指定的段。 • 2.为未定义的变量保存空间。 • 3.控制列表文件。 • 4.分配存储器。 • 5.汇编条件块。 • 6.定义全局变量。 • 7.指定汇编器能得到的宏。 • 8.检查符号调试信息。
例: IMR
.set 0004h ; Interrupt Mask Register
IFR
.set 0006h ; Interrupt Flag Register
• 10 .byte, .float , .bfloat, .int , .word,
.long , .blong, .string, .field
第15页/共34页
• 本例中用.usect伪指令定义两个未初始化的命 名段var1和var2。符号ptr和array分别指向 var1段和var2段的第一个字。 dflag指向var1 段中50个字块中的第一个字。
• SPC
目标代码
源程序
• 0000
.text
;汇编到.text段
• 0000
2003
• 7 .def , .ref , .global
.def , .ref, .global 伪指令所指定的符号为全局 符号,这些全局符号可以在外部定义或在外部被引用。
.def指定在当前模块中定义且可以在其他模块中 使用的符号。汇编器将该符号引入符号表。
.ref指定一个或多个在当前模块中使用但在其他模 块中定义的符号。一般与.def定义的符号对应。汇编器 将该符号标记为未定义的外部符号放入目标符号表,由 连接器在连接时处理该符号的定义。
微机原理与汇编-伪指令
2.段分配伪指令 ASSUME
段分配伪指令用来完成段的分配,说明当前哪些 逻辑段被分别定义为代码段、数据段、堆栈段和 附加段。
1、代码段用来存放被执行的程序; 2、数据段用来存放程序执行中需要的数据和运 算结果; 3、当用户程序中使用的数据量很大或使用了串 操作指令时,可设置附加段来增加数据段的容量; 4、堆栈段用来设置堆栈。
DT(define ten bytes):定义一个十字节类型的变量,其后的每个 操作数均占用5个字(10个字节)。 其中,各变量定义伪指令都将高位字节数据存放在高地址中,低位字 节数据存放在低地址中。
格式1又可分为以下几种具体用法 :
(1)用数值表达式定义变量 【例2】 K1 DB 10, 4, 10H
段名 ENDS
任何一个逻辑段从SEGMENT语句开始,以ENDS语句结束。伪指令名 SEGMENT和ENDS是本语句的关键字,不可以默认,并且必须成对出现。 语句中段名是必选项,定位类型、组合类型、字长类型、类别为可选项。 用户自己选定,不能省略,其规定同变量或标号,一个段开始与结尾用 的段名应一致。
④ 段寄存器的装入。
【例1】
DATA SEGMENT ; 定义数据段
XX
DB ?
YY
DB ?
ZZ
DB
DATA ENDS
EXTRA SEGMENT ; 定义附加段
RSS1 DW ?
RSS2 DW ?
RSS3 DD ?
EXTRA ENDS
STACK SEGMENT ; 定义堆栈段
DW 50 DUP( )
K2 DW 100, 100H, -5 K3 DD 3*20, 0FFFDH 变量K1, K2, K3经汇编后的结果如图1所示。
4-10汇编伪指令
段定义伪指令
类别名,指明程序连接时,段间次序的确定方法
LINK程序将各模块相同‘类别名’的各段依次序连续存 放在内存中,但各段相互独立。缺省项为空。
段定义伪指令示例
D_SEG SEGMENT NUM1 DB 10 DUP(?)
D_SEG ENDS
S_SEG SEGMENT DW 100 DUP(?)
可为常数、表达式、?表达式、字符串、DUP表达式 字符串用单引号括起来,如‘ABCDE’ DUP表达式格式:n DUP(参数{[,参数]})
数据定义伪令
DATA SEGMENT X1 DB 40H X2 DW 1764H X3 DB 10,20,30 Y1 DB 20H,? S1 DB ‘HEL’ S2 DB ‘H’, ‘E’, ‘L’ S3 DW ‘HE’ V1 DW 2 DUP(2,4) V2 DB 2 DUP(?,2 DUP(‘A’,‘B’) ) DATA ENDS
S_SEG ENDS
E_SEG SEGMENT STRING DB 'HELLO'
E_SEG ENDS
回顾: 在汇编程序中,从段的性质上 看,可分为代码段、堆栈段、 数据段和附加段4种。
每个段具体对应到什么性质的 段,取决于段寄存器的指向
指定段寄存器伪指令
格式:ASSUME 段寄存器:段名 {[,段寄存器:段名]} 操作:明确段和段寄存器的关系 说明:①代码段中必须至少有一个ASSUME语句,
S_SEG SEGMENT PARA STACK DW 100 DUP(?)
S_SEG ENDS
思考:若有多个STACK属 性的堆栈段,结果如何?
缺省指定:当无组合类型为STACK的段时,无论是否用 ASSUME设定,SS自动指向程序区开始(SP=0000H)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)所有过程(用RROC语句定义)必须用过程结束语句( ENDP)结束。整个源程序也必须用结束语句(END)来结束 。
汇编程序有三种基本语句构成:(硬)指令语句,(说明) 伪指令语句,(说明)宏指令语句。
(4)程序开始必须申明(装入)各段寄存器的值,即各段地址 2021
第3章 一:(硬)指令语句和伪指令语句
;数据段开始
➢
LISTA DW 64H DUP(1234H) ;100字的源缓冲区
➢ DSEG ENDS
;数据段结束
➢ ESEG SEGMENT
;附加段开始
➢
LISTB DW 100 DUP (432H1) ; 100字的目的缓冲区
➢ ESEG ENDS
;附加段结束
➢ CSEG SEGMENT
;代码段开始
➢ MYPROC PROC FAR
;定义过程
PUSH DS
;DS进栈
➢
SUB AX,AX
;AX清零
➢
PUSH AX
; AX进栈
➢
MOV AX,SEG MYDATA
;段地址送AX
➢
2021 MOV DS,AX
; AX送DS
第3章
➢
SUB AX,AX
; AX清零
➢
MOV CX,AX
; CX清零
➢
MOV CL,NUM2 ;数据送CL
➢ 硬指令——使CPU产生动作、并在程序执 行时才处理的语句,就是前面第3章学习 的处理器指令,汇编时会生成目标代码
➢ 伪指令(Directive)——不产生CPU动 作、在程序执行前由汇编程序处理的说明 性语句,例如,数据说明、变量定义等等
➢ 伪指令与具体的处理器类型无关,但与汇 编程序的版本有关,即;伪指令语句只为 汇编程序提供汇编时所需的信息,而本身 不会生成目标代码
➢
DEC CL
; CL—1
➢
MOV AL,NUM1 ;数据送AL
➢ K:
ADD AL, NUM1 ; AL+ NUM1送AL
➢
ADC AH,00H ;进位送AH
➢
LOOP K
; K循环,次数由CX决定
➢
MOV PRODUCT ,AX;结果送AX
➢
RET
;调用返回
➢ MYPROC ENDP
;过程结束
➢ MYCODE ENDS
;空操作指令,没有操作数,带有标号 LOOP DELAY ;循环指令,标号DELAY说明转移位置
BUFFER DB 1,2,3,4,5,6,7;数据定义伪指令,在主存中
第3章
3.10.1汇编语言的格式
➢ 例 3.10.1:用重复加法的方法实现乘法运算的子程序
➢ STACK SEGMENT PARA STACK ;堆栈段开始
➢
DB 64 DUP(?)
;堆栈段空间为100个字节
➢ STACK ENDS
;堆栈段结束
➢ MYDATA SEGMENT PARA ‘STACK’ ;数据段开始
AB
STOSW
;两数之和存入LISTB
E2F9
LOOP LOP1
;循环至CX=0
B4 4C
MOV AH,4CH
;功能调用号4CH送入AH
CD 21
INT 21H
;程序结束后返回DOS
MAIN ENDP
;过程结束
CSEG ENDS
;代码段结束
END MAIN
;程序结束
2021
第3章
举例程序得出结论
(1) 源程序一般由n个段构成,理论上讲可以有很多,但实际 上8086/8088规定不超出16段。每个段都以 SEGMEN语句开 始,以ENDS语句结束。程序中第一段称为STACK(堆栈段) ,它用来在存储器的某个地方建立一个栈区;第二段称为DATA
;代码段结束
➢
END MYPROC ;程序结束
2021
第3章
例4.2假设LISTA与LISTB为两个字类型数组,将他们 各对应相加,其和放在LISTB数组中,程序设计如下:
STACK SEGMENT
;堆栈段开始
➢
DW 32H DUP(?)
;堆栈段空间为40个字
➢ STACK ENDS
;堆栈段结束
➢ DSEG SEGMENT
➢ NUM1 DB 2AH
;数据段放的数据
➢ NUM2 DB 78H
➢ PRODUPCT DW ?
;数据缓冲区
➢ MYDATA ENDS
;数据段结束
➢ MYCODE SEGMENT;代码Fra bibliotek开始➢
、
ASSUME CS:MYCODE DS:MYDATA ;指明代码段、数据段
➢
SS:STACK
;堆栈段段名
2021
第3章
⑴ 执行性语句——由硬指令构成的语句,它通常对应 一条机器指令,出现在程序的代码段中:
标号: 硬指令助记符 目的操作数, 源操作数;注释 前面章节已讲过
⑵ 说明性语句——由伪指令构成的语句,它通 常指示汇编程序如何汇编源程序:
名字 伪指令助记符 参数,参数,… ;注释
MOV CX,0 ;传送指令,具有2个操作数 DELAY: NOP
➢
ASSUME CS:CSEG DS:DSEG;指明代码段、数据段段名
➢
ASSUME SS:STACK ES:ESEG ;堆栈段、附加段段名
➢
MAIN PROC
;定义过程
0000H B8 9014 MOV AX,DSEG ;数据段段地址送AX
➢ 0003H 8ED8 MOV DS, AX ;数据段段地址装入DS
➢ ➢ ➢
BE 0000 MOV SI, OFFSET LISTA ; 指向源块的首地址
BF 0000 MOV DI, OFFSET LISTB ; 指向目的块的首地址
B9 6400 MOV CX,100
;循环次数
AD LOP1: LODSW
; LISTA元素送AX
260305
ADD AX,ES:[DI] ;将LISTB元素加到AX
➢ 0005H B8 9D14 MOV AX, ESEG ;附加段段地址送AX
➢ 0008H 8EC0 MOV ES, AX ;附加段段地址装入ES
➢ 000AH 2F02C1
CLD
; 选择地址增方向
第3章
➢ 000BH ➢ 000EH ➢ 0011H ➢ 0014H ➢ 0015H ➢ 0018H ➢ 0019H ➢ 001BH ➢ 001DH
(数据段),它在存储器中放了被乘数,乘数的数据,第三段
称为CODE (代码段),其中包括了许多以符号表示的指令用 于实现乘法运算。程序中出现了SEGMEN 、ASSUME伪指令 。
(2) ASSUME语句可使汇编程序知道CS、DS、SS、ES指向 那个段地址,它在汇编时起作用,在运行时CPU不知道除CS外 的其他段地址,所以必须在程序中用指令进行赋值。