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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 19:00   #21
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Спасибо, Вам)) Добавила ту строчку и убрала деление, всё отлично, только когда дробные числа проблемы возникают
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 19:03   #22
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

И при x=0, тоже с ответом проблемы..пишет -2, а при вычислениях -0,5
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 19:13   #23
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

При x=3 всем отлично, при х=4, уже ерундит(
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 19:32   #24
HmL
Пользователь
 
Регистрация: 13.05.2011
Сообщений: 17
По умолчанию

Цитата:
И при x=0, тоже с ответом проблемы..пишет -2, а при вычислениях -0,5
Нет, результат будет -2, а не -0.5. -0.5 получится, если делить следующим образом (-1 / -1) / -2, а в программе деление такое: -1 / (-1 / -2).

P.S.
Ходят слухи, что в модуле не может быть отрицательного результата... Так может добавить проверку?
HmL вне форума Ответить с цитированием
Старый 13.06.2011, 19:36   #25
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Я не сильна в этом(( Спасибо Вам за помощь))
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 20:04   #26
HmL
Пользователь
 
Регистрация: 13.05.2011
Сообщений: 17
По умолчанию

Цитата:
при х=4, уже ерундит(
Результат должен быть 18, а программа показывает 27. Это происходит, поскольку процессор в eax записывает целую часть (она будет 1), а затем делит 27 на нее. Т.е. в результате получится 27, а не 18.

Чтобы получить корректные результаты необходимо использовать регистры сопроцессора.

Вот пример:
Код:
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

;                 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\fpu.inc
    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\fpu.lib
    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
    .data?
           one dd ?
	   two dd ?
	   three dd ?
	   SaveDig dt ?
	   buf db 30 dup (?)

    .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 stdout: DWORD
    LOCAL cWritten: 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
    sub eax, ebx
    add eax, edx
    mov one, eax
    
    mov eax, x
    sub eax, v
    mov two, eax

    mov eax, x
    mov ebx, b
    sub eax, b
    mov three, eax

    fild one
    fild two
    fild three
    fdiv
    fdiv
    fstp SaveDig

   invoke FpuFLtoA, addr SaveDig, 10, addr buf, SRC1_REAL or SRC2_DIMM
   invoke GetStdHandle, STD_OUTPUT_HANDLE
   mov stdout, eax
   invoke WriteConsoleA, stdout, addr buf, 30, addr cWritten, NULL

    

    ret

main endp

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

end start                       ; Tell MASM where the program ends

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

Оу, что-то не работает(( Опять такая же ошибка...
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 21:07   #28
Diamond2107
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 76
По умолчанию

Ооо, всё заработало, спасибо Вам))
Diamond2107 вне форума Ответить с цитированием
Старый 13.06.2011, 21:08   #29
HmL
Пользователь
 
Регистрация: 13.05.2011
Сообщений: 17
По умолчанию

Локальные переменные b1, b2, b3 и o1 можно убрать + я не много изменил пример.

Последний раз редактировалось HmL; 13.06.2011 в 21:31.
HmL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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