#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:} 抢到了22{:10_279:} 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;
}
做成了一个任意7位数以内,取得各位数单的类型版本,需要输出哪一位,就可以输出哪一位: a.out(4);//要第4位数子. cnkizy 发表于 2022-9-19 20:57
fun_asm中是用了mov?
汇编手段吗? 柿子饼同学 发表于 2022-9-19 22:04
{:10_256:} howzyao 发表于 2022-9-19 22:18
fun_asm中是用了mov?
汇编手段吗?
是的,混合编程挺好玩,坑挺多的,跟着小甲鱼学汇编,来玩呀。
页:
1
[2]