purebasic.info

PureBasic forum
Текущее время: Сб сен 22, 2018 10:42 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: OCT8
СообщениеДобавлено: Чт дек 28, 2017 7:12 am 
Не в сети
профессор

Зарегистрирован: Пн июл 22, 2013 11:00 pm
Сообщений: 571
Благодарил (а): 2 раз.
Поблагодарили: 32 раз.
Пункты репутации: 9
Написал процедурку, выводит восьмиричное значение из данных памяти(8байт),в строку utf16
PS:Заменив к примеру !mov ax,63 на 31 и строковый буфер можно не 8 а 4 байта смотреть и т.д. :roll:
Код:
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
 
 
Procedure$ OCT8(*s,sst$="                      ")
 ;Автор (с) Сергейчик
 !push esi
  !push edi
  !mov dword edi,[p.v_sst$+8]
  !mov dword esi,[p.p_s+8]
  !mov ax,63
  ;;;;;;;;;;;;;
  !BT word[esi],ax;проверка 63 бита
  !Jnc mbs2;Переход, если бит равен 0
  ;;есле бит 1 то начинаем запись в строку
  !mov word[edi],31h
  !add dword edi,2
  !JMP ddfh5
  ;;;;;;;;;;;;;смотрим что бы не писать переднии нули
  !mbs2:;(смотрим по 3 бита от старшего к младшиму)
   !dec ax
   !BT word[esi],ax
   !Jc ms14;Переход, если 1бит = 1
   ;
   !dec ax
   !BT word[esi],ax
   !Jc ms15;Переход, если 2бит = 1
   ;
   !dec ax
   !BT word[esi],ax
   !Jc ms17;Переход, если 3бит = 1
   ;
   ;;есле три бита=0,смотрим следующии 3 бита
   !cmp word ax,0
   !jnz mbs2
   ;;==========Все 63 бита=0,выводим 0
   !MOV dword [edi],30h
   !add dword edi,2
   !jmp dgdg
  ;;;;;;;;;;;;;;
  !ddfh5:
  !dec ax
   !BT word[esi],ax
   !Jc ms14;Переход, если бит равен 1
   ;
   !dec ax
   !BT word[esi],ax
   !Jc ms15
   ;
   !dec ax
   !BT word[esi],ax
   !Jc ms17
   ;
   !mov word[edi],30h
   !jmp wwwds
   ;
   !ms14:
  !dec ax
   !BT word[esi],ax
   !Jc ms16
   ;
   !dec ax
   !BT word[esi],ax
   !Jc ms18
   ;
   !mov word[edi],34h
   !jmp wwwds
   !ms15:
  !dec ax
   !BT word[esi],ax
   !Jc ms19
   !mov word[edi],32h
   !jmp wwwds
   ;
   !ms16:
  !dec ax
   !BT word[esi],ax
   !Jc ms20
   !mov word[edi],36h
   !jmp wwwds
   ;
   !ms17:
  !mov word [edi],31h
   !jmp wwwds
   ;
   !ms18:
  !mov word[edi],35h
   !jmp wwwds
   ;
   !ms19:
  !mov word[edi],33h
   !jmp wwwds
   !ms20:
  !mov word[edi],37h
   !wwwds:
  ;
   !add dword edi,2;прибавим индекс для символа utf_16
   !CMP word ax,0
   !jnz ddfh5
   !dgdg:
  !mov word[edi],0h
   !pop edi
   !pop esi
   ;
   ProcedureReturn sst$
 EndProcedure
 
 Global r.q=7512369505078784
 Debug OCT8(@r)
 



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB