我是x86汇编语言的新手,我有一个保存在寄存器中的有符号整数eax,我想检查数字是负数还是正数.为此,我用bt指令检查第一位.
这是我做的:
bt eax,0
jnc isNegative
Run Code Online (Sandbox Code Playgroud)
bt第一位携带标志,我用来jnc检查进位标志是0还是1.如果是1,它应该是负数,并做负指令...但是,输出是不可预测的,有时我有一个积极的,它认为它是一个负数.难道我做错了什么?
编辑:我刚刚意识到它可能与endianess有关.它实际上是检查最后一位而不是第一位.让我试试吧bt,7
我知道这听起来令人困惑,我有一个基本模板类,它有一个函数指针,一个子类(不再是模板类)需要使用该函数指针指向子类的成员函数,我得到所有各种错误..我是否违反了一些C++的普遍规律?这是伪代码:
template <class T>
class Base{
public:
typedef void (Base<T>::*fptr) (char in);
void funcA(fptr FuncToCall){
FuncToCall('a');
}
...
};
class Child:public Base<char>{
public:
void funcToCall(){...}
void funcB(){
funcA(funcToCall);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息:
错误C2664:'Base <T> :: funcA':无法将参数1从'void(__ thiscall Child ::*)(char)'转换为'void(__thiscall Base <T> ::*)(char)'