Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
84 / 12 / 1
Регистрация: 24.01.2011
Сообщений: 309
1

Вопрос в стиле "Разрушители мифов"

18.10.2011, 20:22. Показов 9792. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Скажите пожалуйста, правда ли то что чтобы возвести икс в квадрат на ассемблере нужно вручную прописать около пяти страниц программного кода?))))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2011, 20:22
Ответы с готовыми решениями:

5 мифов о кофе
Мифы о кофе Миф первый: Употребление кофе – причина заболеваний сердца. Проверить правдивость...

Интересные Факты: 20 Самых Популярных Научных Мифов
Интересные факты Большинство - заблуждение, но некоторые - правда Американский популярный...

C++ в функциональном стиле: как писать в стиле C#/LINQ (без дополнительных библиотек)?
Как писать в стиле C#/LINQ (без дополнительных библиотек)? Вот, допустим, есть простейшая задача:...

Вопрос по SetParent (поэтому, наверное, это вопрос к NickStaves)
Есть набор форм, назовём их 'интерфейсными'. Есть отдельная форма, назовём её 'хранилищем'. Сама...

Строки в стиле C
Добрый вечер, решил поковыряться со строками в стиле C и наткнулся на следующую проблему. В 13-й...

22
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,697
22.10.2011, 04:49 21
Author24 — интернет-сервис помощи студентам
Вот, еще упростил, правда не будет работать с бесконечностью и нечислом
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
.586
.model flat
include windows.inc
includelib user32.lib
extern _imp__MessageBoxA@16:dword
.code
start:  fld x
        xchg ebx,eax      ;ebx:=0
        mov edi,offset String
        fldz
        fcomip st,st(1) ;сравниваю число с нулем
        jnz @f
        mov byte ptr [edi],'0'
        jmp b0
@@:     jb @f
        mov al,'-'      ;если отрицательное вывожу знак минус
        stosb
        fchs            ;и получаю модуль числа
@@:     fstcw control   ;устанавливаю режим "округление к нулю"
        or control,0C00h
        fldcw control
        fld st          ;дублирую содержимое st(0) в st(1)
        frndint         ;округляю до целого содержимое st(0)
        fsub st(1),st   ;в st(1) остается дробная часть
        jnz @f
        mov al,'0'
        stosb
        jmp b3
@@:     call bcd2str
        fldz
        fcomip st,st(1)
        jz b0
        mov al,'.'
        stosb
        inc ebx               ; ebx:=1
        fmul y          ;умножаю дробную часть на 1.0e17
        call bcd2str
b0:     push 0
        push 0
        push offset String
        push 0
        call _imp__MessageBoxA@16
        retn
bcd2str proc
        fbstp temp
        mov ecx,9       ;в десятом байте информация о знаке числа
        test ebx,ebx; ebx = 0?
        jnz b1
@@:     cmp byte ptr [ecx-1+temp],0
        jnz b1
        loop @b         ;пропускаем незначащие (нулевые) разряды слева
b1:     mov al,byte ptr [ecx-1+temp];загружаем первую значащую пару разрядов
        cmp al,9        ;если в старшей тетраде 0 - пропустить старшую тетраду
        ja @f
        add al,30h      ;младшую тетраду переводим в ASCII
        stosb
        dec ecx
        jz b2
@@:     movzx ax,byte ptr [ecx-1+temp];распаковываем остальные разряды числа
        ror ax,4        ;выделяем старшую и младшую тетрады
        shr ah,4
        add ax,'00'     ;переводим в ASCII-код
        stosw
        loop @b
b2:     retn
bcd2str endp
x dt -123456789.987654321
control dw ? ;переменная под содержимое регистра CWR
temp dt ?    ;переменная под BCD
y dq 1.0e17  ;множитель
String db 30 dup (0)
end start
0
766 / 310 / 11
Регистрация: 27.05.2011
Сообщений: 703
23.10.2011, 09:04 22
Mikl___, решил проверить твою прогу
Assembler
1
28.            jmp b3          ;переход есть, а метка отсутствует.
0
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,697
24.10.2011, 04:33 23
zzzyyyxxx, sorry
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
.686
.model flat
include windows.inc
includelib user32.lib
extern _imp__MessageBoxA@16:dword
.code
start:  fld x
    xchg ebx,eax
    mov edi,offset String
    fldz
    fcomip st,st(1) ;сравниваю число с нулем
    jnz @f
    mov byte ptr [edi],'0'
    jmp b0
@@: jb @f
    mov al,'-'      ;если отрицательное вывожу знак минус
    stosb
    fchs            ;и получаю модуль числа
@@: fstcw control   ;устанавливаю режим "округление к нулю"
    or control,0C00h
    fldcw control
    fld st          ;дублирую содержимое st(0) в st(1)
    frndint         ;округляю до целого содержимое st(0)
    fsub st(1),st   ;в st(1) остается дробная часть
    fldz
    fcomip st,st(1) ;сравниваю число с нулем
    jnz @f
    mov al,'0'
    stosb
    jmp b3
@@: call bcd2str
    fldz
b3: fcomip st,st(1)
    jz b0
    mov al,'.'
    stosb
    inc ebx
    fmul y      ;умножаю дробную часть на 1.0e17
    call bcd2str
b0: push 0
    push 0
    push offset String
    push 0
    call _imp__MessageBoxA@16
    retn
bcd2str proc
    fbstp temp
    mov ecx,9   ;в десятом байте информация о знаке числа
    test ebx,ebx
    jnz b1
@@:     cmp byte ptr [ecx-1+temp],0
    jnz b1
    loop @b         ;пропускаем незначащие (нулевые) разряды слева
b1: mov al,byte ptr [ecx-1+temp];загружаем первую значащую пару разрядов
        cmp al,9    ;если в старшей тетраде 0 - пропустить старшую тетраду
    ja @f
    add al,30h  ;младшую тетраду переводим в ASCII
    stosb
    dec ecx
    jz b2
@@:     movzx ax,byte ptr [ecx-1+temp];распаковываем остальные разряды числа
    ror ax,4        ;выделяем старшую и младшую тетрады
    shr ah,4
    add ax,'00' ;переводим в ASCII-код
    stosw
    loop @b
b2: retn
bcd2str endp
x dt -0.123456789;.987654321
control dw ? ;переменная под содержимое регистра CWR
temp dt ?    ;переменная под BCD
y dq 1.0e17  ;множитель
String db 30 dup (0)
end start
2
24.10.2011, 04:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2011, 04:33
Помогаю со студенческими работами здесь

Разбор в стиле
Помогите сделать красивый стиль для вот этого вывода Вот тут нужно добавить красивый стиль для...

Строка в стиле С
Чем отличается строка в стиле классического С и С++?

ToolBar в стиле XP
Я пока работаю на VB6. Машинка слабовата, да и дистрибутивы меньше получаются. Но охота, чтб...

Алгоритм в стиле с++
Есть txt файл в котором примерно 400 К строк. Нужно пройтись по всем строкам и записать в новый...

Прерывания в стиле С++
Решил побаловаться и попробовать написать чего-нибудь на С++ под stm32. Чисто ради любопытства,...

макропроцессор в стиле с
Реализуйте простой макропроцессор в стиле С, использующий директивы #include и #define. Входной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru