Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Assembler Определить представимо ли число в виде суммы 2х простых чисел https://www.cyberforum.ru/ asm-beginners/ thread54369.html
Определить представимо ли число содержащиеся в ячейке 0200 в в виде суммы 2х простых чисел. использовать подпрограмму того, что число простое
Assembler Лабораторка: адресация микропроцессорных систем, нужна помощь
по тем же причинам не могу составить программу заданную преподавателем... просто так же дал задание без всяких обьяснений и сказал завтра принести... очень надеюсь на Вашу помощь... 1.1. Составить программу, состоящую из следующих процедур обработки строк: 1.1.1. Заполнить 100 ячеек области памяти, начинающейся с адреса MAS рядом натуральных чисел. 1.1.2. Переслать массив слов из области...
Assembler Копирование из регистра в регистр Есть xmm-регистр, в котором хранятся два вещественных числа 2-ой точности (double A,B ) xmm0 = (A,B ) Нужно скопировать эти числа в другой xmm-регистр, допустим xmm1, используя SSE2 интструкции так чтобы число А оказалось в младших 64-битах, а B в старших 64 битах. Т.е: xmm1 = ( B,A) И как будет быстрее: поменять сначала числа местами в xmm0-регистре (xmm=(B,A)) и потом его без изменений... https://www.cyberforum.ru/ asm-beginners/ thread54180.html Assembler Количество тактов https://www.cyberforum.ru/ asm-beginners/ thread54021.html
народ помогите написать программу, которая подсчитывает количество тактов процессора, которые нужны для команды ADD. Надо использовать RDTSC. Зарание спасибо
Assembler Вычислить значение выражения Y=[(A+B)*C]^3/D
Кароче началось у нас на 3 курсе программирование микропроцессоров, ну и тут мы столкнулись с ассемблером, учитель у нас попался ужаснейший, ничего не объясняет, говорит учите как хотите... ну и в итоге нам дал задание: Составить программу в ассемблере для вычесления следующего выражения: Y=в 3 степени/делённое на омегу буду очень благодарен за помощь
Assembler Запись числа в файл нужно прочитать файл и записать в другой файл в столбкик знаки аского кода и напротив сколько раз они встречаются в файле...... вприинципе файл я прочитал... строку извлек, думаю пощитать символы не очень большая проблема.. но как число записать в файл не понимаю......, открытие open_file macro path,file_mode mov ax,3d00h mov al,file_mode lea dx,path int 21h https://www.cyberforum.ru/ asm-beginners/ thread53928.html
Assembler В поле байт найти количество чисел, являющихся полными квадратами https://www.cyberforum.ru/ asm-beginners/ thread53761.html
В поле байт найти количество чисел, являющихся полными квадратами. Использовать подпрограмму проверки того, что число является полным квадратом. Никто не знает решение?
Не работает как надо: помогите решить задачу с матрицей Assembler
Люди помогите решить задачу где нужно преобразовать матрицу так чтобы элемент новой матрицы был равен произведению элемента первой матрицы стоящего на этом месте на минимальный элемент этого столбца b=a*min a извините за сумбур в коде просто я уже окончательно запутался, он мне при возвращении регистра из стека почемуто обнуляет его INCLUDE MACRO.ASM stak segment dw 256 dup(?)...
Assembler Переместить 10 байт и найти их сумму Помогите пожалуйста решить задачу по Ассемблеру: Переместив область данных длиной 10 байт с адреса 16А0на 16В0, найти сумму всех чисел и занести в ячейку с адресом 19А3... Надеюсь есть добрые люди... заранее спасиба!!! https://www.cyberforum.ru/ asm-beginners/ thread53568.html Assembler Вставка битовой строки Помогите пожалуйста с задачкой. Осуществить вставку битовой строки А длиной 4 бита в строку памяти B длиной 16 бит, начиная со второго бита. А=0101 b; B-номер студента по списку. Если кто чем поможет буду сильно благодарен. https://www.cyberforum.ru/ asm-beginners/ thread53378.html
ВЫчислить значение выражения Assembler
Прошу помочь с написанием программы...только начали изучать...ничего не могу понять, очень прошу сделать с коментариями...буду очень благодарен... Задание:
Assembler Извлечь 5 битов числа A, начиная со второго и вставить их в число B https://www.cyberforum.ru/ asm-beginners/ thread53037.html
такая же фигня .... Лаб.раб. №1 извлечь 5 битов числа A, начиная со второго и вставить их в число B, начиная с третьего бита. A-номер студента по списку. B=1A74h. ***номер по списку 27
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
01.07.2017, 22:07 0

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

01.07.2017, 22:07. Показов 270064. Ответов 11
Метки (Все метки)

Ответ

Вывод целого беззнакового 32-разрядного числа
Вывод (или преобразование в строку) 32-разрядного числа алгоритмически несколько сложнее вывода 16-разрядного числа, т.к. формально в 16-разрядной DOS недоступны 32-разрядные регистры и выполнить деление на 10 затруднительно.

