void SeniorVMHandle::d_sub(long _register1,long _register2) { d_not(_register1); pop(T_INVALID); pop(T_TMP_REGISTER8); d_add(T_TMP_REGISTER8,_register2); // pop(T_INVALID); pop(T_TMP_REGISTER6); //eflag 1 d_copy_stack(); d_not_and(); pop(T_TMP_REGISTER7); //eflag 2 //pop(T_TMP_REGISTER8); //结果 d_not(T_TMP_REGISTER6); pop(T_INVALID); w_push_imm_sx(0xf7ea); d_not_and(); pop(T_INVALID); pop(T_TMP_REGISTER6); d_not(T_TMP_REGISTER7); pop(T_INVALID); w_push_imm_sx(0x815); d_not_and(); pop(T_INVALID); pop(T_TMP_REGISTER7); d_add(T_TMP_REGISTER6,T_TMP_REGISTER7); pop(T_INVALID); }
void SeniorVMHandle::d_not(long _register,bool is_data) //如果第二个参数为true 那第一个参数就是 要Not的立即数 { if (is_data) { d_push_imm(_register); d_copy_stack(); db( GET_HANDLE(d_nand) ); return; } if (_register == 0) { db(HANDLE.d_nand.handle); return; } /* char n = rand()%101; if (n <= 10) { d_not(_register); //a = nand(_r,_r); pop(T_INVALID); d_not(_register); //b = nand(_r,_r); pop(T_INVALID); db(HANDLE.d_nand.handle); //nand(a,b) pop(T_INVALID); d_not(_register); //a = nand(_r,_r); pop(T_INVALID); d_not(_register); //b = nand(_r,_r); pop(T_INVALID); db(HANDLE.d_nand.handle); //nand(a,b) pop(T_INVALID); db(HANDLE.d_nand.handle); return; }*/ push(_register,false); db(HANDLE.push_stack_top_base.handle); db(HANDLE.d_read_mem.handle); //#ifndef PROTECT_X64 //db(HANDLE.push_stack_top_base.handle); //db(HANDLE.d_read_mem.handle); //pop(_register); //#endif db(HANDLE.d_nand.handle); }