新版汇编语言程序设计 变量定义及常用伪指令
- 格式:ppt
- 大小:511.00 KB
- 文档页数:33
新版汇编语言程序设计变量定义及常用伪指令汇编语言是计算机底层的编程语言,具有高效、灵活的特点。
在进行汇编语言程序设计时,变量定义和常用伪指令是不可或缺的重要部分。
本文将详细介绍新版汇编语言程序设计中的变量定义和常用伪指令,并提供相应的示例和应用。
一、变量定义在汇编语言中,变量定义是用来存储数据的标识符和内存分配的过程。
变量可以是不同的数据类型,如整型、字符型、字符串型等。
变量定义的格式如下所示:变量名数据类型初始值其中,变量名是标识符,用来表示变量的名称;数据类型是变量的类型,包括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个元素。
一、基本段定义格式常用结构STACK SEGMENT PARA'STACK;DB 100 DUP('STACK')STACK ENDSDATA SEGMENTDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,dataMOV DS,AXMOV ES,AXMOV AL,4CHINT 21HCODE ENDSEND START------------------------------------------------------------------------------------------------------------------------ 段名segment[定位][组合][段字][‘类别’] ...段名ends (1)定位段定位(align)属性——指定逻辑段在主存储器中的边界:BYTE:段开始为下一个可用的字节地址(xxxx xxxxb),属性值为1WORD:段开始为下一个可用的偶数地址(xxxx xxx0b),属性值为2DWORD:段开始为下一个可用的4倍数地址(xxxx xx00b),属性值为4PARA:段开始为下一个可用的节地址(xxxx 0000b),属性值为16PAGE:段开始为下一个可用的页地址(0000 0000b),属性值为256简化段定义伪指令的代码和数据段默认采用WORD定位,堆栈段默认采用PARA定位。
完整段定义伪指令的默认定位属性是PARA。
(2)组合PUBLIC: 所有此类型的同名段组合成一个逻辑段,公用一个段地址,运行时装入同一个物理段中。
COMMON : 所有此类型的同名段具有相同的起始地址(覆盖),共享相同的存储区域。
AT <数值表达式> : 按绝对地址定位,段地址就是表达式的值。
STACK : 专用于说明堆栈段,组合方式同PUBLICNONE : 不组合MEMORY :置于地址最高处,多个时取第一个,其余作为COMMONPRIVATE:本段与其他段没有逻辑关系,不与其他段合并。
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.BIT---用于汇编程序的一开始创建一个常量.FLASH_COUNT BIT3EH;创建一个名为FLASH_COUNT的常量,并把立即数3EH赋给这个常量,在程序中就可以直接把FLASH_COUNT等同于立即数3EH进行操作.2.DATA---定义一个指向特殊功能寄存器区地址的变量.DPTRSW DATA0A2H;DPTRSW指向特殊功能寄存器0A2H地址上.3.DB---用于汇编程序中定义若干个长度为1个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为00H.DB10H,11H,,3FH,20H;在目标文件中生成10H,11H,00H,3FH,20H4.DS---用于保留一块存储器空间给程序变量使用或别的用途.STORAGE DS10;保留一块名叫"STORAGE"的10字节存储空间5.DW---定义若干个长度为两个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为0000H.DW0FFFEH,,0102H;在目标文件中生成代码:FFH,FEH,00H,00H,01H,02H6.END---该伪指令告诉汇编器程序的结束点.7.EQU---定义某一个符号的值,一旦一个符号被定义后,就不能被另一个EQU或SET指令重复定义.BEEP_COUNT EQU1+1;表达式把2定义给符号BEEP_COUNT8.IF、ELSE、ENDIF---这3个伪指令是条件选择语句,它们告诉汇编器根据表达式的值,是否汇编某一块程序,没有汇编的块在目标文件中是不存在对应的执行代码的.IF P1.0;如果P1.0=1,就汇编下一行ELSE01H,02H,03H;在存储器中定义字01H、02H、03HENDIF;条件选择结束,如果P1.0≠1,上一行不被汇编.9.INCL---该指令用于在汇编时把其他文件与当前文件结合在一起汇编.INCL"const.def";即把文件"const.def"与当前文件结合在一起汇编.---该伪指令用于设置程序计数器PC的初始值.ORG0000H;指令的执行代码在单片机的程序存储器中从0000H开始存储(也可简单写成00H).11.SET---该伪指令类似EQU,但不同的是SET可以通过另一个SET伪指令重复定义变量的值.COUNT SET3COUNT SET1;最终COUNT=112.$---美元符号表示当前地址,意味着程序计数器PC的值不变,在程序中表示"本行程序". DJNZ R5,$;工作寄存器R5减1,如果不等于0就调回本行---直到R5减至0为止,执行下一条指令.。
汇编语言中常用的伪指令分类:软件相关2013-01-23 20:13 515人阅读评论(0) 收藏举报areaequ伪指令常用汇编语言汇编语言中,指令语句在源程序汇编时会产生可供计算机执行的指令代码,即目标代码。
汇编程序除指令语句外,还需要提供一些指令,用于辅助源程序的汇编。
比如指定程序或数据存放的起始地址,为数据分配一段连续的内存单元等。
这些指令在汇编时并不生成目标代码,不影响程序执行,因此称之为伪指令。
本文简单总结了常用的伪指令,如下。
1、EQU(Equate)一般格式为:标号:EQU 操作数指令功能为将操作数赋予标号,两边的值完全相等。
使用EQU伪指令给一个标号赋值后,此标号在整个源文件中值固定。
AREA: EQU 1000H ;将标号AREA赋值为1000H2、ORG(Origin)一般格式为:ORG xxxxH(绝对地址或标号)XxxxH决定此语句后第一条指令(或数据)的地址。
该段源程序或数据被连续存放在此后的地址内,直到下一条ORG指令为止。
ORG 8000H ;此后目标代码存储在存储器中以0x8000h开始的地址空间中。
ADD R1,#1MOV R2, #23、DB(Define Byte)一般格式为:标号:DB 字节常数或字符或表达式标号字段可有可无,字节常数或字符是指一个字节数据。
此伪指令的功能是把字节常数或字节串存放至内存连续的地址空间中。
ORG 8000HDATA1:DB 43H,09H,08HDATA2:DB 07H伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。
注:DW(Define Word)指令定义与DB类似,区别在于DW定义一个字,DB定义一个字节。
4、END一般格式为:标号:END 地址或标号地址或标号可以忽略。
此伪指令用于指示汇编语言程序段结束。
因此一个源程序中仅有一个END,且一般放在程序最后。