Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] масив, ввод масива 
:(
    Опции темы
vudu91
Дата 11.11.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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


в нэте находил много примеров.. но разобратся толком и не смого.. 
заание благодарен
PM MAIL   Вверх
Mikl_
Дата 12.11.2009, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



vudu91, 
Если требуется, что либо объяснить, то я не вижу конкретного вопроса smile 
Если требуется написать за тебя курсовую/лабораторную (за деньги) то это в раздел "Центр Помощи" smile 
Если, как ты пишешь, "в нэте находил много примеров.. но разобратся толком и не смого.. " найми себе репетитора  smile , глаза в глаза объяснять на много эффективнее, чем вступать в заочную переписку smile 
PM MAIL   Вверх
airyashov
Дата 12.11.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 1
Всего: 6



помогу платно, недорого


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
vudu91
Дата 12.11.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 9.5.2009

Репутация: нет
Всего: нет



Mikl_, 
эта прога почти робочая, проблема просто в записив масива, я думал что ктото укажет на мою ошибку.. все  остальное роботает нормально

ну ладно, будем дальше ламать голову над проблемой... бо в глаза объяснять, мне некому такшто будем ришать както сами, не первый раз 
спасибо. 
PM MAIL   Вверх
dumb
Дата 19.11.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 6
Всего: 158



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM MAIL   Вверх
airyashov
Дата 19.11.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 1
Всего: 6



ладно похоже на правду смотрите процедуры

Код

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

       call ConvertingNumberToHex //сохранять регистры нужно в процедурах
       stosb



--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.