Команда перехода в сборку [дубликат]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
1
задан cam 20 May 2010 в 12:54
поделиться

2 ответа

См. ответ tanascius для проблемы с линией 14. Здесь вам нужно mov es, word [startaddr].

Линии 20 и 28 имеют общую проблему. Nasm требует синтаксиса mov [es:di],al. Не требуется префикс размера - он неявный в регистровом операнде.

5
ответ дан msandiford 25 August 2018 в 23:36
поделиться

В соответствии с эта ссылка на yasm (см. Ссылки на память) у вашего NASM может возникнуть проблема с определением размера ссылки на память:

Обычно размер ссылка на память может быть выведена с помощью каких регистров, которые вы перемещаете - например, «mov [rax], ecx» - это 32-битное перемещение, потому что ecx - 32 бита. YASM в настоящее время дает неочевидную ошибку «неправильная комбинация опкодов и операндов», если она не может определить, сколько памяти вы двигаете. Исправление в этом случае заключается в том, чтобы добавить спецификатор размера памяти: qword, dword, word или byte.

Ниже приведено 64-битное перемещение памяти, которое устанавливает 8 байт, начиная с rax: mov qword [rax], 1

Вот 32-битный ход памяти, который устанавливает 4 байта: mov dword [rax], 1

Вот 16-битный ход памяти, который устанавливает 2 байта: mov word [rax], 1

Вот 8-битный ход памяти, который устанавливает 1 байт: mov byte [rax], 1

2
ответ дан tanascius 25 August 2018 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: