电气知识|条件汇编

   更新日期:2017-03-26     来源:建材之家    作者:安防之家    浏览:34    评论:0    
核心提示:汇编后展开形成 : 1 PUSH AX 1 PUSH BX 1 PUSH CX 1 PUSH DX汇编程序能根据条件把一段源程序包括在汇编语言程序内或者把它排除在外 , 这时就用到条件伪操作 , 条件汇编伪指令在汇编过程中,根据条件决定汇编的语句。格式:IFxx 表达式 ; 满足,汇编分支语句体 1分支语句体 1[ ELSE ; 不满足,汇编分

显微镜下的黄龙玉

推荐简介:近些年黄龙玉的价格逐渐攀升,有越来越多的人都开始纷纷收藏黄龙玉,随着求购者需求的增多,市面上也出现了不少假的黄龙玉,那有什么仪器可以对黄龙玉的玉色是自然色,还是增强色进行鉴别呢?严格上来说,颜色没有真假,但是玉皮却有真假,用辅助仪器来判断玉色的手段常见的有三种:1.查尔斯滤色镜,又称祖母绿滤色镜,其分辨颜色有专门的颜色对照表可供参考。2.显微镜,一般用于观察玉石的表面特征,玉石内部接近表面的结构......
安防之家讯:汇编后展开形成 :

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相关评论

推荐图文更多...
点击排行更多...
最新视频更多...
推荐产品更多...
老姚之家 | 全景头条 | 照明之家 | 防水之家 | 防盗之家 | 区快洞察 | 漳州建材 | 泉州建材 | 三明建材 | 莆田建材 | 合肥建材 | 宣城建材 | 池州建材 | 亳州建材 | 六安建材 | 巢湖建材 | 宿州建材 | 阜阳建材 | 滁州建材 | 黄山建材 | 安庆建材 | 铜陵建材 | 淮北建材 | 马鞍山建材 |
建材 | 双碳之家 | 企业之家 | 移动社区 | 关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图 | 排名推广 | 广告服务 | 积分换礼 | RSS订阅 | sitemap | 粤ICP备14017808号
(c)2015-2017 Bybc.cn SYSTEM All Rights Reserved
Powered by 安防之家