level 6
譬如用cmp,直接根据某标志位调用子程序
就像cmp x,a
jz xxxxx的样子(把jz这一步直接换成根据zf位判断是否调出子程序),谢谢!
2017年04月07日 03点04分
1
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