安防监控知识
电气知识|伪指令
2017-05-26  浏览:70
安防之家讯:伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。

一、定义数据伪指令

该类伪指令用来定义存储空间及其所存数据的长度。

· DB:定义字节,即每个数据是1个字节。

· DW:定义字,即每个数据占1个字(2个字节)。

· DD:定义双字,即每个数据占2个字。低字部分在低地址,高字部分在高地址。

· DQ:定义4字长,即每个数据占4个字。

· DT:定义10个字节长,用于压缩式十进制数,

例如:DATA1DB5,6,8,100

DATA2DW7,287

TABLE DB?;表示在TABLE单元中存放的内容是随机的;

当一个定义的存储区内的每个单元要放置同样的数据时,可用DUP操作符。

一般格式:COUNTDUP(?),COUNT 为重复的次数,“( )”中为要重复的数据。

如:BUFFERDB100 DUP(0);表示以BUFFER为首地址的100个字节中存放00H数据

BUFFER1 DB100 DUP(3,5,2DUP(10),35),24,‘NUM’)

想一想存储区的情况?

二、符号定义伪指令EQU、=、及PURGE

· EQU 伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替,

如:TIMESEQU50

DATA DBTIMES DUP(?)

上述两个语句实际等效于如下一条语句:

DATADB50 DUP(?)

· “=”伪指令可给初始变量赋值。

如:COUNT=100 ;COUNT=100

TIME=50;TIME=50

· PURGE伪指令用于释放由EQU伪指令定义的变量,使这些变量可以被重新定义。

PURGETIMES ; 释放TIMES变量 

TIMESEQU2 ;重新定义

三、段定义伪指令SEGMENT和ENDS

一般来说,一个完整的汇编源程序由3个段组成,即堆栈段、数据段和代码段。段定义伪指令可将源程序划分成若干段,以便生成目的代码和连接时将各同名段进行组合。

段定义伪指令一般格式为 :

段名SEGMENT[定位类型] [组合类型] [类别]

段名 ENDS

SEGMENT和ENDS应成对使用,缺—不可。其中段名是不可省略的。其它是可选项,是赋予段名的属性,可以省略。

例如: DATASEGMENT

DW20DUP(?)

DATAENDS

四、设定段寄存器伪指令ASSUME

一般格式: ASSUME 段寄存器:段名[,段寄存器:段名,……]

功能:通知汇编程序,哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。在段名中,CODE表示代码段,DATA表示数据段,STACK表示堆栈段。

由于ASSUME伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存器的操作。因此要将真实段地址装入段寄存器还需用汇编指令来实现。这一步是不可缺少的。

例如,CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACK

MOVAX,DATA;DATA段值送AX

MOVDS,AX ;AX内容送DS,DS才有实际段值

CODEENDS

当程序运行时,由于DOS的装入程序负责把CS初始化成正确的代码段地址,SS初始化为正确的堆栈段地址,因此用户在程序中就不必设置。但是,在装入程序中DS寄存器由于被用作其它用途,因此,在用户程序中必须用两条指令对DS进行初始化,以装入用户的数据段地址。当使用附加段时,也要用MOV指令给ES赋段地址。

五、定义过程的伪指令PROC和ENDP

在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。

一个过程由伪指令PROC和ENDP来定义,其格式为:

过程名 PROC[类型]

过程体

RET

过程名 ENDP

其中过程名是为过程所起的名称,不能省略,过程的类型由FAR(远过程,为段间调用)和NEAR(近过程,在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程。ENDP表示过程结束。过程体内至少应有一条RET指令,以便返回被调用处。过程可以嵌套,也可以递归使用。

例如一个延时100ms的子程序,其过程可定义如下,

DELAYPROC

PUSH BX

PUSH CX

MOVBL,10

;延时10ms,改变BL和CX中的值,即可改变延时时间。

AGAIN: MOVCX,2801;

WAIT;LOOPWAIT

DECBL

JNZAGAIN

POPCX

POPBX

RET

DELAYENDP

CALL DELAY ;调用该过程

远过程调用时被调用过程必定不在本段内。

例如,有两个程序段,其结构如下:

CODE1SEGMENT

ASSUME CS:CODE1

FARPROCPROC FAR

RET

FARPROCENDP

CODE1 ENDS

CODE2SEGMENT

ASSUME CS:CODE2

CALLFARPROC

…..

CODE2 ENDS

CODE1 段中的FARPROC 过程被另一段CODE2调用,故为远过程。

六、宏指令

在汇编语言书写的源程序中,若有的程序段要多次使用,为了简化程序书写,该程序段可以用一条宏指令来代替,而汇编程序汇编到该宏指令时,仍会产生源程序所需的代码。

宏指令的一般格式为:宏指令名MACRO[形式参量表]

宏体

ENDM

例如:SHIFTMACRO

MOVCL,4

SALAL,Cl

ENDM

这样定义以后,凡是要使AL中内容左移4位的操作都可用一条宏指令SHIFT来代替。

宏指令与子程序有许多类似之处。它们都是一段相对独立的、完成某种功能的、可供调用的程序模块,定义后可多次调用。但在形成目的代码时,子程序只形成一段目的代码,调用时转来执行。而宏指令是将形成的目的代码插到主程序调用的地方。因此,前者占内存少,但执行速度稍慢;后者刚好相反。

七、ORG 伪指令

ORG伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。

一般格式: ORG<表达式>

例如:DATASEGMENT

BUFF1 DB 23,56H,‘EOF’

ORG 2000H

BUFF2 DB ‘STRING’

DATAENDS

上述变量定义中,BUFF1从DATA段偏移地址为0的单元开始存放,而BUFF2则从DATA段偏移为2000H的单元开始存放,两者不是连续存放。

八、汇编结束伪指令END

该伪指令表示源程序的结束.令汇编程序停止汇编。因此,任何一个完整的源程序均应有END指令。

一般格式: END[表达式]

其中表达式表示该汇编程序的启动地址。例如:

ENDSTART ;表明该程序的启动地址为START。

安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 防盗 的产品:
  • 安防监控资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved