Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ASM] Реализация значения полинома n-ой степени 
V
    Опции темы
Curiosa
Дата 22.5.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Условие таково: Реализовать вычисление значения полинома n-ой степени для целочисленных переменных по схеме Горнера. Передачу параметров оргнизовать через сегмент данных с общей памятью. Вот то, что уже написано:

Код

.486
StackSg SEGMENT PARA STACK 'Stack'
    dw 256 DUP(?)
StackSg ENDS

DataSg  SEGMENT PARA COMMON 'Data'
    sum dd 0
    temp dd 0
    count dw 0
    blank db ' '
    number dd 0
    lenght db 6
    value dd 0
    mas_fac dd 4 DUP(0)
    numberString db 6 DUP(?)
    deleteSymbol db 08h, ' ', 08h, '$'
    ask db 'Enter value. Enter  factor vektor. Disjoin each number by blank  :'
DataSg  ENDS
CodeSg  SEGMENT  PARA 
        ASSUME CS: CodeSg, DS: DataSg, SS: StackSg
    
start:
    xor si,si
cycle:
    mov cx, 3
    xor eax,eax
    call readNumber
fillMas_fac:
    mov eax, dword ptr[number]
    mov mas_fac[si], eax
    add si, 4
    inc count
    
    mov dl, blank
    mov ah, 02h
    int 21h
    
    cmp count, 4
    je exitFor
    jmp cycle

exitFor:
    xor edx, edx
    xor eax, eax
    xor ebx, ebx
    mov si, 0
    mov eax, mas_fac[si]
    mov value, eax
    mov si, 12
    mov cx, 1
    mov ebx, mas_fac[si]
    mov sum, ebx

create:
    mov eax, value
    mul sum
    sub si, 4
    add eax, mas_fac[si]

    mov sum, eax
    ;loop create
    cmp cx, 0
    je post
    dec cx
    jmp create
    
post:
    mov eax, sum    
    mov cx, 5
    call writeNumber


exit:    
    mov ax, 04Ch
    int 21h
    
fillMas_fac1:
    jmp fillMas_fac


CodeSg  ENDS
end start

Вопросов возникает 2: 
как организовать сегмент данных с общей памятью?
почему при компиляции выходит ошибка на строках работы с массивом?

Это сообщение отредактировал(а) Curiosa - 27.6.2009, 20:52
PM MAIL   Вверх
Evjeny
Дата 22.5.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



По второму впоросу - нельзя пересылать данные из памяти в память, так как машинные команды не могут одновременно работать с двумя операндами, находящимися в памяти.
PM MAIL WWW   Вверх
Curiosa
Дата 24.5.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Предыдущую ошибку исправила, возникла новая проблема: 

Код

exitFor:
    xor edx, edx
    xor eax, eax
    xor ebx, ebx
    xor si, si
    mov eax, mas_fac[si];
Код

 почему засылается первый и второй элемент массива?

    mov value, eax
    ...


Это сообщение отредактировал(а) Curiosa - 31.5.2009, 09:57
PM MAIL   Вверх
Evjeny
Дата 31.5.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не
Код

fillMas_fac:
mov eax, dword ptr[number]
mov mas_fac[si], eax
inc si

, а
Код

fillMas_fac:
mov eax, dword ptr[number]
mov mas_fac[si], eax
add si, 4


У тебя же ведь размер элемента массива не байт, а 4 байта, следовательно указатель (si), надо увеличивать на 4, а не на 1. Тоже самое в 55 строке.
PM MAIL WWW   Вверх
Curiosa
Дата 31.5.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Evjeny,  спасибо большое!
PM MAIL   Вверх
Curiosa
Дата 23.6.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Относительно сегмента с общей памятью, попробовала изменить код. Выходит предупреждение : Assuming segment is 32-bit  в стороках 3, 7, 20;  а при  линковке: Error: 32-bit record encountered in odule 2-8.asm: use "/3" option. В чем суть ошибки?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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