|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - Помогите разобраться с задачей. |
|
|
Assm - Помогите разобраться с задачей.
|
Ветеран Сообщения: 876 |
Профиль | Отправить PM | Цитировать Всем привет, тема задания битовые операции. Программы реализуются как ассемблерные вставки в языке высшего уровня (С++).
Реализуйте с помощью логических операций вставку заданного значения (0 или 1) в любой бит байта со сдвигом вправо и потерей крайнего бита. Может кто делал подобные? Я понял задание так, ввести с клавиатуры значение бита и номер бита в который надо вписать значение. Если по моим представлениям делать задачу то получается большой код. Так же вызывает затруднение вывод на экран двоичного значения регистра. |
|
------- Отправлено: 21:55, 22-05-2011 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Gooch, задание понятно, всплывает с периодичностью в год. По расписанию лабораторных занятий.
Цитата Gooch:
Цитата Gooch:
Цитата Gooch:
Вообще желательно бы видеть рассуждения "вслух". |
|||
------- Отправлено: 22:03, 22-05-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
Цитата lxa85:
Далее я пробовал вывести значение переменной rez в HEX форме, но почему то выводит пустую ячейку и по-этому дальше пока ни чего не делал. Вообще думаю дальше сделать ввод переменной Y в котороя будет указывать на номер бита и в зависимости от значения Y делать сдвиг вправо. |
||
------- Последний раз редактировалось Gooch, 23-05-2011 в 14:42. Отправлено: 07:30, 23-05-2011 | #3 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Gooch:
---- А вот приведенный код не понятен. Занесли мы единицу в старший бит, и что? Кстати ввод единицы сделан не правильно. ЕМНИП в данном случае будет воспринята 10чная система. Чтобы указать, что 80 - это 16ричная система счисления, необходима дополнительная конструкция. 0x80, но все равно проверь в справочнике. Ну, занесли 1цу, потом передали регистр в rez, без модификаций. И ничего у нас не поменялось. ---- Да, конечно, дополнительная переменная, определяющая позицию просто необходима. ---- И надо будет тебе подумать, как разбить регистр на две неравные части. Т.е. подумать с логической разбивкой, экранированием и т.п. |
|
------- Отправлено: 08:19, 23-05-2011 | #4 |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
Цитата lxa85:
Цитата lxa85:
И всё таки почему у меня не выводит ни чего на экран когда я хочу попробывать посмотреть содержимое переменой? |
||||
------- Отправлено: 08:53, 23-05-2011 | #5 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Gooch:
Цитата Gooch:
Цитата Gooch:
|
|||
------- Отправлено: 09:39, 23-05-2011 | #6 |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
printf("Введите значение бита (0 или 1): \n"); scanf_s("%d",&x); printf("Ответ = %h\n",assembler(x)); Цитата lxa85:
И где может быть ошибка? |
||
------- Последний раз редактировалось Gooch, 23-05-2011 в 18:52. Отправлено: 12:29, 23-05-2011 | #7 |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать INT8 assembler(INT8 z, INT8 x) { INT8 rez=0; __asm { MOV cl,x //проверка Х на значение не 0 CMP cl,1 JNE bit prog: JMP end bit: MOV al,0 MOV cl,80H ADD al,cl MOV rez,al JMP prog end: } return rez; } если переходы убрать, то код выполняется верно |
------- Отправлено: 11:09, 24-05-2011 | #8 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Gooch:
Когда вводится число отличное от единицы (а не нуля), будет осуществлен переход. (cmp cl, 1) Дальнейшая ассемблерная вставка мне не ясна, поэтому оставляю ее на твое усмотрение. |
|
------- Отправлено: 19:26, 24-05-2011 | #9 |
Ветеран Сообщения: 876
|
Профиль | Отправить PM | Цитировать ок...передел
все равно не работает! Если я введу с клавиатуры ноль, то у меня все равно тупо выполняет дальше код, не делая перехода. По идеи же после ввода нуля он не должен выполнять дальнейшей код и rez должен остаться без значения? или я ошибаюсь? |
------- Отправлено: 19:44, 24-05-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - помогите с задачей! | max1331003 | Программирование и базы данных | 0 | 24-12-2010 18:58 | |
C/C++ - помогите с задачей по СИ!!! | feliks2009 | Программирование и базы данных | 4 | 16-11-2009 00:18 | |
Delphi - [решено] Помогите с задачей /Pascal/ | Habetdin | Программирование и базы данных | 23 | 11-11-2009 22:46 | |
C/C++ - [решено] Помогите с задачей! | FeuerEngel | Программирование и базы данных | 3 | 28-05-2009 09:58 | |
Delphi - [решено] Помогите с комбинаторной задачей! | ALI | Программирование и базы данных | 16 | 01-01-2009 14:10 |
|