A NullReferenceException
бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.
Например:
string str = string.Empty;
str.ToLower(); // throw null reference exception
Public Class Person {
public string Name { get; set; }
}
Person objPerson;
objPerson.Name /// throw Null refernce Exception
См. ответ tanascius для проблемы с линией 14. Здесь вам нужно mov es, word [startaddr]
.
Линии 20 и 28 имеют общую проблему. Nasm требует синтаксиса mov [es:di],al
. Не требуется префикс размера - он неявный в регистровом операнде.
В соответствии с эта ссылка на 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