可以通过条件判断直接调用子程序吗?
汇编吧
全部回复
仅看楼主
level 6
枫林i晚 楼主
譬如用cmp,直接根据某标志位调用子程序
就像cmp x,a
jz xxxxx的样子(把jz这一步直接换成根据zf位判断是否调出子程序),谢谢!
2017年04月07日 03点04分 1
level 5
在我的印象里没有条件调用子程序的指令(如果有只能说我学得不深[哈哈]). 但是使用一般条件跳转指令加上call指令,就实现你希望的功能了. 只是多用几条指令而已.
2017年04月08日 14点04分 2
level 13
没有利用标志值直接call的指令,但适当的安排还是可以模拟的
首先要排好谁最优先,比如zero最重要,排第1,carry次之排第2,如此类推
DATA SEGMENT
JmpTable label word ;定义4子程序进入点的表格
dw offset ZeroCall ;zeroflag 的子程序
dw offset CarryCall ;carryflag 的子程序
dw offset SignCall ;正负号标志的子程序
dw offset OtherCall ;不是上面三种标志的子程序
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
...
...
mov bx,0 ;初始化
cmp x,a ;比较
jz ZeroHere ; zeroflag被设定,bx=0
jc CarryHere ; carryflag被设定,bx=2
js SignHere ; Signflag被设定,bx=4
add bx,2 ;不是上面三种标志,bx=6
SignHere:
add bx,2
CarryHere:
add bx,2
ZeroHere:
Call Jmptable[bx] ;根据bx值呼叫相关子程序
...
...
CarryCall:
..
..
ret
ZeroCall:
..
..
ret
SignCall
..
..
ret
OtherCall
..
..
ret
2017年04月08日 15点04分 4
level 6
枫林i晚 楼主
谢谢!
2017年04月08日 16点04分 5
1