Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 26.09.2014
Сообщений: 51

Обмен битов местами по схеме 1->2->3->14->1

04.10.2014, 00:34. Показов 1313. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, хотелось бы разобраться как сделать так, чтобы пользователь ввёл строку с чётным числом символов, а программа группировала символы и рассматривала эти пары как слова по 16 бит, но самое важное что пока не выходит сделать - поменять биты местами местами, например, по схеме 1->2->3->14->1, т.е. первый бит переходит на второе место, второй на третье и т.д. Просто есть шаблон, который меняет первый и последний бит, но обмен битов происходит циклически в каждом байте, хотелось бы это изменить по схеме сверху. (Биты нумеруются от младшего к старшему, от 0 до 15 )


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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
.model small
       ASSUME CS:kod, DS:dannyje, SS:stek
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
stek segment word stack 'STACK'
       dw 400h dup (00)               ; stek -> 2 Kb
stek ends
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dannyje segment para public 'DATA'
   
    soobshenije1:
       db 'Vvedi tekst do 80 simvolov'
 
    novajaStroka:   
       db 0Dh, 0Ah, '$'  ; tekst na ekrane
       
    buferVvoda:
       db 81, 00, 83 dup (0)  ; do 80 simvolov bez CR  
       
dannyje ends
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
LOCALS  @@
 
kod segment para public 'CODE'
    pecahtatjDvKodBajta proc near
       ; Sohranyajem ispolzujemyje registry v stek
       push        dx
       push        ax
       push        cx
       push        bx 
       ; CX - budet cikl po vsem 8 bitam bajta
       mov         cx, 0008
       mov dh,     al                                   ; sohranyajem al
       mov bl,     10000000b                            ; bl - v maske (filtre) dlia otbora nuzhnogo bita
 
       @@cikl_po_cx_ot_8:
       mov dl,     dh
       and dl,     bl                                   ; v registre dl teperj ostalsa odin interesujushij nas znachimyj bit
       dec cl                                           ; podgotavlivajem cl dlya drugoj operacii
       shr dl,     cl                                   ; interesujushij nas  dl  bit v registre stal mladshim
       shr bl,     1                                    ; maenyajem, chtoby sled raz on vybral drugoj bit iz bl
       inc cl                                           ; vosstanavlivajem cl  
       add dl,     '0'                                  ; teperj dl budet  '0' ili '1' -  ascii kody 0 ili 1
       mov ah,     02                                   ; ispolzujem vtoruju funkciju -  pechatj simvola na ekrane
       int 21h                                          ; funkcija DOS  
       loop  @@cikl_po_cx_ot_8                    ; povtoryajem poka CX>0
       
       ; Vosstanavlivajem registry:
       pop bx
       pop cx
       pop ax
       pop dx                
       ret
    pecahtatjDvKodBajta endp
;--------------------------------------------------------    
    pechatatjOtstup proc near
       ; Procedura pechatajet otstup
 
       push        dx
       push        ax
       mov dl,     ' '                                 ; dl <- prosto otstup
       mov ah,     02                                  ; vtoraja funkcija DOS
       int 21h
       pop ax
       pop dx                
       ret
    pechatatjOtstup endp
;-------------------------------------------------------
 
    nachalo:
 
       mov ax,     seg dannyje                   ; "zapuskajem" segment dannyh
       mov ds,     ax
       
       mov ah,     09                             ; nomer funkcii pechati
       mov dx,     offset soobshenije1             ; adres vyvodimogo teksta
       int 21h
 
       mov ah,     0Ah                            ; ifunkcija vvoda
       mov dx,     offset buferVvoda         ; bufer
       int 21h       
 
       mov ah,     09                             ; nomer funkcii pechati
       mov dx,     offset novajaStroka             ; adres vyvodimogo teksta
       int 21h
 
       ; Pechatajem dvoichnyje kody vvedennoj stroki:
     
       xor cx,     cx                              ; CX <- 0 
       mov cl,     byte ptr[buferVvoda + 1]   ; CX <- skolko bajtov, t.k. razmer bufera < 255   -> pomestitsa v CL
       mov bx,     2                               ; BX - sdvig ot nachala bufera vvoda, pervyj znachimyj bajt vtoroj
       
       @@cikl1_po_cx_ot_chisla_bajtov:     ; cikl po vvedennomu chislu bajtov (bez CR)
      
       mov al,     byte ptr[buferVvoda + bx]  ; "zapuskajem" vhodyashij bajt v AL
       call pecahtatjDvKodBajta                   ; pechatajem jego dvoichnyj kod
       call pechatatjOtstup                         ; otstup 
       
       ; Menyajem pervyj i poslednij bity (po zadaniju):
       mov ah,     al                              ; AH budem ispolzovatj dlia starshego bita
       mov dl,     al                              ; DL - dlia mladshego  
       and ah,     10000000b                       ; ostavlyajem tolko starshij bit
       and al,     11111110b                       ; obnuliajem mladshij bit AL 
       rol ah,     1                               ; ciklicheski smeshajem vlevo AH bajt: starshij bit stanet mladshim
       or  al,     ah                              ; pribavlyajem k  mladshemu bitu iz AL mladshij bit iz AH 
       and dl,     00000001b                       ; sotavlyajem tolko mladshij bit iz DL
       and al,     01111111b                       ; obnuliajem mladshij bit AL   
       ror dl,     1                               ; ciklicheski smeshyajem vpravo DL bajt: mladshij bit stanet starshim
       or  al,     dl                              ; pribavlyajem k starshemu bitu iz AL stasrhij bit iz DL
       mov byte ptr[buferVvoda + bx], al     ; sohranyajem izmennenyj AL v bufer
  
       inc bx                                     ; BX stanet pokazyvatj na drugoj bajt
  
      
 
       loop @@cikl1_po_cx_ot_chisla_bajtov   ; poka CX > 0
  
       mov ah,     09                             ; nomer funkcii pechati
       mov dx,     offset novajaStroka             ; adres vyvodimogo teksta
       int 21h
  
 
       ; Jeshio dolzhny otpechatatj izmenennuju stroku:
       ; kod pohozhij kak i v pervom sluchaje:
       xor cx,     cx
       mov cl,     byte ptr[buferVvoda + 1]   ; kiek baitu   
       mov bx,     2
 
     
       @@cikl2_po_cx_ot_chisla_bajtov:
      
       mov al,     byte ptr[buferVvoda + bx]
       call pecahtatjDvKodBajta   
       call pechatatjOtstup
    
       inc bx
 
       loop @@cikl2_po_cx_ot_chisla_bajtov
 
 
       ; Zavershajem programmu
       mov ah,     4ch                            ; nomer funkcii zavershenija
       int 21h
       
       mov ah, '?'
kod  ends
    end nachalo
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.10.2014, 00:34
Ответы с готовыми решениями:

Произвести в двоичном представлении числа обмен битов с заданными номерами
Дано короткое целое неотрицательное число. Произвести в его двоичном представлении обмен битов с номерами 0 и 1, 2 и 3, 4 и 5 и т.д. ...

Обмен между пятью файлами по кольцевой схеме
Заданы файлы f1, f2, f3, f4, f5, компонентами которых являются действительные числа. Организовать обмен компонентов между файлами в...

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

3
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
04.10.2014, 20:35
Цитата Сообщение от Mathematiker Посмотреть сообщение
например, по схеме 1->2->3->14->1, т.е. первый бит переходит на второе место, второй на третье и т.д
уточните схему,а то не понятно как-то 3->14 а пишите первый бит переходит на второе место, второй на третье и т.д.
0
1 / 1 / 1
Регистрация: 26.09.2014
Сообщений: 51
05.10.2014, 00:09  [ТС]
Вводится строка символов, затем она переводится в двоичный код, эта строчка распечатывается, затем во второй строке, которая также распечатывается переставляются биты, т.е. значение первого бита переходит во второй, второй бит приобретает значение первого, а старое значение второго бита переходит в третий бит, затем старое значение третьего переходит в четвёртый и т.д., заканчивается тем, что первый бит получает старое значение 14.

Вроде так, если не напутал, только начал всё изучать, просто никак не разберусь с масками и какие биты надо обнулить, сместить, чтобы проделать всё по схеме)
0
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
05.10.2014, 02:36
один из вариантов.
долго не думал и даже не проверил.работает ли?

Assembler
1
2
3
4
5
6
7
mov ax,word ptr [sym] ;взять 2 символа
mov bx,ax       ;сделать копию
rol bx,2        ;13 бит старший ,0 бит 14-ый
rol ax,1        ;14 бит старший ,0 бит 15-ый
shld ax,bx,15       ;в AX вдвигать 15 бит из BX 
and bx,1        ;оставить только 0 бит без изменения остальные сбросить
or  ax,bx       ;вставить в результат
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.10.2014, 02:36
Помогаю со студенческими работами здесь

Поменять местами все соседние группы из двух битов в заданом беззнаковом длинном числе
Задача. Испольхуя только битовые операции, написать программу, которая меняет местами все соседние групы с 2х битов в заданом беззнаковом...

Обмен цифр местами
Есть двухзначное число цифры которого отличны от единицы. Сформировать новое число цифры в котором поменялись местами.

Обмен элементов массива местами
package Package; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* * Main...

Переставить местами элементы массива по заданной схеме
2.Дан массив из 18 вещественных чисел. Преобразовать его следующим образом: а1,а18,а2,а17,а3,а16,а4,а15...

Из двух целых чисел А и B собрать одно, состоящее из четных битов A и нечетных битов B...
Нужна помощь с задачей. Из двух целых чисел А и B собрать одно, состоящее из четных битов A и нечетных битов B


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru