首页 > 编程语言 >32位汇编语言实现冒泡排序

32位汇编语言实现冒泡排序

时间:2023-03-14 13:24:03浏览次数:41  
标签:index 汇编语言 32 edi mov 冒泡排序 edx ebx esi

INCLUDE Irvine32.inc
.data
    arr dd 99, 2, 3, 1, 22, 88, 7, 77, 54 ;定义数组
    len dd ($-arr)/4 ;定义数组的长度变量
.code
main PROC
    mov edx,offset arr ;edx用于存储数组首元素的地址
    mov ecx,len ;ecx用于存储数组的长度
    call bubbleSort
    call outPutArr
    exit
main ENDP

bubbleSort PROC
    push esi ;将用于遍历数组的index压入栈保护
    mov esi,0 ;初始化用于外层循环的index寄存器
    add ecx,1 
    mov ebx,ecx
outloop:
    cmp esi,ecx ;若esi大于等于len则跳出外层循环
    jge final
    mov ebx,ecx 
    sub ebx,esi ;用ebx来存储len-esi-1的值(即c语言中的n-i-1)
    sub ebx,1
    mov edi,0 ;初始化用于内层循环的index寄存器
inloop:
    cmp edi,ebx ;若edi大于等于ebx则跳出内层循环
    jge nextoutloop
    ;注意两个内存变量不能直接比较,将其中一个赋值给寄存器后比较
    mov eax,[edx+edi*4]
    cmp eax,[edx+edi*4+4]
    jle nextinloop
    ;注意此处交换元素入栈和出栈的顺序
    push dword ptr [edx+edi*4]
    push dword ptr [edx+edi*4+4]
    pop dword ptr [edx+edi*4]
    pop dword ptr [edx+edi*4+4]
nextinloop:
    add edi,1 ;将内层循环index加1后继续遍历
    jmp inloop
nextoutloop:
    add esi,1 ;将外层循环index加1后继续遍历
    jmp outloop
final:
    pop esi ;在遍历结束的时候将esi弹出栈
    ret
bubbleSort ENDP

outPutArr PROC
    push esi ;用esi来存储遍历数组用的index值
    mov esi,0 ;初始化index
again:
    cmp esi,ecx ;若esi大于等于数组长度则结束遍历
    jge final
    mov eax,[edx+esi*4] ;将当前数组元素的值存储在eax寄存器中用于输出
    call writeint
    add esi,1
    jmp again
final:
    pop esi
    ret
outPutArr ENDP

END main
    
    

标签:index,汇编语言,32,edi,mov,冒泡排序,edx,ebx,esi
From: https://www.cnblogs.com/linhongyu0090/p/17214608.html

相关文章

  • 代码随想录训练营day 12||232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、104
    232.用栈实现队列题目链接:232.用栈实现队列思路使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈一个输入栈,一个输出栈,这里要注意输入栈和输出栈的关......
  • 冒泡排序
    原理比较相邻的两个数,如果前面的数比后面大,则交换两个数的位置,最后得到最大的数排在最后一位,这样最后一位就有序了。剩下的数再次比较,得到第二大的数排在倒数第二位,......
  • 由于找不到 visa32.dll问题解决办法
    由于找不到visa32.dll,无法继续执行代码。重新安装程序可能会解决此问题。 金山官网下载https://www.ijinshan.com/filerepair/visa32.dll.shtml由于找不到NiViSv32.d......
  • 短期计划312-323
    Tiny_Web_Server0.5Unity0.3S(0830,8,10,1200)3_bodyesp32+pythonSummarizesomeoldcodesselfintroCsapp_Lab......
  • 冒泡排序
    简述原理是相邻的两两元素做比较并往后移动,每轮可以选出一个最值故最多n-1轮排完每轮最多比较n-1-已完成轮数次总共最多比较n*(n-1)/2次比较并交换可以通过中间变量暂......
  • 经典的排序算法 - 冒泡排序
    冒泡排序算法应该可以说是很经典的一种对数据进行排序的的算法了,甚至在很多的介绍算法的数据中,它可能还是放在最前面开始讲解的。冒泡排序算法到底是咋样的呢?冒泡这个说法又......
  • 《汇编语言》检测点和实验第四版
    一二三章实验环境配置见:https://blog.csdn.net/plus_re/article/details/60761467第四章加入了deit等指令,需要添加一些exe文件:https://blog.csdn.net/Ghost_jzy/article/d......
  • 用冒泡排序模拟qsort的实现
    #include<stdio.h>#include<stdlib.h>#include<string.h>//交换voidswap(char*arr1,char*arr2,intwidth){inti=0;for(i=0;i<width;i++){chararr......
  • keil在线调试STM32,点三次运行才能跑到main的问题
    遇到的问题是,在include了,并调用对象的pushback()函数,就会出现需要点击3次才能全速运行。目前解决的办法是勾选microlib选项,但会出现警告说microlib不支持C++暂不清楚这......
  • 冒泡排序
    原理第一个元素如果大于第二个元素比较,则他们位置调换。假设有6个元素,需要经过6*6=36次循环。 代码/***升序**@paramnumArr*@ret......