汇编语言指令的构成
汇编语言的名词解释

汇编语言的名词解释1. 什么是汇编语言?汇编语言(Assembly Language)是一种低级计算机语言,用于直接控制计算机硬件操作的编程语言。
它是由一系列符号化的指令组成,每条指令对应着一条特定的机器码(二进制代码)。
汇编语言与计算机体系结构紧密相关,不同的计算机体系结构使用不同的汇编语言。
与高级语言相比,汇编语言更接近底层硬件,并且更加直观。
通过使用特定的助记符和操作码,程序员可以直接操作寄存器、内存和其他硬件资源。
尽管汇编语言通常比高级语言更难以理解和编写,但它可以提供更高的性能和对底层硬件的更好控制。
2. 汇编指令集2.1 指令在汇编语言中,指令是最基本的操作单位。
每条指令执行一个特定的操作,并且可能包含一个或多个操作数。
2.2 寄存器寄存器是位于CPU内部的小型存储单元,用于临时存储数据和执行算术逻辑运算。
不同架构的计算机具有不同数量和类型的寄存器。
例如,x86架构的计算机有通用寄存器、段寄存器、标志寄存器等。
2.3 内存内存是计算机中用于存储程序和数据的地方。
在汇编语言中,内存可以通过地址来访问。
地址可以是直接指定的常数,也可以是通过寄存器间接指定的。
2.4 操作数操作数是指令所操作的数据。
它可以是立即数(常数)、寄存器、内存位置或者两个操作数之间的运算结果。
2.5 标志位标志位是一组二进制标志,用于表示某些特殊状态或条件。
例如,零标志位(ZF)用于表示上一条指令执行结果是否为零。
3. 汇编语言与机器码汇编语言与机器码之间存在一对一的映射关系。
每条汇编指令都对应着一个特定的机器码,它由一串二进制数字表示,并被计算机硬件直接执行。
汇编语言使用助记符(Mnemonic)来代替复杂而难以记忆的二进制代码。
例如,MOV指令用于将数据从一个位置复制到另一个位置,在x86架构中对应着机器码89。
编写汇编语言程序时,程序员需要将高级语言代码转换为汇编指令。
这可以通过手动编写汇编指令来完成,也可以通过汇编器(Assembler)自动将高级语言代码转换为汇编指令。
单片机指令集的汇编语言编程方法介绍

单片机指令集的汇编语言编程方法介绍汇编语言是一种低级语言,它直接与计算机硬件进行交互,被广泛应用于单片机编程中。
本文将介绍单片机指令集的汇编语言编程方法。
一、简介单片机指令集是特定型号单片机支持的操作指令的集合。
每个指令都对应着特定的功能,通过组合和调用这些指令,可以实现复杂的计算和控制任务。
二、基本指令1. 数据传送指令数据传送指令用于将数据从一个位置传送到另一个位置。
常见的指令有MOV(将源操作数传送到目的操作数)、LDR(将存储器位置的数据传送到寄存器)和STR(将寄存器中的数据传送到存储器位置)等。
2. 算术指令算术指令用于进行数学运算,包括加法、减法、乘法和除法等。
常见的指令有ADD(将两个操作数相加并将结果存储到目的操作数中)、SUB(将目的操作数减去源操作数并将结果存储到目的操作数中)等。
3. 逻辑指令逻辑指令用于进行逻辑运算,包括与、或、非和异或等。
常见的指令有AND(将两个操作数进行按位与运算并将结果存储到目的操作数中)、ORR(将两个操作数进行按位或运算并将结果存储到目的操作数中)等。
4. 控制指令控制指令用于控制程序的执行流程,包括无条件跳转、条件跳转和中断等。
常见的指令有B(无条件跳转到指定的地址执行)、BEQ (当条件满足时跳转到指定的地址执行)等。
三、编程方法1. 熟悉指令集编程前需要详细了解所使用的单片机的指令集,包括指令的功能、操作数的类型和寻址方式等。
只有深入了解指令集,才能灵活运用指令编写程序。
2. 设计算法在开始编程之前,需要分析问题,设计出解决问题的算法。
算法应考虑输入、处理和输出等方面,合理利用指令集中的指令实现算法的逻辑。
3. 编写汇编程序根据算法,以汇编语言的格式编写程序。
程序的编写过程需要遵循指令的语法规则和寻址方式,并注意程序的可读性和效率。
4. 调试和优化程序编写完成后,需要进行程序的调试和优化。
通过单步执行程序,观察和检查程序执行过程中的中间结果,确保程序能够正确地执行。
汇编语言的运行方式

