Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712

Операция деления

30.07.2012, 20:44. Показов 3104. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Я программирую на ассемблере для микроконтроллера. Просьба не говорить мне, что для этих целей можно использовать языки высокого уровня. Я это и так знаю. У меня задача специфическая. Поэтому кто знает, помогите.
Итак, микроконтроллер 16-ти разрядный. То есть, за один раз я могу оперировать только словом. А мне необходимо работать с 32-х разрядными числами. Допустим, одно число хранится в регистрах R4, R5 (назовем его А), второе в регистрах R6, R7 (назовем его В). Подскажите, как на ассемблере выполнить деление А на В?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2012, 20:44
Ответы с готовыми решениями:

Операция деления
вот в чём проблема: выполняю, например, такое действие: 1 - (33/40) => (40-33)/40 в итоге получаю 7, а хотелось бы 0,175 хотя бы 175.. ...

Почему операция деления выдает неправильный ответ?
почему то при делении регистров dx:ax на cx выдает неправильное число. до этого все значении верно считал. это мой первый опыт, так что...

Ошибка в коде, неправильно происходит операция деления
Задание : Напишите программу для вычисления формулы, согласно варианту задания. Все числа 16-битные целые со знаком. Протестируйте...

7
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
31.07.2012, 01:31
Инструкций деления явно нет.
Поэтому операция деления производиться многократным вычитанием делителя от делимого.

Начало цикла
Сначала делаем вычитание старших частей.
Если был заем,когда отнимали старшие части,то идем на выход.
Вычитание мл.частей.
Если был заем при разнице мл.частей,то отнимаем 1 от старшей части делимого.
Смотрим опять заем в старшей части делимого.Если был заем,то на выход.
Инкремент счетчика операций вычитаний.
Продолжить цикл.
Выход из цикла


Примерно так.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
31.07.2012, 01:40
Цитата Сообщение от Thread Посмотреть сообщение
Инструкций деления явно нет.
с какого это перепугу?
а div?

Цитата Сообщение от d7d1cd Посмотреть сообщение
Подскажите, как на ассемблере выполнить деление А на В?
писать свою функцию
а проще не выпендриватся и использовать языки высокого уровня
хотя бы написать деление компильнуть , дизасемблировать и посмотреть как это делает компилятор
1
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
31.07.2012, 01:46
В системе комманд микроконтроллера есть div?Надо бы уточнение от ТС.
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
31.07.2012, 01:56
Цитата Сообщение от Thread Посмотреть сообщение
В системе комманд микроконтроллера есть div?
все которые мне встречались -был

Цитата Сообщение от Thread Посмотреть сообщение
Надо бы уточнение от ТС.
вот это правильно

Добавлено через 6 минут
d7d1cd, вот пример подпрограммы деления для Cyprex
если не лень разбирайся

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
 ;r6r7=r6r7/r4r5
; r4r5=r6r7%r4r5
code:0000078E
code:0000078E MyBy_Div:                               ; CODE XREF: code_80+114p
code:0000078E                                         ; code_80+134p ...
code:0000078E                 cjne    R4, #0, code_79C
code:00000791                 cjne    R6, #0, code_7BD
code:00000794                 mov     A, R7
code:00000795                 mov     B, R5           ; B-Register
code:00000797                 div     AB
code:00000798                 mov     R7, A
code:00000799                 mov     R5, B           ; B-Register
code:0000079B                 ret
code:0000079C ; ---------------------------------------------------------------------------
code:0000079C
code:0000079C code_79C:                               ; CODE XREF: MyBy_Divj
code:0000079C                 clr     A
code:0000079D                 xch     A, R4
code:0000079E                 mov     R0, A
code:0000079F                 mov     B, #8           ; B-Register
code:000007A2
code:000007A2 code_7A2:                               ; CODE XREF: MyBy_Div:code_7B6j
code:000007A2                 mov     A, R7
code:000007A3                 add     A, R7
code:000007A4                 mov     R7, A
code:000007A5                 mov     A, R6
code:000007A6                 rlc     A
code:000007A7                 mov     R6, A
code:000007A8                 mov     A, R4
code:000007A9                 rlc     A
code:000007AA                 mov     R4, A
code:000007AB                 mov     A, R6
code:000007AC                 subb    A, R5
code:000007AD                 mov     A, R4
code:000007AE                 subb    A, R0
code:000007AF                 jc      code_7B6
code:000007B1                 mov     R4, A
code:000007B2                 mov     A, R6
code:000007B3                 subb    A, R5
code:000007B4                 mov     R6, A
code:000007B5                 inc     R7
code:000007B6
code:000007B6 code_7B6:                               ; CODE XREF: MyBy_Div+21j
code:000007B6                 djnz    B, code_7A2     ; B-Register
code:000007B9                 clr     A
code:000007BA                 xch     A, R6
code:000007BB                 mov     R5, A
code:000007BC                 ret
code:000007BD ; ---------------------------------------------------------------------------
code:000007BD
code:000007BD code_7BD:                               ; CODE XREF: MyBy_Div+3j
code:000007BD                 mov     A, R5
code:000007BE                 mov     R0, A
code:000007BF                 mov     B, A            ; B-Register
code:000007C1                 mov     A, R6
code:000007C2                 div     AB
code:000007C3                 jb      PSW.2, code_7E2 ; Program Status Word Register
code:000007C6                 mov     R6, A
code:000007C7                 mov     R5, B           ; B-Register
code:000007C9                 mov     B, #8           ; B-Register
code:000007CC
code:000007CC code_7CC:                               ; CODE XREF: MyBy_Div+49j
code:000007CC                                         ; MyBy_Div+51j
code:000007CC                 mov     A, R7
code:000007CD                 add     A, R7
code:000007CE                 mov     R7, A
code:000007CF                 mov     A, R5
code:000007D0                 rlc     A
code:000007D1                 mov     R5, A
code:000007D2                 jc      code_7DB
code:000007D4                 subb    A, R0
code:000007D5                 jnc     code_7DD
code:000007D7                 djnz    B, code_7CC     ; B-Register
code:000007DA                 ret
code:000007DB ; ---------------------------------------------------------------------------
code:000007DB
code:000007DB code_7DB:                               ; CODE XREF: MyBy_Div+44j
code:000007DB                 clr     C
code:000007DC                 subb    A, R0
code:000007DD
code:000007DD code_7DD:                               ; CODE XREF: MyBy_Div+47j
code:000007DD                 mov     R5, A
code:000007DE                 inc     R7
code:000007DF                 djnz    B, code_7CC     ; B-Register
code:000007E2
code:000007E2 code_7E2:                               ; CODE XREF: MyBy_Div+35j
code:000007E2                 ret
code:000007E2 ; End of function MyBy_Div
code:000007E2
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
31.07.2012, 06:46  [ТС]
Цитата Сообщение от Thread Посмотреть сообщение
В системе комманд микроконтроллера есть div?Надо бы уточнение от ТС.
Микроконтроллер MSP430. Нет там команды деления.
На счет использования языков высокого уровня - я же ясно написал, что задача у меня специфическая. Мне в существующую прошивку надо сделать вставку: подпрограмму, которая будет выполнять дополнительную функцию. Исходника всей программы у меня, естественно, нет.
А вот за совет про то, что надо написать деление на языке высокого уровня, скомпилировать, а затем дизассемблировать - это дело!
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,856
31.07.2012, 23:17
Цитата Сообщение от d7d1cd Посмотреть сообщение
Микроконтроллер MSP430. Нет там команды деления.
тогда вычитание как посоветовал
Thread,

Добавлено через 2 минуты
Цитата Сообщение от d7d1cd Посмотреть сообщение
На счет использования языков высокого уровня - я же ясно написал, что задача у меня специфическая. Мне в существующую прошивку надо сделать вставку: подпрограмму
извини не понял
есть двоичный файл и ты хочешь вбить свою функцию?
а как к ней обращаться?
с
Цитата Сообщение от d7d1cd Посмотреть сообщение
Микроконтроллер MSP430
посему вопросы могут быть и глупыми
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
01.08.2012, 07:03  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
извини не понял
есть двоичный файл и ты хочешь вбить свою функцию?
а как к ней обращаться?
Самый простой способ - адрес вектора прерывания установить на начало моей функции. Такая "вставка" мной уже реализована и прекрасно работает. Второй способ - "прыгнуть" с какого-либо места программы в мою функцию, выполнить ее и "прыгнуть" обратно.
Не надо, заранее не зная всей схемы, говорить о глупых вопросах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2012, 07:03
Помогаю со студенческими работами здесь

Используя одну операцию деления нацело и одну операция взятия остатка от деления найти цифру. соответствующую разряду ты
Дано целое число, большое 999. Используя одну операцию деления нацело и одну операция взятия остатка от деления найти цифру....

Операция деления
Привет, ребята, не могу понять в чём дел, ошибка скорее всего донельзя тупая. В общем, в файле лежат числа. 1 4 5 6 2 3 В функции...

Операция деления по модулю
Как работает оператор "%"? Пишу System.out.println((-22)%26); System.out.println((-93)%26); Должно...

Операция деления нацело
Дано целое число N(>0). Используя операции деления нацело и взятия остатка от деления, найти количество его нечётных цифр. Пожалуйста, не...

Операция деления по модулю %
Друзья, требуется коллективный разум. Дано: #include <stdio.h> int main(void) { int oper, operu, n; printf("Эта...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru