第二部分 汇编语言程序设计——伪指令
新版汇编语言程序设计变量定义及常用伪指令

新版汇编语言程序设计变量定义及常用伪指令汇编语言是计算机底层的编程语言,具有高效、灵活的特点。
在进行汇编语言程序设计时,变量定义和常用伪指令是不可或缺的重要部分。
本文将详细介绍新版汇编语言程序设计中的变量定义和常用伪指令,并提供相应的示例和应用。
一、变量定义在汇编语言中,变量定义是用来存储数据的标识符和内存分配的过程。
变量可以是不同的数据类型,如整型、字符型、字符串型等。
变量定义的格式如下所示:变量名数据类型初始值其中,变量名是标识符,用来表示变量的名称;数据类型是变量的类型,包括BYTE、WORD、DWORD等;初始值是可选项,用来给变量赋初值。
下面是一个变量定义的示例:count DWORD 10这个例子定义了一个名为count的DWORD类型变量,初始值为10。
二、常用伪指令1. EQUEQU是汇编语言中常用的伪指令,用于给标识符赋值。
其格式如下:标识符 EQU 表达式其中,标识符是需要赋值的标识符,表达式是赋给标识符的值。
下面是一个EQU指令的示例:MAX_SIZE EQU 100这个例子给标识符MAX_SIZE赋值为100。
2. DB、DW、DDDB、DW和DD是用来定义字节、字和双字变量的伪指令。
它们分别代表Byte(字节)、Word(字)和Double Word(双字)。
其格式如下:标识符 DB/ DW/ DD 初始值下面是一个DB指令的示例:message DB "Hello, World!"这个例子定义了一个名为message的字节型变量,并给它赋值为"Hello, World!"。
3. RESB、RESW、RESDRESB、RESW和RESD是用来声明未初始化的字节、字和双字变量的伪指令。
其格式如下:标识符 RESB/ RESW/ RESD 数量其中,标识符是需要声明的变量名,数量是变量的个数。
下面是一个RESW指令的示例:numbers RESW 5这个例子声明了一个名为numbers的字型数组,包含5个元素。
伪指令

第6章 6.1.5 伪指令
SEG和OFFSET
SEG返回存储器地址操作数的段地址 OFFSET 返回存储器地址操作数的段内偏移地 址部分
: NUMBER-1 DD ? CCAA EQU SEG NUMBER-1 : MOV AX,SEG NUMBER-1 MOV DS,AX MOV SI,OFFSET NUMBER-1
第6章 6.1.5 伪指令
结构的存储分配和预置
格式:变量 结构名称<赋值说明> LiPing STUDENT_RECORD <,,,’891011’>
LuiYi STUDENT_RECORD <‘LuiYi’,1,,’891011’,80H>
对结构的访问
格式:变量名.字段名 例如:MOV AL,LiPing.AGE 等价于: MOV AL,[BX].AGE
CODE_SEG
第6章:逻辑段的简化定义
.STACK [大小]
;堆栈段定义伪指令 .STACK 创建一个堆栈段,段名是: STACK 。可选的“大小”参数指定堆栈段所占存储区的 字节数,默认是1KB(=1024=400H字节)
.DATA
;数据段定义伪指令 .DATA 创建一个数据段,段名是: _DATA。数据段名可用@DATA预定义标识符表示
第6章 6.1.5 伪指令
TYPE、SIZE、LENGTH
见表6.3
段定义伪指令
SEGMENT/ENDS伪指令 成对使用,说明段的名称和范围,还可指明段 的定位类型、组合类型、分类名
段名
段名
SEGMENT [定位类型][组合类型][分类名] : 本段程序内容(指令或伪指令语句) ENDS
第6章 6.1.5 伪指令
微机原理与应用:第十七讲 汇编语言程序设计中的伪指令

