Win-MASM64汇编语言-MUL/DIV

MUL:乘法指令
两个数相乘,其中必须有一个数在ax中,另外一个数可以是寄存器或者内存中,下面是乘法5*5的代码,该代码我在win10 x86下运行,所以是32位,ax使用eax替代,dx使用edx替代

#include 
#include 

int main() {
	int a = 0;
	_asm {
		mov eax, 5
		mov ebx, 5
		mul ebx
		mov a, eax
	}
	std::cout << a << std::endl;//打印出25
}

MUL的进位:当两个数相乘的结果大于32位,一个寄存器放不下,那么CPU会使用dx保存高位,比如,FFFF FFFF乘以5=4 FFFF FFFB

#include 
#include 

int main() {
	int a = 0;
	int b = 0;
	_asm {
		mov eax, 0xFFFFFFFF
		mov ebx, 5
		mul ebx
		mov a, eax;
		mov b, edx; 
	}
	printf("%x\n", a);//打印出FFFF FFFB
	printf("%x\n", b);//打印出4

}

DIV指令
有这样一个除法30/7=4余2,汇编代码如下

	mov edx,0
	mov eax,30
	mov ebx,7
	div ebx

结果4放到eax中
余数2放到edx中

注意:必须要将edx清0,如果本例被除数不是30,而是超过eax最大值,那么超出的部分要放到edx中,也就是说32位除法指令必须要用到edx

你可能感兴趣的:(Win-MASM64汇编语言,汇编语言)