【问题标题】:accessing a bit in MASM访问 MASM 中的位
【发布时间】:2021-03-19 02:35:00
【问题描述】:

如果我有一个名为eFlagContents 的字节类型变量,其值为0000 0010,我将如何单独访问每个位以便输出它们?我尝试了以下方法,仅当我将字符存储在变量中时才有效。

MOV ECX, 8
outputLoop:
        MOVZX EAX, counter
        MOV AL, BYTE PTR [eFlagContents + EAX ]
        MOV EBX, 1
        CALL WriteBinB
        CALL Crlf
        INC counter
        LOOP outputLoop

唯一的区别是字符是WriteChar

【问题讨论】:

    标签: assembly masm masm32


    【解决方案1】:
    TEST AL, BYTE 0x04 (or whatever the hex value of the bit is)
    

    无论该位是否设置,都会对 C 标志进行 bin 处理;使用JZ 做出决定。

    如果我们想从 AL 中访问 sis 的位开始,我们可以这样做(clobbers DX)

    MOV DL, 0
    SHL DL, CL
    MOV AL, BYTE PTR [eFlagContents]
    TEST AL, DL
    

    【讨论】:

    • test 总是清除 CF,因为 AND 不能执行。该位是否为零的结果将在 ZF 中。此外,您更可能只想将shr eax, 1 放在一个循环中,这样您就可以轻松隔离低位,并将其添加到'0'
    • 如果要测试变量位位置,请使用bt eax, edx在CF中产生一个结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多