学 Win32 汇编[20]: 洞察标志寄存器


1514131211109876543210
 NTIOPLOFDFIFTFSFZF 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的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. jQuery中的$.ajax方法,以及基本的vue指令操作
  2. 深入理解计算机系统(4.1)------Y86指令集体系结构
  3. 冷月手撕408之操作系统(4)-操作系统的运行环境
  4. 0415作业-Vue常用指令及方法
  5. Git 工具和指令集合
  6. 【Vue框架学习】Vue常用指令、事件修饰符、按键修饰符、计算属性
  7. 第2部分- Linux ARM汇编ARM指令集变化和优势
  8. 第11部分- Linux ARM汇编 执行分支
  9. 第6部分- Linux ARM汇编 指令集概要

随机推荐

  1. ExpandableListView(一)替换系统默认的箭
  2. android之selector使用
  3. Android应用程序的数据存放目录 路径
  4. 自定义adapter 及其性能优化
  5. Android两种杀掉进程方式总结(System.exi
  6. Android签名文件转化为pk8和pem
  7. android animation's overview
  8. android中文api (59) ―― TabHost.TabSp
  9. Android开发者必备的十个工具
  10. Android(安卓)Toast无延时方法