#include <stdio.h>
#include <iostream>
using namespace std;

/*
常见汇编指令
1. 传送指令(4个):mov、push、pop、lea。
2. 转移指令(8个):call、jmp、je、jne、jb、jnb、ja、jna。
3. 运算指令(7个):add、sub、mul、div、adc、sbb、cmp。
4. 处理机控制指令(1个):nop。
//*/
int test()
{
__asm {
//1. 数据传送指令
mov al, 'A'
mov eax, 0100b //4
mov eax, 100h //256
mov eax, 0x100 //256
mov eax, 100 //100
mov ebx, 200 //ebx=200
xchg eax, ebx //交换,此时eax=200,ebx=100
//2. 简单加减指令
add eax,ebx //eax = 100+200 = 300
sub eax,150 //eax = 300-150 = 150
inc eax //eax = 151
dec eax //eax = 150
neg eax //eax = -150 取反
//3. 状态标志位
mov eax,100
mov ebx, 0
CLC//CLC(clear carry flag)CF=0
//STC(set carry flag) CF=1
jb L //jump if below(CF=1); jnb(CF=0)
mov ebx,200
L :
add eax,ebx
//4. 逻辑运算指令
mov eax, 00000111b
mov ebx, 00000011b
and eax, ebx//3
or eax, ebx//3
not eax//-4
XOR eax,ebx
//5. 移位指令
mov eax,0
mov al, 0000010b
mov cl, 3
shl al, cl ;2<<3=16
mov cl, 2
shr al, cl ; 16>>2=4
//lea
lea ebx, [eax]//load effective address从内存读取数据到寄存器
mov eax, 100
mov eax, ebx //eax=4
//循环
//jmp short s
mov ax, 2
mov cx, 10
s: add ax, ax//2048
loop s//*/
}
}

int main()
{
cout << test() << endl;
getchar();
return 0;
}