2013-12-05 5 views
2

Add #$28,R4,R3 Что означает $ в этом выражении? Значение R4 равно 1224, а конечный результат должен быть 1264, но как это работает, я понятия не имею.

+7

Было бы полезно, если бы вы упомянули ** Что ** вид ассемблере это. Хотя это похоже на MIPS, может быть, это на самом деле какой-то чужой процессор, который был реконструирован в Area 51. В этом случае вам стоит надеяться, что инопланетный материнство еще не установило Norton Antivirus. –

+5

Если 1224 + $ 28 = 1264, то я бы предположил, что $ означает hex, потому что hex 28 = 40. –

+2

@RogerRowland Победитель кулинарного победителя! –

ответ

4

В некоторых ассемблерах «$» означает просто, что вы используете шестнадцатеричное значение. на архитектуре x86 обычно записывать номер с «h», или если первый символ не является цифрой, тогда вы должны использовать ноль перед 28h или 0afh. В C вы должны написать 0x28.

Например, для 6510 (Commodore 64) или M68000 (например, Amiga) для этого типа '$ 28' использовался символ $ $. Я уверен, что есть и другие ассемблеры, используя эту нотацию.

+0

В синтаксисе x86 AT & T (используется GNU 'as'),' $ 'означает немедленную константу, например' # 'в некоторых других ассемблерах (включая ARM и код OP). (В синтаксисе AT & T '.' означает адрес текущей команды, такой как' $ 'в NASM, как указано в ответе mcleod_ideafix). Таким образом, в синтаксисе AT & T 'add esi, symbol' является 4-байтовой нагрузкой от абсолютного адреса, а' add rsi, $ symbol' использует адрес символа как imm32. (То же самое для 'add esi, 0x12345678' (абсолютный адрес) против' add esi, $ 0x12345678') –

2

В монтажников, символ $ обычно означает две разные вещи:

  • Приставка число, означает, что это число записывается в шестнадцатеричном формате.
  • Само по себе $ - числовое выражение, которое оценивается как «текущая позиция», то есть адрес, в котором будет собрана следующая команда/данные.

Например:

mydata:  db 0,1,2,3,4,5,6,7,8,9,$a,$b,$c,$d,$e,$f ;some decimal and 
                 ;hexadecimal numbers 
datalenght equ $-mydata ;length of previous list. 

      jmp $   ;an infinite loop!! ($ evaluates as the current 
          ;      position just before the 
          ;      instruction is assembled, 
          ;      that is, the position where 
          ;      the JMP instruction begins) 

Вы также можете увидеть $ в конце строковых констант, как строка терминатора характера, если писать или читать программы, написанные для CP/M или MS DOS. Обе ОС использовали это соглашение, поэтому системный вызов для печати строки на консоли ожидает строку с завершающим действием в долларах. Gary Kildall, создатель CP/M, никогда не раскрывал, почему он выбрал именно этот символ для маркировки конца строки.

  ;A very simple MSDOS program to 
     ;display "Hello world" to console. 
     org 100h 
     mov dx,offset Message 
     mov ah,9 
     int 21h 
     int 20h 
Message: db "Hello, world!",13,10,'$' 

  ;A very simple CP/M program to 
     ;display "Hello world" to console. 
     org $100 
     mov de,Message 
     mov c,9 
     call 5 ;call bdos 
     rst 0 
Message: db "Hello, world!",13,10,'$' 
+0

Упоминание '' 'как данных (внутри кавычек) для строковых констант MS-DOS типа отвлекает от точки около' $ ' как синтаксический элемент. Я всегда задавался вопросом, почему такой не-неясный символ ASCII был выбран в качестве ограничителя строк MS-DOS с тех пор, как он видел его в 16-битных вопросах на SO, поэтому спасибо за урок истории. –

+0

'Gary Kildall, создатель CP/M, никогда не раскрывал, почему он выбрал именно этот символ ('$') для маркировки конца строки.« Я предполагал, что это был очевидный выбор, только с коротким списком символов на выбор, * «Хорошо, какой символ поможет нам вспомнить ключевое слово, которое начинается с« S »? Ах, да, ** тот, который выглядит как *' S' *: * '$' *! "*** – ashleedawg

Смежные вопросы