IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Математические операции на АSM, азы
сообщение
Сообщение #1


Гарцующая лошадка
**

Группа: Пользователи
Сообщений: 107
Пол: Женский
Реальное имя: Любовь

Репутация: -  0  +


Почитала туториал.Все равно понять не могу когда и где какие использовать буковки.
Есть задача , что-то типа " Сосчитать выражение 1024*(12-43)+135/5*(50-156) (числа могут быть любыми:))) "
Можно организовать программку на ассемблере, подробно поясняя почему необходимо 3 раза подряд использовать MOV Ax,12 и почему именно Ax? полного кода программы не требуется, только рабочий кусок...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


	mov ax,12	;ax = 12
sub ax,43 ;ax = ax - 43 = 12 - 43
mov dx,1024 ;dx = 1024
mul dx ;dx:ax = ax * dx = (12 - 43) * 1024
mov bx,ax ;bx = ax = (12 - 43) * 1024

mov ax,135 ;ax = 135
mov cx,5 ;cx = 5
xor dx,dx ;dx = 0
div cx ;ax = dx:ax / cx = 135 / 5

mov cx,50 ;cx = 50
sub cx,156 ;cx = cx - 156 = 50 - 156
mul cx ;ax = ax * cx = 135 / 5 * (50 - 156)
add ax,bx ;ax = ax + bx = 135 / 5 * (50 - 156) + (12 - 43) * 1024

где dx:ax - 32-разрядное значение, старшая половина которого храниться в dx, а младшая - в ax. Команды умножения выдают произведение в два раза большей разрядности, чем множители. Команды деления используют делимое в два раза большей разрядности, чем делитель и частное. Поскольку все числа в приведённом примере вмещаются в 16 бит, то старшие половинки произведений игнорируются, а у делимого устанавливаются в 0.

Добавлено через 9 мин.
Выбор регистров осуществляется на основе знания о том, что 16-разрядные команды умножения неявно используют значение ax в качестве одного из множителей, а произведение всегда записывается в dx:ax; команды деления неявно используют значение dx:ax в качестве делимого, частное всегда записывается в ax, а остаток - в dx.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.09.2020 7:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name