Проблема при работе с массивом адресов строк
Добавлено: 21 май 2008, 14:19
Знающие люди!Очень прошу помочь с данной проблемой.задание:
Разработать две подпрограммы, одна из которых сравнивает две строки по лексикографическому порядку, а другая обменивает значения двух строк. Разработать программу, которая вводит с клавиатуры несколько строк (конец ввода пустая строка) и сортирует их в лексикографическом порядке.
Я написал программу, правда две процедуры объединил в одну, но при сравнении программа считает все символы одинаковыми. Грешу на массив. Вероятно что то не так именно в нем, но додуматься не удается.Вот то что я написал:
data segment
instr db 20,?,22 dup (?)
adr db 15 dup (?)
slov db ?
prop db 0dh,0ah,"-------",0dh,0ah,"$"
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds, ax
mov ch, 0
lea bx, adr
vv: lea dx, instr
mov ah, 0ah
int 21h
mov al,instr+1
cmp al, 0
je stop
inc ch
lea ax, instr+2
mov [bx], ax;ввести очередной адрес строки в массив
inc bx
lea dx, prop
mov ah, 09h
int 21h
jmp vv
stop:mov slov, ch
call AAA
mov cx, word ptr slov
lea bx, adr
mov ah, 09h
vivod:
mov dx, [bx];-30-
int 21h;
loop vivod
mov ah,01h
int 21h
QUIT: mov ax, 4c00h
int 21h
AAA proc near
mov ax, 0
mov cx, 1
lea di, adr;
beg:cmp cx, word ptr slov
je konec
mov si, [di]; загрузить 1й cимвол из строки
inc ax
mov bx, di
add bx, ax;взять адр след слова
;сравнить с символом след слова
cmp si,[bx]
jg obmen
cmp si,[bx]
je next_simbols
after:
mov dx,word ptr slov
sub dx, cx
cmp dx, ax
je sled_1e_slovo
jmp beg
;-60-
sled_1e_slovo:
inc di
inc cx
jmp beg
mov ax, 0
obmen:
push cx
mov cx, di
mov di, bx
mov bx, cx;-70-
pop cx
jmp after
next_simbols:
push si
push bx
inc di
inc bx
mov si, [di]
mov bx, [bx]
cmp si, bx;-80-
pop bx
pop si
jg obmen
je next_simbols
jmp after
konec: ret
AAA endp
code ends
end START
Заранее благодарен за помощь
Разработать две подпрограммы, одна из которых сравнивает две строки по лексикографическому порядку, а другая обменивает значения двух строк. Разработать программу, которая вводит с клавиатуры несколько строк (конец ввода пустая строка) и сортирует их в лексикографическом порядке.
Я написал программу, правда две процедуры объединил в одну, но при сравнении программа считает все символы одинаковыми. Грешу на массив. Вероятно что то не так именно в нем, но додуматься не удается.Вот то что я написал:
data segment
instr db 20,?,22 dup (?)
adr db 15 dup (?)
slov db ?
prop db 0dh,0ah,"-------",0dh,0ah,"$"
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds, ax
mov ch, 0
lea bx, adr
vv: lea dx, instr
mov ah, 0ah
int 21h
mov al,instr+1
cmp al, 0
je stop
inc ch
lea ax, instr+2
mov [bx], ax;ввести очередной адрес строки в массив
inc bx
lea dx, prop
mov ah, 09h
int 21h
jmp vv
stop:mov slov, ch
call AAA
mov cx, word ptr slov
lea bx, adr
mov ah, 09h
vivod:
mov dx, [bx];-30-
int 21h;
loop vivod
mov ah,01h
int 21h
QUIT: mov ax, 4c00h
int 21h
AAA proc near
mov ax, 0
mov cx, 1
lea di, adr;
beg:cmp cx, word ptr slov
je konec
mov si, [di]; загрузить 1й cимвол из строки
inc ax
mov bx, di
add bx, ax;взять адр след слова
;сравнить с символом след слова
cmp si,[bx]
jg obmen
cmp si,[bx]
je next_simbols
after:
mov dx,word ptr slov
sub dx, cx
cmp dx, ax
je sled_1e_slovo
jmp beg
;-60-
sled_1e_slovo:
inc di
inc cx
jmp beg
mov ax, 0
obmen:
push cx
mov cx, di
mov di, bx
mov bx, cx;-70-
pop cx
jmp after
next_simbols:
push si
push bx
inc di
inc bx
mov si, [di]
mov bx, [bx]
cmp si, bx;-80-
pop bx
pop si
jg obmen
je next_simbols
jmp after
konec: ret
AAA endp
code ends
end START
Заранее благодарен за помощь