Новичок
Профиль
Группа: Участник
Сообщений: 43
Регистрация: 9.5.2009
Репутация: нет Всего: нет
|
помогите кто может пожалуйста.. в меня есть код програмы которая роботала с масивом(масив был задан зарание), а мне нужно чтобы масив мог задавать я.. пожалуйста помогите очень нужно.. вот код | Код | STSEG SEGMENT PARA STACK "STACK" db 64 dup('stack') STSEG ENDS
DATA SEGMENT PARA PUBLIC "DATA" massage db "Enter namber:$" massage_end_mas db "}$",10,13 massage_start_mas db "Start mas{$" massage_suma db "bag array is $",10,13 massage_max db "maximum element of the array is $",10,13 massage_min db "minimum element of the array is $",10,13 massage_sort2_mas db "sorted on fall off{$",10,13 massage_sort1_mas db "sorted on vozrostaniu{$",10,13 roz db";$" d equ 2 n equ 3 mas db n dup(0) nbSize db ? k dw 0 tmp dw 0 i dw 0 j dw 0 ink dw 0 max_elemax dw 0 massage2 db "Do you want to exit? y(yes)/n(not)$" massage3 db 10,13,"Characters that were entered: $" massage4 db 10,13,"A number is entered: $" massage_error1 db "You entered character!!!",10,13,'$' massage_error2 db "You entered a too large number!!!",10,13,"The entered number must be in a range[-32767;32767].",10,13,'$' TransitionLine db 13,10,'$';перехід каретки на нову стрічку SizeBuffer db 7;кількість символів blenth db ? bcontents db 7 dup(?) x dw 0 DATA ENDS
;===========================сегмент коду==================== CODE SEGMENT PARA PUBLIC "CODE" MAIN PROC FAR ASSUME CS: CODE, DS: DATA, SS: STSEG ;============================================================ mov ax,data mov ds,ax again1: call Clrscr begin1: lea si,mas ;ds:si указывает на матрицу mov cx,n call Enter_Data mov ah,9 lea dx,massage_start_mas int 21h mov si,OFFSET mas ;ds:si указывает на матрицу mov cx,n call Start_mas call Suma_mas call Max_element_mas call Min_element_mas call Sort_1 mov ah,9 lea dx,massage_sort1_mas int 21h call Start_mas call Sort_2 mov ah,9 lea dx,massage_sort2_mas int 21h call Start_mas ;call Print call Exit
MAIN ENDP ;=========функція виходу============ Exit : mov ah,09h lea dx,TransitionLine int 21h mov ah,9 lea dx,massage2 int 21h exit2: mov ah,08h int 21h cmp al,'n' je again1 cmp al,'y' je exit1 cmp al,'n' jne exit2 exit1: mov ax,4C00h int 21h ret ;====================================
;=========функція вивід першоначального масиву======== Start_mas : MOV CX, n MOV SI, 0 mov bx,0 SHOW_PRIMARY: ; вивод значеннь елементів початкового масиву на екран MOV dl,mas [si] mov x,dx push cx call ConvertingNumberToDec ;ADD dx, 30h pop cx ;MOV AH, 02h ;INT 21h ADD SI, d cmp si,10 je e1 mov ah,9 lea dx,roz int 21h e1: LOOP SHOW_PRIMARY mov ah,9 lea dx,massage_end_mas int 21h lea dx,TransitionLine mov ah,09h int 21h ret ;=================================================== Randomize :
Random: add k,1 ;lea dx,SizeBuffer ;mov ah,0Ah ;int 21h ;call ConvertingNumberToHex mov al,'3' mov mas[si],al add si,d cmp k,n lea dx,TransitionLine mov ah,09h int 21h jne Random lea dx,TransitionLine mov ah,09h int 21h ret ;===================================================
;=========функція виводу повідомлення вводу======== EnterData :
Enter_data: lea dx,massage ;ds:si указывает на строку prompt3 mov ah,09h int 21h add k,1 lea dx,SizeBuffer mov ah,0Ah int 21h call ConvertingNumberToHex stosb lea dx,TransitionLine mov ah,09h int 21h cmp k,n jne Enter_data lea dx,TransitionLine mov ah,09h int 21h ret ;===================================================
;==========очистка екрану============ Clrscr: mov ax,0003h int 10h ret ;====================================
;==========перетворення в число==================================== ConvertingNumberToHex: xor si,si xor ax,ax xor cx,cx mov cl,blenth mov di,cx label1: xor bx,bx mov bl,byte ptr bcontents[di-1] cmp bl,'-' jne label4 cmp di,1 je label8 call error1 label8: ret label4: sub bl,'0';перевірка на символи cmp bl,9 jna label5 call error1 label5: cmp di,cx je label2 push ax ;записати число mov ax,bx mov bx, 10 mov cx,si label3: imul bx jno label6 ;перевірка переповнення call error2 label6: loop label3 mov bx,ax mov x,ax pop ax ;зчитати попередній результат label2:
add ax,bx ;додати попередній і теперишній результатит jno label7 call error2 label7: dec di inc si cmp di,0 jne label1 ret ;==================================================================
;====================помилка вводу(введено сивол)================== error1: mov ah,9 lea dx,massage_error1 int 21h jmp begin1 ret ;==================================================================
;====================помилка вводу(переновнення)================== error2: mov ah,9 lea dx,massage_error2 int 21h jmp begin1 ret ;==================================================================
;====================переводимо із 16 в 10ричну ситему============= ConvertingNumberToDec:
xor bx,bx mov bx,x or bx,bx; jns m1 mov al,'-' int 29h neg bx m1: mov ax,bx xor cx,cx mov bx,10 m2: xor dx,dx div bx add dl,'0' push dx inc cx test ax,ax jnz m2 m3: pop ax int 29h loop m3
ret ;==================================================================
;===================вивести відповідь на монітор=================== Print: call ConvertingNumberToHex mov x,ax xor bx,bx mov bl,byte ptr bcontents cmp bl,'-' ;перевiрка на від'ємність числа jne j1 neg ax mov x,ax j1: mov ah,9h lea dx,massage4 int 21h call ConvertingNumberToDec
mov ah,09h;робимо отступ lea dx,TransitionLine int 21h ret ;================================================================== ;=========функція сортування масиву======== Suma_mas: mov cx,5 xor si,si xor ax,ax suma: mov dl,mas[si] add ax,dx add si,d loop suma mov x,ax mov ah,09h lea dx,massage_suma int 21h call ConvertingNumberToDec ret ;=================================================== ;=========функція пошуку максимального елементу масиву======== Max_element_mas: xor si,si xor ax,ax mov al,mas[si] max: xor bx,bx cmp si,10 je end_max add si,d mov bl,mas[si] cmp ax,bx jge max mov ax,bx jmp max
end_max: mov x,ax mov ah,09h;робимо отступ lea dx,TransitionLine int 21h mov ah,09h lea dx,massage_max int 21h call ConvertingNumberToDec ret ;=================================================== ;=========функція пошуку мінімального елементу масиву======== Min_element_mas: xor si,si xor ax,ax mov al,mas[si] min: xor bx,bx cmp si,10 je end_min add si,d mov bl,mas[si] cmp ax,bx jle min mov ax,bx jmp min
end_min: mov x,ax mov ah,09h;робимо отступ lea dx,TransitionLine int 21h mov ah,09h lea dx,massage_min int 21h call ConvertingNumberToDec lea dx,TransitionLine mov ah,09h int 21h ret ;=================================================== ;===============сортування масиву по зростанню=================== Sort_1:
sorting1: mov cx,4 xor ax,ax xor bx,bx xor si,si sorting: mov al,mas[si] mov bl,mas[si+d] cmp ax,bx jle s1 mov mas[si],bl mov mas[si+d],al
s1: add si,d loop sorting add ink,1 cmp ink,n jne sorting1 ret ;=================================================== ;===============сортування масиву по спаданню=================== Sort_2:
sorting2: mov cx,4 xor ax,ax xor bx,bx xor si,si sorting_2: mov al,mas[si] mov bl,mas[si+d] cmp ax,bx jge s2_1 mov mas[si],bl mov mas[si+d],al
s2_1: add si,d loop sorting_2 add ink,1 cmp ink,n jne sorting2 ret ;===================================================
CODE ENDS END MAIN
|
в нэте находил много примеров.. но разобратся толком и не смого.. заание благодарен
|