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

Ваш аккаунт

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

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

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

Не пойму, что надо линкеру

26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
Файл скрипта линковщика скачан с интернета. Выглядит так:
 
Код:
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
   .text :
   {
      *(.text)
   }
}

На выходе говорит вот что:
Цитата:
E:\Dev-Cpp\bin\ld: PE operations on non PE file.


Объектник сгенерирован gcc. На вход подан параметром. Что хочет эта %нь - непонятно. Что делать и кто виноват?
Note: работаю под виндой

260
16 июня 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: mudBit
Файл скрипта линковщика скачан с интернета. Выглядит так:
 
Код:
OUTPUT_FORMAT("binary")
ENTRY(start)
SECTIONS
{
   .text :
   {
      *(.text)
   }
}

На выходе говорит вот что:

Объектник сгенерирован gcc. На вход подан параметром. Что хочет эта %нь - непонятно. Что делать и кто виноват?
Note: работаю под виндой



Таки, а где комманд лайн сборки данной вундервафли и ее объектникафф?

PS: Лечу баги по фотографии. Дорого.

26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
Командный лайн, говорите? Вот:
Компиляция:
Цитата:
E:\Dev-Cpp\bin\gcc rootboot.s -o rootboot.o -nostdlib -nostdinc


Линковка:

Цитата:
E:\Dev-Cpp\bin\ld -o Boot.bin rootboot.o -T link.ld

260
16 июня 2011 года
Ramon
1.1K / / 16.08.2003
 
Код:
ld -T link.ld -o Boot.bin rootboot.o
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
Не помогло. Баг его знает. И что такое эти "PE Operations" и почему мой объектник есть "non PE file"? Может, проблема в самом ld? Взял из Dev-Cpp 4.9.9.2 beta. Не помогло также добавление ключа -c в компиляцию. Что делать?
277
16 июня 2011 года
arrjj
1.7K / / 26.01.2011
А выложи сам rootboot.s и попробуй gcc компилить с ключами -fno-builtin -ffreestanding
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
Не помогло даже добавление ключей. Может, действительно, элдэ %№вое?
rootboot.s - это недоделанный файл, чисто для проверки, ассемблируется без приколов. Но если вам интересно - вот:
Код:
//
// ROOTBOOT.S
// BOOT FILE MUST BE PLACED AT 0th SECTOR OF BOOT DEVICE
//

start:
    jmp main
    nop
   
readSector:
    // IN:
    // DX - SECTOR NUMBER
    // SI - BUFFER ADRESS
   
    pusha
   
    movw %dx, %ax
    movw $0x12, %cx
    movw %si, %bx
    xor %dx, %dx
    div %cx
    mov %al, %ch
    shrb $1, %ch
    movb %dl, %cl
    incw %cx
    movb %al, %dh
    andb $1, %dh
    movb $1, %dh
    movw $0x201, %ax
    xorb %dl, %dl
    int $0x13
    jnc readSectorExit
   
   
readSectorExit:
    popa
    ret
   
printMessage:
   
printMessageExit:
    ret
   
main:
   
mainExit:
    jmp mainExit

Написан мной, только с одной "купюрой" - функцией чтения сектора дискеты.
260
16 июня 2011 года
Ramon
1.1K / / 16.08.2003
Девочка/мальчик - какая разница. Ознакомьтесь с разницей между 16/32 битами и кодогенерацией в обоих случаях.
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
Понял. Добавил в начало кода .code16. Проверяю...

Блин, я становлюсь предсказуемым... Не помогло.
260
16 июня 2011 года
Ramon
1.1K / / 16.08.2003
COFF, он же PE 16 битным, как-бы не бывает.
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
Уточни, так что же делать? А то я не могу нихрена отладить. За:::::::лся ковырять линкер. :Е
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
И что-то мне это напоминает...
Точно - раздел Общалка:) тема Анекдоты про программистов...
Цитата:
Новичок: Ребят, у меня проблема - пришел пациент, один глаз работает, другой нет - что делать? Срочно!!
Хирург (старожил): А-а-а-а!! Один глаз не работает, умора! (*ржет*)
Скальпель (старожил): Блин, ламеры достали!
Админ (администратор): Новичок, читайте правила форума, пользуйтесь поиском. Первое предупреждение.
Доктор_Лектор (завсегдатай): Да ладно вам, помогите ему. Не видите - у человека горе.
Гость1: Новичок, а чего ты хочешь-то? Формулируй вопрос правильно.
Новичок: Гость1, я хочу чтобы оба галза видели. Можешь подсказать как это сделать?
Гость1: А-а-а, чтобы оба видели - не знаю тогда. Я по иглоукалыванию специализируюсь.
Новичок: Админ, я пользовался поиском, но ничего не нашел.
Помогите кто-нибудь, пациент на столе лежит, я ему уже легкое вскрыл - не помогает!!
Хирург (старожил): А-а-а!! Легкое вскрыл, я щас уссусь! (*ржет покатом*)
Гость2: Новичок, глазной нерв проверял?
Медбрат (опытный): Новичек, какой глаз не работает - левый или правый?
Админ (администратор): В правилах форума написано, что здесь запрещено задавать вопросы про симметричные органы. Кроме того, по каким словам ты искал? По слову "глаз"? А надо было - по "бинокуларус окулярус". Вот - [набор ссылок] почитай про то, как надо пользоваться поиском на форумах.
Новичок: Гость2, а где искать глазной нерв? Поменял глаза местами, теперь оба не работают (( Срочно - что делать, скоро наркоз заканчивается.
Гость3: А пациент какой расы - негроид или монголоид?
Скальпель (старожил): Гость3, а какая разница?
Гость3: Ты хочешь сказать, что между негроидом и монголоидом нет разницы? Еще Новичка ламером называл =)
Доктор_Лектор (завсегдатай): Между негроидом и монголоидом есть разница, факт.
Новичок: Как узнать расу?
Скальпель (старожил): Спросить у пациента
Новичок: Пациент без сознания. Может в паспорте записано?
Скальпель (старожил): Гость3, разница есть, но какая разница в конкретном нашем случае??
Гость3: Скальпель, очевидная. У негроидов глаза большие и навыкате, а у монголоидов щелки глаз узкие - может у пациента просто глазные щели заужены, их надрезать надо.
Новичок: Спасибо, Гость3! Надрезал веки - легче стало вынимать глазные яблоки. Переставил еще раз, не рабоатают
ПС: на всякий случай надрезал ноздри и анус.
Новичок: Эй, есть кто-нибудь?
Новичок: Что делать-то?
Новичок: Все, тема закрыта, я его к окулисту направил.
Скальпель (старожил):НОВИЧЕК, А ТЫ ЧТО - НЕ ОКУЛИСТ??? =8-0
Новичок: Неа. Гинеколог.
Админ (администратор): Новичек, второе предупреждение.
Читай правила. Здесь форум окулистов. Еще одно предупреждение и - бан.
Хирург (старожил): А-а-а-а!! Гинеколог!! Все, сливайте воду, я уссался! (*ржет*)

277
16 июня 2011 года
arrjj
1.7K / / 26.01.2011
Вобщем скрипты твои прекрасно работают и компилируются.....в никсах :) В win32 ld неумеет (или нехочет ? ) линковать в бинарник. В виндах можно через objcopy (gcc rootboot.s -o rootboot.o -c -nostdlib -nostdinc objcopy rootboot.o rootboot.bin -O binary) , но это уже другая история :)
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
Спасибо. Добавлю репы.
Но все равно - попробовал - не пашет...
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
А у вас есть исходник никсового элдэ? Может, перекомпилировать под виндой и пользоваться?
277
16 июня 2011 года
arrjj
1.7K / / 26.01.2011
 
Код:
gcc rootboot.s -o rootboot.o -c -nostdlib -nostdinc
objcopy rootboot.o rootboot.bin -O binary

На выходе rootboot.bin - попробовал, пашет (покрайней мере почти как никсовый, разница в выравнивании и никсовый добавл в конец бинарника GNU чётотам:))
26K
16 июня 2011 года
mudBit
224 / / 30.05.2011
УРА!!! РАБОТАЕТ!!! НАКОНЕЦ-ТО!!! Респект всем. Кому не добавил репы - щас добавлю.
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
Народ, извините еще раз. Ситуация получила неприятное продолжение. Вместо того, что я планировал, на экран виртуалки печатается муть. Я даже знаю, почему. Функция печати использовала адрес строки. Ассемблер GAS подавал его как константу и не учел, что программа находится в памяти начиная не с нулевого адреса. А все почему - я, как некоторые из вас помнят, не смог по-человечески слинковать бинарник. Как настроить адреса в нем без ld? Или что еще можно сделать, чтобы получить нормальный результат?
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
Отставить, пока что тревога ложная. Выход нашел - добавил перед вызовом печати:
 
Код:
addw $0x7C00, %si

%si - адрес моей строки
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
Вот хрень...
И все-таки, что делать? Неправильно читает переменные...
Повторяю просьбу: мне надо перенастроить адреса в бинарнике без лд, которое, к сожалению, глючит.
277
17 июня 2011 года
arrjj
1.7K / / 26.01.2011
Покажи свой код финальный, щас чёнить придумаем.
260
17 июня 2011 года
Ramon
1.1K / / 16.08.2003
Установите сегмент либо используйте какой нить org.
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
2 arrjj
Код? Минуточку... UPOS - это имя моей системы, а UPFS - ее фс. Вот асм:
Код:
//
// ROOTBOOT.S
// BOOT FILE MUST BE PLACED AT 0th SECTOR OF BOOT DEVICE
//

.code16

start:
    jmp main
    nop
    // DATA FOR IDENTIFICATION
UPFS_ident:                     .ascii  "U P F S DISK FS\0"
blockSizeInSectors:             .word   1
firstSpecialBlock:              .word   1
   
readSector:
    // IN:
    // DX - SECTOR NUMBER
    // SI - BUFFER ADRESS
   
    pusha
   
    movw %dx, %ax
    movw $0x12, %cx
    movw %si, %bx
    xor %dx, %dx
    div %cx
    mov %al, %ch
    shrb $1, %ch
    movb %dl, %cl
    incw %cx
    movb %al, %dh
    andb $1, %dh
    movb $1, %dh
    movw $0x201, %ax
    xorb %dl, %dl
    int $0x13
    jnc readSectorExit
   
   
readSectorExit:
    popa
    ret
   
printMessage:
    // SI - MESSAGE
    lodsb
    testb %al, %al
    jz printMessageExit
    movb $0x0E, %ah
    movb $0x07, %bl
    int $0x10
    jmp printMessage
   
printMessageExit:
    ret
   
main:
    xorw %ax, %ax
    movw %ax, %ss
    movw %ax, %es
    movw %ax, %ds
    movw $0x7C00, %sp
    movw %sp, %bp
    movw $msgStarting, %si
    addw $0x7C00, %si
    call printMessage
   
mainExit:
    jmp mainExit
   
    // DATA FOR ROOTBOOT
msgStarting:                    .ascii  "UPOS booter starting...\0"

Переменные, о которых я говорил - это типа firstSpecialBlock. В данной версии кода не упоминается обращение к ним, но я проверял - выдает чепуху, хотя по дефолту - единица.
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
2 Ramon
Сегмент - можно попробовать. А org (origin) делается, как вы знаете, в вязалке, которая у меня не пашет.

ПС. Я НЕ настаиваю, просто, может у кого-то есть исходник работающей версии лд. Поделитесь, я перекомпилю под виндой и проблем не будет. Ну если кому не жаль, конечно...
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
Попытался последовать совету Ramon'а и сделать через сегменты. Не пишет вообще ничего. Смотрите:
Код:
//
// ROOTBOOT.S
// BOOT FILE MUST BE PLACED AT 0th SECTOR OF BOOT DEVICE
//

.code16

start:
    jmp main
    nop
    // DATA FOR IDENTIFICATION
.data
UPFS_ident:                     .ascii  "U P F S DISK FS\0"
blockSizeInSectors:             .word   1
firstSpecialBlock:              .word   1

.text
   
readSector:
    // IN:
    // DX - SECTOR NUMBER
    // SI - BUFFER ADRESS
   
    pusha
   
    movw %dx, %ax
    movw $0x12, %cx
    movw %si, %bx
    xor %dx, %dx
    div %cx
    mov %al, %ch
    shrb $1, %ch
    movb %dl, %cl
    incw %cx
    movb %al, %dh
    andb $1, %dh
    movb $1, %dh
    movw $0x201, %ax
    xorb %dl, %dl
    int $0x13
    jnc readSectorExit
   
   
readSectorExit:
    popa
    ret
   
printMessage:
    // SI - MESSAGE
    lodsb
    testb %al, %al
    jz printMessageExit
    movb $0x0E, %ah
    movb $0x07, %bl
    int $0x10
    jmp printMessage
   
printMessageExit:
    ret
   
main:
    xorw %ax, %ax
    movw %ax, %ss
    movw %ax, %es
    movw $0x7C0, %bx
    movw %bx, %ds
    movw $0x7C00, %sp
    movw %sp, %bp
    movw $msgStarting, %si
    //addw $0x7C00, %si
    call printMessage
   
mainExit:
    jmp mainExit
   
    // DATA FOR ROOTBOOT
.data
msgStarting:                    .ascii  "UPOS booter starting...\0"

То ли здесь ошибка, то ли сегменты не работают. В сегмент записывал не 0x7C00, а 0x7C0, потому что адрес в сегменте = база*0х10+смещение. Так же?
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
Ну помогите, кто нибудь! А точнее, как в GAS'е сделать так, чтобы переменные читались не по адресу 0000 : offset, а по ds : offset, а то если к адресу каждой переменной добавлять сдвиг, пока напишешь - заковыряешься. HELP!
26K
17 июня 2011 года
mudBit
224 / / 30.05.2011
Ладно, баг с ним. Буду добавлять константу. Как тему закрыть?
260
17 июня 2011 года
Ramon
1.1K / / 16.08.2003
Цитата: mudBit
Ну помогите, кто нибудь! А точнее, как в GAS'е сделать так, чтобы переменные читались не по адресу 0000 : offset, а по ds : offset, а то если к адресу каждой переменной добавлять сдвиг, пока напишешь - заковыряешься. HELP!



Поумолчанию данные читаются менно с сегмента DS + смещение, если не сказано иначе. Зааттачьте скомпыленнный бинарник сектора.

PS: А также раз уж пишите бут сектор добавьте в конце AA55 или как его там, иначе биосу такое творчество может и не понравиться.

277
20 июня 2011 года
arrjj
1.7K / / 26.01.2011
[quote=Ramon]
добавьте в конце AA55 или как его там
[/quote]
Да по смещению 510 от начала сектора, да и сектор должен быть кратен 512 байтам желательно :)

Вобщем из скрипта линкера убираем OUTPUT_FORMAT("binary") икомпилим бинарник в 3 комманды:
 
Код:
gcc rootboot.s -o rootboot.o -c -nostdlib -nostdinc
ld -o rootboot.hz rootboot.o -T rootboot.ld
objcopy rootboot.hz rootboot.bin -O binary
26K
20 июня 2011 года
mudBit
224 / / 30.05.2011
Цитата: Ramon

PS: А также раз уж пишите бут сектор добавьте в конце AA55 или как его там, иначе биосу такое творчество может и не понравиться.


Ramon, вы меня, походу, вообще идиотом считаете... Эти два священных байта я ставил с самого начала, правда, не через ассемблер, а через махонькую самодельную программку, которая делала файл образа с моей фс на нем. Кстати, выход я нашел. Сейчас покажу:

Код:
...
main:
    movw %cs, %ax
    cmpw $0, %ax
    jne mainContinue
    movw $msgRecalling, %si
    addw $0x7C00, %si
    call printMessage
    call $0x7C0, $0
mainContinue:
    movw %cs, %ax
    movw %ax, %ss
    movw %ax, %es
    movw %ax, %ds
    movw $0, %sp
    movw %sp, %bp
    movw $msgStarting, %si
    call printMessage
        ...

То есть, я перезапускаю свой же код, просто не по адресу $0000:7C00, а по $07C0:0000, и все данные автоматом читаются с нужным сдвигом.
26K
20 июня 2011 года
mudBit
224 / / 30.05.2011
2 arrjj
А можно сделать то же самое, но чтобы линковались не один, а несколько файлов в один бинарник? Пройдет ли простое добавление INPUT(...) и OUTPUT(kernel.bin)?
277
20 июня 2011 года
arrjj
1.7K / / 26.01.2011
Вроде да в ld линкуй несколько файлов а потом objcopy - попробуй во всяком случае хуже не будет.
26K
21 июня 2011 года
mudBit
224 / / 30.05.2011
Цитата: arrjj

Вобщем из скрипта линкера убираем OUTPUT_FORMAT("binary") икомпилим бинарник в 3 комманды:
 
Код:
gcc rootboot.s -o rootboot.o -c -nostdlib -nostdinc
ld -o rootboot.hz rootboot.o -T rootboot.ld
objcopy rootboot.hz rootboot.bin -O binary



Странно, сделал все так - через три команды и без строчки в скрипте, но виртуалка зависла, и это при том, что исходник я не менял, а прежняя версия работала. Что это значит?

26K
21 июня 2011 года
mudBit
224 / / 30.05.2011
К предыдущему - продолжение истории...
Я обнаружил причину зависания виртуалбокса. Файл rootboot.bin получился нулевого размера. ПОЧЕМУ????? :^(
277
21 июня 2011 года
arrjj
1.7K / / 26.01.2011
Хз я такой вот сорс компилил, всё ок:
Код:
.code16
.section .text
.globl _start
_start:
  nop
  xor %di, %di
  mov $0xb800, %ax
  mov %ax, %ds
  mov $message, %si
move:
  xor %dx, %dx
  mov %cs:(%si), %dl
  cmp $0, %dl
  jz idle
  mov %dl, (%di)
  inc %di
  movb $0x1e, (%di)
  inc %di
  inc %si
  jmp move
idle:
  mov $0, %dh
  movb $msg_len, %dl
  mov $0, %bh
  mov $2, %ah
  int $0x10
enter_loop:
  movb $0 , %ah
  int $0x16
  cmp $1, %ah
  je shootdown
  cmp $' ',%al
  jl enter_loop
  cmp $'~',%al
  jg enter_loop
  mov %al, (%di)
  inc %di
  movb $0x1e, (%di)
  dec %di
jmp enter_loop
shootdown:
mov $0x5301, %ax
xor %bx,%bx
int $0x15

mov $0x530e, %ax
xor %bx,%bx
mov $0x0102, %cx
int $0x15

mov $0x530f, %ax
mov $0x0001, %bx
mov $0x0001, %cx
int $0x15

mov $0x5308, %ax
mov $0x0001, %bx
mov $0x0001, %cx
int $0x15

mov $0x5307, %ax
mov $0x0001, %bx
mov $0x0003, %cx
int $0x15

.section .data
message:
  .asciz "Press Esc to shootdown..."
  msg_len = .-message-1

С таким скриптом:
Код:
ENTRY(_start)
SECTIONS
{
   .text 0x7c00:
   {
      *(.text)
   }
   .data 0x7c80:
   {
      *(.data)
   }
}

Покеж свой скрипт линкера и сорс который компилишь.
26K
21 июня 2011 года
mudBit
224 / / 30.05.2011
Цитата: arrjj

Покеж свой скрипт линкера и сорс который компилишь.



Сорс, собственно, тот же. Напоминаю(чтобы вы не переходили на предыдущую).

Код:
//
// ROOTBOOT.S
// BOOT FILE MUST BE PLACED AT 0th SECTOR OF BOOT DEVICE
//

.code16

.globl _start

_start:
    jmp main
    nop
    // DATA FOR IDENTIFICATION
UPFS_ident:                     .ascii  "U P F S DISK FS\0"
blockSizeInSectors:             .word   1
firstSpecialBlock:              .word   1
   
readSector:
    // IN:
    // DX - SECTOR NUMBER
    // SI - BUFFER ADRESS
   
    pusha
   
    movw %dx, %ax
    movw $0x12, %cx
    movw %si, %bx
    xor %dx, %dx
    div %cx
    mov %al, %ch
    shrb $1, %ch
    movb %dl, %cl
    incw %cx
    movb %al, %dh
    andb $1, %dh
    movb $1, %dh
    movw $0x201, %ax
    xorb %dl, %dl
    int $0x13
    jnc readSectorExit
   
   
readSectorExit:
    popa
    ret
   
printMessage:
    // SI - MESSAGE
    lodsb
    testb %al, %al
    jz printMessageExit
    movb $0x0E, %ah
    movb $0x07, %bl
    int $0x10
    jmp printMessage
   
printMessageExit:
    ret
   
main:
    movw %cs, %ax
    cmpw $0, %ax
    jne mainContinue
    movw $msgRecalling, %si
    addw $0x7C00, %si
    call printMessage
    call $0x7C0, $0
mainContinue:
    movw %cs, %ax
    movw %ax, %ss
    movw %ax, %es
    movw %ax, %ds
    movw $0, %sp
    movw %sp, %bp
    movw $msgStarting, %si
    call printMessage
   
mainExit:
    jmp mainExit
   
    // DATA FOR ROOTBOOT
msgStarting:                    .ascii  "UPOS loader starting...\n\r\0"
msgRecalling:                   .ascii  "Recalling...\n\r\0"

Как видите, проблема с перемещением была решена. Работало(до этого). Скрипт вязалки:
 
Код:
ENTRY(_start)
SECTIONS
{
   .text :
   {
      *(.text)
   }
}

Есть только текстовая секция, но секции данных нету и в асме. Посоветуйте, пожалуйста.
26K
21 июня 2011 года
mudBit
224 / / 30.05.2011
Кстати, только сейчас заметил. У вас в скрипте было:
 
Код:
.text 0x7C00:

Так делают начальное смещение? Спасибо, а то я не знал.
26K
21 июня 2011 года
mudBit
224 / / 30.05.2011
Ну помогите же с линовщиком!!! Мне отлаживаться надо, а тут какая-то %ня.
Ну хоть кто-нибудь!
277
21 июня 2011 года
arrjj
1.7K / / 26.01.2011
Попробуй секции создать и со скриптом как у меня в примере компилить:
Код:
//
// ROOTBOOT.S
// BOOT FILE MUST BE PLACED AT 0th SECTOR OF BOOT DEVICE
//

.code16
.section .text
.globl _start

_start:
    jmp main
    nop
    // DATA FOR IDENTIFICATION
UPFS_ident:                     .ascii  "U P F S DISK FS\0"
blockSizeInSectors:             .word   1
firstSpecialBlock:              .word   1
   
readSector:
    // IN:
    // DX - SECTOR NUMBER
    // SI - BUFFER ADRESS
   
    pusha
   
    movw %dx, %ax
    movw $0x12, %cx
    movw %si, %bx
    xor %dx, %dx
    div %cx
    mov %al, %ch
    shrb $1, %ch
    movb %dl, %cl
    incw %cx
    movb %al, %dh
    andb $1, %dh
    movb $1, %dh
    movw $0x201, %ax
    xorb %dl, %dl
    int $0x13
    jnc readSectorExit
   
   
readSectorExit:
    popa
    ret
   
printMessage:
    // SI - MESSAGE
    lodsb
    testb %al, %al
    jz printMessageExit
    movb $0x0E, %ah
    movb $0x07, %bl
    int $0x10
    jmp printMessage
   
printMessageExit:
    ret
   
main:
    movw %cs, %ax
    cmpw $0, %ax
    jne mainContinue
    movw $msgRecalling, %si
    addw $0x7C00, %si
    call printMessage
    call $0x7C0, $0
mainContinue:
    movw %cs, %ax
    movw %ax, %ss
    movw %ax, %es
    movw %ax, %ds
    movw $0, %sp
    movw %sp, %bp
    movw $msgStarting, %si
    call printMessage
   
mainExit:
    jmp mainExit

.section .data 
    // DATA FOR ROOTBOOT
msgStarting:                    .ascii  "UPOS loader starting...\n\r\0"
msgRecalling:                   .ascii  "Recalling...\n\r\0"
26K
21 июня 2011 года
mudBit
224 / / 30.05.2011
Стало работать. Репы добавил. Правда, зависало после реколинга, ну это ничего. Я исправил.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог