#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> int main( void ) { // 大数字 // 20304050607080908070605040302010(Hex) + 60E0A0B0C080907060504030A0F0F0F0(Hex) = 8110e10120f11100e0c0a080e1211100(Hex) char nNum1[16] = { 0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0x80,0x70,0x60,0x50,0x40,0x30,0x20 }; char nNum2[16] = { 0xF0,0xF0,0xF0,0xA0,0x30,0x40,0x50,0x60,0x70,0x90,0x80,0xC0,0xB0,0xA0,0xE0,0x60 }; char *pNum1 = NULL; char *pNum2 = NULL; // 申请16字节空间 pNum1 = ( char * )malloc( sizeof( char ) * 16 ); pNum2 = ( char * )malloc( sizeof( char ) * 16 ); _asm { /* 数据内存拷贝 */ // 内存拷贝1 cld // 方向标志DF设置0 lea esi,nNum1 // 源地址 mov edi,pNum1 // 目的地址 mov ecx,16 // 移动的数量 rep movsb // 内存拷贝2 cld // 方向标志DF设置0 lea esi,nNum2 // 源地址 mov edi,pNum2 // 目的地址 mov ecx,16 // 移动的数量 rep movsb /* 加法计算 */ xor ebx,ebx // 索引 mov esi,pNum1 // 内存区1 mov edi,pNum2 // 内存区2 mov ecx,16 // 循环次数 s: mov ah,byte ptr[edi] adc byte ptr[esi],ah inc esi inc edi loop s } printf( "下面是2个16进制的大数相加:\r\n" ); printf( "20304050607080908070605040302010\r\n" ); printf( "60E0A0B0C080907060504030A0F0F0F0 +\r\n" ); printf( "------------------------------------\r\n" ); for( int nIndex=15; nIndex>=0; nIndex-- ) { printf( "%02X", ( unsigned char ) * (pNum1 + nIndex ) ); } // 释放内存 free( pNum1 ); free( pNum2 ); ::Sleep( 100000 ); return 0; }
运行结果图: