安防监控知识
电气知识|条件汇编
2017-02-13  浏览:64
安防之家讯:汇编后展开形成 :

1 PUSH AX

1 PUSH BX

1 PUSH CX

1 PUSH DX

汇编程序能根据条件把一段源程序包括在汇编语言程序内或者把它排除在外 , 这时就用到条件伪操作 , 条件汇编伪指令在汇编过程中,根据条件决定汇编的语句。格式:

IFxx 表达式 ; 满足,汇编分支语句体 1

分支语句体 1

[ ELSE ; 不满足,汇编分支语句体 2

分支语句体 2 ]

ENDIF ; 条件汇编结束

自变量必须在汇编程序第一遍扫后就成为确定的数值 . 条件伪操作中的 XX 表示条件如下 :

IF expression :汇编程序求出表达式的值 , 如此值不为 0 则满足条件 .

IFE expression : 如求出表达式的值为 0 则满足条件 .

IFDEF symbol :如符号已在程序中定义 , 或者已用 EXTRN 伪操作说明该符号是在外部定义的 , 则满足条件 .

IFNDEF symbol :如符号未定义或未通过 EXTRN 说明为外部符号则满足条件 .

IFB : 如自变量为空则满足条件

IFNB : 如自变量不为空则满足条件

IFIDN , :如果字符串 和字符串 相同 , 则满足条件 .

IFDIF , :如果字符串 和字符串 不相同 , 则满足条件 .

上述 IF 和 IFE 的表达式中可以使用关系操作符 EQ , NE , LT , LE , GT 和 GE 。如: IF 表达式 1 EQ 表达式 2 等。

条件伪操作可以用在宏定义体内 , 也可以用在宏定义体外,也允许嵌套任意次。

例 : 宏指令 MAX 把三个实参中的最大值放在 AX 中 , 而且使实参不同时产生不同的程序段 .

宏定义 :

MAX MACRO K,A,B,C

LOCAL NEXT,OUT

MOV AX,A

IF K-1

IF K-2

CMP C,AX

JLE NEXT

MOV AX,C

ENDIF

NEXT: CMP B,AX

JLE OUT

MOV AX,B

ENDIF

OUT:

ENDM

宏调用 :

MAX 1,P

MAX 2,P,Q

MAX 3,P,Q,R

宏展开 :

MAX 1,P

1 MOV AX,P

1 ??0001:

MAX 2,P,Q

1 MOV AX,P

1 ??0002:CMP Q,AX

1 JLE ??0003

1 MOV AX,Q

1 ??0003:

MAX 3,P,Q,R

1 MOV AX,P

1 CMP R,AX

1 JLE ??0004

1 MOV AX,R

1 ??0004:CMP Q,AX

1 JLE ??0005

1 MOV AX,Q

1 ??0005:

宏定义:

PDATA MACRO NUM

IF NUM LT 100 ;; 如果 num < 100 ,则汇编如下语句

DB NUM DUP(?)

ELSE ;; 否则,汇编如下语句

DB 100 DUP(?)

ENDIF

ENDM

宏调用:



PDATA 12



PDATA 102

宏展开:



DB 12 DUP(?)



DB 100 DUP(?)

例 : 宏指令 PDATA 根据实参不同时产生不同的程序段 .

例:宏指令 GOTO L,X,REL,Y( 其中 REL 可以是 Z,NZ,L,NL 等 ) 可以根据不同情况产生无条件转移指令或比较和条件转移指令 .

宏定义 :

GOTO MACRO L,X,REL,Y

IFB

JMP L

ELSE

MOV AX,X

CMP AX,Y

J&REL L

ENDIF

ENDM

宏调用 :

...

GOTO LOOP,SUM,NZ,15

...

GOTO EXIT

...

宏展开 :

...

1 MOV AX,SUM

1 CMP AX,15

1 JNZ LOOP

...

1 JMP EXIT

宏定义可允许递归调用 , 此时条件伪操作可用来结束宏递归。

例:宏指令 POWER 可以用来实现 X 和 2N 相乘 . 这只需对 X 左移 N 次可实现 , 可以设 COUNT 为递归次数的计数值 , 当该数与 N 相等时即可结束递归调用

宏定义 :

POWER MACRO X,N

SAL X,1

COUTN=COUT+1

IF COUNT-N

POWER X,N

ENDIF

ENDM

宏调用 :

COUTN=0

POWER AX,3

宏展开 :

1 SAL AX,1

1 SAL AX,1

1 SAL AX,1

例: 宏指令 BRANCH 产生一条转向 X 的转移指令 . 当它相对于 X 的距离小于 128 字节时产生 JMP SHORT X; 否则产生 JMP NEAR PTR X(X 必须位于该转移指令之后 , 即低地址区 ) 。

宏定义 :

BRANCH MACRO X

IF ($-X) LT 128

JMP SHORT X

ELSE

JMP NEAR PTR X

ENDIF

ENDM

宏调用 :



BRANCH X

宏展开 :

如 X 与 BRANCH 指令间的距离小于 128 时产生

1 JMP SHORT X

否则产生 :

1 JMP NEAR PTR X

宏汇编、重复汇编和条件汇编为源程序的编写提供了很多方便,灵活运用它们可以编写出非常良好的源程序来。

汇编系统中有些以圆点起始的伪指令(如 .startup 、 .exit 等)实际上是一种宏结构。

宏结构的作用

dstring MACRO string ;; 定义字符串

db '&string&',0dh,0ah,'$'

ENDM

mainbegin MACRO dsseg ;; 设置数据段地址

mov ax,dsseg

mov ds,ax

ENDM

dispmsg MACRO message

mov dx,offset message

mov ah,09h

int 21h

ENDM

例 :

mainend MACRO retnum ;; 返回 DOS ,可不带参数

ifb

mov ah,4ch ;; 没有参数

else

mov ax, 4c 00h+(retnum AND 0ffh)

;; 有参数

endif

int 21h

ENDM

.model small

.stack 256

.data

msg1 equ this byte

dstring

msg2 equ this byte

dstring

.code

start: mainbegin @data ; 建立 DS 内容

dispmsg msg1 ; 显示 msg1 字符串

dispmsg msg2 ; 显示 msg2 字符串

mainend ; 返回 DOS

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