объясните начинающему программисту
читаю книгу Б. Брэя Применение микроконтроллеров PIC 18
объясните, в чем разница следующих директив ассемблера вопрос №1:
DB (declare byte), DATA, DW (declare word)

в книге есть примеры использования:
DB 'B'
DB 'r'
DB 'e'
DB 'y' ;до этого момента вроде все понятно,
;хотя не понятно, почему команду "объявить байт"
;применяют к буквам? поясните, пожалуйста, это будет вопрос №2
DB 0x00 ; и зачем эта строчка, вопрос №3?
DB 'Brey', 0 ; а это как понимать, то один символ, то уже слово? вопрос №4
DATA "Brey", 0 ; и зачем в конце 0 везде? вопрос№5
DATA "Barry", 0
===========================;
для DW другой пример (здесь все коментарии будуть не мои, а из книги, сам бы я такое не написал) :

;Беззнаковые пословные данные
DATA1 DW .2544 ;Определяет десятичное 2544
DATA2 DW 0x87AC ;Определяет шестнадцатеричное 87AC
DATA3 DW .710 ;Определяет десятичное 710
;Пословные данные со знаком
DATA4 DW .13400 ;Определяет десятичное 13400
DATA5 DW +198 ;Определяет десятичное +198
DATA6 DW 0xFFFF ;Определяет десятичное -1

последнее выносит. ну я вообще понимаю, что в знаковых числах последний бит - знаковый, и отрицательное число находится за описанным в книге методом дополнения до двух, но как программа понимает, где это десятичное 65535 (FFFF), а где это число со знаком? вопрос №6.. помогите разобраться, пожалуйста

  • Ответ на 1-ый вопрос:
    разница в размере директив
    db - байт
    dw - слово (два байта)

    Ответ на 2-ый вопрос:
    любая буква имеет свой ASCII код. При компиляции все-ровно они примут ASCII значение.
    просто так же легче:
    записать строку в виде массива букв - DB 'Brey', 0, чем записать ее в 16-ричном виде - db 0x42, 0x72, 0x65, 0x79, 0x00 - многое понятно в этом?

    ответ на 4-ый вопрос:
    DB 'B'
    DB 'r'
    DB 'e'
    DB 'y'
    DB 0x00
    и
    DB 'Brey', 0
    одно и тоже.

    ответ на 5-ый:
    не обязательно нули. это зависит от программы. Вчитывайся в то что пишет автор книги, если просто переписывать код и потом задавать вопросы - далеко не уйдешь в этом деле.

    на 6-ой вопрос:
    существует регистр флагов, где каждый бит в регистре отвечает за свое. В твоем случае флаг SF
    если SF установлен в 1 значит число - отрицательное
    если SF=0 - положительное

  • Нашел че спросить в 4 часа ночи :D иди проспись, утро вечера мудренее;)
  • Когда за размером идет символ, строка или что-то еще, то происходит автоматическая инициализация памяти этим значением. 0 в конце скорее всего служит терминирующим символом строки, aka C-string.

    Насчет отрицательных ты ошибаешься, обычно используется дополнительный код для их представления, там не только последний бит, еще инверсия. Почитай про two's complement, если интересно.

  • Тут всё понятно! Не внимательно читаешь книги! Тут объяснять не буду, если действительно интересно и хочешь разобраться, скинь мне на ящик перечень книг, которыми пользуешься, я постараюсь тебе помочь