`
zzc1684
  • 浏览: 1222551 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

学 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, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    szBin1  db  8 dup(?), 0
    szBin2  db  8 dup(?), 0
    szBin3  db  8 dup(?), 0
    szBin4  db  8 dup(?), 0
.code
main 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
    ret
main endp
end main


如果要观察整个 EFLAGS 的 32 个位, 可用 PUSHFD 和 POPFD 指令让 EFLAGS 进栈、出栈


; Test20_2.asm
.586p
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    szBin db 32 dup(?), 0
.code
main 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
    ret
main endp
end main


发现标志寄存器里的数据有点捉摸不定, 看来不应该是这么观察的; 以后慢慢留意吧.

分享到:
评论

相关推荐

    WIN32汇编语言教程

    总结来说,《WIN32汇编语言教程》是一本面向初学者和进阶者的宝贵教材,它涵盖了从基础汇编语法到WIN32 API的全面知识,通过学习,你不仅可以掌握一门强大的编程语言,还能增强对计算机底层运作的洞察力。

    罗云彬Win32位汇编教程及书中源码

    通过深入学习《罗云彬Win32位汇编教程》,读者不仅可以精通32位Windows环境下的汇编语言编程,还能提升对计算机系统底层运作的洞察力。同时,结合提供的源码,实践操作将有助于将理论知识转化为实际技能,从而在软件...

    简单的位图处理软件(使用WIN32汇编语言编写)

    《简单的位图处理软件——基于WIN32汇编语言实现》 在计算机科学领域,图像处理是一项基础且重要的技术,广泛应用于图形设计、医学成像、视频编辑等多个领域。本项目是一个初学者尝试使用WIN32汇编语言编写的简单位...

    win32下的汇编语言程序设计

    《win32下的汇编语言程序设计》 在计算机科学领域,汇编语言是一种低级编程语言,它与机器语言紧密相连,每条指令都直接对应于计算机硬件的特定操作。学习汇编语言能让我们深入理解计算机的工作原理,洞察程序执行...

    反汇编51WIN

    总结来说,"反汇编51WIN"是一个强大的工具,它为51系列单片机的开发者提供了宝贵的洞察力,帮助他们理解、调试和优化代码。无论是在教学、研究还是实际项目开发中,51WIN都扮演着不可或缺的角色。通过熟练掌握这款...

    汇编调用反汇编引擎

    本文将深入探讨“汇编调用反汇编引擎”这一主题,特别关注在Win32环境下如何进行操作。 首先,汇编语言是一种低级编程语言,它直接对应于机器指令,每条汇编指令通常对应处理器的一个操作。程序员使用汇编语言可以...

    w32dasm的使用1

    例如,`WinMain`函数中的逻辑会被解析为一系列的汇编指令,如跳转、加载寄存器、调用API函数等。通过理解这些指令,我们可以推断出程序的流程控制和功能实现。 在W32Dasm中,你可以查看每个函数的入口点,分析指令...

    8051单片机智能反汇编软件

    - **注意内存组织**:8051单片机的内存分为片内RAM、片外RAM、ROM和特殊功能寄存器等部分,反汇编结果应结合这些知识来分析。 总的来说,“8051单片机智能反汇编软件”是8051开发者和逆向工程师的得力助手,通过它...

    hsdis-amd64.zip

    掌握HSDis的使用,并结合其显示的汇编代码,开发者能够深入理解Java运行时环境的工作细节,提升对代码性能的洞察力,进而进行更有效的优化。然而,这需要一定的汇编语言基础和对JVM内部机制的了解,因此对于初学者来...

    mixbuilder_compen_atleast_mixbuilder_源;mixbuilder_

    Mixbuilder是一款针对混合架构编程的工具,尤其在追踪和理解基于Win系统的汇编语言和程序设计方面表现出强大的功能。标题中的"mixbuilder_compen_atleast_mixbuilder_"暗示了这是一个关于Mixbuilder源代码的集合,...

    使用WinDbg和基本汇编器知识实时跟踪MySQL数据库SQL查询

    此时,可以查看CPU寄存器状态,分析内存中的SQL语句,甚至可以单步执行汇编代码,观察每个指令对数据的影响。此外,WinDbg还可以帮助识别可能导致性能问题的锁争用或其他并发问题。 Win32环境下的数据库应用,如...

Global site tag (gtag.js) - Google Analytics