题目六 商品排序程序设计
data segment
NO_10 db 13,10,'Do you want to input name(y ?)?','$'
NO_11 db 13,10,'Input name:(28)','$'
NO_30 db 13,10,'no enough space',13,10,36
disp db 13,10,'You input name : ','$'
disp2 db 13,10,'Range:','$'
disp3 db 3,3,3,' ','$'
lengthth db 0
NAME0 db 20 dup(28 dup(' '))
name1 db 29,?
name2 db 29 dup('$');存放暂时名字
outputdata db 28 dup(0),'$'
data ends
code segment
assume cs:code,ds:data,es:data
main proc far
push ds
xor ax,ax
push ax
cld
;***********************************************************************
begin:
lea di,name0
mov ax,data
mov ds,ax
mov es,ax
start:
mov dx,offset NO_10
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'y'
jne exit
cmp lengthth,20
jge ERROR
call INPUT_NAME
call copy_name
cmp lengthth,1;40
jle start
call RANGE
jmp start
;######################################
ERROR:
mov dx,offset no_30
mov ah,9
int 21h
exit:
call printf
mov ah,4ch
int 21h
main endp
;********************************
INPUT_NAME proc near
mov dx,offset NO_11
mov ah,9
int 21h
mov dx,offset name1
mov ah,0ah
int 21h
mov bl,name1[1]
sub bh,bh
bbb:
mov name2[bx],'$'
inc bx
cmp bx,20
jb bbb
ret
;bbb覆盖掉没有输入没有用到的空间,不然在多次输入的时候会出错
input_name endp
;***********************************
copy_name proc near
lea si,name2
mov cx,14
rep movsw
inc lengthth
ret
copy_name endp
;*************************************
printf proc near
mov dx,offset disp
mov ah,9
int 21h
mov al,lengthth
cbw
mov bl,10
div bl
push ax
mov dl,al
xor dl,30h
mov ah,2
int 21h
pop ax
xchg dl,ah
xor dl,30h
mov ah,2
int 21h
mov dx,offset disp2
mov ah,09h
int 21h
xor ch,ch
mov cl,lengthth
xor si,si
llp:
call guang
lea dx,name0[si]
mov ah,09h
int 21h
add si,28
loop llp
ret
printf endp
;*************************
RANGE proc near
push di
sub di,28
lea dx,name0
XXX:
mov cx,28
mov si,di
sub si,28
cmp si,dx
jl xx
mov bx,di
repe cmpsb
jbe xx
call change
jmp xxx
xx:
pop di
ret
RANGE endp
;*********************
change proc near
sub bx,si
mov cx,bx
inc cx
dec di
dec si
lp:
mov al,[di]
xchg al,[si]
xchg al,[di]
inc di
inc si
loop lp
sub di,56
ret;交换完毕
;********************************
guang proc near
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
int 21h
mov dx,offset disp3
mov ah,9
int 21h
ret
guang endp
;**********************
code ends
end begin
;09.12.15
;题目六 商品排序程序设计
;要求:
;编写一个商品排序程序,从键盘键入最多20个商品名,当所有商品都进入后,按字母上升的次序将商品排序,并在屏幕上显示已经排好序的商品名
;原题目:http://zhidao.baidu.com/question/128787580.html
;首先提示:Do you want to input name(y ?)?
;按下'y',再提示:Input name:(28),表示输入的字符个数必须28以内。----这个数字不要轻易改动,这数字跟子程序change有关联。
;按下非'y',输出:之前输入的name的个数++排序后的name,每个name独占一行