19
标号
标号是用于表达指令或数据的位置,便于程序的编写、阅读和修 改。
它经常用在转移类指令中,以及数据表格的首位。如例3-55、例 4-1等。
使用时,标号与指令之间用冒号“:”隔开。 标号不能以数字(0~9)开头,只能以字母或下划线“-”开头。 组成标号的字符串不能与指令中涉及的关键字相同。 为了把一些字母开头的十六进制数与标号区别开来,需要将这些
程序存储器单元内容
56H 43H 42H 41H 93H 64H 85H
10
例4-2
分析下列程序段。
MOV A,
#2
MOV DPTR, #LABLE
MOVC A,
@A+DPTR
┇
ORG 2000H
LABLE: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H,46H
字母开头的十六进制数的前面加数字“0”,比如0A7H、0C9H、 0FFH等等。
20
符号名
符号名一般用于定义变量名,取符号名的规定与取标号类似。 使用时,符号名与伪指令之间是空格,而不是冒号“:”。
21
注释
注释是语句的说明部分,用于增加程序的可读性。 注释部分必须以分号“;”开头,汇编程序不对它翻译。 根据这一特点,在程序调试时,为了删除某一语句,经常在
第一项是一个二进制数。 第二项是一个十进制数。 第三项是一个十六进制数。 第四项是一个字符串,第四项的字符串将在程序存储器中
生成3个ASCII码,分别是41H、42H、43H。 第五项也是一个十六进制数。
9
8086汇编语言伪指令

一、伪指令详解伪指令在百度百科中的定义为:伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。
例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。
伪指令有2个特点:1.由于是伪“指令”,因而它只存在于汇编语言中。
高级语言中不叫指令,叫语句;2.由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。
与指令的区别::1.指令是在执行阶段发挥作用的,由CPU(Intel、AMD等)来执行。
2.伪指令是在编译阶段发挥作用的,由汇编器(MASM、TASM等)来解释。
二、数据定义伪指令为源程序中的数据和堆栈区分配数据存储单时,使用最多的伪指令。
数据定义伪指令格式如下:常用的数据定义伪指令类型有:∙DB(定义字节,常用)一个字节数据占1个字节单元,读完一个,偏移量加1∙DW(定义字,常用)一个字数据占2个字节单元,读完一个,偏移量加2∙DD(定义双字)一个双字数据占4个字节单元,读完一个,偏移量加4∙DQ(定义四字)一个四字数据占8个字节单元,读完一个,偏移量加8∙DT(定义十字节,用于BCD码)数据定义伪指令后面的初值表可以是常数、表达式、字符串。
例如:D2DW110*230;为D2分配1个字,存放表达式的值D3DB‘GOOD!’;为D3分配5字节,用来存放字符串‘GOOD!’D4DD2.4E+3;为D4分配2个字,存放一个浮点数D5DB‘AB’;为D5分配2字节,字符A在低字节,B在高字节D6DW‘AB’;为D6分配1个字,字符A在高字节,B在低字节S1DB5DUP(?);为S1预留5字节的存储空间S2DW3DUP(0);为S2分配3个字,初值设为0语句1相当于C语言中的DW D2=110*230,只不过是语法结构不太一样注意:通过变量名操作时,变量名代表存储区的第一个数据的地址。
完整版汇编语言中常用的伪指令档

完整版汇编语言中常用的伪指令档汇编语言是一种低级的程序设计语言,它用于编写底层计算机程序。
在汇编语言中,伪指令是一类特殊的指令,它们在程序运行时不会被计算机执行,而是在编译或汇编时被处理器或汇编器解释和展开。
伪指令在汇编语言中起到辅助编程、优化代码和声明常量等作用。
本文将介绍完整版汇编语言中常用的伪指令档。
一、伪指令的定义和作用伪指令是汇编语言中的一类特殊指令,它们不是真正的指令,不会被计算机执行,而是在编译或汇编的过程中被汇编器或处理器解释和处理。
伪指令主要用于辅助编程、优化代码和声明常量等作用。
伪指令的格式一般与真正的指令相似,但一般不包含操作码。
在一些汇编语言中,伪指令以特殊的标记或符号来区分,比如以“.”开头的指令。
二、常用的伪指令档1. ORG指令ORG指令用于指定程序的起始地址。
在汇编程序中,使用ORG指令可以将程序的代码段或数据段放置在指定的内存地址处。
其格式一般为:ORG 地址其中,地址为16进制数或表示内存单元的符号。
2. EQU指令EQU指令用于定义符号常量或符号变量。
它将一个符号与一个数值或地址进行关联,使得在程序中使用该符号时可以被汇编器或处理器替换为对应的数值或地址。
其格式一般为:符号 EQU 数值或地址其中,符号为一个标识符,数值或地址可以是16进制数、10进制数或表示内存单元的符号。
3. DB指令DB指令用于定义字节型数据。
它可以用于声明字符、整数等字节型数据,并将这些数据存储在指定的内存地址中。
其格式一般为:标号 DB 表达式其中,表达式可以是一个字节常量、字符常量或表示内存单元的符号。
4. DW指令DW指令用于定义字型数据。
它可以用于声明无符号整数等字型数据,并将这些数据存储在指定的内存地址中。
其格式一般为:标号 DW 表达式其中,表达式可以是一个字常量或表示内存单元的符号。
5. DD指令DD指令用于定义双字型数据。
它可以用于声明无符号双字整数等双字型数据,并将这些数据存储在指定的内存地址中。
第3章_MCS-51单片机指令系统及汇编语言程序设计2

3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $
3.2 汇编语言程序设计伪指令

2012-2-29
单片机原理及其应用
11
7.2 算术运算程序的设计
+
DA A DA A DA A
图7.3 多位十进制加法算法
2012-2-29
单片机原理及其应用
12
7.2 算术运算程序的设计
例4 多位十进制减法 在第3章的例30中,我们介绍了2位十进制数减 法算法:X-Y=X+100-Y→ X+9AH-Y,把十进 制减法变换成二进制减法(求十进制减数的补码) 和十进制加法2步进行。多位十进制数减法也采用了 同样的算法。设被减数存放在20H开始的内部RAM 存储单元,减数存放在30H开始的存储单元,6位十 进制数减法的程序如下
15
7.2 算术运算程序的设计
例5 多字节数二进制乘法 2个多字节二进制数乘法的算法与按位进行十进 制数乘法相似。把它转换为几个多字节与单字节的 乘法运算,先分别计算出它们的部分积,然后按照 规则把部分积累加计算出乘积。 图7.4为2个16位二进制数相乘的算法原理图。 图中被乘数为X,其高八位和低八位分别存储在XH 和XL单元,乘数为Y,YH和YL分别高八位和低八位 存储单元。
2012-2-29
单片机原理及其应用
16
7.2 算术运算程序的设计
算法分2步进行:首先,分别用乘数的高八位和 低八位与被乘数相乘,计算部分积,分别存储在 (XYH3),(XYH2),(XYH1)和 (XYL3),(XYL2)(XYL1)单 元;在编写程序时,乘法运算可以用子程序调用的 方法实现(第3章例33)。第二步,采用加法运算求 出乘积存储在(XY4)(XY3)(XY2)(XY1)单 元。
MCS-51单片机汇编语言的伪指令-文档资料

