#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;
}
運行結果圖: