【汇编语言实战】输入一个无符号整数求其逆序

简介: 【汇编语言实战】输入一个无符号整数求其逆序

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


运行结果:


目录
相关文章
|
6月前
|
C语言
【汇编语言实战】实现九九乘法表
【汇编语言实战】实现九九乘法表
56 2
|
6月前
|
C语言
【汇编语言实战】实现输出集合{1,2,...,n}全排列
【汇编语言实战】实现输出集合{1,2,...,n}全排列
43 1
|
6月前
|
C语言
【汇编语言实战】给定一个句子,将大写字母变为小写
【汇编语言实战】给定一个句子,将大写字母变为小写
68 1
|
6月前
|
C语言
【汇编语言实战】最小公倍数和最大公约数
【汇编语言实战】最小公倍数和最大公约数
87 1
|
6月前
|
C语言
【汇编语言实战】二分查找
【汇编语言实战】二分查找
52 1
|
6月前
|
C语言
【汇编语言实战】冒泡排序
【汇编语言实战】冒泡排序
58 1
【汇编语言实战】冒泡排序
|
6月前
|
C语言
【汇编语言实战】解迷宫问题
【汇编语言实战】解迷宫问题
52 2
|
6月前
|
算法 C语言 网络架构
【汇编语言实战】整数拆分问题
【汇编语言实战】整数拆分问题
44 2
|
6月前
|
C语言
【汇编语言实战】基础知识+函数的引用(求1+2+..+N)+OllyDBG的使用
【汇编语言实战】基础知识+函数的引用(求1+2+..+N)+OllyDBG的使用
37 1
|
6月前
|
C语言
【汇编语言实战】对给定的数组实现堆排序
【汇编语言实战】对给定的数组实现堆排序
33 1