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

2016-10-15 20:00:02 +08:00
 likeunix
最近在看《深入了解计算机系统》,讲到汇编那一章,发现书上对各类指令对标志寄存器的影响讲的不细致,所以来问问大家有没有这方面的书或资料介绍一下。
在做习题的时候发现有的知识点书上没讲到, google 也没找到~~
这就像老师上课讲加法考试却考你乘法。
2669 次点击
所在节点    Linux
8 条回复
billlee
2016-10-15 20:24:02 +08:00
这个很复杂吗?标志寄存器表示的是上一条指令的结果的属性,所有算术指令都会修改标志寄存器
likeunix
2016-10-15 20:55:19 +08:00
@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
2016-10-15 21:09:16 +08:00
intel x86 架构手册,没有比这个更权威的了
http://www.intel.cn/content/www/cn/zh/processors/architectures-software-developer-manuals.html

shrl 可能在 2B 卷
guanaco
2016-10-15 21:30:20 +08:00
现在底层也不用汇编写?
pright
2016-10-15 21:42:16 +08:00
billlee
2016-10-15 21:56:52 +08:00
你这里 %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
2016-10-15 22:09:40 +08:00
这个明显应该自己去查 Intel 的手册啊
bombless
2016-10-16 05:27:04 +08:00
intel 手册和 amd 手册交叉看吧,有时候感觉 amd 讲的更紧凑一点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313027

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX