Сортировка строк, сначала буквы, а затем буквы внутри слов

Резюме:

  • NASM / YASM требует word [ecx], когда размер операнда не подразумевается другим операндом. (В противном случае [ecx] в порядке).
  • MASM / TASM требует word ptr [ecx], когда размер операнда не подразумевается другим операндом. (В противном случае [ecx] в порядке).

Каждый из них задыхается от синтаксиса другого.


ВНИМАНИЕ: Это очень странная область без каких-либо стандартов ISO или легкодоступные таблицы BNF; и я не специалист по прохождению через минные поля проприетарного синтаксиса MASM.

В вашем случае нет разницы, но оператор PTR может означать в других случаях:

http://www.c-jump.com/CIS77/ASM/Instructions/I77_0250_ptr_pointer.htm

В общем случае оператор оператора PTR принудительно обрабатывает выражение как указатель указанного типа:

blockquote>
 .DATA
 num  DWORD   0

 .CODE
 mov     ax, WORD PTR [num] ; Load a word-size value from a DWORD

Я думаю, что существуют также ассемблерные требования (nasm / tasm / other asm), а использование «byte ptr» более переносимо.

Также проверьте раздел 4.2.16 в книге из Индии и разделы 8.12.3 (и 8.11.3 «Типовые конфликты») в «

ОБНОВЛЕНИЕ: спасибо Фрэнку Котлеру, кажется, что NASM «использует вариант синтаксиса сборки Intel» (wiki), который не включает операцию PTR.

UPDATE1: имеется оригинальная «РУКОВОДСТВО ПО ЭКСПЛУАТАЦИИ ЯЗЫКА ASM86» от Intel, 1981-1983, оператор PTR определен на pa ge 4-15:

Оператор PTR

Синтаксис: введите имя PTR

Описание: Оператор PTR используется для определения ссылки на память с помощью определенный тип. Ассемблер определяет правильную инструкцию для сборки на основе типа операндов в инструкции. Существуют определенные случаи, когда вы можете указать операнд, который не имеет типа. Эти случаи связаны с использованием числовых или регистровых выражений. Здесь оператор PTR используется для указания типа операнда. Следующие примеры иллюстрируют это использование:

blockquote>
MOV  WORD  PTR  [BX], 5        ;set word pointed to by BX = 5
INC  DS:BYTE  PTR  10          ;increment byte at offset 10
                               ;from DS

Эта форма также может использоваться для переопределения атрибута type переменной или метки. Если, например, вы хотели получить доступ к уже определенной переменной слова как два байта, вы могли бы закодировать следующее:

blockquote>
MOV  CL, BYTE  PTR AWORD       ;get first byte
MOV  CL, BYTE  PTR AWORD + 1   ;get second byte

Значения полей:

Тип Это поле может иметь одно из следующих значений: BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR

name Это поле может быть: 1. Имя переменной. 2. Имя метки. 3. Адрес или регистр. 4. Целое число, которое представляет смещение.

blockquote>

UPDATE2: Благодаря Uni из бета-накопителя Stuttgart! Существует оригинальное руководство MACRO-86 от Microsoft (1981). Страница 3-7:

Оператор PTR можно использовать другим способом, чтобы сохранить байт при использовании прямых ссылок. Если вы определили FOO как постоянную константу, вы можете ввести оператор:

blockquote>
MOV [BX],FOO

Возможно, вы захотите сослаться на FOO как на немедленный байт. В этом случае вы можете ввести любой из операторов (они эквивалентны):

blockquote>
MOV BYTE PTR [BX],FOO

MOV [BX],BYTE PTR FOO

Эти утверждения указывают MACRO-86, что FOO является байтом немедленным. Создается меньшая команда.

blockquote>

И страница 3-16:

Операторы переопределения

Эти операторы используются для переопределения сегмента , смещение, тип или расстояние между переменными и метками.

Указатель (PTR)

blockquote>
  PTR  

Оператор PTR переопределяет тип (BYTE, WORD , DWORD) или расстояние (NEAR, FAR) операнда.

- новый атрибут; новый тип или новое расстояние.

- это операнд, атрибут которого должен быть переопределен.

Самое важное и частое использование для PTR заключается в том, чтобы убедиться, что MACRO-86 понимает какой атрибут должен иметь выражение. Это особенно верно для атрибута type. Всякий раз, когда вы размещаете ссылки в своей программе, PTR очищает расстояние или тип выражения. Таким образом, вы можете избежать фазовых ошибок.

Второе использование PTR заключается в доступе к данным по типу, отличному от типа определения переменной. Чаще всего это происходит в структурах. Если структура определена как WORD, но вы хотите получить доступ к элементу в виде байта, PTR является оператором для этого. Однако гораздо более простой способ - ввести второй оператор, который также определяет структуру в байтах. Это устраняет необходимость использования PTR для каждой ссылки на структуру. См. Директиву LABEL в разделе 4.2.1 «Директивы памяти».

Примеры:

blockquote>
 CALL WORD PTR [BX][SI]
 MOV BYTE PTR ARRAY, (something)

 ADD BYTE PTR FOO,9

После прочтения этого и поиска некоторых определений синтаксиса из этих документов я думаю, что запись PTR является обязательной. Использование mov BYTE [ecx], 0 неверно в соответствии с руководством MACRO-86.

7
задан Gilles 16 August 2012 в 12:40
поделиться