数据键入与排序程序--80x86汇编语言
来源:互联网 发布:linux怎么写shell脚本 编辑:程序博客网 时间:2024/06/05 09:46
有人给出了“数据排序”和“键入并显示”两个程序,希望能够把它们合并到一起。
并且要求使用子程序调用的形式。
经过做而论道的整理,把它们成功的合并了,程序如下:
;================================================
assume cs:code, ds:data
data segment
msg1 db 'Before sort: $'
crlf db 0dh, 0ah, '$'
msg2 db 'After sort : $'
;----------------------------------
BUFSIZE DB 50 ;最多可键入50个字符.
ACTLEN DB ? ;实际键入的字符数.
CHARS DB 50 DUP(20H) ;实际键入的字符从此开始存放.
data ends
;----------------------------------
code segment
MAIN PROC FAR ;主程序.
start:
mov ax, data
mov ds, ax
mov dx, offset msg1
mov ah, 9
int 21h
MOV DX, OFFSET BUFSIZE ;键入缓冲区起始偏移地址送DX
MOV AH, 0AH
INT 21H ;输入字符串并送入缓冲区.
;-----------------------
MOV CL, ACTLEN ;取得输入的字符数.
ADD CL, 0
JNZ ok ;长度不为零就去排序.
JMP EXIT_MAIN
;-----------------------
ok:
mov dx, offset crlf
mov ah, 9
int 21h
mov dx, offset msg2
mov ah, 9
int 21h
;-----------------------
CALL SORT ;调用排序子程序.
;-----------------------
XOR CX, CX
MOV CL, ACTLEN ;取得输入的字符数.
MOV DX, OFFSET CHARS ;输入的字符串起始地址送DX
MOV BX, DX ;将字符串首地址送BX
ADD BX, CX ;取到字符串尾地址.
MOV BYTE PTR [BX], '$' ;在字符串尾插$
MOV AH, 09H ;字符串显示功能.
INT 21H ;显示键入的字符串.
EXIT_MAIN:
mov ah, 4ch
int 21h ;返回DOS
MAIN ENDP ;主程序的末尾.
;----------------------------------
SORT PROC ;排序子程序.
XOR CX, CX
MOV CL, ACTLEN ;取得输入的字符数.
DEC CX
mov si, offset CHARS
s: push cx
mov di, si
s1: mov al, [di]
inc di
cmp al, [di]
jb jx
xchg al, [di]
mov [di - 1], al
jx:
loop s1
pop cx
loop s
RET ;子程序返回主程序.
SORT ENDP
;----------------------------------
code ends
end start
;================================================
程序中,小写的是原来的排序程序,大写的是键入显示程序。
程序经过编译、连接,生成可执行文件,执行的效果如下:
Before sort: sdlfmweiowe&^*^&*&(@#@~!^&*^&^(^&JGTHJbdfgbdf6%^%
After sort : !#%%&&&&&&((***6@@GHJJT^^^^^^^bbdddeefffgilmosww~
键入的字符的数目,程序限定了50个,超过50,光标就停止不走了。
注意:键入的字符,不要有"$",因为排序后,显示字符串的时候,是调用了微软的“9号系统功能调用”。
微软的“9号系统功能调用”,只能显示"$"前面的,碰到了"$",它们就留下了,不再显示。
呵呵,真是财迷!
;================================================
原题网址:http://zhidao.baidu.com/question/254320555.html
本题目共有三人给出了答案,有两个正确的。
楼主却选择了一个错误答案做为最佳答案,真能搞笑。
;================================================
- 数据键入与排序程序--80x86汇编语言
- 80x86汇编语言编程:键入、过滤与显示
- 80x86 汇编语言:键入字符串,然后存盘
- 80x86 汇编语言编程:数据排序与显示
- 80x86汇编语言编程:排序与显示
- 80x86 汇编语言编程:排序与显示
- 用80x86汇编语言:键入十个数,算出正数之和,并统计负数的个数
- 80x86 汇编语言:键入0~255之间的数,显示对应的二进制和十六进制数
- 80x86汇编语言编程--
- 80x86汇编语言程序错误分析
- 一个80x86汇编语言程序的查错
- 用80x86汇编语言编程--输入、储存与输出
- 80x86汇编语言--关于 π 的近似计算
- 80x86汇编语言--输入表达式,再计算
- 80x86 汇编语言编程:输入字符串,排序输出
- 80x86 汇编语言基础教程
- 用80x86汇编语言,编写一个判断闰年的程序
- 80x86汇编语言程序:判断奇、偶数的个数
- MCS-51 单片机的存储器地址空间如何划分?
- IOS8 新增的UIVisualEffectView 使用
- 51单片机的中断控制
- 两台 PC 机之间的串口通信
- 用C语言编写程序,判断输入的一个字符串是否是回数
- 数据键入与排序程序--80x86汇编语言
- 数码管动态显示 汇编 60进制
- 基于51单片机的交通灯C语言程序设计
- 51单片机利用74HC595驱动数码管
- 按键控制移位显示
- 用汇编语言编写查表程序
- #UML#UML类图
- 关于51单片机外部中断的触发方式
- 51单片机的4×4键盘识别与74LS164驱动数码显示