Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2017, 10:23   #11
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

У тебя в задании:
Цитата:
Сообщение от dimwow Посмотреть сообщение
в результирующем значении поменять 7-ой разряд с 1-ым, 5-ый со 2-ым.
..маска этого условия будет (считай по-битам справа-налево):
Код:
10100110b = A6h
Есть ещё инструкция XOR. Почитай про неё, что она делает..
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 15.02.2017 в 10:25.
R71MT вне форума Ответить с цитированием
Старый 15.02.2017, 17:03   #12
dimwow
Пользователь
 
Регистрация: 26.09.2016
Сообщений: 17
По умолчанию

Хорошо, тогда так:
mov ah,b5
mov bh,37
and ah,bh
ror ah,7 (Нужно 7 разряд -> на 7 позиций вправо)
xor ah,ah (Остальные в нули)
rol ah,7 (1 разряд -> на 7 позиций влево)
xor ah,ah (Остальные разряды в нули)

Я точно знаю что написал бред! Например... я понятия не имею как подвинуть именно 7-ой разряд на 7 позиций вправо! Аналогично с 1-ым разрядом!
А потом нужно еще и сложить все 3 числа!
dimwow вне форума Ответить с цитированием
Старый 15.02.2017, 17:17   #13
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Можно конечно и складывать, и вообще замудрить с логикой,
но проще сразу проверять бит-1, и если он выставлен - выставлять его седьмым.
Чуть позже выложу самый/тупой вариант, чтоб было понятней..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 15.02.2017, 18:32   #14
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Помимо того, что AND лог.умножение, при помощи него можно сбрасывать нужные биты в числе. Для этого нужна т.н. 'бинарная маска', в которой указываешь, какие биты в числе хочешь сбросить. Например маска(10111011) сбросит биты 6 и 2.

Соответственно, чтобы не сбросить, а взвести определённые биты, нужно применить команду OR (лог.сложение). Только здесь маску нужно с'инвертировать. Взводим биты 5-4-3: 00111000. Обычно маски указывают в HEX-формате, но для наглядности я оставил в бине.

Вот сорец на Фасме.. Файл на выходе получился 71-байт.
Число для теста битов находится в AL, а биты меняются в AH.
С твоими числами B5h и 37h выходит глюк, т.к. произведение получается 35h, а в нём биты 7-1 и 5-2 имеют одинаковые значения: 35h = 00110101b.

Скачай FASM, собери им этот исходник в исполняемый файл, и прогони этот файл через свой DEBUG. Получишь состояния регистров, которые и покажешь преподу:
Код:
; FASM-code
; File size = 71 byte
;---------------------
org  100h
jmp  start

start:
     mov  al,0BAh            ; число в AL
     and  al,76h             ; умножаем его на второе
                             ; AL = произведение!
     clc                     ; сбросить флаг CF
     mov  ah,al              ; результат будет в AH

;== Меняем бит(1), с битом(7) =========================================
     test al,00000010b       ; проверить бит(1) в исходном числе!
     jz   @1                 ; пропустить, если он нуль
     or   ah,10000000b       ; значит 1. Взвести бит(7) в результате
     jmp  @10                ; продолжить..
@1:  and  ah,01111111b       ; бит(1) равен нуль. Сбросавыем бит(7)
@10: test al,10000000b       ; проверить бит(7) в исходном числе!
     jnz  @2                 ; пропустить, если единица
     and  ah,11111101b       ; значит нуль. Сбрасываем бит(1)
     jmp  @20                ; продолжить..
@2:  or   ah,00000010b       ; бит(7) равен 1. Взвести бит(1)

;== Меняем бит(2), с битом(5) =========================================
@20: test al,00000100b       ; Здесь тоже-самое!!!
     jz   @3                 ;
     or   ah,00100000b       ;
     jmp  @30                ;
@3:  and  ah,11011111b       ;
@30: test al,00100000b       ;
     jnz  @4                 ;
     and  ah,11111011b       ;
     jmp  @40                ;
@4:  or   ah,00000100b       ;

@40: shr  ax,8               ; сдвинуть AX на 8-бит вправо
                             ; AH = 0, AL = результат!

     xor   ax,ax             ; ждём клавишу..
     int   16h
     int   20h               ; на выход!
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 15.02.2017 в 23:57.
R71MT вне форума Ответить с цитированием
Старый 15.02.2017, 18:53   #15
dimwow
Пользователь
 
Регистрация: 26.09.2016
Сообщений: 17
По умолчанию

Попробую, спасибо
Может и прокатит!))
dimwow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
e = (a-c)2+2*a*c/k - Assembler vudg Помощь студентам 0 10.01.2013 11:03
Assembler+C Farrel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 09.04.2011 22:55
Assembler banano Фриланс 1 17.05.2010 15:44
assembler AJIUM Помощь студентам 20 18.03.2010 18:30