Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Assembler Определить представимо ли число в виде суммы 2х простых чисел https://www.cyberforum.ru/asm-beginners/thread54369.html
Определить представимо ли число содержащиеся в ячейке 0200 в в виде суммы 2х простых чисел. использовать подпрограмму того, что число простое
Assembler Лабораторка: адресация микропроцессорных систем, нужна помощь
по тем же причинам не могу составить программу заданную преподавателем... просто так же дал задание без всяких обьяснений и сказал завтра принести... очень надеюсь на Вашу помощь... 1.1. Составить...
Assembler Копирование из регистра в регистр
Есть xmm-регистр, в котором хранятся два вещественных числа 2-ой точности (double A,B ) xmm0 = (A,B ) Нужно скопировать эти числа в другой xmm-регистр, допустим xmm1, используя SSE2 интструкции так...
Assembler Количество тактов народ помогите написать программу, которая подсчитывает количество тактов процессора, которые нужны для команды ADD. Надо использовать RDTSC. Зарание спасибо https://www.cyberforum.ru/asm-beginners/thread54021.html
Assembler Вычислить значение выражения Y=[(A+B)*C]^3/D https://www.cyberforum.ru/asm-beginners/thread53972.html
Кароче началось у нас на 3 курсе программирование микропроцессоров, ну и тут мы столкнулись с ассемблером, учитель у нас попался ужаснейший, ничего не объясняет, говорит учите как хотите... ну и в...
Assembler Запись числа в файл
нужно прочитать файл и записать в другой файл в столбкик знаки аского кода и напротив сколько раз они встречаются в файле...... вприинципе файл я прочитал... строку извлек, думаю пощитать символы не...
В поле байт найти количество чисел, являющихся полными квадратами Assembler
В поле байт найти количество чисел, являющихся полными квадратами. Использовать подпрограмму проверки того, что число является полным квадратом. Никто не знает решение?
Assembler Не работает как надо: помогите решить задачу с матрицей Люди помогите решить задачу где нужно преобразовать матрицу так чтобы элемент новой матрицы был равен произведению элемента первой матрицы стоящего на этом месте на минимальный элемент этого столбца... https://www.cyberforum.ru/asm-beginners/thread53673.html
Assembler Переместить 10 байт и найти их сумму https://www.cyberforum.ru/asm-beginners/thread53568.html
Помогите пожалуйста решить задачу по Ассемблеру: Переместив область данных длиной 10 байт с адреса 16А0на 16В0, найти сумму всех чисел и занести в ячейку с адресом 19А3... Надеюсь есть добрые люди......
Assembler Вставка битовой строки Помогите пожалуйста с задачкой. Осуществить вставку битовой строки А длиной 4 бита в строку памяти B длиной 16 бит, начиная со второго бита. А=0101 b; B-номер студента по списку. Если кто чем... https://www.cyberforum.ru/asm-beginners/thread53378.html
vital792
2008 / 1280 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
12.12.2010, 14:48 0

Ввод и вывод чисел в различных системах счисления

12.12.2010, 14:48. Просмотров 137644. Ответов 9
Метки (Все метки)

Ответ

В дополнение к теме:
Вывод вещественного числа
Число для вывода должно находиться на вершине стека сопроцессора,
функции должен передаваться через стек параметр - число цифр после запятой(из-за ошибок округления его обычно нельзя посчитать заранее)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
.286C
.model small
.data
 
flt_num dq      -324.7341234781
 
.code
start:
mov ax, @data
mov ds, ax
 
finit
fld flt_num
push 10
call outfloat
 
 
.exit
 
; Вывод вещественного числа
; аргумент - количество цифр дробной части
length_frac     equ     [bp+4]
; локальные переменные
ten     equ word ptr [bp-2]
temp    equ word ptr [bp-4]
 
OutFloat proc   near
        enter   4, 0            ; пролог - выделим в кадре стека 4 байта под локальные переменные
        mov     ten, 10
        ftst                    ; определяем знак числа
        fstsw   ax
        sahf
        jnc     @positiv
        mov     al, '-'         ; если число отрицательное - выводим минус
        int     29h
        fchs                    ; и получаем модуль числа
@positiv:
        fld1                    ; загружаем единицу
        fld     st(1)           ; копируем число на вершину стека
        fprem                   ; выделим дробную часть
        fsub    st(2), st       ; отнимем ее от числа - получим целую часть
        fxch    st(2)           ; меняем местами целую и дробную части
        xor     cx, cx          ; обнуляем счетчик
; далее идет стандартный алгоритм вывода целого числа на экран
@1:
        fidiv   ten             ; делим целую часть на десять
        fxch    st(1)           ; обменяем местами st и st(1) для команды fprem
        fld     st(1)           ; копируем результат на вершину стека 
        fprem                   ; выделим дробную часть (цифру справа от целой части)
        fsub    st(2), st       ; получим целую часть
        fimul   ten             ; *10
        fistp   temp            ; получаем очередную цифру      
        push    temp            ; заталкиваем ее глубже в стек
        inc     cx              ; и увеличим счетчик
        fxch    st(1)           ; подготовим стек к следующему шагу цикла (полученное частное на вершину, в st(1) - 1)
        ftst                    ; проверим не получили ли в частном 0?
        fstsw   ax
        sahf
        jnz     @1              ; нет - продолжим цикл
@2:                             ; извлекаем очередную цифру, переводим её в символ и выводим.
        pop     ax
        add     al, '0'
        int     29h
        loop    @2
; далее то же самое, только для дробной части. Алгоритм похож на вывод целого числа, только вместо деления умножение и проход по числу слева
        fstp    st              ; сначала проверим, есть ли дробная часть
        fxch    st(1)
        ftst
        fstsw   ax
        sahf
        jz      @quit           ; дробная часть отсутствует
        mov     al, '.'
        int     29h             ; если присутствует - выведем точку
        mov     cx, length_frac ; помещаем в счетчик длину дробной части
@3:
        fimul   ten             ; умножим на 10
        fxch    st(1)           ; подготовка для fprem - меняем st и st(1) местами и
        fld     st(1)           ; копируем число на вершину
        fprem                   ; отделим дробную часть от целой
        fsub    st(2), st       ; и оставляем дробную
        fxch    st(2)
        fistp   temp            ; выталкиваем полученное число из стека в temp
        mov     ax, temp        ; по дробной части идем слева, значит число выводим сразу, без предварительного сохранения в стек
        or      al, 30h         ; перевод в ascii
        int     29h             ; на экран
        fxch    st(1)           ; подготовим стек к следующему шагу цикла (полученное частное на вершину, в st(1) - 1)
        ftst
        fstsw   ax
        sahf                    ; проверим на 0 остаток дробной части
        loopne  @3
@quit:
        fstp                    ; готово. Чистим стек сопроцессора
        fstp    st
        leave                   ; эпилог
        ret     2
OutFloat endp
 
end start


Вернуться к обсуждению:
Ввод и вывод чисел в различных системах счисления
45
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2010, 14:48
Готовые ответы и решения:

Ввод и вывод чисел в различных системах счисления
здравствуйте. помогите разработать программу Разработать программу перевода ввода и вывода чисел в...

Ввод и вывод чисел в различных системах счисления, исправить код
.model small .stack 100h .data .code InputInt proc mov ah,0ah

Ввод символов и отображение в различных системах счисления
Здравствуйте, форумчане! Есть проблема, прошу подсказки. Нужно создать прогу на ассемблере,...

Организовать ввод значений в различных системах счисления
Всем привет, делаю калькулятор и есть некоторые трудности! В общем, шкодю в WPF ХAML C#, и пытаюсь...

9
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.