Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 17.03.2021
Сообщений: 7
1
NASM

Ошибка компляции из-за ошибки в коде

18.08.2021, 12:51. Показов 1589. Ответов 6

Author24 — интернет-сервис помощи студентам
Я пишу(вернее пытаюсь) свою ОС. Значит решил я добавить систему ввода-вывода с клавиатуры, а мне выдается ошибка:
qkernel.asm:75: error: symbol `data' undefined
qkernel.asm:79: error: symbol `string' undefined
qkernel.asm:82: error: symbol `string' undefined
qkernel.asm:85: error: symbol `string' undefined
qkernel.asm:93: error: label `finish' changed during code generation [-w+error=label-redef-late]


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
    ;16-битная адресация, пока мы находимся в реальном режиме
    use16
    org 0x7c00
    start:
    jmp 0x0000:entry ;теперь CS=0, IP=0x7c00
    entry:
    mov ax, cs
    mov ds, ax
 
    ;очистить экран
    mov ax, 0x0003
    int 0x10
 
    ;открыть A20
    in al, 0x92
    or al, 2
    out 0x92, al
 
    ;Загрузить адрес и размер GDT в GDTR
    lgdt [gdtr]
    ;Запретить прерывания
    cli
    ;Запретить немаскируемые прерывания
    in al, 0x70
    or al, 0x80
    out 0x70, al
 
    ;Переключиться в защищенный режим
    mov eax, cr0
    or al, 1
    mov cr0, eax
 
    ;Загрузить в CS:EIP точку входа в защищенный режим
    O32 jmp 00001000b:pm_entry
 
    ;32-битная адресация
    use32
    ;Точка входа в защищенный режим
    pm_entry:
    ;Загрузить сегментные регистры (кроме SS)
    mov ax, cs
    mov ds, ax
    mov es, ax
 
    mov edi, 0xB8000 ;начало видеопамяти в видеорежиме 0x3
    mov esi, msg ;выводимое сообщение
    cld
    .loop ;цикл вывода сообщения
    lodsb ;считываем очередной символ строки
    test al, al ;если встретили 0
    jz .exit ;прекращаем вывод
    stosb ;иначе выводим очередной символ
    mov al, 7 ;и его атрибут в видеопамять
    stosb
    jmp .loop
    .exit
 
    jmp $ ;зависаем
 
    msg:
    db 'Quantum pre-alpha 0.001', 0
 
    ;Глобальная таблица дескрипторов.
    ;Нулевой дескриптор использовать нельзя!
    gdt:
    db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    db 0xFF, 0xFF, 0x00, 0x00, 0x00, 10011010b, 11001111b, 0x00
    gdt_size equ $ - gdt
 
    ;данные, загружаемые в регистр GDTR
    gdtr:
    dw gdt_size - 1
    dd gdt
 
        mov ax, data
    mov ds, ax
    
    mov ah,0ah
    lea dx,string
    int 21h 
    
    mov string+1,0ah
    
    mov ah,9
    lea dx,string+1
    int 21h
    
    mov ah, 10h
    int 16h
 
    mov ax, 4c00h
    int 21h
    finish:
    times 0x1FE-finish+start db 0
    db 0x55, 0xAA ; сигнатура загрузочного сектора
может можно как то это исправить? я не очень понимаю в чем ошибка. Помогите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2021, 12:51
Ответы с готовыми решениями:

Ошибка компляции
package ru.mail.track.jdbc; import java.sql.*; /** * Created by a.borodin on 23.11.2015. */...

Template ошибка компляции
Здравствуйте, есть код, при реализации класса пишет ошибку-невозможно разрешить идентификатор T,U,Z...

Ошибки в коде Qt - ошибка: undefined reference to `qMain(int, char**)'; ошибка: error: ld returned 1 exit status
Здравствуйте, есть проект в нем 2 ошибки, не очень понимаю как их можно решить. Помогите, буду...

Не понимаю, что за ошибка в коде. Скрин ошибки внутри
Я не понимаю, что за ошибка и как исправить, помогите, кому не трудно, разобраться... Работаю с...

6
Модератор
Эксперт по электронике
8515 / 4369 / 1648
Регистрация: 01.02.2015
Сообщений: 13,569
Записей в блоге: 9
18.08.2021, 15:10 2
tov_mayor, отвечаю с некоторым страхом - человек, пишущий ОС, уже знает язык программирования, а в вашем случае это явно не так, т.е. последуют другие вопросы по алгоритмам и другим инструкциям.

Первые 4 ошибки - нет определения сегмента с именем data, и нет переменной с именем string. Не знаю, насколько нужен в данном случае сегмент данных - разбирайтесь самостоятельно. Раз вы переключились в защищённый режим - после этого неработоспособны сервисы BIOS и DOS (прерывания int 16h, int 21h). Там что-то другое используют, вероятнее всего - прямой вывод в видеопамять и перехват прерывания от клавиатуры (вместе с другими аппаратными прерываниями).
Хотя в последнем могу и ошибаться - системное программирование никогда не интересовало.
2
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
18.08.2021, 20:45 3
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
отвечаю с некоторым страхом
И не зря:
1)
Загрузочный сектор - написан с ошибкой;
2)
jmp 0x0000 -
Цитата Сообщение от tov_mayor Посмотреть сообщение
;теперь CS=0, IP=0x7c00
CS=0, IP=0;
3)
переход в РМ - это, как минимум несколько килограмм, а не 512-ть байт;
4)
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Там что-то другое используют
Исключения - которые настраиваются в Interrupt Descriptor Table, IDT(= таймер, видео, звук, клава, хард остальные причандалы, это, как минимум), а ссылка на неё прописывается Global Descriptor Table, GDT;
5)
Под каждую задачу создается Local Descriptor Table, LDT, а ссылка на неё прописываетсяв в GDT;
6)
. . .
М)
Это, только минимум, что нужно знать, чтобы провести пару минут в РМ.


tov_mayor, Начните с п. №1, после этого начните на пару секунд ходить в РМ, изучайте этот РМ.
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
18.08.2021, 21:47 4
В догонку:

Цитата Сообщение от Constantin Cat Посмотреть сообщение
6)
. . .
М)
это
Ошибка компляции из-за ошибки в коде


3616 2916 = 6)
16 2916 = М)

16 - 3616 = 6616 = 10210 пунктов, которые Вы должны знать.
0
Модератор
2125 / 994 / 170
Регистрация: 23.07.2018
Сообщений: 3,344
Записей в блоге: 3
18.08.2021, 23:13 5
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Первые 4 ошибки - нет определения сегмента с именем data, и нет переменной с именем string. Не знаю, насколько нужен в данном случае сегмент данных - разбирайтесь самостоятельно.
И, таким образом, проще всего строчки 75-91 удалить совсем.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
18.08.2021, 23:19 6
politoto, Там всё удалять нужно.

я писал чуть выше.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
19.08.2021, 15:24 7
politoto,
Цитата Сообщение от Constantin Cat Посмотреть сообщение
CS=0, IP=0
Он переходит в эту точку, а там интерапты BIOS, которые CPU начнет выполнять как программу( хотя, там только адреса СS:IP прерываний.), CPU об этом не знает, и как послушная овца, начнет все выполнять(что там написано => X/3). Куда Юзер попадет X/3.


Я выше писал
Цитата Сообщение от Constantin Cat Посмотреть сообщение
10210 пунктов, которые Вы должны знать.
После 10-го - Юзер либо бросит это, либо попробует пройти на 20-тый левэл. И так пока не будет 80 : 90 - ый левел, но на этом уровне Юзер, уже стал: Кодером = Дальше либо "Фанат Идеи", либо "Это была моя Мечта".
0
19.08.2021, 15:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2021, 15:24
Помогаю со студенческими работами здесь

Ошибка после точки: найти причины возникновения ошибок в коде и исправить эти ошибки
#include <iostream> #include <conio.h> using namespace std; class suma { public: int s=7;...

Admin panel не правильно работает из-за ошибки в models.py Разобрался где в коде ошибка но как исправить её?
from django.db import models # Create your models here. from django.urls import reverse #...

Ошибка компляции после смены платформы с Windows CE (Compact Framework) на Windows (NET Framework)
Здравствуйте! Переделываю проект работавший под управлением WinCE чтобы он работал под WinXP....

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h...

Ошибка в коде взаимодействия клиента и сервера на основе протокола TCP/IP (ошибка в коде)
Задание: Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru