#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;
}
运行结果图: