学 Win32 汇编[20]: 洞察标志寄存器
16lz
2021-04-30
学 Win32 汇编[20]: 洞察标志寄存器
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NT | IOPL | OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||
未 使 用 | 嵌 套 标 志 | I/O 权限 标志 占2位 | 溢 出 标 志 | 方 向 标 志 | 中 断 允 许 标 志 | 单 步 标 志 | 符 号 标 志 | 零 标 志 | 未 使 用 | 辅 助 标 志 | 未 使 用 | 奇 偶 标 志 | 未 使 用 | 进 位 标 志 |
上表是 32 位寄存器 EFLAGS 的低 16 位.
不能直接读写 EFLAGS, 但有些方便的指令, 如:
LAHF: 读取EFLAGS 低 8 位到 AH; SAHF 是 LAHF 的反向操作.
指令 STC、CLC、CMC 分别是给 CF(进位标志) 置位、复位、取反
; Test20_1.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data szBin1 db 8 dup(?), 0 szBin2 db 8 dup(?), 0 szBin3 db 8 dup(?), 0 szBin4 db 8 dup(?), 0.codemain proc stc ;置位 CF, CF = 1 lahf invoke byt2bin_ex, ah, addr szBin1 clc ;复位 CF, CF = 0 lahf invoke byt2bin_ex, ah, addr szBin2 stc cmc ;取反 CF, CF = not CF lahf invoke byt2bin_ex, ah, addr szBin3 clc cmc ;取反 CF, CF = not CF lahf invoke byt2bin_ex, ah, addr szBin4 PrintString szBin1 ;xxxxxxx1 PrintString szBin2 ;xxxxxxx0 PrintString szBin3 ;xxxxxxx0 PrintString szBin4 ;xxxxxxx1 retmain endpend main
如果要观察整个 EFLAGS 的 32 个位, 可用 PUSHFD 和 POPFD 指令让 EFLAGS 进栈、出栈
; Test20_2.asm.586p.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data szBin db 32 dup(?), 0.codemain proc stc pushfd invoke dw2bin_ex, dword ptr [esp+4], addr szBin popfd PrintString szBin ;00000000000000000000001001000111 clc pushfd invoke dw2bin_ex, dword ptr [esp+4], addr szBin popfd PrintString szBin ;00000000000000000000001010000110 retmain endpend main
发现标志寄存器里的数据有点捉摸不定, 看来不应该是这么观察的; 以后慢慢留意吧.
posted on 2010-04-13 15:25 万一 阅读(1867) 评论(1) 编辑 收藏©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任
更多相关文章
- jQuery中的$.ajax方法,以及基本的vue指令操作
- 深入理解计算机系统(4.1)------Y86指令集体系结构
- 冷月手撕408之操作系统(4)-操作系统的运行环境
- 0415作业-Vue常用指令及方法
- Git 工具和指令集合
- 【Vue框架学习】Vue常用指令、事件修饰符、按键修饰符、计算属性
- 第2部分- Linux ARM汇编ARM指令集变化和优势
- 第11部分- Linux ARM汇编 执行分支
- 第6部分- Linux ARM汇编 指令集概要