我对组装非常陌生。我创建了一个链接到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
屏幕截图: