会员登陆
注册会员
首页
电工知识
机械维修
仪器仪表
工业控制
试题总结
安全用电
电力配电
电工配件
导航
本站搜索
电工知识
机械维修
仪器仪表
工业控制
试题总结
安全用电
电力配电
电工配件
家电弱电
业界资讯
通信技术
你的位置:
首页
>
通信技术
>
汇编语言
条件汇编
2016-10-24 13:53:07 | 人围观 |
评论:
汇编后展开形成 :
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
< 上一篇
8086指令系统
下一篇 >
80x86微处理器
标签:
相关内容推荐:
2016-10-24
条件汇编
2016-10-24
条件汇编
变频器内部主电路简单分析
变频器选择注意事项
变频器的性能指标
低压变频器如何选型?低压变频器选型
安川变频器故障显示方式
变频器怎样接线?变频器接线端子说明
变频器控制的电机按停止按钮时,电机
变频器的输出功率该如何选择?
三菱变频器复位方法
变频器的频率为何调不上去?如何解决
推荐阅读
什么都不会可以学习电工吗?电工难学吗?电工应该怎么样入门?电工应该怎么样学精通?
安防门禁系统常见故障及维修方法
智能门锁用什么电池好?智能门锁电池用碳性好还是碱性好?常见5号AA电池选购指南
装修时零线火线接反了怎么办?老电工教您一招三分钟搞定
小型断路器上标数字都表示什么?小型断路器参数解析
电工经验分享:几个小窍门让你工作起来得心应手
万用表判断单相电机好坏方法图解
家装配电箱接线是否每个回路的零线都要接在零线排上?
电工入门到底该怎么样学习?电工入门应该五步走
电热水壶内部电路原理图及故障维修方法
电控系统运行过程中发生反复切换/
交流电中的有效电流是如何定义的?
什么是相电流和线电流
电机二次启动怎么接线?电动机星三
电气图分类有哪几类?电气图的十二大
单相功率和三相功率的测量方法及电
电气自锁和互锁的区别在哪里?怎么实
电工奇才对消毒机电气控制电路改造
已知设备功率,确定导线截面时需要考
解开面纱看本质 充电宝节电器骗术
最热文章
安装监控需要多少钱?人工费怎么算?安装监控收费标准
电容的公式
电热水壶内部电路原理图及故障维修方法
2020年电工职业资格证取消了?电工职业资格证退出国家目录
7812引脚图及参数,7812稳压电路图
雅迪电动车控制器接线图解读
plc编程工资多少一个月
汽车电动车窗的组成和电路图工作原理图解
新版电工证是不是只有电子版?电工证二维码能造假吗?新二维码电工证照图片
漏电保护器图形符号和文字符号
东芝电梯故障代码说明
汽车空调是耗油还是电
汽车发电机会一直发电吗?
几种易于在工程中使用的算法入门
电力电缆故障检测及故障点定位方法
电工最害怕的味道!
这样的导线发热原来不用换导线就能
西门子840D报警文本的制作
西门子828D一次垂直补偿功能调试
汽车曲轴位置传感器作用原理与识别
统计
全站搜索