ADC指令+内联汇编计算2个16进制的大数
2013-11-06 13:31
288 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> int main(void) { // 128bit数字 // 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字节空间(128bit) 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; }
ADC带进位的加法
运行结果:
相关文章推荐
- 内联汇编计算2个16进制的大数
- 排列的个数 计算3个A,2个B可以组成多少种排列的问题(如:AAABB, AABBA)是《组合数学》的研究领域 。
- 计算大数阶乘
- C# 判断给定大数是否为质数,目标以快速度得到正确的计算结果。
- 计算大数n!
- 计算输入字符的长度(文字为2个字符)
- 手工计算浮点数到16进制科学记数法的辅助验证工具
- 大数阶乘的计算(四)
- c#计算2个字符串的相似度
- 动态函数调用实现下列操作,输入2个数以及操作符计算结果。@最大公约数$最小公倍数+和 -差
- 大数,高精度计算---百位大数
- 计算2个坐标点之间的距离
- 使用2个MR计算
- 算法 大数计算:加减乘除,模,阶乘,进制转换(大数除法取余)
- 计算大数阶乘--Linux Bash版
- C语言精度计算——大数相乘
- 大数阶乘的位数和精确值计算
- C#阶乘类,可以精确计算大数的阶乘,10000的阶乘只要1.3秒左右
- WEB前端面试真题 - 2000!大数的阶乘如何计算?
- VC++大数乘法计算,支持1000位大整数乘法运算