Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Boriss
Статус: Академик
Рейтинг: 2552
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2061
∙ повысить рейтинг »
vladisslav
Статус: 8-й класс
Рейтинг: 1330
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1392
Дата выхода:05.12.2010, 06:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:223 / 66
Вопросов / ответов:2 / 2

Вопрос № 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й.
Переставлять группы надо в числе введенном с клавиатуры в десятичной форме.
Заранее большое спасибо.

Отправлен: 29.11.2010, 22:25
Вопрос задал: Посетитель - 348444 (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Посетитель - 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 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Вопрос № 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 ; Закрыть сегмент стека

    ASSUME DS:DATA, CS:CODE, SS:STK ; Задать соответствия сегментов

    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 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.24 от 30.11.2010

    В избранное