第三章 汇编语言格式
汇编语言程序格式
![汇编语言程序格式](https://img.taocdn.com/s3/m/31a8bf7a366baf1ffc4ffe4733687e21af45fff6.png)
汇编语言程序格式编程语言是计算机与人之间交流的桥梁,通过编写程序代码,我们可以指导计算机执行特定的任务。
汇编语言是一种底层的编程语言,它直接与计算机硬件进行交互,并提供了对机器指令的精细控制。
在编写汇编语言程序时,我们需要遵循一定的格式,以确保程序的正确性和可读性。
本文将介绍汇编语言程序的格式要求。
一、程序结构在编写汇编语言程序时,需要明确的程序结构是很重要的。
一个典型的汇编语言程序由如下几个部分组成:1. 数据段(.data):用于定义程序中使用的数据,如变量、常量等。
2. 代码段(.text):包含实际的机器指令,用于执行特定的任务。
3. 其他段(如堆栈段):根据需要定义的其他段。
二、指令格式每个汇编指令都有特定的格式,以便告诉计算机应该执行什么操作。
一个标准的汇编指令格式通常包含如下几个部分:1. 操作码(Opcode):用于指定要执行的操作,如“mov”用于将数据从一个位置移动到另一个位置。
2. 操作数(Operand):操作数描述了要对其进行操作的数据。
操作数可以是立即数、寄存器或内存地址等。
3. 注释(Comment):注释用于解释指令的作用和目的,提高程序的可读性。
三、指令的排列在编写汇编语言程序时,指令的排列很重要。
正确的指令排列可以提高程序执行效率和可读性。
一般而言,指令按照执行的顺序排列,具有逻辑关系的指令可以分组编写。
四、标签和跳转在程序中,我们常常需要使用标签和跳转指令来实现条件执行和循环等功能。
标签是程序中的一个标记,用于标识某个位置,而跳转指令则会根据一定的条件,跳转到指定的标签处继续执行。
在使用标签和跳转指令时,需要注意以下几点:1. 标签需要以冒号(:)结尾,以便与其他变量或指令进行区分。
2. 跳转指令一般以条件代码作为前缀,如“je”(等于跳转)、“jne”(不等于跳转)等。
五、宏定义宏定义是一种将一段常用代码片段定义为简单的符号表示的方式。
在汇编语言中使用宏定义可以提高代码的可读性和重用性。
第3章汇编指令.ppt
![第3章汇编指令.ppt](https://img.taocdn.com/s3/m/27f66ffff121dd36a22d8216.png)
这两条指令均表示程序在当前位置处原地“踏步”。
5、“ * ”处于汇编语句中的第一列时,表示该行 为注释语句。 “ ;”之后的内容为注释。如:
*为日后的阅读提供方便而加注释* LDA #$5A ;传数指令
§3.1 M68HC08汇编语言的相关约定
6、M68HC08指令系统中的操作数多数为8位,但可 以通过在字节数前面加“>”的方法将其扩展为16位。
TAX ;A→X TXA ;X→A
§3.2 M68HC08寻址方式
3.2.2 立即寻址方式(IMM) 立即寻址方式中,操作数包含在操作码的后继字符 中,立即寻址指令多为2个字节,第一字节为操作码, 第二字节为操作数。 LDA #%01011010 ;%01011010→A ADD #$30 ; (A+$30)→A ADC #$30 ; (A+$30+C)→A AND #$FF ; (A∧$FF)→A LDHX #$8030 ;$8030→H:X中,80→H,30→X
移一位。
§3.2 M68HC08寻址方式
3.2.7 堆栈寻址方式
(2) 16偏移量堆栈寻址
LDA $0110,SP ; (SP+0110H)→A
ADD $0120,SP AND $0130,SP
; A+(SP+0120H)→A ; A∧(SP+0123H)→A
§3.2 M68HC08寻址方式
3.2.8 存储器到存储器寻址 指令格式:MOV 源操作数地址,目的操作数地址 (1)立即寻址到直接寻址(IMD)
LDA $0110,X ; (H:X+$0110)→A INC $0110,X ;(H:X+$0110)+1→(H:X+$0110) 变址寻址方式中三种方式都可以访问64K字节空间, 但汇编后的指令有长短,速度有快慢。无偏移量指 令最短,速度最快,扩展寻址方式指令最长,速度 最慢。
汇编语言-程序格式
![汇编语言-程序格式](https://img.taocdn.com/s3/m/680d237a4a35eefdc8d376eeaeaad1f34793116a.png)
每一个字节数据项只占用一个字节存储单元 例:COUNT DB 100 DB 0DH ,0AH , ‘$’ TABLE DB 0 , 1 , 4 , 9 , 16
定义字节数据项(DB)
每一个字数据项只占用两个字节存储单元 例:FLAG DW 2FCDH, 100,-1 VECT DW 0 DW 100H
伪指令定义符:规定了伪指令的功能 参数:说明伪指令操作的对象,如常数(数值表达式)等 名称:给所定义的内容起的名称。 在汇编语言中,名字和标号很容易区分,名字后面没有冒号,而标号后一定用冒号。 标号和名字最多由31个字母、数字及规定的特殊字符组成,并且不能以数字来开头。 标号和名字不能是汇编语言的保留字,如不能是“MOV”。 汇编语言不区分保留字中字母的大小写。如“MOV AX ,03H”等同于“mov ax , 03h” 伪指令有多种,常见的如: (1)段定义伪操作 (2)数值数据定义及存储器分配 (3)符号数据定义 (4)程序开始和结束伪操作 (5)表达式赋值伪操作 此外还有基数控制伪操作、对准伪操作等。
等号语句(=) 汇编语言专门提供了符号语句来定义符号常数,即用符号表示一个常数。等号语句的一般格式如下: 符号名 = 数值表达式 例如:XX = 10 用符号定义语句可被重新定义。 例如: ABCD = 1 ABCD = 100
3. 定义符号名语句 格式:符号名 LABEL 类型 其中类型可以是BYTE、WORD、DWORD、NEAR、FAR,其中前3项对应于数据项,后2项对应于可执行代码。 功能:指定为某一类型的符号,且该符号的段属性和偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同。 例如: BUFFER LABEL WORD BUFF DB 100 DUP(0) 定义了一个符号BUFFER,其类型是WORD。因为段属性与偏移属性和BUFF相同, 所以内容为0000H。 又如: QUIT LABEL FAR EXIT:MOV AH , 4CH “MOV AH , 4CH”有了QUIT和EXIT两个标号。
汇编语言(微机)第三章
![汇编语言(微机)第三章](https://img.taocdn.com/s3/m/a1d6f4d86c85ec3a86c2c5b8.png)
汇编语言源程序的格式
一般情况下,定位类型、组合类型和类别说明可以 不用。 注意:SEGMENT和ENDS语句必须成对使用。 例:定义一数据段DATA
DATA SEGMENT A DB '1234' B DW 12H
DATA ENDS
22
汇编语言源程序的格式
(2)偏移地址定位语句 ORG 格式:ORG 数值表达式 功能:指定在它之后的程序段或数据块所存放的起始地 址的偏移量。
SUB1: ?
RESU: ?
?
31
汇编语言源程序的格式
④ 用DUP重复因子初始化一个数据区
格式:N DUP (表达式)
?、数值、
数值表达式
重复次数 重复装入的内容
字符等
例1: DA1 DB 2 DUP(0) DA2 DB 2 DUP(‘AB’) DA3 DW 2 DUP(1)
DA1
00
00
DA2
41
LOP: ADD AL,[BX] ADC AH,0 INC BX LOOP LOP MOV [DI] ,AX MOV AH ,4CH INT 21H
CODE ENDS END START
9
汇编语言源程序的格式
汇编语言源程序的格式
二、指令性语句 [标号:] 操作码 [操作数] [;注释项]
操作码:指明操作的性质,说明计算机要执行的具体操 作。用助记符表示。
第三章:8086汇编语言程序设计
主讲教师:范新民
整理ppt
1
8086汇编语言程序设计
1 3.2.1 汇编语言源程序的格式 2 3.2.2 常量、标识符和表达式 3 3.2.3 指示性语句 4 3.2.4 指令性语句 5 3.2.5 宏指令
31MCS-51汇编语言指令格式
![31MCS-51汇编语言指令格式](https://img.taocdn.com/s3/m/0b96319b8bd63186bcebbcb4.png)
END
11
第一节 指令格式
P34 二、汇编指令格式 MCS-51单片机汇编语言指令的标准格式如下:
[标号:] 操作码 [目的操作数] [,源操作数] [;注释 ]
①
②
③
④
⑤
MAIN: ADD
A ,#10H
; (A)←(A)+10H
⑤注释部分是用户对该条指令或该段程序功能的说明。 它以分号“;”开头,可以用中文、英文或某些符号来表示。
第三章 89S51单片机指令系统 第一节 指令格式
教学目的 1、掌握MCS-51单片机汇编语言指令的标注
格式和常用符号的意义。 教学重点
汇编语言指令的标注格式和常用符号的意义 。
教学难点 汇编语言指令的标注格式和常用符号的意义 。
1
第一节 指令格式
P34 二、汇编指令格式 MCS-51单片机汇编语言指令的标准格式如下:
2000H 2002H 2004H 2005H 2006H 2007H 2008H
200AH
ORG 2000H START: MOV R0,#30H
MOV R2,#10H CLR A L1: MOV @R0,A INC R0 INC A L2: DJNZ R2,L1
L3: SJMP L3 END
;(R0)←30H
[标号:] 操作码 [目的操作数] [,源操作数] [;注释 ]
①
②
③
④
⑤
MAIN: ADD
A ,#10H
; (A)←(A)+10H
① 标号是用户设定的符号,它实际代表该指令所在的地址。 标号必须以字母开头,其后跟1—8个字母或数字,并以“:”结尾
2
第一节 指令格式
第三章第二节thumb指令集及汇编格式
![第三章第二节thumb指令集及汇编格式](https://img.taocdn.com/s3/m/e049285ccc22bcd127ff0c73.png)
第三章第二节thumb指令集及汇编格式
内嵌汇编
内嵌汇编(inline assembly)的语法如下:
asm(“指令” ); asm(“指令” );
第三章第二节thumb指令集及汇编格式
内嵌汇编代码举例
#include<stdio.h> void str_cpy(const char *src,char *dst) {
WFI
等待一个中断发生
第三章第二节thumb指令集及汇编格式
汇编语言设计
汇编语言程序设计更能充分发挥处理器的硬件 特性
两个优势
操作系统移植需要编写几百行底层硬件的汇编 语言程序,这是C语言不可取代的。
优化算法的时空效率,C语言的目标代码优化是 编译器完成的,而汇编语言的目标代码优化是 人工完成的。人是算法的创造者,也是编译器 的设计者,人工优化比编译器质量高。
int ch;
asm("mov r0,#1"); asm("mov r0, #1"); asm("add r0, r1");
}
第三章第二节thumb指令集及汇编格式
IAR的固件库
由ST公司开发,包括驱动程序和应用函数的 函数库
版本:3.4 优点:
入手快 便于开发,节约时间
B loop
;标号DOB没有顶格书写 ;命令不允许顶格书写 ;指令中大小写混合 ;无法跳转到loop标号,大小写 ;不一致
第三章第二节thumb指令集及汇编格式
几个重要伪指令
➢ 1. DCB:
标号 DCB 表达式
说明:DCB用于分配一块字节单元并用伪指令中指定的表达式 进行初始化。其中,表达式可以为使用双引号的字符串或0—— 255的数字,DCB可用“=”代替。
华中科技大学8086汇编讲义第三章宏汇编语言
![华中科技大学8086汇编讲义第三章宏汇编语言](https://img.taocdn.com/s3/m/ec6271ff846a561252d380eb6294dd88d0d23d0d.png)
第三章宏汇编语言每种计算机语言都规定了自己的字符、基本词汇、典型语句和语法规则。
同样,汇编语言也有自己的字符、基本词汇、典型语句和语法规则。
字符:ASCII字符基本词汇:符号指令(MOV、ADD)伪指令(DB、SEGMENT等)典型语句:●机器指令语句——对应机器指令的一种操作。
●伪指令语句——无机器语言与之对应,不生成机器指令。
●宏指令语句——一条宏指令对应多条机器指令,产生一组目标代码。
语法规则:基本语法单位(常量、变量、标号、表达式)前面的例子已介绍了源程序的基本结构、格式、名字的定义、语句格式,下面将更深入地介绍有关语法规则。
3.1表达式汇编程序的语句及程序格式都比较固定,语句中除正确选择操作符之外,主要问题在于正确表示操作数地址,这涉及到寻址方式,可以归结到地址表达式的使用。
表达式:由常数、寄存器、标号、变量加上运算符构成的式子。
3.1.1.常量与数值表达式一.常量常量:从源程序翻译成目标程序期间已经有确定数值的量。
用途:赋值、作立即数、位移量。
由常量与运算符组成的式子。
数值表达式在汇编期间进行运算,结果为常量。
汇编期间允许对常量进行3种运算:1.算术运算包括:+、–、*、/、模除(MOD,取余数)、右移、左移。
2.逻辑运算●逻辑乘:AND(与)●逻辑加:OR(或)●按位加:XOR(异或)●逻辑非:NOT(非)3.关系运算包括:相等(EQ)、不等(NE)、小于(L T)、大于(GT)、小于等于(LE)、大于等于(GE)。
运算结果:关系不成立,结果为0;关系成立,结果为–1(0FFFFH)。
如:N = 50M = (N EQ 50)该关系成立,M =–1。
3.1.2.变量、标号与地址表达式一.变量变量:数据存贮单元的名字。
(存放地址的符号表示)。
变量有三个属性:段、EA、类型。
其中类型由定义时的伪指令确定(DB、DW、DD、DT)。
变量的定义:格式:[变量名] 数据定义伪指令表达式[,…]数据定义伪指令:DB、DW、DD、DQ、DT等。
第3章汇编语言程序格式
![第3章汇编语言程序格式](https://img.taocdn.com/s3/m/4bece74b1ed9ad51f11df20d.png)
17
Compact 紧凑模型适合于数据量大但代码量小的 程序。在该模型下,代码段被限制在一个不大于 64KB的段内;而数据段则可以有多个,超过64KB。 代码是近访问的,而数据则可为远访问的。 Medium 中型模型是与紧凑模型互补的模型,适 合于数据量小但代码量大的程序。中型模式的代 码段可以超过64KB,有多个;但数据段只能有一 个不大于64KB的段。数据是近访问,而代码可远 访问。 Large 大型模式允许的代码段和数据段都有多个, 都可以超过64KB;但全部的静态数据(不能改变 的数据)仍限制在64K字节内.数据和代码都可以 远访问。
24
3.2.2 程序开始和结束伪操作
程序开始可用Name和TITLE作为模块的名字。 NAME的格式:NAME 模块名 汇编语言将以给出的”模块名”作为模块的名 字。 TITLE的格式:TITLE 标题 TITLE伪操作可指定列表文件中的每一页上打 印的标题 END表源程序结束的伪操作,格式为:END [标号] 用来指示汇编程序MASM到此结束汇编过程。 源程序的最后必须有一条END语句。可选的标号用 于指定程序开始执行点,连接程序将据此设置CS : 25 IP值
(3)使用类型是支持32位段而设置的属性,用来 说明使用16位寻址方式还是32位寻址方式 对于16位x86 CPU来说,它默认是16位段, 即USE16 而对于汇编32位x86 CPU指令时,它默认 采用32位段,即USE32;但可以使用USE16指 定标准的16位段 编写运行于实地址方式(8086工作方式)的汇 编语言程序,必须采用16位段
DOS下编程可选择前六种模型,一般可以选用 SMALL模型,TINY模式产生COM程序,其他 模型产生EXE程序,FLAT模型只能用于32位程 序。
汇编语言语句格式.
![汇编语言语句格式.](https://img.taocdn.com/s3/m/1bfa7f7a783e0912a2162af4.png)
• DATA SEGMENT • VAR1 DB 10,15,20 • VAR2 DW OFFFFH,100H • DATA ENDS • … • MOV AX,SEG VAR1;2000H • MOV SI,OFFSET VAR;0000H • MOV BX,SEG VAR2;2000H • MOV DI,OFFSET VAR2;0003H
• 例如:用符号代表地址表达式、变量 名和标号 • ADR EQU ES:[BX][SI] • VB EQU DATA_BYTE+1 • LI EQU FAR PTR SUB1 • ……. • MOV ADR ,AL • ADD BL,VB • JMP LI
• • • • • • •
例如: 用符号表示寄存器、指令助记符 AREG EQU AX M EQU MOV …… MOV AREG ,1234H M CX, BX
• 2.字符串常数 • 单引号或双引号引起来
3. 常数的使用 (1)在指令语句的源操作数中作立即数。如: ADD AL,0F5H MOV AX,‘AB’ MOV CX,’12’
(2)在指令语句中,可作为存储器操 作数寻址方式中的位移量。如; MOV AX,DS:[1000H] ADD 10H[DI],CX MOV AL,0ABH[BX] SUB DX,1234H[BP][SI]
• 等效于: • MOV AX,2000H • MOV SI,0 • MOV BX,2000H • MOV DI,3
• 2.TYPE 运算符 • TYPE的运算结果为代表变量或标号类型属 性的数字。
• • • • • • • •
例如: VA1 DB 12H,13H VA2 DW 10H,DUP(0) VA3 DD VA1 … MOV AL,TYPE VA1; MOV CX,TYPE VA2; MOV BL,TYPE VA3;
4.汇编语言语法及其程序格式
![4.汇编语言语法及其程序格式](https://img.taocdn.com/s3/m/9d1b6435ee06eff9aef807da.png)
11
第 四 章
汇 编 语 言 程 序 格 式
例如:Number_1 EQU 2; Loop_count EQU 2*5+Number_1 CallDos EQU <INT 21H> 注释: 1)程序中使用符号常数,而不使用具体数值,可 大大提高程序的易读性,而且使程序易于修改。使用 汇编语言编写程序,通常应遵循这一原则。 2)EQU右边的项允许出现符号,但该符号必须是 已经定义或即将定义的。 3)符号定义后即可在程序中使用,如 MOV CX,Loop_count CallDos
3.2.1 数值型参数
10
第 四 章
汇 编 语 言 程 序 格 式
1)基数控制伪指令(RADIX) RADIX n;n取2~16内的任意整数。 如“ RADIX 16”,使汇编程序把默认的基数改为 16,即没有加后缀的数表示十六进制数,非十六进制 数均应加后缀(含十进制数)。 2)符号常数定义伪指令(EQU、=) EQU 符号名 EQU 数值表达式 符号名 EQU <字符串>;5.X版用双引号。 给符号定义一个数值或把符号定义成另一个字符串; 也可以说使EQU两边的项等效,可以互相代换。
偏移量为变量
变量定义伪指令(4)
பைடு நூலகம்
18
第 四 章
汇 编 语 言 程 序 格 式
3.定义双字单元伪指令DD 以双字单元(4字节)为单位分配存储空间。初值 表中的每个数据是32位数据,可以是32位有符号或无符 号数,也可以用来表示一个“远指针”(高位字表示段 地 址,低位字表示偏移地址,可用做段间间接转移)。 vardd dd 0,?,12345678h far_point dd 00400078h(LDS SI,FAR_POINT) 4.其他数据定义伪指令 1)DF、DQ、DT 略 2)MASM6.0建议使用:BYTE/WORD/DWORD等 3)SBYTE/SWORD/SDWORD:有符号数专用。
《汇编语言》PPT课件
![《汇编语言》PPT课件](https://img.taocdn.com/s3/m/fc4586e1d5bbfd0a795673a0.png)
湘 §3.1 汇编语言指令格式 潭 计算机的指令系统是一套控制计算机操作的编码— 大 机器语言。计算机只能识别和执行机器语言的指令。 学 单 但机器语言实在太枯燥,太难记忆了。 片 机 汇编语言,高级语言 原 理 汇编程序 编译、解释 及 eg: MOV R0 ,#data 应 用 机器语言 机器语言 01111000 #data 编 著 组
§3.2 MCS-51的寻址方式
湘 潭 大 学 单 片 机 原 理 及 应 用 编 著 组
六、相对寻址
相对寻址方式是以当前的程序计数器 PC 值加上指 令中给定的偏移量rel所得的结果作为转移地址。一般 将相对转移指令操作码所在地址称为源地址,转移后 的地址称为目的地址,则有: 目的地址 = 源地址 + 相对转移指令字节数 + rel
(1007H)= 20H (1008H)= 14H (1009H)= 00H (100AH)= 12H
§3.1.2 汇编伪指令
湘 潭 大 学 单 片 机 原 理 及 应 用 编 著 组
六、DATA数据地址赋值伪指令 字符名称 DATA 表达式 这里的“字符名称”与标号不同(其后没有冒 号),但它是必须的,其功能是把“表达式”的值赋 给左边的“字符名称”。 DATA伪指令与EQU伪指令 的主要区别是:EQU定义的“字符名称”必须先定义 后使用,而DATA定义的“字符名称”没有这种限制, 故DATA伪指令通常用在源程序的开头或末尾。 例3-7: ORG 0100H AA DATA 35H DPTRA DATA 0AA00H MOV A,AA ;(35H) A MOV DPTR,#DPTRA ;0AA00H DPTR
二、 直接寻址
在指令中含有操作数的直接地址,该地址指出了参 与计算或传送的数据所在的字节单元或位的地址。 eg: ANL 70H,#48H ;(70H)^48H70H
汇编语言程序格式
![汇编语言程序格式](https://img.taocdn.com/s3/m/964debd79b89680202d82501.png)
MOV AX,C MOV ES,AX ADD AX,C1 ASSUME DS:C MOV AX,C MOV DS,AX MOV CX,C1 D ENDS END BEGIN
源程序结束伪指令
格式: END <表达式>
功能:用以标志整个程序的结束。
说明:该语句为源程序的最后一个语句。
表达式的值是一存储器地址,即为
2》等号伪指令
格式: <符号名> = <表达式> 功能:为常量、表达式定义一个等价的符 号名,不申请存储空间。 例 A = 5 MOV AX,A A = -10 MOV BX,A A = 20H MOV CX,A
3.段定义伪指令
格式:<段名> SEGMENT
. . .
例
<段名> ENDS DATA SEGMENT AA DW 10H,20H DATA ENDS STACK SEGMENT DB 100 DUP (0) STACK ENDS
1.段定义伪指令
<段名> SEGMENT [定位属性][组合属性][‘类别’]
┆ ┆ <段名> ENDS 功能:定义了一个以SEGMENT伪指令开始、以ENDS伪 指令结束、以段名命名的存储段。
3.2.1 段定义伪指令
2.假定伪指令
ASSUME <段寄存器名>:<段名> [,<段寄 存器名>:<段名> …] 功能:用来设定段寄存器与段之间的对应关 系。
类型运算符PTR举例
MOV BYTE PTR[SI+4],‘+’ 2BH 元 字节存储单
DAT DB 5 ,. . .4 , 7
. MOV AX , WORD PTR DAT ; 0405 . . . . A DW 1122H . , 3344H , 0
3_汇编语言程序格式
![3_汇编语言程序格式](https://img.taocdn.com/s3/m/d8b7f5375a8102d276a22fd0.png)
概述2 概述2
4
第
三
章
汇
编
语
言
程
序
格
式
3.1汇编语言程序的开发 3.1汇编语言程序的开发 3.1.1 汇编语言程序的语句格式
1)执行性语句 2)说明性语句
3.1.2 汇编语言的程序格式
1)简化段定义格式 2)完整段定义格式
3.1.3 汇编语言程序的开发过程
源程序的编辑、汇编、连接、 源程序的编辑、汇编、连接、调试
简化段定义格式
11
第
三
章
汇
编
语
言
程
序
格
式
例3.1b 完整段定义格式 3.1b ;lt301b.asm Stack segment stack dw 512 dup(?) Stack ends Data segment String db ‘…………’ Data ends code’ Code segment ‘code code assume cs:code,ds:data, ss:stack Start:mov ax,data
完整段定义格式( 完整段定义格式(e)
mov ds,ax mov dx,offset string mov ah,9 int 21h mov ax,4c00h int 21h code ends end start
返回3.1 返回3.1
12
第
三
章
汇
编
语
言
程
序
格
式
3.1.3 汇编语言程序的开发过程
1. 源程序的编辑 EDIT。 asm。 EDIT。扩展名必须是 .asm。 2. 源程序的汇编 6.x版本 版本: MASM 6.x版本:ml.exe 如 ml /c lt301a.asm 5.x版本 版本: MASM 5.x版本:masm.exe 如 masm lt301a.asm 3. 目标文件的连接 将一个或多个目标文件与库文件合并成一个可执 行文件( exe,.com) 行文件(.exe,.com) LINK lt301a.obj LINK的一般格式 的一般格式: LINK的一般格式: [/参数选项 obj文件列表 exe文件名 参数选项] 文件名, LINK [/参数选项] obj文件列表 [exe文件名,map 文件名,库文件名] 文件名,库文件名]
第3章 汇编语言程序格式
![第3章 汇编语言程序格式](https://img.taocdn.com/s3/m/7242d6cb856a561252d36f82.png)
③操作数可以保留存储空间,但不存入数据。 例3.9: ABC DB 0,?,?,?,0 DEF DW ?,60,?
0B45:0000 00 00 00 00 00 00 00 3C-00 00 00 00
④操作数字段还可以使用复制操作符来复制一个 多个或操作数。 格式:复制数 DUP (操作数,…,操作数)
2.表达式赋值伪操作 有时程序中多次出现同一个表达式,为方便起 见可以用赋值伪操作给表达式赋予一个名字。 格式: ⑴表达式名 EQU 表达式 表达式名:凡用到该表达式之处就可以用表达 式名来代替 表达式:操作数、可求出常数值的表达式、有 效的助记符
例:CONSTANT ALPHA EQU 256 数赋以符号名 EQU CONSTANT +7
start: mov ax, data-seg1 ;数据段地址放入ds mov ds, ax mov ax, data-seg2 ;附加段地址放入es mov es, ax …… Code_seg ends ;代码段结束 end start
∵ASSUNE伪操作只指定某一个段分配给哪一个段
寄存器,它并不把段地址装入段寄存器中,所以在 代码段中必须把段地址装入相应的段寄存器中。 SEGMENT 伪操作还可以增加类型及属性的说明; 格式如下:
⑵用MASM程序把源程序ASM转换成OBJ文件。 汇编语言的作用就是把源文件转换成二进制 代码表示的目标文件(称为OBJ文件)。 在转换的过程中,汇编程序对源程序进行二 遍扫视,如果源程序中有语法错误,则汇编 结束后,汇编程序将指出源程序中的错误, 用户还可以用编辑程序来修改源程序中的错 误,最后得到无语法错误的OBJ文件。
第3章 汇编语言程序格式
第3章 汇编语言程序格式
第三章 汇编语言格式
![第三章 汇编语言格式](https://img.taocdn.com/s3/m/ce7a683d10661ed9ad51f365.png)
表示将20个字节中的第 一个字节的地址赋予两 个不同类型的变量:字 节类型变量B_ARRAY和 字节型变量W_ARRAY
W_ARRAY DW 10(DUP(1234H))
DATASG SEGMENT
执行指令后,AX 、 DL 中的值分别是什么?
MOV AX, W_ARRAY
MOV DL, B_ARRAY
用法 常用于一个变量定义伪指令,或带标号的指令之前,为一
个变量或指令指定两个不同类型的名称;
WDATA LABEL WORD LOOP1 LABEL FAR BDATA DB 12H , 34H LOOP2: MOV AX , BX
符号名定义伪指令举例
DATASG SEGMENT B_ARRAY LABEL BYTE
功能将其后的变量或指令从下一个能被number整除的地址开始存放org100hd1db12halign4b1db43h100h101h102h103h104h105h106h107h108h12hd143hb1空出7个单元使得下个地址开始于4的倍数偏移量计数器引用符号org100hd1db12hw1dworg3b1db43h100h101h102h103h104h105h106h107h108h12hd101h01hw103h01h43hb1空出3个单元imm其值表示当前偏移量计数器的值imm的立即数用于构成地址或数据表达式功能33操作符与表达式属性操作符表达式表达式是由运算符操作符常量和变量等构成的式子属性操作符是面向变量或标号的331属性操作符变量和标号是在数据定义和编写程序中设置的标识符
关于堆栈段
堆栈段的定义 STACK1 SEGMENT STACK
DW 256 DUP(?) STACK1 ENDS
若源程序中不定义堆栈段,系统会自动指定一个64KB的 区域作为堆栈段,但连接时会产生一个警告信息: warning xxxx: no stack segment 此警告信息不影响程序正常运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表示将20个字节中的第 一个字节的地址赋予两 个不同类型的变量:字 节类型变量B_ARRAY和 字节型变量W_ARRAY
W_ARRAY DW 10(DUP(1234H))
DATASG SEGMENT
执行指令后,AX 、 DL 中的值分别是什么?
MOV AX, W_ARRAY
MOV DL, B_ARRAY
由等值伪指令和等号伪指令定义的符号名,程序中任何位置 出现该符号名,汇编程序在翻译时首先用其对应的表达式对
代替,然后检查代替后的结果是否有语法错误;
被定义的符号名不占据内存空间;
符号定义伪指令——符号名定义伪指令
符号名定义伪指令LABEL <符号名> LABEL <类型>
功能 定义一个变量或标号,并指定其类型;
DF(三字)、DQ(四字)、DT(十字节)
变量定义伪指令举例1——常数和表达式
例1. 变量定义伪指令的操作数可是常数, A1
……
0A
10
也可是表达式,但在内存中保存的均 A2 64 100
为二进制补码形式的常数。 A1 DB 10
00
00
100H
01
FF
-1
A2 DW 100,100H,-1
FF
A3 20
MOV AX, PO10R0T1 PALDUDS AX, N1U2M0 MOV AX, N1E2W0E MOV COCUXNT,AX
符号定义伪指令——等号伪指令=
等号伪指令 <标识符> = <常数表达式>
功能
与EQU语句相似,但在同一程序中可对一个符号名重 复定义。
DATA = 2 DATA = DATA+2
4*8
A3 DD 4*8
00 =32
内存分配情况如右:
00 =20H 00
……
内存变量定义伪指令举例2
——字符、字符串
……
例2. 操作数是字符或字符串时,以 ASCII码的形式存放。
STR1 DB ‘A’,’B’
STR1 41 42
STR2 42 41
超在过对两文S个T档字R进符2的行字编D符W辑串之只前能‘,用ABD需B’新伪建指令文定档义。。STR3 41
;程序开始
;对段寄存器DS初始化 ;(AL)=5 ;(AL)=8 ;(AL)=38H ;(DL)=38H
;调用int 21H的2号-打印功能
MOV AH,4CH INT 21H CODES ENDS END START
;调用int 21H的4CH号-退回DOS ;代码段定义结束 ;程序结束
编写的源程序要经过汇编程序转换成目标文件,这 时源程序要告知编译器数据区的定义、指令系统的选择、 段的定义、程序的开始和结束等信息这类工作由伪指令 完成。
段体 数据段中主要为数据定义伪指令; 代码段中主要为汇编指令。
段说明伪指令ASSUME
格式
ASSUME 段寄存器名:段名[,段寄存器名:段名,…]
功能: 指明段和段寄存器的对应关系。
例如:ASSUME CS:CODE1,DS:DATA1,ES:DATA2 取消段指定:
ASSUME 段寄存器名:NOTHING
汇编语言程序的语句除指令以外,还可以由伪指 令和宏指令组成
汇编语言源程序的框架
下面是一个典型的.EXE程序的源程序框架
DATAS SEGMENT FIVE DB 5
DATAS ENDS
STACKS SEGMENT DB 128 DUP (?)
STACKS ENDS
;定义数据段
;定义字节单元 ;数据段定AS义SU结M束E伪指令
203H 0DH
DB 23H
204H 0AH
ORG 200H
205H —
X3
X2 DB ‘ABC’,0DH,0AH
X3 DB ?
对齐伪指令ALIGN
ALIGN <number>
100H 12H
D1
number必须是2的幂, 例如:2、4、8、……
用法 常用于一个变量定义伪指令,或带标号的指令之前,为一
个变量或指令指定两个不同类型的名称;
WDATA LABEL WORD LOOP1 LABEL FAR BDATA DB 12H , 34H LOOP2: MOV AX , BX
符号名定义伪指令举例
DATASG SEGMENT B_ARRAY LABEL BYTE
计算机上运行汇编语言程序的步骤是:
(1) 用编辑程序建立ASM源文件 (2) 用MASM程序把ASM文件转换成OBJ文件 (3) 用LINK程序把OBJ文件转换成EXE文件 (4) 用DOS命令键入文件名运行该程序
汇编程序的主要功能
(1) 检查源程序 (2) 检查源程序中的语法错,并给出错误信息 (3) 产生源程序的目标程序,并给出列表文件 (4) 展开宏指令
关于堆栈段
堆栈段的定义 STACK1 SEGMENT STACK
DW 256 DUP(?) STACK1 ENDS
若源程序中不定义堆栈段,系统会自动指定一个64KB的 区域作为堆栈段,但连接时会产生一个警告信息: warning xxxx: no stack segment 此警告信息不影响程序正常运行。
执行指令MOV AX, W_ARRAY 是将具有10个字数据的数组中的 第一个字数据1234赋值给AX。指 令MOV DL, B_ARRAY是将具有 10个字数据的数组中的第一个字 节数据34H赋值给DL.
3.2.4 调整偏移量伪指令
使用目的
调整数据或代码存放的起始位置。
为什么要调整
为使系统的访存操作更为有效。
1、什么是伪指令? 2、伪指令和指令语句有什么区别?
伪指令语句 是一种汇编程序在汇编时用来控制汇编过程以及向汇编
程序提供汇编相关信息的指示性语句。
与指令语句的区别
指令语句:汇编程序对源程序进行汇编时,将指令语句翻译成 机器指令,指令语句与机器指令一一对应,机器指令在程序执行 期间执行. 伪操作:汇编程序对源程序进行汇编时,由汇编程序执行伪指 令语句其本身并不直接产生可供计算机硬件执行的机器目标 代码,它仅是一种非执行语句。
汇编语言程序 设计
—— 第三章
第三章 汇编语言程序格式
要求
1 掌握并能使用汇编语言的常用伪操作符及伪指令 语句
2 掌握汇编语言源程序格式计算机实现步骤 3 学会编写简单的汇编语言程序
3.1 汇编程序功能
编辑程序 P.ASM 汇编程序 P.OBJ 连接程序 P.EXE
汇编语言程序的建立及汇编过程
DATA1 DB 100 DUP(0)
DATA1 00 00 … 00
DATA2 DB
3 DUP (3 DUP (2) , 7)
100个
02 02 02 07 02 02 02 07 02 02 02 07
DATA2
内存变量定义伪指令练习
请写出下列变量定义伪指令的内存分配情况。 DATA1 DB 01H , ’A’ , ’123’ , ’BCD’ DB 1 , 2 DUP(2 , 3) DATA2 DW 0AB1CH , ? , 0 DW 20 , 14H , -1 DATA3 DD 234H , ?
伪操作(又称伪指令)的作用是指导汇编程序如何汇编源程序。
段定义伪指令 变量定义伪指令 符号定义伪指令 调整偏移量伪指令
3.2.1段定义伪指令
格式
段名 SEGMENT [对齐类型] [组合类型] [类别]
……
;段体
段名 ENDS
段名 合法标识符,首尾段名要一致;区别于变量和标号;
06
--
BUF1 DB 5 , 6 , ?
BUF2 00
01
BUF2 DW 100H , ?
--
--
……
内存变量定义伪指令举例4 ——分配连续的存储空间
DUP复制说明符
重复次数n DUP (重复数据表) 该说明符可嵌套使用
例4. 操作数中可以使用DUP复制说明符,定义重复数据,分 配连续的存储空间。
STR3 DD ‘BA’
42
00
STR4 DB ‘ABCD’
00
STR4 41
** 一般,在定义字符串时,经常使用DB来
42
定义,以使字符按存放顺序。
43
44
……
内存变量定义伪指令举例3 ——只分配存储空间
例3. 若在汇编期间只需要为变量分配
存储空间,而不赋初值,则可以使
BUF1
…… 05
用“?”作为操作数。
<标识符> EQU <表达式>
该语句仅为标识符来赋功值能,并不会分配存储空间, 汇编用程左序边会的将标源识程符序来中代的替标右识边符的替表换达成式对应的数值;
举例
DATA EQU 2
;定义一个常数
NUEMQU语E句Q在U同D一A程TA序+2中,对;定一义个一符个号数名值只表能达定式义一次。
PLUS EQU ADD
举例
等号伪指令举例
DATASG SEGMENT PORT1 = 100 PORT1 = PORT1+20 NEWE = PORT1 DATASG SEGMENT
MOV AX, PORT1 MOV CX, NEWE
MOV AX, PO12R0T1 MOV CX, N1E2W0E
符号定义伪指令注意点
3.2.2 简单的变量定义伪指令
指令格式 [变量名] 助记符 操作数 [ ; 注释]
合法的标识 符
即每个操作数在内存中存 放所占的字节数
DB(字节)、DW(字)、DD(双字)
•可以是常量数据,也可以 是表达式,或是字符、字符 串; •可以为变量只分配存储空 间,而不赋具体的数值; •可以使用复制说明符定义 一段连续的存储空间;