史上最牛最完整的汇编语言冒泡排序程序.docx
- 文档编号:11775187
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:9
- 大小:16.31KB
史上最牛最完整的汇编语言冒泡排序程序.docx
《史上最牛最完整的汇编语言冒泡排序程序.docx》由会员分享,可在线阅读,更多相关《史上最牛最完整的汇编语言冒泡排序程序.docx(9页珍藏版)》请在冰豆网上搜索。
史上最牛最完整的汇编语言冒泡排序程序
;题目:
编制一个完整的汇编语言法式,从键盘上读入若干个(可以超越十个)十进制数(正数),排序后在屏幕上输出.之迟辟智美创作
;采纳冒泡法排序,综合运用子法式和宏汇编,使法式模块化.
;法式代码
M_DIRECTMACROSTRING;界说一个宏,调用09号DOS功能在屏幕上显示一个字符串
MOVDX,OFFSETSTRING
MOVAH,09
INT21H
ENDM
DATASEGMENT
DIR1DB'countofnumberstosort:
$';提示输入要排序的数据的个数
DIR2DB'pleaseinputsortingnumbers:
$';提示输入要排序的数据
DIR3DB'sortingresult:
$';在屏幕上提示排好续的数据
DIR4DB'*************************$'
DIR5DB'pleasechooseu(up)ord(down):
$'
DIR6DB'inputerror$'
COUNT=100
WTEMPDW?
ARRAYDWCOUNTDUP(?
);用来保管输入的数据
CRLFDB13,10,'$';实现回车换行的功能,13→0DH,回车;10→0AH,换行
LENDW?
;保管实际输入的数据的个数
DATAENDS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
SUBAX,AX;置AX为0
PUSHAX
MOVAX,DATA;将数据段的地址送到DX中
MOVDS,AX
READ:
M_DIRECTDIR1;宏调用,在屏幕上提示输入要输入的数据的个数
CALLP_GETNEW;调用子法式P-GETNEW,输入要输入的数据的个数
MOVCX,AX
MOVLEN,AX
LEABX,ARRAY
MOVAH,09;调用09号功能,实现回车换行
LEADX,CRLF
INT21H;屏幕提示输入要排序的数据
M_DIRECTDIR2
GETNUMBER:
CALLP_GETNEW;输入数据并保管到ARRAY中
MOV[BX],AX
ADDBX,2
LOOPGETNUMBER
SORT:
MOVCX,LEN;排序法式部份
DECCX
MOVAH,09H
LEADX,CRLF
INT21H
M_DIRECTDIR5
COMPARE:
MOVAH,01H
INT21H
CMPAL,'U';判断是升序排序还是降序排序
JZUP;输入的字符是U或u跳转到升序排序法式
CMPAL,'u'
JZUP
CMPAL,'D';输入的字符是D或d跳转到降叙排序法式
JZDOWN
CMPAL,'d'
JZDOWN
UP:
MOVDI,CX;升序排序法式
MOVBX,0
LOOP1:
MOVAX,ARRAY[BX]
CMPAX,ARRAY[BX+2]
JNGECONTINUE1
XCHGAX,ARRAY[BX+2]
MOVARRAY[BX],AX
CONTINUE1:
ADDBX,2
LOOPLOOP1
MOVCX,DI
LOOPUP
JMPOUTPUT;排序完后跳转到输出法式部份
DOWN:
MOVDI,CX;降序排序法式
MOVBX,0
LOOP2:
MOVAX,ARRAY[BX]
CMPAX,ARRAY[BX+2]
JGECONTINUE2
XCHGAX,ARRAY[BX+2]
MOVARRAY[BX],AX
CONTINUE2:
ADDBX,2
LOOPLOOP2
MOVCX,DI
LOOPDOWN
JMPOUTPUT;排序完后跳转到输出法式部份
OUTPUT:
MOVAH,09;回车换行
LEADX,CRLF
INT21H
M_DIRECTDIR3
MOVCX,LEN;为输出法式设置好入口参数
MOVBX,OFFSETARRAY
WRITE:
MOVAX,[BX];输出排好序的数据
MOVWTEMP,AX;将入口参数寄存到共享变量中
CALLP_OUTPUT
ADDBX,2
MOVDL,20H;显示空格,将两个输出的数据分开
MOVAH,02H
INT21H
LOOPWRITE
MOVAH,09;隔离两次输入排序输出的作用
LEADX,CRLF
INT21H
M_DIRECTDIR4
MOVAH,09;实现循环输入数据并排序输出
LEADX,CRLF
INT21H
LOOPREAD
RET
MAINENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;从键盘上输入一个数据的子法式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
P_GETNEWPROC
PUSHBX;出口参数:
AX=补码暗示的二进制数
PUSHCX;说明:
负数用“-”引导,数据范围是+32767~-32768
PUSHDX
XORBX,BX;BX保管结果
XORCX,CX;CX为正负标识表记标帜,0为正,-1为负
MOVAH,1;输入一个字符
INT21H
CMPAL,'+';是“+”,继续输入字符
JZREAD1
CMPAL,'-';是“—,设置-1标识表记标帜
JNZREAD2
MOVCX,-1
READ1:
MOVAH,1;继续输入字符
INT21H
READ2:
CMPAL,'0';不是0~9之间的字符,则输入数据结束
JBREAD3
CMPAL,'9'
JAREAD3
SUBAL,30H;是0~9之间的字符,则转换为二进制数
;利用移位指令,实现数值乘10:
BX←BX*10
SHLBX,1
MOVDX,BX
SHLBX,1
SHLBX,1
ADDBX,DX
MOVAH,0
ADDBX,AX;已输入数值乘10后,与新输入的数值相加
JMPREAD1;继续输入字符
READ3:
CMPCX,0;是负数,进行求补
JZREAD4
NEGBX
READ4:
MOVAX,BX;设置出口参数
POPDX
POPCX
POPBX
RET;子法式返回
P_GETNEWENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;用冒泡法排序的子法式(从年夜到小)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;P_SORTPROC
;RET;子法式返回
;P_SORTENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;数据输出子法式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
P_OUTPUTPROC
PUSHAX;入口参数:
共享变量WTEMP
PUSHBX
PUSHDX
MOVAX,WTEMP;取出显示的数据
TESTAX,AX;判断数据是零、正书还是负数
JNZWRITE1
MOVDL,'0';是‘0’,显示‘0’后退出
MOVAH,2
INT21H
JMPWRITE5
WRITE1:
JNSWRITE2;是负数,显示“-”
MOVBX,AX;AX数据暂存于BX
MOVDL,'-'
MOVAH,2
INT21H
MOVAX,BX
NEGAX;数据求补(绝对值)
WRITE2:
MOVBX,10
PUSHBX;10压入仓库,做为推退出标识表记标帜
WRITE3:
CMPAX,0;数据(商)为零,转向显示
JZWRITE4
SUBDX,DX;扩展被除数DX.AX
DIVBX;数据除以10
ADDDL,30H;余数(0~9)转换为ASCⅡ码
PUSHDX;数据各位先低位后高位压入仓库
JMPWRITE3
WRITE4:
POPDX;数据各位先高位后低位弹出仓库
CMPDL,10;是结束标识表记标帜10,则退出
JEWRITE5
MOVAH,2;进行显示
INT21H
JMPWRITE4
WRITE5:
POPDX
POPBX
POPAX
MOVDL,20H
MOVAH,02H
INT21H
RET;子法式返回
P_OUTPUTENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CODEENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 史上最牛最 完整 汇编语言 冒泡 排序 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)