在Radasm下,汇编语言实现冒泡排序

.686p
.model flat,stdcall
Option casemap:none

include windows.inc
include kernel32.inc
include masm32.inc
includelib "d:\vs\msvcrt.lib"

includelib masm32.lib
includelib kernel32.lib
printf PROTO C:dword,:vararg
scanf PROTO C:dword,:vararg

.data
hello db ‘hello‘,0
A dword 5,4,30,2,1
p byte ‘%s‘,0ah
hint1 byte "Please enter 5 numbers:",0ah,0
hint2 byte "like 5 2 3 1 4,",0ah,0
fmt byte "%d %d %d %d %d",0ah,0
lin byte "function:%d",0ah,0
edii byte " Before exchanging eax:%d,ebx:%d",0ah,0
edia byte " After exchanging eax:%d,ebx:%d",0ah,0
.code

start:
init:
mov edi,0
mov esi,0
JMP input_number
input_number:
invoke printf, offset hint1
invoke printf, offset hint2
invoke scanf , offset fmt,offset A[0],offset A[4],offset A[8],offset A[12],offset A[16]
JMP judge
judge:
cmp edi,4
JNS ju_esi

mov eax,A[edi*4]
mov ebx,A[edi*4+4]
;invoke printf,offset lin,2
add edi,1

cmp eax,ebx
JNS exchange;结果为负,则转移
JMP judge

exchange:
;invoke printf,offset edii,eax,ebx
mov A[edi*4-4],ebx
mov A[edi*4],eax
;invoke printf,offset edia,eax,ebx
;invoke printf, offset fmt,A[0],A[4],A[8],A[12],A[16]
JMP judge

ju_esi:
;invoke printf,offset lin,3
add esi,1
cmp esi,4
JNS exit
mov edi,0
JMP judge

exit:
;invoke printf,offset lin,4
invoke printf, offset fmt,A[0],A[4],A[8],A[12],A[16]
;invoke StdOut, addr hello
invoke ExitProcess,0

end start

时间: 2024-10-17 07:05:06

在Radasm下,汇编语言实现冒泡排序的相关文章

linux下汇编语言开发总结

汇编语言是直接对应系统指令集的低级语言,在语言越来越抽象的今天,汇编语言并不像高级语言那样使用广泛,仅仅在驱动程序,嵌入式系统等对性能要求苛刻的领域才能见到它们的身影.但是这并不表示汇编语言就已经没有用武之地了,通过阅读汇编代码,有助于我们理解编译器的优化能力,并分析代码中隐含的低效率,所以能够阅读和理解汇编代码也是一项很重要的技能.因为我平时都是在linux环境下工作的,这篇文章就讲讲linux下的汇编语言. 一.汇编语法风格 汇编语言分为intel风格和AT&T风格,前者被Microsoft

Linux下汇编语言------计算n的阶乘

用高级语言比方C语言写个阶乘非常easy,那如今就来熟悉下Linux使用AT&T汇编格式写一个程序来计算阶乘吧 写法一是 使用跳转指令实现.写法二是使用函数来实现 约定:本程序没有将结果打印在标准输出上. 须要使用GDB调试查看 写法一 #as filename.s -o filename.o #ld filename.o -o filename # gdb filename .section .data .section .text .globl _start _start: movl $1,

Win64下集成RadASM+nasm编写操作系统

这个标题有点唬人,我只是在看<自己动手写操作系统>的第二版<ORANGE'S:一个操作系统的实现>.作者喜欢命令行,我喜欢IDE.我尝试在RadASM下实现了第一个例子的编译与载入,觉得还不错.RadASM默认只支持用Nasm开发win32应用程序,而写操作系统需要生成bin文件,只能自己修改配置来实现.本着瞎折腾的精神,我就折腾了一个nasm.ini,注意我将32位的nasm编译器放到了安装目录下的Nasm32目录中,所以写了一句$A=$R\Nasm32,读者请自行替换.[Des

排序算法(一)——冒泡排序及改进

冒泡排序 冒泡排序的效率很低,但是算法实现起来很简单,因此很适合作为研究排序的入门算法. 基本思想 对当前还未排好序的范围内的全部数,自上而下对相邻的俩个数依次进行比较和调整,让较大的数下沉,较小的数往上冒.即:每当俩相邻的数比较后发现他们的排序与排序的要求相反时,就将他们交换.每次遍历都可确定一个最大值放到待排数组的末尾,下次遍历,对该最大值以及它之后的元素不再排序(已经排好). java实现 public class Sort{ private int [] array; public So

冒泡排序及改进

排序算法概述 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面. 稳定性:一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 如果算法是稳定的有什么好处呢?排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用.基数排序就是这

【排序】冒泡排序算法

特别说明: 对于算法,重在理解其思想.解决问题的方法,思路.因此,以下内容全都假定待排序序列的存储结构为:顺序存储结构. 冒泡排序思想 冒泡排序与插入排序.简单选择排序一样,都是比较简单的一类排序算法.假设待排序序列为 ,则冒泡排序算法思想如下: 01.设置  =  - 1 (注:0     - 1, 用于标记外层循环迭代): 02.如果  = 0,则排序结束,退出: 03.设置  = 0 (注:0    , 用于标记内层循环迭代): 04.如果  = ,跳转并执行 09 步骤 (即:该趟冒泡排

用多线程判断快速排序和冒泡排序的速度

一般的,我们知道快排是优于冒泡排序的,下面就让我们用多线程验证一下,具体操作:先产生一个随机整数n(大于10),再产生n个随机正数存放于数组中,然后创建两个线程并发地对锁生成的随机整数进行排序,其中一个线程采用冒泡排序,另一个线程采用快速排序,最后比较这两个线程哪个先完成排序 闲话少说哈,上代码: 结果分析: (1)当随机数个数取值为10.100时,一般情况下,若冒泡排序的进程先调用,冒泡排序先完成,否则快速排序先完成(线程执行start()函数时并不能说明线程开始执行,只是加入了就绪队列,执不

用多线程推断高速排序和冒泡排序的速度

一般的,我们知道快排是优于冒泡排序的,以下就让我们用多线程验证一下,详细操作:先产生一个随机整数n(大于10),再产生n个随机正数存放于数组中.然后创建两个线程并发地对锁生成的随机整数进行排序,当中一个线程採用冒泡排序,还有一个线程採用高速排序,最后比較这两个线程哪个先完毕排序 闲话少说哈,上代码: 结果分析: (1)当随机数个数取值为10.100时.普通情况下.若冒泡排序的进程先调用,冒泡排序先完毕.否则高速排序先完毕(线程运行start()函数时并不能说明线程開始运行,仅仅是增加了就绪队列,

汇编语言程序设计读书笔记(1)- 相关工具

linux下汇编语言采用的是AT&T语法,可使用GNU工具,包括汇编器gas,连接器ld,编译器gcc,调试器gdb或kdbg,objdump的反汇编功能,简档器gprof.以简单的例子分别对每个工具在汇编语言开发中的用法进行简单说明. 这些工具都要在linux环境下使用,先建立linux的开发环境,可参考文章“windows7 64位系统安装VMware Centos 64位系统搭建开发环境”. 假设有以下简单的c程序test1.c. #include <stdio.h> int m