Copyright 2006
题意分析:
本例是典型的分支程序,根据两个无符号数的 比较结果(判断条件),分别点亮相应的发光二极 管。
6.定义空间伪指令DS
4.定义字节数据伪指令DB
格式:[标号:] DS 表达式
格式:[标号:] DB 字节数据表
功能:从指定的地址开始,保留
功能:字节数据表可以是多个字节数 多少个存储单元作为备用的空间。
据、字符串或表达式,它表示将字节数据表中的 数据从左到右依次存放在指定地址单元。
如: ORG 1000H
Copyright 2006
JC L1 CLR P1.0
SJMP FIN L1:CLR P1.1 FIN:SJMP $
END
;CY=1,转移到 L1 ;CY=0,(40H)≥(50H),点亮 P1.0 连 接的LED1 ;直接跳转到结束等待
;(40H)<(50H),点亮P1.1接的LED2
7. 数据地址赋值伪指令XDATA
格式:符号名 XDATA 表达式
功能:将表达式的值或某个特定 汇编符号定义为一个指定的符号名,可以 先使用后定义,并且用于双字节数据定义。
例如:
DELAY XDATA 0356H
LCALL DELAY ;执行指令后,程 序转到0356H单元执行
Copyright 2006
BUF: DS 50 ;
例如:ORG 1000H
TAB: DB 22H ;22H存放在1032H单元。
TAB: DB 2BH, 0A0H, ‘A’, 2*4 ;
表示从1000H单元开始的地方存放数 据2BH,0A0H,41H(字母A的ASCII码), 08H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例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 ;进行短转移
例3.4:属性及其应用-1/5
.model small
.stack .data v_byte equ this byte ;v_byte是字节类型,与变量v_word的地址相同 v_word dw 3332h,3735h ;v_word是字类型的变量 target dw 5 dup(20h) ;分配数据空间2×5=10字节 crlf db 0dh,0ah,'$' flag db 0 n_point dw offset s_label ;取得标号s_label的偏移地址
例3.3:数据复制和显示-1/2
.model small .stack .data source db 33h,34h,35h,36h ;定义4个字符数据 target db 80 dup(?) ;分配数据空间4×20=80 .code .startup mov ax,ds mov es,ax ;data也作为附加段 cld mov si,offset source mov di,offset target mov cx,80
初值表
初值表是用逗号分隔的参数 主要由数值常数、表达式或?、DUP
组成
?——表示初值不确定,即未赋初值; DUP——表示重复初值 DUP的格式为: 重复次数 DUP(重复参数)
变量定义伪指令助记符
变量定义伪指令根据申请的主存空间单位分
类 DB——定义字节伪指令 DW——定义字伪指令 DD——定义双字伪指令 DF——定义3字伪指令 DQ——定义4字伪指令 DT——定义10字节伪指令 还有定位伪指令
多个10字节变量分配空间及初始化
10字节变量可以表达扩展精度浮点数
例3.2:数据定义综合应用-1/2 .model small
bvar wvar dvar qvar tvar abc msg bbuf dbuf CALLDOS
.stack .data DB 16 DW 4*3 DD 4294967295 ;=232-1 DQ ? DB 1,2,3,4,5 DT 2345 ;定义了BCD码2345H DB 'a','b','c' DB 'Hello',13,10,'$' DB 12 DUP('month') DD 25 DUP(?) EQU <int 21h>
定义双字单元伪指令DD
DD伪指令用于分配一个或多个双字单元, 并可以将它们初始化为指定值 初值表中每个数据是一个32位的双字量 (Double Word):
可以是有符号或无符号的32位整数 也可以用来表达16位段地址(高位字)和 16位的偏移地址(低位字)的远指针
vardd DD 0,?,12345678h farpoint DD 00400078h
字变量和字常量的定义: WNUM EQU 5678H ;定义WNUM为常量 COUNT DW 20H ;定义COUNT变量,假设在数据段的偏移地址为10H
字变量和字常量的应用: MOV AX,[BX+SI+WNUM] ; MOV AX,COUNT ; MOV AX,[SI+COUNT] ; ; LEA BX,COUNT ; MOV BX,OFFSET COUNT ; MOV MOV MOV MOV LEA MOV AX,[BX+SI+5678H] AX,[0010H] AX,COUNT[SI] AX,[SI+10H] BX,[0010H] BX,0010H
一个段地址 一个偏移地址 两个字符 0~65535之间的无符号数 -32768~+32767之间的带符号数
data segment ;数据段 count dw 8000h,?,'AB' maxint equ 64h number dw maxint array dw maxint dup(0) data ends
使用PTR操作符,可以临时改变名字或标号的类型
THIS操作符
THIS 类型名
利用THIS说明的操作数具有汇编时的当前逻辑地址,
但具有指定的类型 b_var equ THIS byte ;按字节访问变量b_var,但与w_var的地址相同 w_var dw 10 dup(0) ;按字访问变量w_var f_jump equ THIS far ;用f_jump为段间转移(f_jump label far) n_jump: mov ax,w_var ;用n_jump为段内近转移,但两者指向同一条指令 LABEL伪指令的功能等同于“EQU THIS”
mov al,X ;此处X表示它的第1个数据,故AL←'a' dec X+1 ;对X为始的第2个数据减1,故成为-6 mov Y,al ;现在Y这个字符串成为 'aBC'
定义字单元伪指令DW
DW伪指令用于分配一个或多个字单 元,并可以将它们初始化为指定值 初值表中每个数据一定是字量 (Word),一个字单元可用于存放任 何16位数据:
第二部分
汇编语言程序设计
—— 伪指令
南京工程学院 钱瑛
参数、变量和标号
本节详细讨论汇编语言程序语句的主要
部分:
参数 变量名 标号 并引出相关的伪指令和操作符 本节重点掌握:
常数的表达、 变量定义伪指令DB/DW/DD、
地址操作符和类型操作符
数值型参数
在源程序语句格式的4个组成部分中,
例3.4:属性及其应用-3/5
s_label: cmp flag,2 jz next ;flag单元为2转移 inc flag jmp n_point ;段内的存储器间接寻址,转移到s_label标号处 next: mov ax,type v_word ;汇编结果为mov ax,2 mov cx,lengthof target ;汇编结果为mov cx,5
3.2.2 变量定义伪指令
变量定义(Define)伪指令为变量申请
固定长度的存储空间,并可同时将相应 的存储单元初始化
变量名 伪指令助记符 初值表
变量定义伪指令最常使用
变量名
变量名为用户自定义标识符,表示初值表首
元素的逻辑地址;用这个符号表示地址,常 称为符号地址 变量名可以没有。这种情况,汇编程序将直 接为初值表分配空间,无符号地址 设置变量名是为了方便存取它指示的存储单 元
ALIGN n
;从n的整数倍地址开始
3.2.3 变量和标号的属性
① 地址属性
标号和名字对应存储单元的逻辑地址 逻辑地址包括:段地址和偏移地址
② 类型属性
标 号 、 子 程 序 名 的 类 型 可 以 是 NEAR (近)和FAR(远),分别表示段内或 段间 变量名的类型可以是BYTE(字节)、 WORD(字)和DWORD(双字)等
其他数据单元定义伪指令
定义3字伪指令DF——用于为一个或多个6
字节变量分配空间及初始化
6字节常用在32位CPU中表示一个48位远指针 (16位段选择器:32位偏移地址) 定义4字伪指令DQ——用于为一个或多个8
字节变量分配空间及初始化
8字节变量可以表达一个64位整数
定义10字节伪指令DT——用于为一个或
2. 数值表达式
数值表达式一般是指由运算符连接的各种常
数所构成的表达式 汇编程序在汇编过程中计算表达式,最终得 到一个数值 程序运行之前,就已经计算出了表达式;所 以,程序运行速度没有变慢,但增强程序的 可读性 MASM对除伪指令外各种汇编时处理的指令 统称为操作符(Operator)
地址操作符
取得名字或标号的段地址和偏移地
址两个属性 [ ] 将括起的表达式作为存储器地址 $ 当前偏移地址 : 采用指定的段地址寄存器 OFFSET 名字/标号
返回名字或标号的偏移地址
SEG 名字/标号
返回名字或标号的段地址
array
org $+10 db 45,45h 加4个字节单元 .code mov ax,seg array mov ds,ax mov bx,offset array ;等价于 lea bx,array mov cl,array+4 ;等效于 mov cl,array[4] mov ax,es:[2000h]