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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2015, 16:21   #1
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию Задан байт. Представить его в обратном коде

Подскажите пожалуйста по сабжу. Как правильно сделать?
Как я понимаю должно получиться следующее если
00111101, то в bx должно попасть тоже самое число, а если
10111101, то в bx должно попасть 11000010 представленное в hex

Код:
.model small
.data
    a db 00111101b
.code
.486
mov ax, @data
mov ds, ax
mov ah, a
xor bx, bx
 
mov cx, 8 ; цикл 8 итераций т.к. 8 бит
lable:
    shl ah, 1    ; сдвиг одного разряда на флаг CF
    jc m1        ; если CF = 1 переход на m1
    ; <--- попадаем если CF = 0
    shl bx, 1 ; задвигаем в bx то что есть в CF
 
    m1:
    cmc ; инвертируем флаг CF
    loop lable
 
    mov ah, 4ch
    int 21h
end
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Старый 11.05.2015, 18:17   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

не совсем понятно, что эта фигня должна делать.

bx - всегда 0
а cmc ни на что не влияет

для того чтобы задвинуть CF на регистр нужно использовать RCL/RCR
Код:
lable:
    SHL ah, 1    ; сдвиг одного разряда на флаг CF
    RCR bl, 1 ; задвигаем в bl то что есть в CF
 
loop lable

Последний раз редактировалось f.hump; 11.05.2015 в 18:23.
f.hump вне форума Ответить с цитированием
Старый 11.05.2015, 18:59   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
если: 10111101, то в bx должно попасть 11000010 представленное в hex
в BX не вместится такое число, представленное в HEX. Нужен EBX..
..и вообще, условие задачи мутное. Может нужно представить его "в обратном виде"? Тогда есть варианты с ротацией или инверсией битов/тетрад.
ИМХО. Нужно определиться с условием задачи...
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 11.05.2015, 19:59   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
в BX не вместится такое число
с какого перепуга число, которое спокойно влазит в bl не вместится в bx?
f.hump вне форума Ответить с цитированием
Старый 11.05.2015, 20:59   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
с какого перепуга
ТС пихает число как HEX, а не как BIN
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 11.05.2015, 23:41   #6
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию

Извините что не всё точно описал.
Задание "Задан байт. Представить его в обратном коде". Дано именно в таком виде.
Перевод в обратный код производится следующим образом.
- Положительные числа остаются в исходном виде.
- В отрицательных числах инвертируются все биты кроме знакового.
Знак числа это старший бит (крайний слева). 1 - "-", 0 - "+".

Почему написал "представленные в hex". Т.к. результат будет отображен в отладчике tasm'a. TD - см. скриншот.
Изображения
Тип файла: jpg td.jpg (99.1 Кб, 128 просмотров)
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Старый 12.05.2015, 00:11   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Код:
.model small
.data
    a db 00111101b
.code
.486
mov ax, @data
mov ds, ax

XOR ax, ax
XOR bx, bx

MOV bl, a

SHL bl, 1
SBB al, 0
SHR bl, 1
XOR bl, al

 
    mov ah, 4ch
    int 21h
end
f.hump вне форума Ответить с цитированием
Старый 12.05.2015, 02:09   #8
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
Радость

f.hump, немного не понял как работает ваш код, но на отрицательных числах не верно срабатывает.

Благодаря данному обсуждению вроде дошел до решения. Надеюсь препода устроит этот вариант.
Если a = 10111101 = BDh, то b = 11000010 = C2h
Если a = 00111101 = 3Dh, то b = 00111101 = 3Dh

Код:
.model small
.data
    a db 10111101b
    b db ?
.code
.486
mov ax, @data
mov ds, ax
xor ax, ax
mov al, a
 
shl al, 1
jnc plus
jc minus
    
plus:
    rcr al, 1
    mov b, al
    call exit
    
minus:
    not al
    rcr al, 1
    mov b, al
    call exit
    
exit:
    mov ah, 4ch
    int 21h
end
Всем спасибо
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Старый 23.05.2015, 23:06   #9
spolyr
Пользователь
 
Регистрация: 30.03.2015
Сообщений: 17
По умолчанию

написано представить в обратном коде,случаем не
"not ax"
например
spolyr вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АЛУ вычитание чисел в обратном коде simonte Помощь студентам 2 08.12.2011 01:20
представить картинку в двоичном коде Dimarik Общие вопросы C/C++ 22 16.04.2011 22:52
Assembler (массив, разм-ю 9 байт, проверка наличия 3х единиц в коде эл-та) Exelence Помощь студентам 1 05.12.2010 20:05
Представить двоичные числа в обратном и дополнительном кодах Бубликова Помощь студентам 12 08.12.2008 21:17