Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
likeunix
V2EX  ›  Linux

有介绍 i386 汇编中各类指令对标志寄存器影响的书或博客吗?

  •  1
     
  •   likeunix · Oct 15, 2016 via Android · 3507 views
    This topic created in 3671 days ago, the information mentioned may be changed or developed.
    最近在看《深入了解计算机系统》,讲到汇编那一章,发现书上对各类指令对标志寄存器的影响讲的不细致,所以来问问大家有没有这方面的书或资料介绍一下。
    在做习题的时候发现有的知识点书上没讲到, google 也没找到~~
    这就像老师上课讲加法考试却考你乘法。
    8 replies  •  2016-10-16 05:27:04 +08:00
    billlee
    billlee
    Oct 15, 2016
    1
    这个很复杂吗?标志寄存器表示的是上一条指令的结果的属性,所有算术指令都会修改标志寄存器
    likeunix
    likeunix
    OP
    Oct 15, 2016 via Android
    2
    @billlee 看下这个,我不知道第 7 行执行后标志寄存器发生了什么变化:
    1 movl 8(%ebp),%edx
    2 movl $0,%eax
    3 testl %edx,%edx
    4 je .L7
    5 .L10:
    6 xorl %edx,%eax
    7 shrl %edx
    8 jne .L10
    9 .L7:
    10 andl $1,%eax
    redsonic
    redsonic
    Oct 15, 2016❤️1
    3
    intel x86 架构手册,没有比这个更权威的了
    http://www.intel.cn/content/www/cn/zh/processors/architectures-software-developer-manuals.html

    shrl 可能在 2B 卷
    guanaco
    guanaco
    Oct 15, 2016
    4
    现在底层也不用汇编写?
    billlee
    billlee
    Oct 15, 2016❤️1
    6
    你这里 %edx 是个变量啊,就是在循环里面做右移,当结果不为 0 时, ZF 为 1, 执行 jne .L0, 循环
    直到 %edx 为 0 的时候, ZF 为 0, jne .L0 不执行,退出循环

    void f(uint32_t val) {
    uint32_t sum = 0;
    while (val != 0) {
    sum ^= val;
    val >>= 1;
    }
    sum &= 1;
    }
    raptor
    raptor
    Oct 15, 2016
    7
    这个明显应该自己去查 Intel 的手册啊
    bombless
    bombless
    Oct 16, 2016 via Android
    8
    intel 手册和 amd 手册交叉看吧,有时候感觉 amd 讲的更紧凑一点
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3216 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 04:26 · PVG 12:26 · LAX 20:26 · JFK 23:26
    ♥ Do have faith in what you're doing.