汇编语言的运行方式汇编语言是一种低级别的程序设计语言,与机器语言非常接近。
它直接与计算机硬件进行交互,可以实现对硬件的精细控制。
本文将详细探讨汇编语言的运行方式,包括指令集、编译过程和执行过程等。
一、指令集汇编语言的指令集是一组由机器码表示的基本操作,用于完成各种计算机操作。
指令集由操作码和操作数组成,操作码表示操作的类型,操作数则提供了操作所需的数据。
汇编语言的指令集通常为特定的计算机体系结构而定义,不同的处理器具有不同的指令集。
常见的指令包括数据传输指令、算术运算指令、逻辑运算指令和控制指令等。
二、编译过程将汇编语言程序翻译成机器语言的过程称为编译。
编译过程分为两个阶段:汇编和链接。
(1)汇编:汇编是将汇编代码转化为机器码的过程。
编写好的汇编程序被称为源代码,通过汇编器将源代码翻译成机器语言的指令。
(2)链接:链接是将多个汇编程序文件组合成一个可执行程序的过程。
链接器将不同文件中的代码、数据和库函数合并,解决符号引用、地址重定位等问题。
三、执行过程汇编语言程序的执行过程与机器语言非常相似,分为取指、解码、执行和写回四个阶段。
(1)取指:处理器从内存中读取下一条指令,并将其存储在指令寄存器中。
(2)解码:处理器解析指令,确定指令的类型和操作数。
(3)执行:处理器执行指令,进行数据传输、算术运算、逻辑运算或控制操作。
(4)写回:将执行结果写回内存或寄存器,更新程序状态。
汇编语言程序通过不断重复上述四个阶段,按照指令序列依次执行,完成各种计算和操作。
四、应用领域汇编语言虽然复杂而繁琐,但在一些特定的应用领域仍然发挥着重要作用。
(1)嵌入式系统开发:汇编语言可以直接操作硬件,实现对嵌入式系统的高效控制。
(2)低级优化:在对性能要求极高的软件中,使用汇编语言可以进行底层的优化,提高程序的执行效率。
(3)逆向工程:汇编语言是逆向工程的基础,通过分析汇编代码可以理解和修改程序的行为。
总结:汇编语言是一种与计算机硬件直接交互的低级别程序设计语言。
汇编语言试题及参考答案

汇编语言试题及参考答案一、选择题(每题2分,共20分)1. 汇编语言中的指令通常由哪两部分组成?A. 操作码和操作数B. 地址和数据C. 指令和数据D. 操作码和地址答案:A2. 以下哪个不是汇编语言中的寻址方式?A. 直接寻址B. 间接寻址C. 立即寻址D. 寄存器寻址答案:B3. 在汇编语言中,以下哪个指令用于将数据从内存加载到寄存器中?A. MOVB. CMPC. ADDD. SUB答案:A4. 汇编语言中,以下哪个指令用于比较两个寄存器的内容?A. MOVB. CMPC. ADDD. SUB答案:B5. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与立即数相加?A. MOVB. CMPC. ADDD. SUB答案:C6. 汇编语言中的条件跳转指令通常使用哪些条件?A. 零、非零B. 正、负C. 溢出、非溢出D. 所有上述条件答案:D7. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与另一个寄存器的内容相减?A. MOVB. CMPC. ADDD. SUB答案:D8. 汇编语言中的循环结构通常使用哪种类型的跳转指令?A. 无条件跳转B. 条件跳转C. 直接跳转D. 间接跳转答案:B9. 在汇编语言中,以下哪个指令用于将一个寄存器的内容与内存中的内容相加?A. MOVB. CMPC. ADDD. SUB答案:C10. 汇编语言中,以下哪个指令用于将一个寄存器的内容与另一个寄存器的内容进行逻辑与操作?A. ANDB. ORC. NOTD. XOR答案:A二、填空题(每题2分,共20分)1. 在汇编语言中,指令MOV AX, BX的作用是将寄存器________的内容复制到寄存器________中。
答案:BX,AX2. 汇编语言中的指令JMP FAR PTR 100H:200H的作用是跳转到内存地址________。
答案:100H:200H3. 汇编语言中,指令CALL的作用是________。
PIC8位单片机汇编语言常用指令的识读

成都 史为
三、面向字节、常数与控制操作的指令
1传送立即数至工作寄存器W指令
指令格式:MOVLW k;k表示常数、立即数和标号
说明:MOVLW是Move Literal to w的缩写
实例:MOVL 0x1E;常数30送W
2I/O口控制寄存器TRIS设置指令
指令格式;TRIS f
说明;TRIS f是Load TRIS Register的缩写。其功能是把工作寄存器W的内容送入I/O口控制寄存器f。当W=0时,置对应I/O口为输出;W=1,置I/O口为输入。
(3) CLRF COUNT1;对计数器1清零
(4)LOOP INCFSZ COUNT1;计数器1加1计数器1加
1结果不为零,跳转循环 (5) Nhomakorabea GOTO LOOP ;
(6) DECTSZ CPUNT2 ;计数2减1计数器2减1
结果不为零,跳转循环重
复执行第4条指令
(7) GOTO LOOP ;
(8) RETLW 0 ;子程序执行结束返回
说明:程序中的注释已分别对每条指令的功能作了说明,补充说明1当执行第(4)条加1指令结果为零时,就间跳转到执行第(6)条指令。2当执行第(6)条减1指令结果为零时,就间跳转到第(8)条子程序返回,整个延时指令才算完成。3计数器1或2代表PIC中某个寄存器,该寄存器由程序开始的伪指令赋值决定(关于伪指令今后将作专门介绍)。
MOVWF W_TEMP ;将W内容存入到临时寄存器
汇编语言设计实践:第4部分 基本汇编语言

4.1 汇编语言语句种类及其格式
汇编语言的程序格式
• 完整的汇编语言源程序由段组成,段由指令语句与 伪指令语句构成
• 一个汇编语言源程序可以包含若干个代码段、数据 段、附加段或堆栈段,段与段之间的顺序可随意排 列
• 需独立运行的程序必须包含一个代码段,并指示程 序执行的起始点,一个程序只有一个起始点
• 所有的指令语句必须位于某一个代码段内,伪指令 语句可根据需要位于任一段内或段外
汇编语言的语句可以分为指令语句和伪指令语句
•指令语句——产生使CPU产生动作、可供机器
执行的机器目标代码
•伪指令语句——不产生CPU动作、在程序执行
前由汇编程序处理的说明性语句,例如,数据说明、 变量定义等等
2
一、指令语句
每一条指令语句在汇编时都要产生一个可供CPU执 行的机器目标代码,它又叫可执行语句。
指令语句的一般格式为: 标号 : 操作码
, 操作数
; 注释
一条指令语句最多可以包含4个字段 例 L1:MOV AH,0A0H ;将0A0H放入AH
3
1.标号字段
标号是可选字段,它后面必须有“:”。标号是一条 指令的符号地址,代表了该指令的第一个字节存放 地址。
注释字段可以是一条指令的后面部分,也可以是 整个语句行。
例:
LABEL1: ADD AX,BX; 功能为AX<=(AX)+(BX)
;后面的程序段将完成两次对存储器的访问
MOV AX, W_VAR1
MOV W_VAR2, AX
7
二、伪指令语句
伪指令语句又叫命令语句。 伪指令本身并不产生对应的机器目标代码。它仅 仅是告诉汇编程序对其后面的指令语句和伪指令 语句的操作数应该如何处理。
第3章汇编指令.ppt

这两条指令均表示程序在当前位置处原地“踏步”。
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字节空间, 但汇编后的指令有长短,速度有快慢。无偏移量指 令最短,速度最快,扩展寻址方式指令最长,速度 最慢。
单片机习题集及答案

