Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 14:16   #1
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
Смущение Задача «Арифметическое выражение»

Здравствуйте) Ребят, у меня само собой к Вам просьба посмотрите пожалуйста, что не так с моей задачей...
Условие такое: Написать программу, которая позволяет ввести с клавиатуры вещественное значение x и вычислить следующее арифметическое выражение:
y = [(x+a)2 + (x-b)]/(x-c)/(x-b)
Константы a,b,c должны быть описаны в сегменте данных. Константы у меня все единицы. Но нужно еще перед b добавить двойку, я добавила, но результат прогрммы не совпадает с моим подсчетом, посмотрите пожалуйста...

Код:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

;                 Build this with the "Project" menu using
;                        "Console Assemble & Link"

comment * «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

This demo shows how to perform simple addition using registers and assembler
instructions in the first example. The second example shows how to compare
a memory variable to an immediate number and branch to different labels
depending on how large the number is. Branching logic in assembler is very
simple and compact code.

««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« *

    .486                                    ; create 32 bit code
    .model flat, stdcall                    ; 32 bit memory model
    option casemap :none                    ; case sensitive
 
    include \masm32\include\windows.inc     ; always first
    include \masm32\macros\macros.asm       ; MASM support macros

  ; -----------------------------------------------------------------
  ; include files that have MASM format prototypes for function calls
  ; -----------------------------------------------------------------
    include \masm32\include\masm32.inc
    include \masm32\include\gdi32.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc

  ; ------------------------------------------------
  ; Library files that have definitions for function
  ; exports and tested reliable prebuilt code.
  ; ------------------------------------------------
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\gdi32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    .data
           a dd 1
           b dd 1
           v dd 1

    .code                       ; Tell MASM where the code starts

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

start:                          ; The CODE entry point to the program

    call main                   ; branch to the "main" procedure

    exit

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

main proc

    LOCAL x: DWORD           
    LOCAL b1: DWORD
    LOCAL b2: DWORD
    LOCAL b3: DWORD
    LOCAL o1: DWORD

    
    mov x, sval(input("vvedite x = "))

    print chr$(13,10,13,10)
    ;print chr$("Summa chisel=") 

       
    mov eax, x                             
    add eax, a
    mul eax 
    mov edx, eax
    mov eax, x
    mov ebx, b
    imul ebx, 2
    mov  b, ebx
    add eax, edx
    mov b1, eax
    
    mov eax, x
    sub eax, v
    mov b2, eax

    mov eax, x
    mov ebx, b
    imul ebx, 2
    sub eax, b
    mov b3, eax

    mov eax, b2 
        mov edx,0   
    idiv b3     
        mov o1,eax

    mov eax, b1
    mov edx, 0
    idiv o1
    
    print str$(eax)
    

    ret

main endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

end start                       ; Tell MASM where the program ends
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 15:31   #2
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Может проблема с тем, что деление на ноль идет? И еще заметила, что почему-то ответ округляет программа, при чем сама выбирает в какую сторону... Помогите пожалуйста...
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 16:32   #3
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Diamond2107, с вещественными числами работает FPU. Для этого есть соответствующие команды.
vadimych вне форума Ответить с цитированием
Старый 13.06.2011, 17:06   #4
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Так он и без дробей считает не правильно...Например при х=1, выводит ответ -2, а должно быть 0...
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 17:15   #5
HmL
Пользователь
 
Регистрация: 13.05.2011
Сообщений: 17
По умолчанию

При делении на 0 программы "вылетит" с ошибкой.

Пример переписал, но рекомендую его проверить, поскольку не совсем уверен, что ван нужно именно это.
Код:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

;                 Build this with the "Project" menu using
;                        "Console Assemble & Link"

comment * «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

This demo shows how to perform simple addition using registers and assembler
instructions in the first example. The second example shows how to compare
a memory variable to an immediate number and branch to different labels
depending on how large the number is. Branching logic in assembler is very
simple and compact code.

««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««« *

    .486                                    ; create 32 bit code
    .model flat, stdcall                    ; 32 bit memory model
    option casemap :none                    ; case sensitive
 
    include \masm32\include\windows.inc     ; always first
    include \masm32\macros\macros.asm       ; MASM support macros

  ; -----------------------------------------------------------------
  ; include files that have MASM format prototypes for function calls
  ; -----------------------------------------------------------------
    include \masm32\include\masm32.inc
    include \masm32\include\gdi32.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc

  ; ------------------------------------------------
  ; Library files that have definitions for function
  ; exports and tested reliable prebuilt code.
  ; ------------------------------------------------
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\gdi32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    .data
           a dd 1
           b dd 1
           v dd 1

    .code                       ; Tell MASM where the code starts

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

start:                          ; The CODE entry point to the program

    call main                   ; branch to the "main" procedure

    exit

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

main proc

    LOCAL x: DWORD           
    LOCAL b1: DWORD
    LOCAL b2: DWORD
    LOCAL b3: DWORD
    LOCAL o1: DWORD

    
    mov x, sval(input("vvedite x = "))

    print chr$(13,10,13,10)
    ;print chr$("Summa chisel=") 

       
    mov eax, x                             
    add eax, a
    mov ebx, 2
    imul ebx
    mov edx, x
    xchg edx, eax
    sub eax, b
    add eax, edx
    mov b1, eax


    ;mov eax, x
    ;mov ebx, b
    ;imul ebx, 2
    ;mov  b, ebx
    ;add eax, edx
    
    mov eax, x
    sub eax, v
    mov b2, eax

    mov eax, x
    sub eax, b
    mov b3, eax
    
    xor edx, edx
    mov eax, b1
    idiv b2

    xor edx, edx
    idiv b3
    mov o1, eax

    ;mov eax, x
    ;mov ebx, b
    ;imul ebx, 2
    ;sub eax, b
    ;mov b3, eax

    ;mov eax, b2 
        ;mov edx,0   
    ;idiv b3     
        ;mov o1,eax

    ;mov eax, b1
    ;mov edx, 0
    ;idiv o1
    
    print str$(eax)
    

    ret

main endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

end start                       ; Tell MASM where the program ends

Последний раз редактировалось HmL; 13.06.2011 в 18:06.
HmL вне форума Ответить с цитированием
Старый 13.06.2011, 17:21   #6
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Почему-то ошибку выдает, не запускается программа(
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 17:26   #7
HmL
Пользователь
 
Регистрация: 13.05.2011
Сообщений: 17
По умолчанию

Какую именно ошибку? У меня нормально компилируется и запускается.
HmL вне форума Ответить с цитированием
Старый 13.06.2011, 17:29   #8
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

...жму Console Assemble & Link, там ошибка, не создает файлы .exe и .obj...
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 17:31   #9
HmL
Пользователь
 
Регистрация: 13.05.2011
Сообщений: 17
По умолчанию

Компилятор какой?

Цитата:
там ошибка
Сообщения какие-либо генерируется?
HmL вне форума Ответить с цитированием
Старый 13.06.2011, 17:48   #10
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Я не очень в этом разбираюсь... Вот что происходит
Изображения
Тип файла: jpg Безымянный.jpg (95.4 Кб, 128 просмотров)
Diamond2107 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
среднее арифметическое legita Помощь студентам 2 18.12.2010 19:40
Арифметическое переполнение hasana Помощь студентам 2 04.11.2010 18:08
Среднее арифметическое Seede1 Помощь студентам 4 10.10.2010 10:29
Задача: Дано натуральное число n. Вычислить выражение ... NoSiK Помощь студентам 26 21.11.2009 14:46
Выражение в С++ mambr Общие вопросы C/C++ 9 19.09.2009 20:02