Вывод из выделенного буфера данных

Статус
В этой теме нельзя размещать новые ответы.

Hardov

Новичок
Автор темы
23
1
Доброй ночи.

Привожу пример, стоит задача вывести одновременно более 38 локальных переменных одновременно.

Как, в данном случае, прочитать и вывести с нулевого и первого ID ячеек значения, чтобы это было такого вида: Writed 1337 228.

Повторюсь, в моем случае надо будет выводить более 38 ячеек буфера одновременно.
Спасибо за помощь.

Код:
{$CLEO}
0AC8: 0@ = allocate_memory_size 512
0C11: memset destination 0@ value 0x0 size 512
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}1 {Число}1337 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}0 {Указатель на Buffer}0@ {Тип функции}0 {Число}0 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}1 {Указатель на Buffer}0@ {Тип функции}1 {Число}228 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID Ячейки}1 {Указатель на Buffer}0@ {Тип функции}0 {Число}0 || {Result}1@ |
0AD1: show_formatted_text_highpriority "Writed: %d" time 5000 {Result}1@
0AC9: free_allocated_memory 0@
0A93:

:CallBuffer
// 0@ - ID Ячейки.
// 1@ - Указатель на Buffer .
// 2@ - Тип функции {1 - Write, Other - Read}.
// 3@ - Число для записи.
0012: 0@ *= 4 // Получаем смещение на указанную ячейку.
005A: 0@ += 1@ // Получаем указатель на ячейку.
IF 0039:   2@ == 1 // Проверяем тип вызова.
THEN 0A8C: write_memory 0@ size 4 value 3@ virtual_protect TRUE // Запись данных в ячейку.
ELSE 0A8D: 25@ = read_memory 0@ size 4 virtual_protect TRUE // Считывание данных.
END
0AB2: RET_ 1 {Result}25@

С уважением, Hardov.
 

Hardov

Новичок
Автор темы
23
1
циклом for пройдись

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

Код:
{$CLEO}
var
8@: int = 0
end

0AC8: 0@ = allocate_memory_size 512
0C11: memset destination 0@ value 0x0 size 512
0AB1: call_scm_func @CallBuffer Params 4 | {ID ß÷åéêè}0 {Óêàçàòåëü íà Buffer}0@ {Òèï ôóíêöèè}1 {×èñëî}1337 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID ß÷åéêè}0 {Óêàçàòåëü íà Buffer}0@ {Òèï ôóíêöèè}0 {×èñëî}0 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID ß÷åéêè}1 {Óêàçàòåëü íà Buffer}0@ {Òèï ôóíêöèè}1 {×èñëî}228 || {Result}1@ |
0AB1: call_scm_func @CallBuffer Params 4 | {ID ß÷åéêè}1 {Óêàçàòåëü íà Buffer}0@ {Òèï ôóíêöèè}0 {×èñëî}0 || {Result}1@ |

FOR 8@ = 0 to 2 step 1
0AB1: call_scm_func @CallBuffer Params 4 | {ID ß÷åéêè}8@ {Óêàçàòåëü íà Buffer}0@ {Òèï ôóíêöèè}0 {×èñëî}0 || {Result}1@ |
0AD1: show_formatted_text_highpriority "Writed: %d" time 5000 {Result}1@ 
wait 6000
end

0AC9: free_allocated_memory 0@
0A93:

:CallBuffer
// 0@ - ID ß÷åéêè.
// 1@ - Óêàçàòåëü íà Buffer .
// 2@ - Òèï ôóíêöèè {1 - Write, Other - Read}.
// 3@ - ×èñëî äëÿ çàïèñè.
0012: 0@ *= 4 // Ïîëó÷àåì ñìåùåíèå íà óêàçàííóþ ÿ÷åéêó.
005A: 0@ += 1@ // Ïîëó÷àåì óêàçàòåëü íà ÿ÷åéêó.
IF 0039:   2@ == 1 // Ïðîâåðÿåì òèï âûçîâà.
THEN 0A8C: write_memory 0@ size 4 value 3@ virtual_protect TRUE // Çàïèñü äàííûõ â ÿ÷åéêó.
ELSE 0A8D: 25@ = read_memory 0@ size 4 virtual_protect TRUE // Ñ÷èòûâàíèå äàííûõ.
END
0AB2: RET_ 1 {Result}25@
 

hnnssy

Известный
Друг
2,684
2,748
ну дак убери wait с цикла и выведет одновременно
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Можешь попробовать использовать функцию strcat(https://sannybuilder.com/forums/viewtopic.php?pid=8530#p8530):
CLEO:
:strcat
// call @strcat 2 dest 0@ src 1@
0AA5: call 0x8265A0 num_params 2 pop 2 1@ 0@
0AB2: ret 0

Переводишь число к виду строки(0AD3, к примеру) и вызываешь strcat 0@ 1@: 0@ - буфер, который хранит сообщение; 1@ - число в виде строки.
Типа вроде:
CLEO:
0AC8: 0@ = 128

0AC8: 1@ = 24
0AD3: 1@ = " %d" 1337
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337"

0AD3: 1@ = " %d" 12
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12"

0AD3: 1@ = " %d" 24
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12 24"
0AC9: 1@

0AC9: 0@
 
  • Нравится
Реакции: Hardov

Hardov

Новичок
Автор темы
23
1
Можешь попробовать использовать функцию strcat(https://sannybuilder.com/forums/viewtopic.php?pid=8530#p8530):
CLEO:
:strcat
// call @strcat 2 dest 0@ src 1@
0AA5: call 0x8265A0 num_params 2 pop 2 1@ 0@
0AB2: ret 0

Переводишь число к виду строки(0AD3, к примеру) и вызываешь strcat 0@ 1@: 0@ - буфер, который хранит сообщение; 1@ - число в виде строки.
Типа вроде:
CLEO:
0AC8: 0@ = 128

0AC8: 1@ = 24
0AD3: 1@ = " %d" 1337
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337"

0AD3: 1@ = " %d" 12
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12"

0AD3: 1@ = " %d" 24
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12 24"
0AC9: 1@

0AC9: 0@


Запилил для теста, а оно крашит.

Код:
{$CLEO}
0AC8: 0@ = 128

0AC8: 1@ = 24
0AD3: 1@ = " %d" 1337
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337"
0AD3: 1@ = " %d" 12
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12"
0AD3: 1@ = " %d" 24
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12 24"
0AC9: 1@
0AC9: 0@


:strcat
// call @strcat 2 dest 0@ src 1@
0AA5: call 0x8265A0 num_params 2 pop 2 1@ 0@
0AB2: ret 0
 

hnnssy

Известный
Друг
2,684
2,748
Запилил для теста, а оно крашит.

Код:
{$CLEO}
0AC8: 0@ = 128

0AC8: 1@ = 24
0AD3: 1@ = " %d" 1337
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337"
0AD3: 1@ = " %d" 12
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12"
0AD3: 1@ = " %d" 24
0AB1: @strcat 2 0@ 1@ // => 0@ = " 1337 12 24"
0AC9: 1@
0AC9: 0@


:strcat
// call @strcat 2 dest 0@ src 1@
0AA5: call 0x8265A0 num_params 2 pop 2 1@ 0@
0AB2: ret 0
читай справку
 

Hardov

Новичок
Автор темы
23
1

Вроде поправил, но выводит непонятное число.
Код:
{$CLEO}
0AC8: 0@ = allocate_memory_size 128
0AC8: 1@ = allocate_memory_size 24
0AD3: 1@ = format " %d" 228
0AB1: call_scm_func  @strcat 2 0@ 1@ // => 0@ = " 1337"
//0AD3: 1@ = " %d" 228
//0AB1: call_scm_func  @strcat 2 0@ 1@ // => 0@ = " 1337 12"
//0AD3: 1@ = " %d" 228
//0AB1: call_scm_func  @strcat 2 0@ 1@ // => 0@ = " 1337 12 24"
0AD1: show_formatted_text_highpriority "Writed:  %d" time 5000 {Result}1@
0A93:

:strcat
// call @strcat 2 dest 0@ src 1@
0AA5: call 0x8265A0 num_params 2 pop 2 1@ 0@
0AB2: ret 0
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
0AD1: show_formatted_text_highpriority "Writed: %s" time 5000 {Result}0@
 
  • Нравится
Реакции: Hardov

Hardov

Новичок
Автор темы
23
1
0AD1: show_formatted_text_highpriority "Writed: %s" time 5000 {Result}0@

Выводит четыре значения, Pn umber 228 1337.


Код:
{$CLEO}
0AC8: 0@ = allocate_memory_size 128
0AC8: 1@ = allocate_memory_size 24
0AD3: 1@ = format " %d" 228
0AB1: call_scm_func  @strcat 2 0@ 1@ // => 0@ = " 1337"
0AD3: 1@ = format " %d" 1337
0AB1: call_scm_func  @strcat 2 0@ 1@ // => 0@ = " 1337"
//0AD3: 1@ = " %d" 228
//0AB1: call_scm_func  @strcat 2 0@ 1@ // => 0@ = " 1337 12 24"
0AD1: show_formatted_text_highpriority "Writed: %s" time 5000 {Result}0@   
0A93:

:strcat
// call @strcat 2 dest 0@ src 1@
0AA5: call 0x8265A0 num_params 2 pop 2 1@ 0@
0AB2: ret 0
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Я тут чё присмотрел то, ты SF юзаешь?
 
  • Нравится
Реакции: Hardov
Статус
В этой теме нельзя размещать новые ответы.