Im экспериментирует с написанием загрузчика в nasm, на данный момент он просто печатает строку.nasm bootloader, почему я определяю, что такое строка?
[BITS 16]
[org 0x7c00]
myString:
\t db 'Hello World', 0x00
mov bp, 0x8000
mov sp, bp
mov bx, myString
call printString
jmp $
printString:
\t pusha
\t mov ah , 0x0e
\t printStringA:
\t
\t mov al , [bx]
\t cmp al, 0x00
\t je printStringB
\t
\t int 0x10
\t add bx, 0x01
\t jmp printStringA
\t
\t printStringB:
\t popa
\t ret
times 510 -($ - $$) db 0
dw 0xaa55
, что работает отлично, но если я двигаю определение строковое здесь:
[BITS 16]
[org 0x7c00]
mov bp, 0x8000
mov sp, bp
myString:
\t db 'Hello World', 0x00
mov bx, myString
call printString
jmp $
printString:
\t pusha
\t mov ah , 0x0e
\t printStringA:
\t
\t mov al , [bx]
\t cmp al, 0x00
\t je printStringB
\t
\t int 0x10
\t add bx, 0x01
\t jmp printStringA
\t
\t printStringB:
\t popa
\t ret
times 510 -($ - $$) db 0
dw 0xaa55
печатает мусор, им работает это в Bochs под окнами, если это помогает.
думаю, что только что разобрался, процессор, вероятно, думает, что строка - это код, вызывая это и испортить вещи. если я перехожу к определению строки после бесконечного цикла, все это хорошо –