电气知识|伪指令

   更新日期:2017-03-26     来源:建材之家    作者:安防之家    浏览:43    评论:0    
核心提示:伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。 一、定义数据伪指令 该类伪指令用来定义存储空间及其所存数据的长度。 · DB:定义字节,即每个数据是1个字节。 · DW:定义字,即每个数据占1个字(2个字节)。 · DD:定义

家用防盗报警器及配件常见故障及解决方法

推荐简介:我们在使用报警器和配件的时候,难免会遇到一些故障,当发生这些故障的时候我们往往不知道是什么原因导致的,如何预防和解决报警器及其配件所产生的故障,成为刻锐安防必须解决的难题之一,下面刻锐小编对平时报警器会产生的一些故障原因及解决办法进行了分析。1、触发探测器,防盗报警主机不能电话报警:排查原因如下:(1)、防盗报警主机未布防。(2)、未设置报警电话号码。(3)、探测器配件安装不当,距离主机太远(配......
安防之家讯:伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令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相关评论

推荐图文更多...
点击排行更多...
安防监控商机更多...
安防监控圈更多...
最新视频更多...
推荐产品更多...
水泥之家 | 橱柜之家 | 机械之家 | 水电之家 | 五金之家 | 家电之家 | 饰品头条 | 墙布头条 | 家纺头条 | 塑料头条 | 老姚之家 | 灯饰之家 | 电气之家 | 全景头条 | 陶瓷之家 | 照明之家 | 防水之家 | 防盗之家 | 博一建材 | 卫浴之家 | 区快洞察 | 漳州建材 | 泉州建材 | 三明建材 | 莆田建材 | 合肥建材 | 宣城建材 | 池州建材 | 亳州建材 | 六安建材 | 巢湖建材 | 宿州建材 | 阜阳建材 | 滁州建材 | 黄山建材 | 安庆建材 | 铜陵建材 | 淮北建材 | 马鞍山建材 |
建材 | 双碳之家 | 企业之家 | 移动社区 | 关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图 | 排名推广 | 广告服务 | 积分换礼 | RSS订阅 | sitemap | 粤ICP备14017808号
(c)2015-2017 BO-YI.COM SYSTEM All Rights Reserved
Powered by 安防之家