微机原理与汇编语言--输入五个数存入内存排序输出

一个是初始版,后一个是升级版

🎈🎈🎈做题步骤:
先输入五个数存入内存中,再在内存中使用冒泡排序法排好序,再输出这五个数

;输入五个数存入到内存,再排序输出 DATAS SEGMENT ;此处输入数据段代码 a1 word 2 a2 word 5 dup(?);这是存五个元素 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 mov di,0 mov si,offset a2 jmp m1 m1: cmp di,5 je ToPaixu;先去排序 call input mov [si],bx add si,2 add di,1 jmp m1 m3: mov di,0 mov si,offset a2 jmp m2 m2: cmp di,5 je over mov ax,[si] call output add si,2 add di,1 jmp m2 ToPaixu: call paixu jmp m3 over: MOV AH,4CH INT 21H paixu proc;排序函数 push ax push bx push cx push dx mov al,0;遍历元素1 pp1: inc al mov si,offset a2 mov cl,6 cmp al,5 je pover mov dh,0;遍历元素2 sub cl,al sub si,2 pp2: add si,2 inc dh cmp dh,cl je pp1 mov bl,[si] mov bh,[si+2] cmp bl,bh ja swap jmp pp2 swap: mov [si+2],bl mov [si],bh jmp pp2 pover: pop ax pop bx pop cx pop dx ret paixu endp output proc;开始第一个函数 push bx push cx push dx mov ch,0 mov cl,10 div cl cmp al,0 ja o1 je o2 o1: push ax add ch,1 mov ah,0 div cl cmp al,0 ja o1 je o2 o2: mov dl,ah add dl,48 mov ah,2 int 21h cmp ch,0 ja o3 je o4 o3: pop ax sub ch,1 jmp o2 o4: pop bx pop cx pop dx ret ;返回 output endp;结束 input proc;第二个函数 push ax push cx push dx mov bx,0 mov dh,10 jmp i0 i0: mov ah,1 int 21h sub al,48 cmp al,0 jb i8 je i2 i2: cmp al,9 ja i8 jb i3 i3: mov cl,al mov ch,0 mov ax,bx mul dh add cx,ax mov bx,cx jmp i0 i8: pop ax pop cx pop dx ret input endp CODES ENDS END START

2020.10.14更新
受朋友‘启发’,为了使程序更简洁,将不同的代码封装

DATAS SEGMENT ;此处输入数据段代码 a1 word 5 dup(?);这是存五个元素 a2 byte 'Please input five number:!' a3 byte 'The number before sorting is:!' a4 byte 'The number after sorting is:!' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 ;先输出字符串a2 mov si,offset a2 call outputstr ;输入五个数 mov si,offset a1 call inputfn call wrap;换行 ;再输出字符串a3 mov si,offset a3 call outputstr ;输出原顺序 mov si,offset a1 call outputfn call wrap ;排序 mov si,offset a1 call paixu ;输出字符串a4 mov si,offset a4 call outputstr ;输出排序后的 mov si,offset a1 call outputfn MOV AH,4CH INT 21H inputfn proc;输入五个数 push cx mov cl,0 ifn1: cmp cl,5 je ifnover call input mov [si],bx add si,2 add cl,1 jmp ifn1 ifnover: pop cx ret inputfn endp input proc;输入函数 push ax push cx push dx mov bx,0 mov dh,10 jmp i0 i0: mov ah,1 int 21h sub al,48 cmp al,0 jb i8 je i2 i2: cmp al,9 ja i8 jb i3 i3: mov cl,al mov ch,0 mov ax,bx mul dh add cx,ax mov bx,cx jmp i0 i8: pop ax pop cx pop dx ret input endp outputfn proc;输出五个数 push bx push ax mov di,0 ofn1: cmp di,5 je ofnover mov ax,[si] call output add si,2 add di,1 jmp ofn1 ofnover: pop bx pop ax ret outputfn endp output proc;输出函数 push bx push cx push dx mov bh,0 mov cl,10 div cl cmp al,0 ja o1 je o2 o1: push ax add bh,1 mov ah,0 div cl cmp al,0 ja o1 je o2 o2: mov dl,ah add dl,48 mov ah,2 int 21h cmp bh,0 ja o3 je o4 o3: pop ax sub bh,1 jmp o2 o4: pop bx pop cx pop dx ret ;返回 output endp;结束 paixu proc;排序函数 push ax push bx push cx push dx mov di,si;存si方便封装 add si,5 mov al,0;遍历元素1 pp1: inc al mov si,di mov cl,6 cmp al,5 je pover mov dh,0;遍历元素2 sub cl,al sub si,2 pp2: add si,2 inc dh cmp dh,cl je pp1 mov bl,[si] mov bh,[si+2] cmp bl,bh ja swap jmp pp2 swap: mov [si+2],bl mov [si],bh jmp pp2 pover: pop ax pop bx pop cx pop dx ret paixu endp outputstr proc;字符串输出函数 push dx oscontinue: mov dl,[si] cmp dl,'!' je osover mov ah,2 int 21h add si,1 jmp oscontinue osover: pop dx ret outputstr endp wrap proc;换行函数 push dx MOV DX,13 MOV AH,2 INT 21H MOV DX,10 MOV AH,2 INT 21H pop dx ret wrap endp CODES ENDS END START

运行效果:

在这里插入图片描述


__EOF__

本文作者坤舆小菜鸡
本文链接https://www.cnblogs.com/HBU-xuhaiyang/p/17223193.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   坤舆小菜鸡  阅读(68)  评论(0编辑  收藏  举报  
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示