C语言描述:
#include <stdio.h> int reverseNumber(int num) { int reversedNum = 0; // 循环取出num的每一位数字,并将其加到reversedNum的末尾 while (num != 0) { int digit = num % 10; reversedNum = reversedNum * 10 + digit; num /= 10; } return reversedNum; } int main() { int num; scanf("%d", &num); int reversedNum = reverseNumber(num); printf("逆序结果:%d", reversedNum); return 0; }
汇编语言:
include irvine32.inc .data .code main proc start: call readint mov ecx,0 ; 将 ecx 寄存器清零,用于存储逆向后的整数 startWhile: cmp eax,0 ; 比较 eax 寄存器中的值是否为 0 jz endWhile ; 如果为 0,则跳转到 endWhile push eax ; 将 eax 寄存器中的值压栈保存 mov eax,ecx ; 将 ecx 寄存器中的值移动到 eax 中,准备进行乘法运算 mov ebx,10 ; 将 10 存储到 ebx 寄存器中,用于取模和除法操作 mul ebx ; 将 eax 乘以 ebx,结果存储在 edx:eax 中(edx 为高 32 位,eax 为低 32 位) mov ecx,eax ; 将乘积结果存储到 ecx 中,作为累加逆向后的整数的变量 pop eax ; 弹出之前压栈保存的用户输入的整数 mov edx,0 ; 将 edx 寄存器清零,准备进行除法操作 div ebx ; 将 eax 寄存器中的值除以 ebx,商存入 eax,余数存入 edx add ecx,edx ; 将 ecx 加上之前除法得到的余数,实现逆向操作 jmp startWhile ; 无条件跳转到 startWhile,继续处理下一个数字 endWhile: mov eax,ecx ; 将最终逆向后的整数值从 ecx 移回 eax call writedec ; 调用 writedec 函数输出整数 exit main endp end main
运行结果: