写了个冒泡排序, 有点小小小问题
时间:2010-11-29
来源:互联网
我的Sort子程序那样子写法, 哪里问题哦, 个人觉得无错, 可惜就是错的, 我汇编基础不是很好, 之前看书有点囫囵吞枣了, 现在写出来的程序问题不大, 但是很恼人, 废话不说了, 请教指出错误
Assembly code
Assembly code
; Template for DOS .exe file assume cs:code, ds:data, ss:stack ;********************************************** data segment array db 2, 3, 5, 2, 4, 3, 7, 8, 9, 1 data ends ;********************************************** stack segment db 1024 dup (?) stack ends code segment ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;名称: Main ;功能: 冒泡排序 ;入口: 无 ;出口: al(返回dos) ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;for (i = 9; i > 0 && bChange; --i) ;{ ; bChange = 0; ; for (j = 0; j < i - 1; ++j) ; { ; if ( array[j] > array[j + 1] ) ; { ; //交换 ; bChange = 1; ; } ; } ;} Main Proc start: call Init call Sort call Result call Pause mov al, 0h call Exit ret Main EndP ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;名称: Init ;功能: 初始化 ;入口: 无 ;出口: 无 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Init Proc mov ax, data mov ds, ax mov ax, stack mov ss, ax ret Init EndP ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;名称: Exit ;功能: 返回dos ;入口: al(返回值) ;出口: al ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Exit Proc mov ah, 4ch int 21h ret Exit EndP ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;名称: Show ;功能: 显示一个字符 ;入口: dl ;出口: 无 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Show Proc push ax mov ah, 02h int 21h pop ax ret Show EndP ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;名称: Pause ;功能: 暂停一下 ;入口: 无 ;出口: 无 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Pause Proc push ax mov ah, 1h int 21h pop ax ret Pause EndP ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;名称: Result ;功能: 输出结果 ;入口: 无 ;出口: 无 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Result Proc push si push di push cx push dx mov si, 0 mov cx, 10 lSho: mov dl, array[si] or dl, 30h call Show mov dl, ' ' call Show inc si loop lSho pop dx pop cx pop di pop si ret Result EndP ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;名称: Sort ;功能: 冒泡排序算法 ;入口: 无 ;出口: 无 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sort Proc mov si, 9 ;i=9 oLoop: cmp si, 0 jge OExt mov di, 0 ;j=0 mov dx, si dec dx iLoop: cmp di, dx jle Inext mov dl, [array + di] xchg dl, [array + di] mov [array + di + 1], dl Inext: inc di loop iLoop Onext: dec si loop oLoop OExt:;退出外循环 ret Sort EndP code ends end start
作者: wayaoqiang 发布时间: 2010-11-29
作者: masmaster 发布时间: 2010-11-29
title sort number
assume cs:code,ds:data
data segment
num db 12h,90h,45h,34h,89h,56h,78h,0,23h
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov cx,lengthof num-1 ;外循环次数
s: push cx ;保护计数器
mov di,si ;si为外循环数据
inc di ;di为内循环数据
s1: mov al,[si] ;开始比较
cmp al,[di] ;如果小于
jb jx ;跳过
xchg al,[di] ;把小数放在[si]中
mov [si],al ;
jx: inc di ;指向内循环下一个数据
loop s1
inc si ;指向外循环下一个数据
pop cx ;恢复外循环计数器
loop s
;结束
mov ah,4ch
int 21h
code ends
end start
有异常啊, lengthof是什么意思哦, 调不通
assume cs:code,ds:data
data segment
num db 12h,90h,45h,34h,89h,56h,78h,0,23h
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov cx,lengthof num-1 ;外循环次数
s: push cx ;保护计数器
mov di,si ;si为外循环数据
inc di ;di为内循环数据
s1: mov al,[si] ;开始比较
cmp al,[di] ;如果小于
jb jx ;跳过
xchg al,[di] ;把小数放在[si]中
mov [si],al ;
jx: inc di ;指向内循环下一个数据
loop s1
inc si ;指向外循环下一个数据
pop cx ;恢复外循环计数器
loop s
;结束
mov ah,4ch
int 21h
code ends
end start
有异常啊, lengthof是什么意思哦, 调不通
作者: wayaoqiang 发布时间: 2010-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28