С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Mogost
7 / 6 / 6
Регистрация: 07.04.2012
Сообщений: 51

Как изменить два старших байта

11.09.2012, 17:55. Показов 2572. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите исправить ошибку.
Задание: long int a=11223344; int b=5566;
Получить long int a=55116633; int b=2244;

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
long int a=0x11223344;
int b=0x5566;
 
_asm{
    MOV EAX, a;
    MOV EBX, b;
    mov bx, word ptr[a+1];
    mov bl, byte ptr[a];
    mov ah, byte ptr[b];
    mov al, byte ptr[a+1];
 
    mov a, EAX;
    mov b, EBX;
    }
Не получается изменить 2 старших байта a.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2012, 17:55
Ответы с готовыми решениями:

Как сложить два байта регистра AX
Ребята подскажите, как сложить два байта регистра AX? Если я правильно понимаю, то после сложения должна появиться строчка: ADD AH, AL . Я...

Поменять местами 4 старших байта и 4 младших в числе double (указатели)
Задача следующая: дано число типа double. С помощью указателей поменять местами 4 первых и 4 последний байта в этом числе не переводя его...

Сдвинуть биты в каждом байте циклически на число, содержащееся в двух старших битах байта
Сдвинуть биты в каждом байте циклически на число, содержащееся в двух старших битах байта.

3
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
11.09.2012, 18:36
XCHG, BSWAP и сдвиги в помощь.
0
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
12.09.2012, 07:43
long int a=11223344; int b=5566;
long int a=55116633; int b=2244;
Если представить a и b как массив байтов - получится так
Code
1
ab=44,33,22,11,66,55
Теперь задача сводится к тому, чтобы получить новый массив из элементов с индексами 1,4,3,5,0,2. Для этого очень удобно использовать инструкцию pshufb.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
format PE GUI 4.0
include 'win32ax.inc'
entry $
 
cinvoke wsprintfW,buf,fmt,[a],[b] ;Переводим числа в 16-ричную систему
invoke  MessageBoxW,0,buf,0,0     ;Вывод на экран
 
movq   mm0,qword[a] ;mm0 = 556611223344
movq   mm1,qword[swap]
pshufb mm0,mm1      ;mm0 = 224455116633
movq   qword[a],mm0
emms
 
cinvoke wsprintfW,buf,fmt,[a],[b] ;Переводим числа в 16-ричную систему
invoke  MessageBoxW,0,buf,0,0     ;Вывод на экран
invoke  ExitProcess,0
 
a    dd 11223344h
b    dd 5566h
swap db 1,4,3,5,0,2,6,6
fmt  du '%x%x',0
buf  rw 13
 
align 16
data import
  library kernel32,'kernel32.dll',\
      user32,'user32.dll'
 
  import kernel32,\
     ExitProcess,'ExitProcess'
 
  import user32,\
     wsprintfW,'wsprintfW',\
     MessageBoxW,'MessageBoxW'
end data
0
539 / 399 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
12.09.2012, 10:57
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 long int a=0x11223344;
int b=0x5566;
  _asm{
    mov  ah,Byte Ptr b+1 //55
    mov  al,Byte Ptr a+3 //11
    shl  eax,16           //eax=55110000
    mov  ah,Byte Ptr b   //66
    mov  al,Byte Ptr a+1 //11
    xor  ebx,ebx
    mov  bh,Byte Ptr a+2 //22
    mov  bl,Byte Ptr a   //44
    mov  Dword Ptr a,eax //55116633
    mov  Dword Ptr b,ebx //00002244
  end;}
Нужно учесть, что в памяти старший байт числа имеет больший адрес. Все..
А murderer круто, особенно pshufb mm0,mm1 и library kernel32,'kernel32.dll',\
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2012, 10:57
Помогаю со студенческими работами здесь

Извлечь из байта четыре старших и четыре младших бита?
Как извлечь из байта четыре старших и четыре младших бита? На Си это выглядит вот так: lo=(c&0x0f); hi=(c>>4)&0x0f; Я...

Как изменить значение определённого байта в файле?
Как изменить значение определённого байта в файле через Делфи? Спасибо! П.С. Это для снятия индекса с фокспрошной таблицы.

Считать два байта как число с плавающей точкой.
Как можно считать два байта из файла как число с плавающей точкой? Если читать напрямую single или real, возвращает число в -43 степени,...

Задана запись с вариантами, имеющая два поля длиной два байта (Integer) каждое. Получить их значения побайтно
Задана запись с вариантами, имеющая два поля длиной два байта (тип Integer) каждое. Получить значения каждого из четырех байт (тип Byte),...

Сжатие длинного пароля или как запихнуть два байта в один, перейда от hexadecimal к полному алфавиту
Надеюсь,что мой пост не будет выглядеть как бред, и что задаю свой вопрос в правильном разделе(тем более профильного раздела для темы не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru