Вопрос № 181030: Здравствуйте, уважаемые эксперты! Прошу Вас, помогите с такой задачей: ОБЩАЯ ФОРМУЛИРОВКА ЗАДАЧИ для вариантов 1-20. В заданой 16-битной двоичной последовательности выделены 4 группы бит - 3 группы по 5 бит и одна из 1-го бита. П...
Вопрос № 181035: Здравствуйте, уважаемые эксперты! Не могли бы Вы мне помочь составить программу сортировки элементов массива из 20 целых чисел, которая располагает четные числа больше 100 в одной, а меньше 100 в другой области памяти. Я только начала осваивать ...
Вопрос № 181030:
Здравствуйте, уважаемые эксперты! Прошу Вас, помогите с такой задачей:
ОБЩАЯ ФОРМУЛИРОВКА ЗАДАЧИ для вариантов 1-20. В заданой 16-битной двоичной последовательности выделены 4 группы бит - 3 группы по 5 бит и одна из 1-го бита. ПЕРЕСТАВИТЬ 5-битные группы в соответствии с заданным вариантом. Положение группы из 1-го бита задается вариантом и при перестановках 5-битных групп остается неизменным. В каждом варианте указан номер рисунка с распределением групп и требуемый порядок
групп после их перестаноки.
16 разрядная последовательность хххххххххххххххх ----- ***** ? ..... 1гр. 2гр. 4 3 гр. после перестановки: 3 2 1
Основная программа в паскале, обработка - в файле .obj. Процессор 286й. Переставлять группы надо в числе введенном с клавиатуры в десятичной форме. Заранее большое спасибо.
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 348444! Легко! Вот Вам программка на ассемблере. С программой на Паскале, полагаю, справитесь сами Программка несложная, думаю, разберетесь сами
Код:
; Подключение {$L chbits} { подключение файла chbits.obj } ; Описание function ChBits(:integer):integer;external; ; Вызов i:=ChBits(i); ; Функция меняет местами пять крайних бит :) .model large,pascal .code .286 public ChBits ChBits proc near n:word ;параметр - слово mov ax, n ;читаем слово mov cx, ax ;сохраняем в cx and cx, 000001111110
0000b ;оставляем неизменные биты and ax, 1111100000011111b ;биты, которые меняются xchg al, ah ;обмениваем al с ah shl ah, 3 ;подвигаем биты на край shr al, 3 ;и в этом байте тоже or ax, cx ;объединяем с неизменными битами ret ;результат в ax endp end
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 30.11.2010, 16:59
Номер ответа: 264445 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Комментарий к оценке: Всё очень понятно и наглядно, большое спасибо!
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264445
на номер 1151 (Россия) |
Еще номера »
Вопрос № 181035:
Здравствуйте, уважаемые эксперты! Не могли бы Вы мне помочь составить программу сортировки элементов массива из 20 целых чисел, которая располагает четные числа больше 100 в одной, а меньше 100 в другой области памяти. Я только начала осваивать ассемблер, и пока не очень получается...((( Заранее спасибо)
Отправлен: 30.11.2010, 03:04
Вопрос задал: Regina (Посетитель)
Всего ответов: 1 Страница вопроса »
Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Regina! Я подправил Вашу программу. Сравните со своей. Полагаю, сами поймете суть изменений... Удачи в освоении Ассемблера!
Код:
;сортировка массива
DATA SEGMENT ; Открыть сегмент данных MAS DW 6, 102, 12, 150, 46, -78, 150, 200, -4, 76, 89, 287, -190, 27, 85, -3, 9, 15, 156, -96 ; Определить массив из 20 чисел MasMax DW 20 dup(?) MasMin DW 20 dup(?) DATA ENDS ; Закрыть сегмент данных
STK SEGMENT ; Открыть сегмент стека DW 100 DUP (?) ; Определить стек длиной 100 слов (а не байт!!!) STK ENDS
; Закрыть сегмент стека
CODE SEGMENT ; открыть сегмент кода START: MOV AX, DATA ; инициализировать MOV DS, AX ; сегментный регистр DS MOV CX, 20 ; Задать счетчик для цикла lea si, MAS ; Задать адрес массива MAS lea di, MasMax ; адрес массива MasMax lea bx, MasMin ; адрес массива MasMin
MET1: ; цикл по всем словам lodsw ; читаем слово ax = ds:[si], si=si+2
test ax, 1 ; признаком четности является младший бит! jnz next ; = 1 - нечет - обходим cmp ax, 100 ; четные числа сравниваем с 100 jg SetMax ; если > 100, то пишем в массив MasMax mov [bx], ax ; если <= 100, то пишем в массив MasMin inc bx ; на следующий адрес inc bx jmp next ; на следующее слово SetMax: mov [di], ax ; пишем в MasMax inc di ; на следующий адрес inc di next:
loop MET1 ; dec cx, переход на MET1, если cx не 0
mov ax,4c00h ;стандартный выход int 21h
CODE ENDS ; закрыть сегмент кода END START
----- Люби своего ближнего, как самого себя
Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 30.11.2010, 14:34
Номер ответа: 264442 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Комментарий к оценке: Спасибо Вам огромное, Вы мне очень помогли!)))
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 264442
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.