DOS Windows汇编语言程序设计 第2章 第6节 硬指令和伪指令
- 格式:ppt
- 大小:653.00 KB
- 文档页数:80
汇编语言伪指令汇编语言作为一种低级编程语言,广泛应用于嵌入式系统、驱动程序开发和操作系统内核等领域。
在进行汇编语言编程时,我们常常会使用到一些伪指令。
本文将介绍一些常见的汇编语言伪指令及其用法。
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:用于循环执行一段代码直至满足条件。
DEBUG的主要命令:1.R命令:显示和修改寄存器的值和标志位的状态。
2.D命令:显示指定区域内的内容。
3.G命令:从起点开始执行汇编指令,到终点结束。
4.H命令:计算两个十六进制数的和与差。
5.A命令:输入汇编指令。
6.U命令:反汇编,显示机器码所对应的汇编指令。
7.T命令:跟踪执行从起点执行若干条指令。
常用伪指令的用法:1.符号定义语句:1)等值语句:符号名EQU 表达式2)等号语句:NUM=34……NUM=34+12.变量定义语句:符号名DB/DW/DD 表达式3.段定义语句:1)段定义语句格式:段名SEGMENT 【定位类型】【组合类型】【“类别”】……段名ENDS2)段假设语句:ASSUME 段寄存器名:段名【,…】3)ORG伪指令与地址计数器ORG <表达式>4)PUBLIC和EXTRN伪指令A)PUBLIC伪指令PUBLIU 名字【,…】B)EXTRN伪指令EXTRN 名字:类型【,…】4.过程定义语句过程名PROC NEAR/FAR……RET过程名ENDP5.结束语句汇编语言程序的编辑.汇编.链接.调试步骤1.编辑:打开汇编语言程序入口进入汇编语言子目录c:MASM2.进入DEBUG ,进入调试界面,出入程序3.编译源程序MASM 文件名.ASM4.观察实验结果,如果没有达到设计要求,返回第一步修改命令,继续试验5.连接程序LINK 文件名.OBJ;6.调试程序DEBUG 文件名.EXE。
《汇编语⾔》学习笔记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指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。
完整版汇编语言中常用的伪指令档汇编语言是一种低级的程序设计语言,它用于编写底层计算机程序。
在汇编语言中,伪指令是一类特殊的指令,它们在程序运行时不会被计算机执行,而是在编译或汇编时被处理器或汇编器解释和展开。
伪指令在汇编语言中起到辅助编程、优化代码和声明常量等作用。
本文将介绍完整版汇编语言中常用的伪指令档。
一、伪指令的定义和作用伪指令是汇编语言中的一类特殊指令,它们不是真正的指令,不会被计算机执行,而是在编译或汇编的过程中被汇编器或处理器解释和处理。
伪指令主要用于辅助编程、优化代码和声明常量等作用。
伪指令的格式一般与真正的指令相似,但一般不包含操作码。
在一些汇编语言中,伪指令以特殊的标记或符号来区分,比如以“.”开头的指令。
二、常用的伪指令档1. ORG指令ORG指令用于指定程序的起始地址。
在汇编程序中,使用ORG指令可以将程序的代码段或数据段放置在指定的内存地址处。
其格式一般为:ORG 地址其中,地址为16进制数或表示内存单元的符号。
2. EQU指令EQU指令用于定义符号常量或符号变量。
它将一个符号与一个数值或地址进行关联,使得在程序中使用该符号时可以被汇编器或处理器替换为对应的数值或地址。
其格式一般为:符号 EQU 数值或地址其中,符号为一个标识符,数值或地址可以是16进制数、10进制数或表示内存单元的符号。
3. DB指令DB指令用于定义字节型数据。
它可以用于声明字符、整数等字节型数据,并将这些数据存储在指定的内存地址中。
其格式一般为:标号 DB 表达式其中,表达式可以是一个字节常量、字符常量或表示内存单元的符号。
4. DW指令DW指令用于定义字型数据。
它可以用于声明无符号整数等字型数据,并将这些数据存储在指定的内存地址中。
其格式一般为:标号 DW 表达式其中,表达式可以是一个字常量或表示内存单元的符号。
5. DD指令DD指令用于定义双字型数据。
它可以用于声明无符号双字整数等双字型数据,并将这些数据存储在指定的内存地址中。