ZF未因汇编语言中的MUL指令而设置 [英] ZF not set as a result of MUL instruction in assembly language

查看:0
本文介绍了ZF未因汇编语言中的MUL指令而设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用masm615汇编程序和TextPad作为编辑器。我正在写32位汇编语言程序。在程序中,由于mul指令,我试图设置零标志,但它不起作用。

谁能告诉我为什么eax寄存器中的结果是零,而零标志是清零的?

    include irvine32.inc
    .data
    .code
    main proc
    xor eax,eax
    call dumpregs
    xor ebx,ebx
    call dumpregs
    mov eax,2
    call dumpregs
    mov ebx,3
    call dumpregs
    sub eax,2
    call dumpregs
    mul ebx
    call dumpregs
    exit
    main endp
    end main

推荐答案

在程序中,我尝试将MUL指令的结果设置为零标志

mul指令没有定义是否或何时设置、清除或不修改零标志。请参阅英特尔®64和IA-32架构 软件开发人员手册第2卷,第3-594页,或an HTML scrape

MUL-无符号乘法

...

受影响的标志

如果结果的上半部分为0,则Of和CF标志设置为0;否则,它们设置为1。未定义SF、ZF、AF和PF标志。

如果有疑问,请始终查看开发人员手册中的说明文档。并非所有指令都会影响预期的标志或预期的方式。

未定义意味着不同的CPU可能不同。例如,在几个测试用例中,Skylake设置ZF=0,而不考虑输出或先前的值。在某些情况下,CPU设置ZF=1是可能,但可能性不大。当然,来自其他供应商(或模拟器)的其他CPU可以做他们想做的任何事情。

但与C";未定义的行为不同,它只是一个未定义的;它仍然是0或1。

这篇关于ZF未因汇编语言中的MUL指令而设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