从键盘输入一组十进制数,排序后在屏幕上显示。

来源:百度知道 编辑:UC知道 时间:2024/06/01 09:17:54
从键盘输入一组十进制数,排序后在屏幕上显示。
要求:从键盘输入一组十进制数(每个数不超过3个字符),它们以','号分开,以'↓'为该组数据结尾。将该组数升序排序后,并将结果送显示器显示。
masm编译,连接都正常,运行生成的可执行文件输入一数字回车后提示 c:\WINDOWS\system32\cmd.exe - main NTVDM CPU 遇到无效的指令.
CS:000e IP:9b62 0P:ff ff 00 00 00 选择"关闭"终止应用程序.
高手帮忙看一下哪里出了问题?

链接命令如下:
link aluo\5_32\main.obj aluo\5_32\dtob.obj aluo\5_32\sort.obj aluo\5_32\btod.obj,aluo\5_32\main.exe,,,
源程序如下分四个模块,四个文件main.asm,btod.asm,dtob.asm,sort.asm
;主模块main.asm
name ex_5_32
extrn dtob:far,btod:far,sort:far
stack segment para stack 'stack'
db 200 dup(?)
stack ends
data segment para public 'data'
dbuf db 100 ;十进数存储区
db ?
db 100 dup(?)
tbuf db 3 dup(?) ;十进数暂存区
bbuf dw 30 dup(?) ;二进数存储区
count db 0 ;二进数个数计数器初值为0
sign db 0 ;十进数处理完标志
eror db 0dh,0ah,'This is a illegal number!$' ;错误信息
indm db 0dh,0ah,'Ple

关注中!

请运行时注意:每个不超过3个字符的十进制数以回车结束,一组十进制数以空格结束,即当输入空格时,就会在屏幕上显示结果。
DSEG SEGMENT
;数据段:在此处添加程序所需的数据
number dw 80 dup (?)
count dw ?
DSEG ENDS

CSEG SEGMENT
assume cs:CSEG, ds:DSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
;此处添加主程序代码
call input;从键盘输入一组十进制数(每个数不超过3个字符),存于数组number中
call sort;将该组数按升序排序
call disp;将结果送显示器显示
;按任意键退出
mov ah,1
int 21h
;程序结束,返回到操作系统系统
mov ax, 4c00h
int 21h
MAIN ENDP

input proc
lea si,number
next: mov bx, 0
mov cx,3
newchar: mov ah, 1;键盘输入,每个数据以回车结束
int 21h
cmp al,20h;全部数据以空格结束
jz tj
sub al, 30h
jl exit ; <0退出
cmp al, 9
jg exit ; >9退出
cbw
xchg ax, bx
mov cx, 10
mul cx
xchg ax, bx
add bx, ax
loop newchar
exit:
call crlf
inc count
mov [si],bx
add si,2
jmp next
tj:r

从键盘输入一组十进制数(每个数不超过3个字符),将该组数按升序排序后,并将结果送显示器显示 从键盘输入任意20个整数数序输出,然后由小到大排序后输出。 用汇编语言编写程序:从键盘输入一个十进制数,对其开平方后分别将其平方根和余数以十进制数的形式显示 分别从键盘输入两个两位十进制数.求和,然后按十进制显示出来.如:32+18=50 从键盘输入一个1位十进制数,显示其对应的4位 语言程序:用函数调用的方法从键盘输入一个十六进制数,以十进制输出 从键盘输入一组数,以输入0为结束,找出并显示最小值~! 从键盘输入10个两位十进制数,找出其对应的二进制数中包含的0的个数 两位十进制数排序程序设计 汇编语言程序设计 (从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示)