如何解决MASM的已签名和未签名说明
您如何知道使用MASM x86汇编语言对指令进行签名还是未签名?
解决方法
除法,乘法和右移;对于已签名数据(imul
,idiv
,sar
)和未签名数据(mul
,div
,shr
)有不同的说明。
对于条件分支,对于带符号的{jo
,jl
,jnl
,jg
,jng
,js
, jns
和未签名的(jc
,jb
,jnb
,ja
,jna
)来检查不同的标志。
对于加法,减法(包括cmp
)和按位指令(and
,or
等;包括xor
),这没有什么区别如果已签名或未签名,则对于两种情况,相同的指令均起作用。区别在于您稍后会关心哪些标志(如果有),而不是指令本身。
例如,您可以执行test
(不管sub eax,123
中的值是带符号的还是无符号的),然后有一个eax
(如果相减的结果是带符号的) )或jo .tooBig
(如果减法的结果未签名),以确定减法是否溢出。
注意:对于左移,指令jc .tooBig
对有符号和无符号都起作用;但是汇编器可以允许对同一名称(不同名称,相同操作码,相同机器码)使用替代名称shl
,使其看起来类似于右移。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。