Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > в байте поменять местами биты


Автор: DrWeb 12.1.2009, 19:30
Подзадачка: в байте поменять первые и последние 4 бита местами
как это реализовать программно?

Просто я шарю ток в php и C++,а асм изучаю из-за нужды в сдаче экзамена smile  Поэтому пожалуйста помогите с задачкой - сам без понятия как это делать smile 

И еще вопросик: 
MOV cx, [BX + SX -2340] 
ADC ABC [BX+SI-35]
CMP PTR [BX+SI-13]
CMP DX,WORD PTR TVP[AD+DI+23h]
- что тут происходит в этих командах?

Помогите плиз

Автор: Akina 12.1.2009, 21:43
Код

mov al, somebyte ; байт суём в AL
xor ah, ah ; подготовка
shl ax, 4 ; сдвиг на 4 бита
or al, ah ; в AL требуемый результат

Автор: Mikl_ 13.1.2009, 12:11
DrWeb, как поменять -- зеркально?
для обмена байтами в слове xchg al,ah (bl,bh или cl,ch или dl,dh)
для обмена байтов в 32-разрядном регистре bswp 
Код
mov eax,87654321h
bswap eax;eax=21436587h
Использование BSWAP с 16-разрядными регистрами дает неожиданные результаты
Код
mov eax,0AB120000h
bswap ax;eax = 0AB1212ABh
а твоя задача решается скорее так
Код
mov al,10101111b
ror al,4;al=11111010b можно и команду rol al,4 с тем же результатом


Автор: DrWeb 13.1.2009, 12:58
Akina, Mikl_, спасибо
а вот к этим командам можете комменты поставить?
Код

MOV cx, [BX + SX -2340] 
ADC ABC [BX+SI-35]
CMP PTR [BX+SI-13]
CMP DX,WORD PTR TVP[AD+DI+23h]


а старший и младший байты это как?а полубайты?

Автор: Akina 13.1.2009, 14:04
Цитата(DrWeb @  13.1.2009,  13:58 Найти цитируемый пост)
а вот к этим командам можете комменты поставить?

Запросто! Ко всем коммент один и тот же: Syntax Error.

Автор: DrWeb 13.1.2009, 14:21
 smile ну мне такие вопросы скинули
Код

MOV cx, ptr [BX + SX -2340] 
ADC ABC, ptr [BX+SI-35]
CMP DX,WORD PTR [BX+DI+23h]

а так?

я так понимаю,что BX это базовый регистр, si - сегментный, а 2340 - это смещение?а разве можно писать -2340?

Автор: Mikl_ 14.1.2009, 04:41
DrWeb, 
MOV cx, ptr [BX + SX -2340] <-- две ошибки 1) SX - нет такого регистра, вероятно имеется в виду SI? 
2) ptr без указания размерности не ставится, должно быть WORD PTR но в данном случае указан регистр CX так что WORD PTR здесь избыточен
ADC ABC, ptr [BX+SI-35] <-- нельзя складывать память + память, можно пмять+регистр, регистр+регистр, память+число, регистр+число 
CMP DX,WORD PTR [BX+DI+23h] <-- в принципе допустимая инструкция, но без WORD PTR можно было обойтись
Цитата(DrWeb)
разве можно писать -2340
можно -- просто код будет заменен на MOV CX,[BX+SI+0F6DCh] 
так как -2340=0FFFFF6DCh
Либо ты совсем не открывал учебник, а учебники читать нужно читать вдумчиво и очень внимательно либо преподаватель проверяет вас на знание синтаксиса  smile 
Цитата
а старший и младший байты это как?а полубайты?
 ну точно в учебник не смотрел -- иди учи матчасть, не позорься smile 
старший байт младший байт
                   |               |
                  \|/             \|/
AX  =        AH      |    AL
старший полубайт младший полубайт
                       |                 |
                      \|/               \|/
AL = 85h=   1000   .   0101b

Автор: DrWeb 14.1.2009, 13:17
Mikl_, спасибо за инфо.я сам вспомнил про все эти полубайты на экзамене и написал его.теперь буду в разделе красная книга вопросы задавать smile следующий экзамен по прологу и лиспу:-!
нет шоб преподавать нормальные языки: с++ и php - нет блин.фигню всякую преподают:(

Автор: Mikl_ 14.1.2009, 13:40
DrWeb, нельзя всю жизнь читать одну и туже книгу, даже если это книга "Библия". Учи больше разных языков -- в каждом своя прелесть, тогда и на С/С++/C# и на php посмотришь другими глазами  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)