汇编语言能实现冒泡排序等排序算法吧?当然可以,排序可不是什么复杂的东东。就在第7周,给大家补充一下cmp、jxxx、xchg指令,下面的冒泡就出来了。
  可以对照着附后的C语言排序实现理解。  
assume cs:cseg, ds:dseg, ss:sseg sseg segment stack dw 10H dup (?) sseg ends
dseg segment dw123,5,9,11,33,6,9,76,100,3 dseg ends cseg segment start: mov ax,
dseg mov ds, ax mov cx,9 ;外层循环9趟 sort: push cx ;保存外层循环次数 ;注意到外层第1次循环,内循环执行9次,外层第
2次循环,内循环执行8次,...控制外循环的cx值恰就是内层循环次数 mov si, 0 ;相当于内层循环时j=0 inner: mov ax, [si]
;(ax)即a[j] cmp ax, [si+2] ;a[j]与a[j+1]比较 jbe noswap ;a[j]<=a[j+1]时不交换,等同于a[j]>a
[j+1]时交换 xchg ax, [si+2] ;交换 mov [si], ax ;最终效果是a[j]与a[j+1]交换了 noswap: add si, 2
;要到下一个数了,相当于j++ loop inner ;内层循环 pop cx ;恢复外层循环的cx loopsort ;外层循环 mov ax, 4
c00h int21h cseg ends end start
上面的汇编程序,对应下面的C语言程序。可以对照着阅读:
#include <stdio.h> #define n 10 int main( ) { int i,j,t,a[n]= {123,5,9,11,33,6,
9,76,100,3}; for (i=0; i<n-1; i++) for(j=0; j<n-i-1; j++) if (a[j]<a[j+1]) {
t=a[j]; a[j]=a[j+1]; a[j+1]=t; } for(i=0;i<n;i++) printf("%d ",a[i]); return 0;
}

技术
©2019-2020 Toolsou All rights reserved,
ELementUI select多选下拉框获取选中项的全部属性unity 获取小车速度及前进或者后退LED 滚动文字【Python-数据读取】读取txt文件每一行数据生成列表Thread.getContextClassLoader与Thread.getClassLoader()区别Dijkstra算法的Python实现-最短路径问题JQ get请求 拼接 url 参数 (查询条件)【Python】读取txt文件,获取指定行中指定位置数据iPhone 12售价、配置齐曝光:砍掉64GB、电池2227mAh起步Hack Bar 2.1.2 按F9没反应