Я написал такой код как часть других ответов, но никогда не имел возможности представить простой тестовый комплект, на который можно ссылаться из других вопросов Stackoverflow. То, что вы просите, довольно тривиально. Это можно сделать, написав загрузчик в NASM, который содержит двоичный образ собранного кода, который вы хотите протестировать. Этот образ будет считываться с диска, начиная с LBA 1 (первый сектор после загрузчика), с использованием функции BIOS Int 13 / ah = 2 . Затем управление будет передано ему через FAR JMP на 0x0000: 0x7e00.
Код загрузчика будет выглядеть следующим образом:
bpb.inc :
%define WITH_BPB 1
global bpb_disk_info
jmp boot_start
TIMES 3-($-$) DB 0x90 ; Support 2 or 3 byte encoded JMPs before BPB.
bpb_disk_info:
; Dos 4.0 EBPB 1.44MB floppy
OEMname: db "mkfs.fat" ; mkfs.fat is what OEMname mkdosfs uses
bytesPerSector: dw 512
sectPerCluster: db 1
reservedSectors: dw 1
numFAT: db 2
numRootDirEntries: dw 224
numSectors: dw 2880
mediaType: db 0xf0
numFATsectors: dw 9
sectorsPerTrack: dw 18
numHeads: dw 2
numHiddenSectors: dd 0
numSectorsHuge: dd 0
driveNum: db 0
reserved: db 0
signature: db 0x29
volumeID: dd 0x2d7e5a1a
volumeLabel: db "NO NAME "
fileSysType: db "FAT12 "
boot.asm :
[ 111]
Чтобы использовать это, вы бы сначала сгенерировали двоичный файл с именем stage2.bin
. Затем вы должны построить образ диска 1.44MiB с помощью этой команды:
nasm -f bin boot.asm -o disk.img
Код в stage2.bin
должен быть сгенерирован с допущением, что ORG (начальная точка) 0x07e00 в памяти. [1127 ]
Пример кода, сгенерированного для файла с именем stage2.bin
, который можно загрузить с помощью этого тестового набора:
testcode.asm [ 1139]:
ORG 0x7e00
start:
mov si, testCodeStr
call print_string
cli
.end_loop:
hlt
jmp .end_loop
testCodeStr: db "Test harness loaded and is executing code in stage2!", 0
; Function: print_string
; Display a string to the console on display page 0
;
; Inputs: SI = Offset of address to print
; Clobbers: AX, BX, SI
print_string:
mov ah, 0x0e ; BIOS tty Print
xor bx, bx ; Set display page to 0 (BL)
jmp .getch
.repeat:
int 0x10 ; print character
.getch:
lodsb ; Get character from string
test al,al ; Have we reached end of string?
jnz .repeat ; if not process next character
.end:
ret
Примечание : сверху есть ORG 0x7e00
. Это важно. Чтобы собрать этот файл в stage2.bin
, используйте:
nasm -f bin testcode.asm -o stage2.bin
Затем создайте образ диска 1.44MiB с:
nasm -f bin boot.asm -o disk.img
Результатом должен быть образ диска размером точно 1.44MiB, содержит копию stage2.bin
и загрузочный сектор нашего тестового жгута.
Файл stage2.bin
может быть любым, в который записан двоичный код для загрузки и запуска в 0x0000: 0x7e00. Язык (C, ассемблер и т. Д.), Используемый для создания кода в stage2.bin
, не имеет значения. Я использую NASM для этого примера. Когда этот тестовый код выполняется в QEMU с использованием qemu-system-i386 -fda disk.img
, он будет выглядеть примерно так:
Special Примечание: : Если вы не хотите использовать bpb.inc
и не собираетесь загружаться с USB с помощью эмуляции FDD, вы можете закомментировать или удалить эту строку в boot.asm
%include "bpb.inc"
Я исправил свою проблему, получив файл System.Data.SQLite.dll, который находится в репозитории FluentNHibernate SVN.
Теперь он работает очень хорошо.
Я должен был иметь проверяя это ранее;)
Когда я столкнулся с этой проблемой, она была вызвана тем, что для свойства процессора моего приложения задано значение anycpu и он работает в 64-битной системе. Чтобы исправить эту проблему, я установил для своего процессора приложения значение x86. Я не думаю, что System.Data.SQLite.dll поддерживает работу с процессами x64.
Я сталкиваюсь с той же проблемой на машине сборки. Он отлично работает, когда я открываю проект с помощью Visual Studio, но когда я запускаю mstest.exe, он выходит из строя с указанной выше ошибкой. Он также не работает на моей локальной машине разработки, когда я запускаю из командной строки. Монитор процессов не показывает никаких попыток найти файл с помощью mstest.exe.
Машина сборки 32-разрядная, моя локальная машина 64-разрядная. Мы используем сборку из магистрали Fluent NHibernate.
ОБНОВЛЕНИЕ: Выяснилось - mstest.exe не копировал все сборки при запуске из командной строки. Я обновил localtestrun.config, чтобы включить их в раздел «Развертывание». Не уверен, почему поведение отличается от поведения IDE и средства запуска тестов из командной строки.