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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 1691
∙ повысить рейтинг »
_Ayl_
Статус: Студент
Рейтинг: 1438
∙ повысить рейтинг »
vladisslav
Статус: 5-й класс
Рейтинг: 1057
∙ повысить рейтинг »

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

Номер выпуска:1306
Дата выхода:13.01.2010, 23:30
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:440 / 70
Вопросов / ответов:1 / 3
IRC-канал по теме:#assembler

Вопрос № 175937: Здравствуйте, уважаемые эксперты! С прошедшими праздниками вас! Помогите пожалуйста решить следующую задачу: В слове установить крайний справа нулевой бит: например, двоичное число ...01010111 преобразуется в ...01011111, а число ...00001111 — в ч...



Вопрос № 175937:

Здравствуйте, уважаемые эксперты! С прошедшими праздниками вас! Помогите пожалуйста решить следующую задачу:
В слове установить крайний справа нулевой бит: например, двоичное число ...01010111 преобразуется в ...01011111, а число ...00001111 — в число ...00011111.
Нельзя использовать арифметические операции.
Программу надо написать на ассемблере для процессоров 80286 и 80586 версий (аналоги - программа DEBUG и TASM)

Отправлен: 08.01.2010, 23:01
Вопрос задал: Даниил Цветков, Студент
Всего ответов: 3
Страница вопроса »


Отвечает Airyashov, Студент :
Здравствуйте, Даниил Цветков.
Код:
model tiny
.data
bits dw 0FFh
.code
org 100h
start:
mov ax,bits ; исходное слово
mov dx,1 ; для проверки битов
@next:
test ax,dx ; проверка бита
jz @set_bit ; если 0, то установить
shl dx,1
jnz @next
jmp @exit
@set_bit:
or ax,dx ; установить бит
@exit:
retn
end start

Ответ отправил: Airyashov, Студент
Ответ отправлен: 09.01.2010, 11:15

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258497 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Лысков Игорь Витальевич, Модератор :
    Здравствуйте, Даниил Цветков.
    Альтернативный вариант для 386+
    Используем команду bsf, которая возвращает в первом операнде
    номер первого ненулевого бита второго операнда в памяти.

    Еще один вариант с использованием для установки бита команды bts

    Код:
    .model tiny,
    C
    .386
    .code
    .startup
    call SetBit,0f7fh
    call SetBit,0ffffh
    .exit 0

    SetBit proc w:word
    not w ;будем искать первую 1 (вместо 0)
    bsf cx, w ;в CX будет номер первой 1
    ; или не поменяется (для 0ffffh,
    ; для которого можно устанавливать любой бит)!!!
    not w ;вернем в исходное состояние
    mov ax, w ;исходное слово
    bts ax, cx ;установим найденный бит
    ret
    SetBit endp

    end

    Удач и!

    Приложение:

    -----
    Удачи!

    Ответ отправил: Лысков Игорь Витальевич, Модератор
    Ответ отправлен: 10.01.2010, 01:35
    Украина, Кировоград
    Тел.: +380957525051
    ICQ # 234137952
    Mail.ru-агент: igorlyskov@mail.ru
    Абонент Skype: igorlyskov

    Оценка ответа: 5
    Комментарий к оценке:
    спасибо большое

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258518 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Зенченко Константин Николаевич, Модератор :
    Здравствуйте, Даниил Цветков.

    Предлагаю ещё один вариант для х86.
    Удачи!

    Приложение:

    -----
    Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч

    Ответ отправил: Зенченко Константин Николаевич, Модератор
    Ответ отправлен: 11.01.2010, 14:05
    Украина, Киев
    Тел.: +38-097-953-66-19
    Адрес: Украина, Киев

    Оценка ответа: 5
    Комментарий к оценке:
    спасибо, оригинальное решение

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258550 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


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

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

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

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

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

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

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


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

    В избранное