Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
1

Деление сдвигом

22.05.2014, 14:41. Показов 3097. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
нужно разделить 64 на 8
делаю так
Assembler
1
2
3
Mov Ax,64
MOV CX,3
SHR  AX,CX
Но, преподаватель говорит, что мол не так должно быть, и ставит неудволетворительно, подскажите пожалуйста, что здесь не так, надо ведь исправлятся. Так же имею , BCD числа 63 и 49 нужно их сложить. В итоге в ходе расчетов получаю 112 (0001 0001 0010) BCd формат и снова я оказался не прав, почему? Говорит мол не может быть полтора байта
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2014, 14:41
Ответы с готовыми решениями:

Умножение/деление со сдвигом
Помогите исправить код. Пожалуйста. Операции умножения и деления выполнять с помощью операций...

Деление и умножение сдвигом
Объясните пожалуйста как разделить 10 на 3 сдвигами

Деление знаковых чисел с выводом ошибки "Деление на ноль"
Собственно поставили передо мной задачу - написать прогу деления двух чисел, причем что бы...

Адресация памяти по базе со сдвигом
Необходимо составить свою фамилию, имя, отчество из массива данных, представляющего собой алфавит,...

10
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
22.05.2014, 16:04 2
Цитата Сообщение от Greens239 Посмотреть сообщение
Код ASM
Mov Ax,64
MOV CX,3
SHR *AX,CX
Я часто пользуюсь подобным и не парюсь. И не вижу, что тут может быть не так.


Цитата Сообщение от Greens239 Посмотреть сообщение
итоге в ходе расчетов получаю 112 (0001 0001 0010) BCd формат
Цитата Сообщение от Greens239 Посмотреть сообщение
Говорит мол не может быть полтора байта
Боюсь предположить, что нуб скорее всего преподаватель. Попробуйте ему показать 0000 0001 0001 0010. По правилам некоторых (возможно, даже большинства) ассемблеров, старшие биты с "0" писать необязательно.

Assembler
1
2
3
Add ax,1001b
;То же самое, что и 
Add ax,00001001b
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
22.05.2014, 16:09 3
cl, а не cx.
0
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
22.05.2014, 16:16  [ТС] 4
Somebody, А почему Cl?

Добавлено через 3 минуты
Somebody, Ну как бы я понимаю т.к операнд восьмиразрядный, но в CX тоже ведь работать будет
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
22.05.2014, 16:20 5
Из регистров вторым операндом инструкций сдвига может быть только cl - такая вот система команд.
1
1 / 1 / 1
Регистрация: 23.04.2014
Сообщений: 176
22.05.2014, 16:23  [ТС] 6
Somebody, Ага,тогда понятно, спасибо.
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
22.05.2014, 18:23 7
Greens239,
есть еще два варианта
  1. для процессора 8086
    Assembler
    1
    2
    3
    
    SHR AX,1
    SHR AX,1
    SHR AX,1
  2. для 80186 и младше
    Assembler
    1
    
    SHR AX,3
и если в АХ число со знаком -- тогда вместо SHR нужно использовать команду SAR
0
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
22.05.2014, 18:42 8
Цитата Сообщение от Mikl___ Посмотреть сообщение
для процессора 8086
Код ASM
1
2
3
SHR AX,1
SHR AX,1
SHR AX,1

А как тебе это?

Assembler
1
2
Mov cx,3
Rep shr ax,1
Добавлено через 11 минут
Или префикс REP бессилен?
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
22.05.2014, 19:09 9
Naydli,
rep/repe/repz/repne/repnz работают с ins, outs, movs, stos, cmps, scas но если я захочу 15 раз написать SHR AX,1 но мне почему-то лень, тогда я воспользуюсь макросом
Assembler
1
2
3
rept 15
SHR AX,1
endm
компилятор очень многое может сделать для облегчения труда программиста
0
217 / 53 / 4
Регистрация: 03.08.2013
Сообщений: 278
22.05.2014, 19:22 10
Цитата Сообщение от Mikl___ Посмотреть сообщение
но если я захочу 15 раз написать SHR AX,1
Если ты захочешь 15 раз написать это, то это займет около 30-ти байт памяти, про производительность тебе лучше знать. В разы меньше будет:

Assembler
1
2
3
4
Mov cx,15
@@:
Shr ax,1
loop @b
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
22.05.2014, 19:48 11
Naydli,
производительность у тебя как раз будет теряться на лишних сравнениях СХ с нулем, декременте СХ и переходе, при этом каждый раз будет сбрасываться конвейер и заполняться по новой, компактный код -- это совсем не значит скорость, скорее наоборот -- потеря скорости будь проще, используй SHR AX,15 или SHR AX,CL
0
22.05.2014, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2014, 19:48
Помогаю со студенческими работами здесь

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

Не могу разобраться с циклическим сдвигом влево RCL
model SMALL stack 100h dataseg MB db ...

Вставка заданного значения (0 или 1) в любой бит байта со сдвигом влево
Реализуйте с помощью логических операций вставку заданного значения (0 или 1) в любой бит байта со...

Ввести строку состоящую из нескольких слов. Вывести каждое слово лесенкой с сдвигом относительно предыдущего.
Ввести с клавиатуры строку состоящюу из нескольких слов. Вывести каждое слово лесенкой с...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru