написал программу, все нормально работает, но в массив можно вводить только односимвольные числа, а по заданию должны вводиться числа трехсимвольные. помогите исправить прогу, в ней находится медиана массива. делаю в emu8086.
.model tiny
.stack
.data
end_str equ 13
mas dw 10 dup(0)
mes1 db 0dh, 0ah,'Enter massiv: $'
mes3 db 0dh, 0ah, 'Vasch massiv: $'
mes4 db 0dh, 0ah, 'Vveden simval $'
mes5 db 0dh, 0ah, 'Vveden razmer massiva $'
mes7 db 0dh, 0ah, ' i $'
mes6 db 0dh, 0ah, 'Mediana massiwa: $'
mes2 db 0ah, 0dh,'Otsortirovanniy massiv - $',0ah,0dh
buf db 200,0,200 dup('$')
buf1 db 200,0,200 dup('$')
tmp dw 0 ; vremennoe hranilishe elemeta massiva
i dw 0
j dw 0
p dw ?
t dw 2
r dw ?
.code
main:
mov ax,@data
mov ds,ax
xor ax,ax
mov dx,offset mes5
mov ah,09h
int 21h
mov dx,offset buf1
mov ah,0Ah
int 21h
mov si,2
mov al,buf1[si]
sub al,30h
mov ah,0
mov r,ax
xor ax,ax
mov dx,offset mes1
mov ah,09h
int 21h
mov cx,r
add cx,r
mov di,0
; index massiva
vvod:
mov dx,offset buf
mov ah,0Ah
int 21h
mov si,2
sravnenie:
mov al,buf[si]
cmp al,39h
jge m1
m1:
cmp al,30h
jge m2
m2:
sub al,30h
mov ah,0
mov mas[di],ax
add di,2h
cmp di,cx
jl vvod
je m4
error:
mov dx,offset mes4
mov ah,09h
int 21h
jmp vvod
m4:
mov si,0
sub dx,dx
mov dx,offset mes3
mov ah,09h
int 21h
sub cx, r
pechat: ; pechataem novuju stroku
mov ah,02h
mov dx,mas[si]
add dl,30h
int 21h
add si,2h
loop pechat
internal:
sub r,1
mov di,r
mov j,di
add r,1
jmp cycl_j
exchange:
mov bx,i
shl bx,1
mov ax,mas[bx] ; ax=mas
mov bx,j
shl bx,1
cmp ax,mas[bx] ; mas ? mas[j]
jle lesser ; esli mas men'she, to dvigaemsja dal'she po massivu
mov bx,i ; inache men'aem elementy massiva mestami
shl bx,1
mov tmp,ax ; tmp=mas
; mas=mas[j]
mov bx,j ; bx=j
shl bx,1
mov ax,mas[bx] ; ax=mas[j]
mov bx,i
shl bx,1
mov mas[bx],ax ; mas=mas[j]
; mas[j]=tmp
mov bx,j
shl bx,1
mov ax,tmp ; ax=tmp
mov mas[bx],ax ; mas[j]=tmp
lesser:
dec j ; --j
cycl_j:
mov ax,j
cmp ax,i ; sravnivaem j ? i
jg exchange ; esli j>i, to men'aem
; inache cikl po i
inc i
; i++
cmp i, 9 ; sravnivaem i?n doshli li do konca massiva
jl internal ; esli i<n znachit net
; vivod otsort massiva
mov ah,09h
lea dx,mes2
int 21h
prepare:
mov cx,r
mov si,0
pechat1: ; pechat' novoj stroki
mov ah,02h
mov dx,mas[si]
add dl,30h
int 21h
add si,2h
loop pechat1
exit:
mov dx,offset mes6
mov ah,09h
int 21h
mov dx,0
mov ax,r
div t
add ax,1
cmp dx,0
je bez_ostatka
mov dx,ax
mov bx,dx
mov ax,0
mov ax,mas[bx]
cmp ah,0
je prov
vivod:
add ah,30h
mov dl,ah
mov ah,02h
int 21h
mov ax,4c00h
int 21h
bez_ostatka:
mov dx,ax
mov bx,dx
mov ax,0
mov ax,mas[bx]
cmp ah,0
je prov1
vivod1:
add bx,2
add ah,30h
mov dl,ah
mov ah,02h
int 21h
mov dx,offset mes7
mov ah,09h
int 21h
xor ax,ax
mov ax,mas[bx]
cmp ah,0
je prov2
vivod2:
add ah,30h
mov dl,ah
mov ah,02h
int 21h
mov ax,4c00h
int 21h
prov:
mov ah,al
jmp vivod
prov1:
mov ah,al
jmp vivod1
prov2:
mov ah,al
jmp vivod2
end main
исправить ввод массива
Модератор: Andy
можно посмотреть здесь
http://www.cyberforum.ru/assembler/thread54461.html
http://www.cyberforum.ru/assembler/thread54461.html
icq:3(один)7748666
mail:airyashov( а)inbox.ru
mail:airyashov( а)inbox.ru