Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/22: Рейтинг темы: голосов - 22, средняя оценка - 4.86
0 / 0 / 2
Регистрация: 21.11.2012
Сообщений: 49
1

Как записать десятичное число в dx:ax? (nasm)

19.02.2014, 22:38. Просмотров 4229. Ответов 32
Метки нет (Все метки)

Всем привет. При делении нужно занести делимое(десятичное число) в dx:ax. Нужно его перевести в 16-ую систему или как-то по-другому можно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2014, 22:38
Ответы с готовыми решениями:

В строке записано десятичное число. Записать данное число римскими цифрами
подвох задачи в том что -> Делать задачи двумя способами - один: "в лоб", без стандартных...

Целое десятичное преобразовать в двоичное, записать задом-наперед и перевести обратно в десятичное
Всем привет Пожалуйста помогите разобраться Целое положительное число m записывается в двоичной...

Перевернуть число в двоичной системе и записать его десятичное представление
Задание: дано десятичное число, надо перевернуть число в двоичной системе и записать его десятичное...

Записать каждое десятичное число в виде целой десятичной, восьмеричной и шестнадцатеричной константы
Помогите решить задачи.Так как в Си я вообще ноль без вашей помощи никак. 1. Записать каждое...

32
Хочу в Исландию
1038 / 837 / 119
Регистрация: 10.11.2010
Сообщений: 1,631
19.02.2014, 23:34 2
Где содержится делимое?
0
Ушел с форума
Автор FAQ
14000 / 7011 / 816
Регистрация: 11.11.2010
Сообщений: 12,609
20.02.2014, 03:49 3
Цитата Сообщение от skaa Посмотреть сообщение
Где содержится делимое?
Вероятно, вводится с клавиатуры
0
6554 / 2650 / 364
Регистрация: 17.02.2013
Сообщений: 3,884
20.02.2014, 07:43 4
Цитата Сообщение от узер Посмотреть сообщение
Всем привет. При делении нужно занести делимое(десятичное число) в dx:ax. Нужно его перевести в 16-ую систему или как-то по-другому можно сделать?
Это вывод на экран или ввод с клавиатуры может быть в 10-чном или 16-чном виде. 10-чное или 16-чное представление - это для человеческого глаза. А вот по отношении к регистрам DX:AX говорить о 10-чной или 16-чной системе счисления бессмысленно, потому-что там все всегда в двоичном виде.
0
0 / 0 / 2
Регистрация: 21.11.2012
Сообщений: 49
20.02.2014, 08:06  [ТС] 5
Что-то я, наверное, коряво выразился. Всё по-простому. Например:
Assembler
1
2
3
section .data
a dw 600; 600 в десятичной системе
.............
И теперь мне для деления 600(дес.) нужно занести в dx:ax.
0
6554 / 2650 / 364
Регистрация: 17.02.2013
Сообщений: 3,884
20.02.2014, 08:15 6
mov ax, a
cwd
0
0 / 0 / 2
Регистрация: 21.11.2012
Сообщений: 49
20.02.2014, 17:49  [ТС] 7
Цитата Сообщение от Ethereal Посмотреть сообщение
mov ax, a
cwd
Спасибо, помогло. Просто в книге разница между делением и командой cwd страниц 40.
0
Эксперт быдлокодинга
2084 / 518 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
20.02.2014, 21:15 8
Цитата Сообщение от узер Посмотреть сообщение
Спасибо, помогло. Просто в книге разница между делением и командой cwd страниц 40.
А тебе для деления вторая команда была и не нужна.
(буварь по асму) если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax
При классическом подходе ты можешь обойтись только командой mov. А уж эта то команда во всех книжках по ассемблеру идёт одна из первых.
Assembler
1
2
mov ax, a
mov dx, 0
Кстати о
Assembler
1
a dw 600; 600 в десятичной системе
при записи переменной ты можешь в чём угодно число записать (двоично, десятично, шеснадцатирично) всё равно это будет абстракция удобная для тебя. А компилятор уже потом сам постарается перевести всё это не скажу ты сам знаешь во что.
0
Хочу в Исландию
1038 / 837 / 119
Регистрация: 10.11.2010
Сообщений: 1,631
20.02.2014, 23:19 9
Ну а если большое число делить (которое не помещается в ax), тогда его кусочек должен находиться в dx. Скажем чтобы разделить 100000 на 100, можно вот что сделать:
Assembler
1
2
3
4
5
6
        mov     eax,100000
 
        mov     edx,eax
        shr     edx,16
        mov     bx,100
        div     bx
.
0
Эксперт быдлокодинга
2084 / 518 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
20.02.2014, 23:47 10
skaa, радует как у тебя пример для 16 разрядных регистров легко и непринуждённо в 32 разрядный превратился.
0
Хочу в Исландию
1038 / 837 / 119
Регистрация: 10.11.2010
Сообщений: 1,631
21.02.2014, 00:12 11
Вообще-то про 16-разрядность этого примера никто ничего не говорил ...
Хорошо, тогда так:
Assembler
1
2
3
4
        mov     dx,1
        mov     ax,86A0h;186A0h=100000
        mov     bx,0x64
        div     bx
.
1
Эксперт быдлокодинга
2084 / 518 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
21.02.2014, 00:52 12
Цитата Сообщение от skaa Посмотреть сообщение
Вообще-то про 16-разрядность этого примера никто ничего не говорил ...
Однако это не мешает многим программистам ассемблера сидя на четвёртых пнях и двумя ногами в 21 веке начинать свои вирши с .386 Мотивируя это обратной совместимостью вообще и хорошим тоном в частности. Вот я и подумал, если ТС свой пост с шестнадцати битных регистров начал, было бы не очень правильно задирать планку разрядности
0
0 / 0 / 2
Регистрация: 21.11.2012
Сообщений: 49
21.02.2014, 22:06  [ТС] 13
Уважаемые, спасибо за кашу в моей голове . Давайте так: нужно разделить 750000 на 50000. Числа десятичные. Как мне поместить 750000 в dx:ax.
Вот я и подумал, если ТС свой пост с шестнадцати битных регистров начал, было бы не очень правильно задирать планку разрядности
Вот, мне бы разобраться с dx:ax, а уж с edx:eax, думаю, разберусь.
0
Хочу в Исландию
1038 / 837 / 119
Регистрация: 10.11.2010
Сообщений: 1,631
21.02.2014, 23:08 14
Assembler
1
2
3
4
        mov     dx,0Bh
        mov     ax,71B0h;0B71B0h=750000
        mov     bx,50000
        div     bx
0
0 / 0 / 2
Регистрация: 21.11.2012
Сообщений: 49
21.02.2014, 23:20  [ТС] 15
Код ASM
mov dx,0Bh
mov ax,71B0h;0B71B0h=750000
mov bx,50000
div bx
Вот, вы записываете в листинг программы 750000 как 16-ое число. Меня интересует возможность записи десятичного числа в два регистра. Или обязательно при написании проги переводить его в 16-ое?
0
Эксперт быдлокодинга
2084 / 518 / 68
Регистрация: 04.11.2010
Сообщений: 1,293
21.02.2014, 23:38 16
Цитата Сообщение от узер Посмотреть сообщение
Уважаемые, спасибо за кашу в моей голове
Лопай на здоровье.
Цитата Сообщение от узер Посмотреть сообщение
нужно разделить 750000 на 50000. Числа десятичные. Как мне поместить 750000 в dx:ax.
Книги по ассемблеру это всё мура и тягомотина. Будущее за комиксами
Как записать десятичное число в dx:ax? (nasm)

Надеюсь в картинках всё более менее будет ясно. Это делитель в десятичном этом... как его... представлении
После небольшого ахалая-махалая
Как записать десятичное число в dx:ax? (nasm)

Получаем его шеснадцатиричное представление
И со спокойной совестью (всё сами) заносим делимое по регистрам
Assembler
1
2
mov DX,0Bh
mov AX,71B0h
Ну а с делителем думаю уже и сам разобрался, времени то с момента написания вопроса на две-три следующие главы хватило бы.
0
Хочу в Исландию
1038 / 837 / 119
Регистрация: 10.11.2010
Сообщений: 1,631
22.02.2014, 00:21 17
узер, можно так:
Assembler
1
2
3
4
        mov     dx,11
        mov     ax,29104
        mov     bx,50000
        div     bx
, это для компьютера абсолютно то же самое, но для человека с первого взгляда ничего не понятно .
0
Ушел с форума
Автор FAQ
14000 / 7011 / 816
Регистрация: 11.11.2010
Сообщений: 12,609
22.02.2014, 03:30 18
узер,
не прибегая к калькулятору
Assembler
1
2
3
4
mov dx,(750000 / 65536)
mov ax,(750000 mod 65536)
mov     bx,50000
div     bx
компилятор всё сделает сам, нужно только запомнить волшебное число 6553610=1000016
0
0 / 0 / 2
Регистрация: 21.11.2012
Сообщений: 49
22.02.2014, 08:23  [ТС] 19
Всё, теперь понятно. Значит, перед занесением, буду переводить числа в 16-ую систему.
Всем спасибо.
0
Ушел с форума
Автор FAQ
14000 / 7011 / 816
Регистрация: 11.11.2010
Сообщений: 12,609
22.02.2014, 09:25 20
Цитата Сообщение от узер Посмотреть сообщение
Значит, перед занесением, буду переводить числа в 16-ую систему
узер,
для чего? Используй ту систему счисления какая для тебя удобнее, хочешь в двоичной, хочешь в восьмеричной, хочешь в десятичной. Я же показал, как всю работу переложить на плечи компилятора
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2014, 09:25

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Записать каждое десятичное число в виде целой десятичной, восьмеричной и шестнадцатеричной константы
записать каждое десятичное число в виде целой десятичной, восьмеричной и шестнадцатиричной...

[мк51] Записать десятичное число, двоичный код которого соответствует третьему байту команды
Добрый день. Подскажите можно ли реализовать это в программе EMU8086 (может другой)? Или это все...

(МК51) Записать десятичное число, двоичный код которого соответствует третьему байту команды
Здравствуйте. Объясните пожалуйста, как правильно найти второй, третий байт команды. Записать...

Максимальное целое десятичное число, которое можно записать в четырех разрядах двоичной системы счисления - это
1. 2 2. 3 3. 15 4. 8 5. 222


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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