реклама на сайте
подробности

 
 
> Добавление строки байтов в область памяти, Не ASCII символы, а именно HEX
Turnaev Sergey
сообщение Mar 1 2008, 18:11
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 562
Регистрация: 25-07-06
Из: Зеленоград, Новосибирск
Пользователь №: 19 088



Требуется загнать во флешь по нужному адресу HEX байты, но ассемблер упорно пишет вместо этих байтов их ASCII коды.
Делал так:
Код
.org 1000
.db "0000000001C0C07E0100000001C63019839FE00001C0000"


Подскажите как записать именно HEX в память.

Просмотрел много похожих тем, но нужной мне информации не нашёл.


--------------------
"Отсутствие вашей судимости - это не ваша заслуга, а наша недоработка."
Ф.Дзержинский.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Turnaev Sergey
сообщение Mar 1 2008, 18:43
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 562
Регистрация: 25-07-06
Из: Зеленоград, Новосибирск
Пользователь №: 19 088



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

А вот если таких функций нет, тогда действительно придётся Си вспоминать.


--------------------
"Отсутствие вашей судимости - это не ваша заслуга, а наша недоработка."
Ф.Дзержинский.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 1 2008, 18:49
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Turnaev Sergey @ Mar 1 2008, 21:43) *
Собственно интересуют встроенные в язык функции.

Встроенные в язык (какой, кстати?) функции описаны в его документации. Из Вашего первого поста совершенно невозможно понять, что требуется подключить бинарный файл, а не "записать HEX в память".
Go to the top of the page
 
+Quote Post
Turnaev Sergey
сообщение Mar 1 2008, 18:55
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 562
Регистрация: 25-07-06
Из: Зеленоград, Новосибирск
Пользователь №: 19 088



Цитата(aaarrr @ Mar 2 2008, 00:49) *
Встроенные в язык (какой, кстати?) функции описаны в его документации. Из Вашего первого поста совершенно невозможно понять, что требуется подключить бинарный файл, а не "записать HEX в память".

Намёк понял, уточняю:
Используя встроенные в AVRASM2 функции записать в память программ бинарные данные в HEX представлении.

Документацию естественно смотрел, но нужного мне не нашёл.


--------------------
"Отсутствие вашей судимости - это не ваша заслуга, а наша недоработка."
Ф.Дзержинский.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Mar 1 2008, 19:28
Сообщение #5


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Turnaev Sergey @ Mar 1 2008, 20:55) *
Намёк понял, уточняю:
Используя встроенные в AVRASM2 функции записать в память программ бинарные данные в HEX представлении.

Ну, так с лёту на GNU as это выглядит приблизительно так:

Код
.macro hexstr s
    .set pair, 0
    .irpc c, \s
        .if pair == 0
            .set val, 0x\c
        .else
            .byte val*16 + 0x\c
        .endif
        .set pair, 1 - pair
    .endr
.endm

    .text
    hexstr "0000000001C0C07E0100000001C63019839FE00001C0000"

    .end

Фрагмент листинга.
CODE
15 .text
16 hexstr "0000000001C0C07E0100000001C63019839FE00001C0000"
16 > .set pair,0
16 > .irpc c,0000000001C0C07E0100000001C63019839FE00001C0000
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0000 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0001 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0002 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0003 00 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x1
16 >> .else
16 0004 01 >> .byte val*16+0x1
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0xC
16 >> .else
16 >> .byte val*16+0xC
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0005 C0 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0xC
16 >> .else
16 >> .byte val*16+0xC
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0006 C0 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x7
16 >> .else
16 >> .byte val*16+0x7
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0xE
16 >> .else
16 0007 7E >> .byte val*16+0xE
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x1
16 >> .else
16 0008 01 >> .byte val*16+0x1
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 >> .byte val*16+0x0
16 >> .endif
16 >> .set pair,1-pair
16 >>
16 >> .if pair==0
16 >> .set val,0x0
16 >> .else
16 0009 00 >> .byte val*16+0x0
16 >> .endif


Ищите у аврасма похожие макроинструкции




Ай, аврасм, кажется, обижается на .db с одинм байтом (с нечётным количеством байт) - от себя 0 добавляет и цепочка .db нехороша.
Ну тогда надо гененрировать под .dw
Код
.macro hexstr s
    .set index, 0
    .set val, 0
    .irpc c, \s
        .set val, val*16 + 0x\c
        .set index, index + 1
        .if index == 4
            .word val
            .set index, 0
            .set val, 0
        .endif
    .endr
    .if index == 2  
        .byte val; это на случай нечётного количества байт
    .endif    ; нецелое количество байт (нечётное количество символов) игнорируем (не обрабатываем эту ошибку :-) )
.endm

    .text
; hexstr "0000000001C0C07E0100000001C63019839FE00001C0000"
    hexstr "0123456789"

    .end

Аналогично можно слепить макрос генерации чего угодно, хоть таблиц "данных в инактивированном формате" имени Амброзио.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Turnaev Sergey   Добавление строки байтов в область памяти   Mar 1 2008, 18:11
- - aaarrr   Код.db 0x00, 0x00, 0x00... Тут не темы, а докумен...   Mar 1 2008, 18:13
- - Turnaev Sergey   А если байтов всего 3840, то как? Так же?   Mar 1 2008, 18:15
- - aaarrr   А что Вас смущает? Ну, напишите для компьютера про...   Mar 1 2008, 18:22
- - Turnaev Sergey   ReAl Дааа.... Перевариваю... Разобрался. Спасиб...   Mar 1 2008, 20:52
|- - ReAl   Цитата(Turnaev Sergey @ Mar 1 2008, 22:52...   Mar 1 2008, 22:38
- - KRS   Цитата(Turnaev Sergey @ Mar 1 2008, 21:15...   Mar 1 2008, 21:12
|- - Turnaev Sergey   Цитата(KRS @ Mar 2 2008, 03:12) А откуда ...   Mar 2 2008, 10:33
|- - KRS   Цитата(Turnaev Sergey @ Mar 2 2008, 13:33...   Mar 2 2008, 15:53
|- - SasaVitebsk   Цитата(Turnaev Sergey @ Mar 2 2008, 14:33...   Mar 2 2008, 21:14
- - SasaVitebsk   Делал для себя. Особо не вылизывал. Можно из бинар...   Mar 1 2008, 21:29
- - ReAl   Тю, я думал, оно исходно почему-то в таком текстов...   Mar 2 2008, 11:23
- - Turnaev Sergey   SasaVitebsk Спасибо! Теперь самое, оно!   Mar 3 2008, 18:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 05:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.0145 секунд с 7
ELECTRONIX ©2004-2016