Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

почему не вызывается процедура???

1.9K
08 марта 2005 года
WWTLF
35 / / 16.06.2003
[bt.asm] это простенький загрузчик, тут все ОК

[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 не выводится...зато нажатая калавиша выодится как надо...
1.7K
10 марта 2005 года
Envel
206 / / 29.11.2004
Вы забываете, что в DS у вас 0. LODSB считывает байт по адресу DS:SI. Инициируйте DS вот так:
 
Код:
push cs
pop ds

Перед этим стек инициируйте, а то он у вас непонятно где. Обычно еще в загрузчике SS:SP инициализируют (куда-нибудь, чтобы с кодом и данными не пересекалось).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог