以下代码实现C嵌入汇编,实现加减乘除,与或非异或功能
// asm_test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <stdio.h>
#include <iostream>
using namespace std;
enum {
ADD,
SUB,
MUL,
DIV,
AND,
OR,
NOT,
XOR
}ALU;
int calc(int a, int b, int cmd)
{
if (ADD == cmd) {//加 cmp dword ptr [cmd],0 ;jne calc+31h
__asm {
mov eax, a;
mov eax, dword ptr[a] ;byte, word, dword,qword
mov ecx, b
add eax, ecx
}
}
else if (SUB == cmd) {//减
__asm {
mov eax, a
mov ecx, b
sub eax, ecx
}
}
else if (MUL == cmd) {//乘
__asm {
mov eax, a
mov ebx, b
mul ebx
}
}
else if (DIV == cmd) {//除
__asm {
mov edx, 0 ; 清除被除数高位
mov eax, a ; 被除数
mov ecx, b ; 除数
div ecx
}
}
}
int calc2(int a, int b, int cmd)
{
if (AND == cmd) {//与
__asm {
mov eax, a
mov ecx, b
and eax, ecx
}
}
else if (OR == cmd) {//或
__asm {
mov eax, a
mov ecx, b
or eax, ecx
}
}
else if (NOT == cmd) {//非
__asm {
mov eax, a
not eax
}
}
else if (XOR == cmd) {//异或
__asm {
mov eax, a
mov ebx, b
xor eax, ebx
}
}
else {
}
/* Return with result in EAX */
}
int main()
{
//加减乘除
cout << "4 + 7 = " << calc(4, 7, ADD) << endl;
cout << "4 - 7 = " << calc(4, 7, SUB) << endl;
cout << "4 * 7 = " << calc(4, 7, MUL) << endl;
cout << "8 / 4 = " << calc(8, 4, DIV) << endl;
//与或非异或
cout << "and: " << calc2(0b00000111, 0b100000101, AND) << endl;
cout << "or: " << calc2(0b00000011, 0b000000101, OR) << endl;
cout << "not: " << (int)(uint8_t)(calc2(0b10000011, 0, NOT)) << endl;//0b0111_1100 = 0x7C = 124
cout << "xor: " << calc2(0b00000011, 0b10000001, XOR) << endl;//0b1000_0010 = 0x82 = 130
return 0;
}
输出如下: