程序集中字节定义(DB)中的特权指令错误

时间:2019-05-17 09:56:09

标签: c++ assembly masm

我对组装非常陌生。我创建了一个链接到C ++程序的汇编函数,并定义了两个具有相同值的变量b1和ab1。我使用二进制定义了这两个变量。当b1和ab1的值相同时,程序将编译并执行良好。如果我将最低有效位更改为1,那么所有内容也将起作用。但是,如果我将ab1中的第二个最高有效位更改为1,则程序会编译,但是会由于特权指令错误而出错。

很明显,CPU不允许我做某事。问题是,如果没有其他值,用合法值定义的字节操作怎么能成为特权指令呢?

C ++代码:

extern "C" int afunc();
...
...
...
afunc();

有效的汇编代码:

.model flat, C
.code
afunc PROC
    b1 DB 10101100b
    ab1 DB 10101100b
    mov eax, 3
    mov ebx, 8
    xor eax, ebx
    ret
afunc ENDP
END 

这是行不通的东西

.model flat, C
.code
afunc PROC
    b1 DB 10101100b
    ab1 DB 11101100b
    mov eax, 3
    mov ebx, 8
    xor eax, ebx
    ret
afunc ENDP
END 

屏幕截图:

enter image description here

enter image description here

enter image description here

0 个答案:

没有答案