单片机习题集及答案1.在MCS-51中,有7种寻址方式,它们分别为立即数寻、寄存器寻址、直接寻址、寄存器间接寻址、相对寻址、变址寻址和位寻址。
2.汇编语言的指令格式为标号:操作码操作数注释。
3.数据传送类指令执行完毕,源操作数的内容不会(会/不会)丢失。
4.8051内部RAM从20H至2FH既可位寻址,又可间接寻址,位地址空间从00H到7FH。
5.MCS-51单片机指令系统中,指令长度有一字节、二字节和(三)字节,指令执行时间有一个机器周期、两个机器周期和四机器周期,乘法指令需四机器周期。
6.MOV A,20H中,20H的寻址方式称之为_直接___;SETB 20H的寻址方式为位寻址。
7.关于堆栈类操作的两条指令分别是_PUSH(入栈)指令_ 、POP(出栈)指令;堆栈操作只能是寄存器间接寻址寻址。
8.访问8031片外数据存储器MOVX指令采用的是寄存器间接寻址寻址方式。
访问片外序存储器MOVC指令采用的是变址寻址方式。
9.设(A)=55H,(R5)=AAH,则执行ANL A,R5指令后的结果是(A)= 00H,(R5)= AAH;则执行ORL A,R5指令后的结果是(A)= FFH ,(R5)= AAF;则执行XRL A,R5指令后的结果是(A)= FFH,(R5)= AAH 。
10.伪指令不产生(产生/不产生)可执行目标代码。
汇编语言程序结束的指令为END。
11.DA指令跟在ADD,ADDC指令的后面,用与二进制数与BCD码的调整。
若(A)=0AH ,执行DA A指令后,(A)= 15。
单项选择题1.JMP跳转范围是:(D. -128~127B)2.MCS—51系列单片机最长的一条指令需 B. 4个机器周期。
3.MOV A,@R0这条指令中@R0的寻址方式称为:(B. 寄存器间接寻址)4.在CPU内部,反映程序运行状态或反映运算结果的特征寄存器是:B. PSW5.下列指令中正确的是:B. JBC TF0,L16.下列指令中错误的是:A. SETB 50H.07.将累加器的值压入堆栈的正确指令是:B. PUSH A8.下列那条减法指令是错误的:C. SUBBC9. 指令CJNE A ,#00H ,LOOP 影响PSW的哪一位:C.CY10. 在MUL AB指令中,若积超过255,则C. OV=111.在相对寻址方式中,寻址的结果体现在A.PC中12.在相对寻址方式中,"相对"两字是指相对于C.当前指令的末地址13.在寄存器间接寻址方式中,指定寄存器中存放的是B.操作数地址14.对程序存储器的读操作,只能使用D.MOVC指令15.必须进行十进制调整的十进制运算C.只有加法16.执行返回指令时,返回的断点是C.调用指令下一条指令的首地址17.下列指令中与进位标志位CY 无关的指令有D.无条件转移指令18.可以为访问程序存储器提供或构成地址的有D.PC、A、DPTR和SP 19.以下各项中不能用来对内部数据存储器进行访问的是A.数据指针DPTR20.若原来工作寄存器0组为当前寄存器组,现要改1组为当前寄存器组,不能使用指令C.MOV PSW.3,C21.不能为程序存储器提供和构成地址的有:D.PSW22.MCS-51汇编语言指令格式中,唯一不可缺少的部分是:B.操作码23.MCS—51的立即寻址方式中,立即数前面:D.应加前缀“#”号24.下列完成8031单片机内部数据传送的指令是:D.MOV direct,direct(25).MCS—51的立即寻址的指令中,立即数就是:A.放在寄存器R0中的内容26.单片机中PUSH和POP指令常用来:C.保护现场,恢复现场27.MCS—51寻址方式中,操作数Ri加前缀“@”号的寻址方式是:A.寄存器间接寻址28.MCS—51寻址方式中,位寻址的寻址空间是:D.片内RAM的20H~2FH字节中的所有位和部分专用寄存器SFR的位29.MCS—51寻址方式中,直接寻址的寻址空间是B.专用寄存器SFR30.执行指令MOVX A,@DPTR时,WR、RD脚的电平为:C.WR高电平,RD低电平31.主程序执行完ACALL后返回主程序后,堆栈指针SP的值:A.不变32.单片机中使用MOVX A,@R1指令寻址数据存贮器1050H 单元。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一讲第四章汇编语言程序设计-语句特点、伪指令回顾:8086/8088的内部结构、寄存器功能和工作过程,指令格式、寻址方式和功能。
重点和纲要:汇编语言程序设计-语句特点、伪指令(了解汇编的概念及其方法, 掌握汇编程序的基本格式,常用运算符的使用方法,汇编的步骤。
了解伪指令的功能,掌握定义数据、符号、段、过程等伪指令的使用方法,能编写格式正确的汇编程序)。
讲授内容:4.1 汇编语言的基本元素一、汇编语言的语句格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。
每个语句由1~4个部分组成,其格式是:[标号] 指令助记符[操作数][;注解]其中用方括号括起来的部分,可以有也可以没有。
每部分之间用空格(至少一个)分开,一行最多可有132个字符。
1.标识符是给指令或某一存储单元地址所起的名字。
可由下列字符组成:字母:A ~ z ;数字:0 ~ 9 ;特殊字符:?、·、@、一、$ 。
数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。
标识符最长为31个字符。
当标识符后跟冒号时,表示是标号。
它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。
2.指令助记符表示不同操作的指令,可以是8088的指令助记符,也可以是伪指令。
3.操作数是指令执行的对象。
依指令的要求,可能有一个、两个或者没有, 例如: RET ;无操作数COUNT : INC CX ;一个操作数 如果是伪指令,则可能有多个操作数,例如: COST DB 3,4,5,6,7 ;5个操作数 MOV AX ,[BP 十4] ;第二个操作数为表达式 4.注解该项可有可无,是为源程序所加的注解,用于提高程序的可读性。
二、 汇编语言的运算符1.算术运算符、逻辑运算符和关系运算符① 算术运算符可以应用于数字操作数,结果也是数字。
而应用于存储器操作数时,只有+、- 运算符有意义。
2.取值运算符SEG 、OFFSET 、TYPE 、SIZE 和LENGTH · SEG 和OFFSET 分别给出一个变量或标号的段地址和偏移量。
例如,定义: SLOT DW 25则:MOV AX ,SLOT ;从SLOT 地址中取一个字送入AXMOV AX ,SEG SLOT ;将SLOT 所在段的段地址送入AX MOV AX ,OFFSET SLOT ;将SLOT 所在段的段内偏移地址送AX· TYPE 操作符返回一个表示存储器操作数类型的数值。
各种存储器地址操作数类型部分的值如表3-1所示。
· LENGTH 和SIZE 操作符只应用于数据存储器操作数。
(用DB/DW/DD 等定义的操作数)LENGTH 返回一个与存储器地址操作数相联系的单元数, SIZE 操作数返回一个为存储器操作数分配的字节数。
例如:若 MULT-WORD DW 50DUP (0) 则 LENGTH (MULT-WORD )=50表3-1存储器操作数的类型属性及返回值SIZE(MULT-WORD)=100注意:SIZE(X)=(LENGTH X)* (TYPE X)3.属性运算符属性运算符用来给指令中的操作数指定一个临时属性,而暂时忽略当前的属性。
常用的有:(1) 合成运算符PTR它作用于操作数时,则忽略了操作数当前的类型(字节或字)及属性(NEAR或FAR),而给出一个临时的类型或属性,一般格式:类型PTR 表达式功能:建立一个存储器地址操作数,它与其后的存储器地址操作数有相同的段地址偏移量,但有不同的类型。
例如:SLOT DW 25此时SLOT已定义成字单元。
若我们想取出它的第一个字节内容,则可用PTR 对其作用,使它暂时改变为字节单元,即MOV AL,BYTE PTR SLOT三、表达式是由运算符和操作数组成的序列,在汇编时产生一个确定的值。
这个值可以仅表示一个常量,也可以表示一个存储单元的偏移地址,相应的表达式称为常量表达式和地址表达式。
1.常数汇编语言语句中出现的常数可以有7种:①二进制数后跟字母B,如01000001B。
②八进制数后跟字母Q或O,如202Q或202O。
③十进制数后跟D或不跟字母,如85D或85。
④十六进制数后跟H,如56H,0FFH。
注意,当数字的第一个字符是A~F 时,在字符前应添加一个数字0,以示和变量的区别。
另有,十进制浮点数、十六进制实数、字符和字符串2.常量操作数常量操作数是一个数值操作数,一般是常量或者是表示常量的标识符。
可以为数字常量操作数或字符串常量操作数。
前者可采用二进制、八进制、十进制或十六进制等计数形式;而后者则为相应字符的ASCII码。
3.存储器操作数存储器操作数是一个地址操作数,代表一个存储单元的地址,通常以标识符的形式出现。
存储器操作数可以分为变量及标号两者类型,如果存储器操作数所代表的是某个数据在数据段、附加段或堆栈段中的地址,那么这个存储器操作数就称为变量;如果存储器操作数所代表的是某条指令代码在码段中的地址,那么这个存储器操作数称为标号。
变量所对应的存储单元内容在程序的运行过程中是可以改变的,标号通常作为转移指令或调用指令的目标操作数,在程序运行过程中不能改变。
存储器操作数有三个方面的属性。
(1) 段地址:即存储器操作数所对应的存储单元所在段的段地址;(2) 偏移地址:即存储器操作数所对应的存储单元在所在段内的偏移地址;(3) 类型:变量的类型是相应存储单元所存放的数据项的字节数;而标号的类型则反映了相应存储单元地址在作为转移或调用指令的目标操作数时的寻址方式,可有两种情况,即NEAR和FAR。
具体值可见表3-14.常量表达式由常量操作数及运算符构成,在汇编时产生一个常量。
如PORT、V AL十1、OFFSET SUM、SEG SUM、TYPE CYCLE等。
5.地址表达式由存储器操作数与运算符构成,必须有明确的物理意义。
例如SUM+2、CYCLE-5表达式SUM+2、CYCLE-5的值仍然是一个存储器操作数,该存储器操作数的段地址与类型属性分别与存储器操作数SUM及CYCLE相同,但偏移地址分别比SUM及CYCLE大2或小5。
表达式是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改变。
四、汇编语言程序汇编步骤汇编语言程序要能在机器上运行,还必需将汇编源程序汇编成可执行程序。
为此必须完成以下几个步骤。
过程如图3-1所示。
1.编辑源程序2.调用宏汇编对源程序进行汇编3.对目标程序进行连接4.运行可执行程序并调试4.2 伪指令伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。
一、定义数据伪指令该类伪指令用来定义存储空间及其所存数据的长度。
· DB:定义字节,即每个数据是1个字节。
· DW:定义字,即每个数据占1个字(2个字节)。
· DD:定义双字,即每个数据占2个字。
低字部分在低地址,高字部分在高地址。
· DQ:定义4字长,即每个数据占4个字。
· DT:定义10个字节长,用于压缩式十进制数,例如:DATA1 DB 5,6,8,100DATA2 DW 7,287TABLE DB ? ;表示在TABLE单元中存放的内容是随机的当一个定义的存储区内的每个单元要放置同样的数据时,可用DUP操作符。
一般格式:COUNT DUP(?),COUNT 为重复的次数,“()”中为要重复的数据。
如:BUFFER DB 100DUP(0) ;表示以BUFFER为首地址的100个字节中存放00H数据BUFFER1 DB 100 DUP(3,5,2DUP(10),35),24,‘NUM’)想一想存储区的情况?二、符号定义伪指令EQU、=、及PURGE· EQU 伪指令给符号定义一个值。
在程序中,凡是出现该符号的地方,汇编时均用其值代替,如:TIMES EQU 50DATA DB TIMES DUP(?)上述两个语句实际等效于如下一条语句:DATA DB 50 DUP(?)·“=”伪指令可给初始变量赋值。
如:COUNT=100 ;COUNT=100TIME=50 ;TIME=50·PURGE伪指令用于释放由EQU伪指令定义的变量,使这些变量可以被重新定义。
PURGE TIMES ; 释放TIMES变量TIMES EQU 2 ; 重新定义三、段定义伪指令SEGMENT和ENDS一般来说,一个完整的汇编源程序由3个段组成,即堆栈段、数据段和代码段。
段定义伪指令可将源程序划分成若干段,以便生成目的代码和连接时将各同名段进行组合。
段定义伪指令一般格式为:段名SEGMENT [定位类型] [组合类型] [类别]段名ENDSSEGMENT和END5应成对使用,缺—不可。
其中段名是不可省略的。
其它是可选项,是赋予段名的属性,可以省略。
例如:DATA SEGMENTDW 20DUP(?)DATA ENDS四、设定段寄存器伪指令ASSUME一般格式:ASSUME 段寄存器:段名[,段寄存器:段名,……]功能:通知汇编程序,哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。
在段名中,CODE表示代码段,DATA 表示数据段,STACK表示堆栈段。
由于ASSUME伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存器的操作。
因此要将真实段地址装入段寄存器还需用汇编指令来实现。
这一步是不可缺少的。
例如,CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKMOV AX,DATA ;DATA段值送AXMOV DS,AX ;AX内容送DS,DS才有实际段值CODE ENDS当程序运行时,由于DOS的装入程序负责把CS初始化成正确的代码段地址,SS初始化为正确的堆栈段地址,因此用户在程序中就不必设置。
但是,在装入程序中DS寄存器由于被用作其它用途,因此,在用户程序中必须用两条指令对DS进行初始化,以装入用户的数据段地址。
当使用附加段时,也要用MOV 指令给ES赋段地址。
五、定义过程的伪指令PROC和ENDP在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。
一个过程由伪指令PROC和ENDP来定义,其格式为:过程名PROC [类型]过程体RET过程名ENDP其中过程名是为过程所起的名称,不能省略,过程的类型由FAR(远过程,为段间调用)和NEAR(近过程,在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程。
ENDP表示过程结束。
过程体内至少应有一条RET指令,以便返回被调用处。