push cs
pop ds
почему не вызывается процедура???
[ORG 0]
jmp 07C0h:start ; разместить по адресу 07C0
start:
; подготовака сегментов
mov ax, cs
mov ds, ax
mov es, ax
reset: ; Обновление дисковода
mov ax, 0 ;
mov dl, 0 ; Drive=0 (=A)
int 13h ;
jc reset ; Ошибка! пробовать снова
read:
mov ax, 1000h ; ES:BX = 1000:0000
mov es, ax ;
mov bx, 0 ;
mov ah, 2 ; загрузка в ES:BX
mov al, 1 ; загрузить 1 секторов
mov ch, 0 ; цилиндр 0
mov cl, 2 ; сектор 2
mov dh, 0 ; головка 0
mov dl, 0 ; номер носителя 0 (дисковод)
int 13h ; прочиать!
jc read ; Ошибка! пробовать снова
mov si, msg
call kputs
mov si, mmm
call kputs
jmp 1000h:0000 ; Передать управление в 1000h
kputs:
.loop:
lodsb
test al, al
jz .quit
mov ah, 0x0E
int 0x10
jmp short .loop
.quit:
ret
msg: db "Loading... Done", 0Ah, 0Dh, 0Ah, 0Dh, 0
mmm: db "PROVERKA", 0Ah, 0Dh, 0
times 510-($-$$) db 0
dw 0AA55h
;*************************************************
[KB.ASM] а это типа "ядро" :-) вернее то что должно быть им...
mov si, mmg
call kputs2 ;ВОТ ТУТ ПРОБЛЕМА!!! ОНО НЕ ПИШЕТ СЛОВО VTORAYA_PROVERKA на экран
;Тут просто выдводим нажатый символ
loop1:
mov ah,00h
int 16h ;Считать символ с клавы
cmp al,20h ;если нажали не букву
jb loop1 ;то на экран не пишем
mov ah,0eh
int 10h
jmp loop1 ;Наша песня хороша - начинай сначала
;а вот и процедуры вывода на экран слова
kputs2:
mov al,00h
.loop2:
lodsb
test al, al
jz .quit2
mov ah, 0x0E
int 10h
jmp short .loop2
.quit2:
ret
hlt
mmg: db "VTORAYA_PROVERKA", 0Ah, 0Dh, 0
[image.asm] тут обе части собираются в один образ IMAGE.BIN
%include 'bt.asm'
%include 'kb.asm'
Так вот: почему надипи Loadin...Done
PROVERKA выводятся когда я запускаю все это
а VTORAYA_PROVERKA не выводится...зато нажатая калавиша выодится как надо...
Код:
Перед этим стек инициируйте, а то он у вас непонятно где. Обычно еще в загрузчике SS:SP инициализируют (куда-нибудь, чтобы с кодом и данными не пересекалось).