Научите элементарным действиям пжлст.

Тема в разделе "WASM.BEGINNERS", создана пользователем OvSjnka, 18 апр 2008.

  1. OvSjnka

    OvSjnka New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2008
    Сообщения:
    2
    Никак не пойму как прописать команды,чтоб надо было ввести самому n-ное количество вещественных чисел и,например,сложить их.
    и... как результат ввести в массив?
    помогите ллиз
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Первое - начинаешь с алгоритма.
    массив: [..........]

    процедура ввода 1 числа.
    процедура вывода 1 числа

    сама программа:

    Задать массив.

    от 0 до n
    процедура ввода 1 числа
    результат в массив
    цикл

    Сумма=0

    от 0 до n
    взять из массива очередное
    прибавить к сумме
    цикл

    процедура вывода 1 числа (сумма)

    Теперь переводим на ассемблер:

    .data?
    quant dd ?
    mass dd 1000 dup (?)

    .code
    call Input1
    or eax, eax
    jz @Error
    mov [quant], eax
    mov ecx, eax
    mov esi, offset mass
    @C1:
    call Input1
    mov [esi],eax
    add esi, 4
    loop @C1

    mov esi, offset mass
    mov ecx, [quant]
    xor eax, eax
    @C2:
    add eax, [esi]
    add esi, 4
    loop @C2

    call OutputEax

    @Error:
    invoke ExitProcess, eax

    Вуаля, задача практически решена. Осталось только написать 2 процедуры, для ввода 1 числа, и для вывода содержимого eax. (Естественно, приведен алгоритм для сложения целых чисел без знака.) Теперь разбиваешь каждую из пока ненаписанных процедур на простейшие действия, описывая их словами. И повторяешь, пока не останется ненаписанных процедур

    Ну например, вывод числа:

    получить хендл стандартного устройства вывода
    превратить число в eax в строку символов
    вывести эту строку на stdout

    Или через мессадж бокс:

    превратить число в eax в строку символов
    вывести эту строку с помощью MessageBoxA

    Очень просто формулируемый алгоритм, правда за кадром осталась процедура перевода числа в строку...
    Значит, продолжаем и с этим:

    Перевод числа в строку:

    убрать в стек 0
    поделить eax на 10. К остатку прибавить 30h. Убрать в стек
    повторять пока частное != 0

    вынуть из стека число
    запомнить младший байт его в очередной символ строки
    повторять пока не вынем из стека 0

    (очень страшный алгоритм, неоптимизированый, но тем не менее работающий). Все, по этому направлению проблем больше не осталось!

    .data?
    MyString db 11 dup (?)

    .code
    proc OutputEax
    push 0
    mov ebx,10
    div eax,ebx
    ...
    и далее по алгоритму.

    Потом тоже самое делаешь для процедуры ввода - придумываешь алгоритм, получаешь строку с клавиатуры, преобразуешь строку в число, возвращаешь число в eax. Соединяешь все кусочки в один код - и твоя задача решена! :)
     
  3. OvSjnka

    OvSjnka New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2008
    Сообщения:
    2
    большое спасибо =)