Поясню - пусть нужно разделить число 123456789 на 10. "На бумаге" всё получается очень просто 123456789/10=12345678 (остаток 9). Помещая делимое в регистровую пару dx:ax, а делитель в bx после команды div bx получаем переполнение и аварийный останов программы, т.к. частное 12345678 не "умещается" в регистре ax.

Но любой школьник легко сможет выполнить подобное деление - "в столбик" на листе бумаги. Значит и нам ничто не мешает поступить подобным образом.

Т.е. мы можем взять не всё исходное число, а только его старшее слово и разделить на 10. В результате получим в ax частное, а в dx - остаток. Частное можно сохранить для будущих вычислений, а в регистр ax можно загрузить следующее слово исходного делимого. Опять получается регистровая пара dx:ax, которую можно делить на 10. Причём при делении не возникнет переполнения, т.к. это частное будет меньше слова.

Деление можно проиллюстрировать изображением
Название: div.png
Просмотров: 10560

Размер: 870 байт
Т.к. первоначальное число можно сохранить во временной переменной, и исходное значение этой переменной нигде больше не нужно, то в этой же переменной можно по мере деления на 10 сохранять и частичные частные для получения следующей цифры исходного числа.
Достаточно удобно организовать обращение к составляющим исходного числа как к массиву слов, организовав индексацию через регистр si.

Весь остальной код по смыслу напоминает предыдущие примеры - сохранение остатков в стеке и дальнейший их вывод в порядке, обратном получению.
Добавлю, что для визуального упрощения исходного кода используется усложнённый синтаксис директивы (макроса) proc, что приводит к необходимости объявления в начале программы не только модели памяти программы, но и модели соглашения о вызове процедур и передачи им параметров .model small, Pascal. В данном случае я выбрал Pascal.
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
;Вывод на экран целого 32 разрядного беззнакового числа
;на входе:
;  dx:ax - целое 32 разрядное беззнаковое число
ShowUInt32      proc
USES    ax,bx,cx,dx,si,di
LOCAL   temp:DWORD      ;переменная для сохранения частного от деления на 10
 
        ;сохранить значение числа во временной переменной
        mov     word ptr temp[0],       ax
        mov     word ptr temp[2],       dx
 
        mov     bx,     10      ;делитель
        mov     di,     0       ;количество цифр
@@NextDigit:
        mov     cx,     2       ;количество операций деления
        mov     si,     2       ;смещение делимого в переменной temp
        mov     dx,     0       ;остаток от предыдущего деления на 10
@@DivBy10:
        mov     ax,     word ptr temp[si]
        div     bx
        mov     word ptr temp[si],      ax
        sub     si,     2
        loop    @@DivBy10
        ;преобразование остатка от деления temp на 10 в символ цифры
        add     dl,     '0'
        push    dx              ;сохранение символа цифры в стеке
 
        inc     di              ;счётчик цифр увеличить на 1
 
        mov     ax,     word ptr temp[0]        ;остаток равен 0?
        or      ax,     word ptr temp[2]
        jnz     @@NextDigit                     ;нет - продолжить
 
        ;вывод цифр
        mov     cx,     di      ;количество выводимых символов
        mov     ah,     02h     ;функция вывода на экран для int 21h
@@ShowDigit:
        pop     dx              ;извлечение цифры из стека
        int     21h             ;вывод символа на экран
        loop    @@ShowDigit
 
        ret
ShowUInt32      endp
Пример использования
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
LOCALS
 
.model small, Pascal
 
.stack 100h
 
.data
        ui32    dd      1234567890
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ax,     word ptr [ui32]
        mov     dx,     word ptr [ui32+2]
        call    ShowUInt32
 
        mov     ax,     4C00h
        int     21h
main    endp
 
;Вывод на экран целого 32 разрядного беззнакового числа
;на входе:
;  dx:ax - целое 32 разрядное беззнаковое число
ShowUInt32      proc
.......................
ShowUInt32      endp
 
end     main
P. S. В целом, данный код представляет интерес ещё и с точки зрения расширяемости для вывода 64 и более разрядных чисел.

P. P. S. Также, будет интересна подборка способов ввода и вывода 32 и 64 разрядных чисел в десятичном виде, подготовленная Mikl___:
Остаток от деления на 10 32-битного числа в dx:ax
https://www.cyberforum.ru/post6454877.html

Вернуться к обсуждению:
Ввод и вывод чисел в различных системах счисления Assembler
2
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2017, 22:07
Готовые ответы и решения:

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

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

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

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

11
01.07.2017, 22:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2017, 22:07
Помогаю со студенческими работами здесь

Сложение чисел в различных системах счисления
1) Сложить эти два числа в указанных СС в скобках... 2) Перевести ответ в 16ую СС...

Запись действительных десятичных чисел в различных системах счисления
Дали задание: "Запись действительных десятичных чисел в различных системах счисления" Нарисовать...

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

Сгенерировать калькулятор целых и вещественных чисел в различных системах счисления
сгенерировать в C# калькулятор целых и вещественных чисел в различных системах счисления

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

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru