schedule
в uc_link
перед вызовом makecontext
schedule
так, чтобы она не возвращалась, а либо переключала контекст на следующий поток, либо (когда нет активных потоков) ждала создания нового потокаThread::func
С++, благодаря уже стандартным архитектурным решениям ООП, позволяет сделать это погружение легким
высокоуровневая логика четко отделена от возни с байтами
Но он же явно хотел в monitor_thread переключать контексты.
message
написано прямо в функции печати, то очевидный ответ на это: "не надо так делать". Хочешь напечатать сообщение -- передавай адрес строки с сообщением как параметр функции. ошибка появится если скопируешь и вставишь message db 'Flex OS' после первого message
string message = "hello";
string message = "world";
cout << message << ' ' << message;
message
, а как-то более осмысленно, например banner_message
, а другую строку -- по-другому, в соответствии тому, какую функцию она несёт? так значение cs в этой формуле это не логический адрес, а так же значение из регистра т.е. cs 48FE?
в интернете представлена такая формула в ином виде CS * 16+ IP это не одно и то же?
Если считать по ней получится 48FFF
cs:0019
-- правильный ответ. Но возможно имеется в виду адрес к которому обращается текущая инструкция, [#prog_3#a]
. Чему равен этот логический адрес написано наверху в окне кода -- ds:0000
, в физический адрес он транслируется ровно так же: ds * 10h + 0 = 48ed0h
объясните поподробней про формулу подсчета физического адреса
10h - это константа или откуда это значение?
ip - это из окна регистров?
Как получилось значение 48ff9?
48feh * 10h + 19h = 48fe0h + 19h = 48ff9h
решил количество "жизней" в игре накинуть ? :) Эх ты. Мамкин ревес-инженер.
nmake -- это не GNU make (который в тегах). В GNU make вывод команды помещается в переменную так:
VAR = $(shell команда)