cnkizy 发表于 2022-9-19 20:57:00

本帖最后由 cnkizy 于 2022-9-19 20:59 编辑



#include <stdio.h>
// num 表示需要计算的数         
// buff 表示取出的数字存放的数组
// len 表示数组长度               
void _stdcall fun_asm(unsigned int num, char* buff, int* len) {
    __asm {
      push 10    // 创建一个局部变量,10,作为除数,地址为
      mov ecx,
      loop_start :
      cmp ecx, 0
      jz loop_over// 被除数为0停止
      // 计算
      mov eax,ecx
      cdq
      idiv dword ptr // 32位/32位,除法结果: eax存放商,edx存放余, 这样一个指令就完成了俩值计算
      mov ecx, eax// 商给ecx
      mov ebx,    // edx余数给buff
      mov dword ptr, edx
      inc buff   // buff地址往后+1
      mov ebx,    // len+1
      inc      
      jmp loop_start // 返回继续计算,直到被除数为0停止
      loop_over :
      add esp, 4// 平衡栈,之前创建了局部变量,现在不用了需要扔掉
    }
}

int main() {
    char* arry = new char {0}; // 只有10个数字
    int len = 0; // 实际使用了多少数字
    int num = 0; // 输入的数字
    while (true) {
      printf("请输入被计算的数字:");
      scanf_s("%d", &num);
      if (num == 0) break;
      fun_asm(num, arry, &len);
      for (int i = len - 1; i >= 0; i--) {
            printf("%d ", *(arry + i));
      }
      printf("\n");
      len = 0;
    }
    delete[] arry;
    return 0;
}{:10_254:}

cnkizy 发表于 2022-9-19 20:59:41

抢到了22{:10_279:}

柿子饼同学 发表于 2022-9-19 22:04:33

zhangjinxuan 发表于 2022-9-18 11:49


#include <bits/stdc++.h>
using namespace std;

string num;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
   
    cin >> num;

    for(auto number : num){
      cout << number << " ";
    }
   
    return 0;
}

howzyao 发表于 2022-9-19 22:11:40


做成了一个任意7位数以内,取得各位数单的类型版本,需要输出哪一位,就可以输出哪一位: a.out(4);//要第4位数子.

howzyao 发表于 2022-9-19 22:18:07

cnkizy 发表于 2022-9-19 20:57


fun_asm中是用了mov?
汇编手段吗?

zhangjinxuan 发表于 2022-9-20 06:58:43

柿子饼同学 发表于 2022-9-19 22:04


{:10_256:}

cnkizy 发表于 2022-9-20 07:50:41

howzyao 发表于 2022-9-19 22:18
fun_asm中是用了mov?
汇编手段吗?

是的,混合编程挺好玩,坑挺多的,跟着小甲鱼学汇编,来玩呀。
页: 1 [2]
查看完整版本: C++算法:每位数的提取【回复可见、抢楼】