We have the STC
instruction to set the carry flag. Do we have similar instructions for parity, overflow, sign flags etc? I have tried STP
, STS
etc but it seems these don't exist!
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
No, those commands don't exist. The way you find out is by reading the instruction reference manuals carefully.
They don't really need to exist. You can effectively implement them pretty easily. Here's one of many ways, if you don't mind other bits getting set:
STP: XOR AL,AL ; resets parity bit
XOR AL,1 ; ... then set parity bit
STO: OR AL, 0FFh
SUB AL, 080h ; sets overflow
STS: OR AL, 0FFh ; sets sign bit
If you insist on setting just the specific bit:
PUSHFD
OR dword ptr[ESP], <bitmask_for_flag_bit> ; see Intel manual
POPFD
Silicon space being precious, CPU designers tend not to provide instructions for things that are easily done. (STC is left over from 8080 days, where it was useful in doing various kinds of multiprecision arithmetic and not damaging registers was a Very Good Thing).