Вопросы с тегами [dosbox]

1

голосов
3

ответ
8.9k

Просмотры

Coloured output in Turbo C++

My compiler is Turbo C++ v3.0 with DOS v5.0 emulated in DOSBox v0.74 I use this because Turbo C++ is the compiler with which my highschool has chosen to teach the C++ programming language. It has been stressed that I use this compiler while coding my final term project. I'm running Windows 8.1 (64 bit) with Intel Core i5-3317U CPU @ 1.70GHz For the sake of liveliness and in tribute to popular culture, I want my output screens to have green text. The following is what seemed to work : #include #include void main(){ clrscr(); textcolor(2); // text set to green colour (conio.h function) cprintf("\n\t Hello World"); // cprintf from conio.h cout
MisterGeeky
1

голосов
0

ответ
71

Просмотры

DOSBox вход MASM вместе с отлаживать

Я использую DOSBox MASM, чтобы узнать ассемблер. Тем не менее, я хочу внести свой вклад вместе с отлаживать. То есть, я хочу, чтобы выполнить свою программу построчно, а также внести свой вклад, как только приходит INT 21H. Я отладка в afdebug TEST.EXE Но как только он видит MOV AH, 01H INT 21H отладка просто пропускает через INT 21H и не подскажет любой экрана, чтобы принять ввод. Вот эта программа в случае: .MODEL МАЛЫЙ .STACK 64 .DATA MSG DB "ENTER ХАРАКТЕР: $" ORG 0030h LOL DB? .Code MOV AX, @ DATA MOV DS, AX LEA DX, MSG MOV AH, 09H INT 21H MOV AH, 01H INT 21H MOV LOL, AL MOV AH, 4CH INT 21H END
Jack621311
1

голосов
0

ответ
109

Просмотры

Приращение номер 5 раз в MASM

В следующей программе на языке ассемблера увеличить на единицу число в 5 раз, после того, как увеличивающиеся число, сообщение должно отображаться только один раз, но в моем случае, она отображается дважды. Ситуация не возникает, если вместо того, чтобы использовать NUM в качестве имени ячейки памяти, я использую только BL, как регистр для хранения значения входного и выполнять вычисления на нем. Почему так? DATA_HERE СЕГМЕНТ MSG DB "Введите число: $" MSG1 DB "НОМЕР ПОСЛЕ Инкрементирование 5 РАЗ: $" NUM DB? DATA_HERE КОНЕЦ CODE_HERE СЕГМЕНТНАЯ ASSUME CS: CODE_HERE, DS: DATA_HERE START: MOV AX, DATA_HERE MOV DS, AX LEA DX, MSG MOV AH, 09H INT 21H MOV AH, 01H INT 21H MOV NUM, AL; NEWLINE MOV AH, 02H MOV DL , 0DH INT 21H MOV DL, 0AH INT 21H MOV CL, 05H ПОВТОР: INC NUM декабря CL JNZ ПОВТОР LEA DX, MSG1 MOV AH, 09H INT 21H MOV DL,
Nisha
1

голосов
1

ответ
473

Просмотры

Как напечатать алфавит с последующим возвратом каретки и linfeed?

Печать аз. мов DL, 'A'; CMP DL, 'Z'; JGE Next; добавить DL, 01H; добавляет один к DL JMP addPrint;
1

голосов
1

ответ
895

Просмотры

ошибка написания цветной текст в сборе (8086) INT 10h \ ах = 9

Я сталкиваюсь странная ошибка в сборке (8086) при использовании DOSBox. Я пытаюсь напечатать текст, окрашены в зеленый цвет. это мой главный, когда я назвал функцию: мов бл, 2h; установить цвет (зеленый) мы дх, OFFSET str_msg; задать строку для печати называть WRITE_TEXT_IN_COLOR вызова NEW_LINE, и это функция WRITE_TEXT_IN_COLOR Proc WRITE_TEXT_IN_COLOR мов ах, 9 мов сх, 200; количество символов, которые будут покрашены INT 10h INT 21h в отставке ENDP WRITE_TEXT_IN_COLOR теперь, когда я запустить программу, это напечатать «требуется» текст, наряду с длинной стриг из «DDDDDD» я действительно оценят возможные решения.
bn12
1

голосов
2

ответ
4.9k

Просмотры

Монтаж - Как установить логическую переменную

Может кто-нибудь сказать мне, как установить логическую переменную в сборке TASM? Я искал в Интернете, и я не могу найти правильное объяснение. Благодаря тому, кто помогает.
KatomPower
1

голосов
1

ответ
121

Просмотры

Как изменить биты в полукокса в TASM?

Я должен написать программу, которая читает символы из файла, изменяя биты в каждом полукокса и записи изменений в новый файл в TASM. Я написал программу, которая читает символы из файла и записывать их в новый файл, но я не знаю, как изменить биты в полукоксе. Например, здесь будет мой файл с гольцов: а // 01100001 б // 01100010 с // 01100011 d // 01100100 Таким образом, если мы изменяем первый и второй бит 1, то вывод должен быть: с // 01100011 с // 01100011 с // 01100011 г // 01100111 Как изменить биты в полукоксе Вот мой код: .MODEL маленькими НЕСЕТ CS: код, DS: данные, SS: стек стек стек сегмент слова «сТЕК» с.в. 400h DUP (00) стек заканчивается ourFile сегмент данных пункт общественного 'DATA': с.в. 0FFFh byteInFile: 00 дБ, 00, Ручка '$': с.в.? outputTextFile: дб «TEXTOUT.CSV», 0 inputTextFile: дб «TEXT.CSV», 0 данных заканчивается WriteToFile макро байт толчок топора толчок Ого толчок сх нажимные дх мы ах, 40h мов Ого, слово PTR [рукоятка] мы сх, 1 Int 21h поп-ах поп-сх попы Ьх поп топор ENDM LOCALS @@ сегмент кода пункт общественного «CODE» OpenFile прок вблизи толчок ах нажимные де мы ах, 3Dh мов ал, 00h INT 21h JC @@ конец мов слова PTR ourFile, топор @@ конец : поп-ах поп топор в отставку OpenFile ENDP CloseFile ргос вблизи толчок топор толчка Ьх мов ах, 3Eh INT 21h @@ конец: поп-ах поп топор в отставке CloseFile ENDP readLinesInFile ргос вблизи толчок топор толчок йх толчок Ого толчок ого толчок си толчок ди мы си, де мы ди, 0 @@ повтор: мы ого, 01 мы ах, 3Fh INT 21h х @@ конец CMP аи 00 JE @@ конец // здесь мы должны изменить немного обугливается? // выводя символы толкать ах толчок де мы дли, байты PTR [Si] мы ах, 02h INT 21h поп дх поп ах WriteToFile байт PTR [Si] JMP @@ повторить @@ Конец: поп-ди-си поп поп сх поп BX поп дх поп-ах RET readLinesInFile ENDP начинает: мы ах, SEG данных MOV DS, AX MOV SI, смещение outputTextFile мов Cl, [Si] мы ч, 0 вкла се добавить си, се мы алы, 0 мов [Si], др; Мы создаем файл мы ах, 3ch мы сй, 0 мы де, офсетные outputTextFile INT 21h; сохранить ручки мов слово PTR [ручки], топор; Мы открываем файл мы де, смещение inputTextFile называют OpenFile мов Ьм, слово PTR ourFile мы дм, смещением byteInFile называют readLinesInFile; Мы закрываем файл мы Ье, слово PTR ourFile называют CloseFile JMP @@ Ok мов ах, 3Eh мов Ье, слово PTR [ручка] INT 21h @@ Ok: мы ах, 4ch INT 21h код заканчивается конец начала
Winston Churchill
1

голосов
1

ответ
2.4k

Просмотры

Перемещение персонажа из строки в регистр в Ассамблее [дублировать]

Этот вопрос уже есть ответ здесь: Основное использование immediates (квадратные скобки) в x86 Ассамблеи и Yasm 4 ответы NASM x86 16-битную адресацию режимы 1 ответ Вставка значения в массив и дисплей, NASM 1 ответ Я использую DOSBox и NASM для запуска эта программа. Я пытаюсь написать программу для сборки, которая принимает введенные пользователем строку, а затем принимает каждый символ из этой строки и помещает его в регистр. Я думал делать мы байт ал, msg2 будет делать трюк. Тем не менее, я получаю сообщение об ошибке, OBJ выходной драйвер не поддерживает один байт переездов». Как принимать один символ за один раз из строки и хранить его в реестр?% Включают„io.mac“.STACK 100h .data msg1 дб «Пожалуйста, введите ваше имя», 0 msg2 РАЗ 10 Дб 0 .code .STARTUP PutStr msg1; печать msg1 на выходе nwln GetStr msg2; строка ввода в первое пространство в таблице nwln PutStr msg2; строка вывода в регистре таблицы мов байт ал, msg2 PutStr топор сделано: .EXIT
Rubiks
1

голосов
1

ответ
238

Просмотры

Записывать запросы исполняемого файла в файловой системе (16 бит MS-DOS)

Вот моя ситуация: У меня есть исполняемый файл, который при запуске пытается открыть какой-либо файл. Файл отсутствует, поэтому ех не запускается. Конечно, нет никакого вывода о том, где поисках еха для данного файла (без пути, без имени файла, ничего). Теперь мой вопрос: есть ли способ, чтобы регистрировать все запросы исполняемого к файловой системе? Для того, чтобы сделать все труднее, то ех это 16-битный MS-DOS.
fh_spitfire
1

голосов
2

ответ
1.1k

Просмотры

Калькулятор в NASM

Я пытаюсь написать калькулятор в NASM (Asembly). Она не показывает никаких ошибок, но как-то после того, как я ввожу два числа, чтобы добавить их, программа просто застрял. ничего после этого не могу сделать. Вот код: орг 100h _start:; ЛОГОС мы ах, 9 мов ах, logo1 INT 21h мы ах, 9 мов ах, logo2 INT 21h; МЕНЮ мы ах, 9 мов ах, ramka1 INT 21h мы ах, 9 мов ах, wybór ИНТ 21h мы ах, 9 мов дх, dzialanie1 INT 21h мы ах, 9 мов дй, dzialanie2 INT 21h мы ах, 9 мов дй, dzialanie3 INT 21h мы ах, 9 мов ого, dzialanie4 INT 21h мы ах, 9 мов дх, dzialanie5 INT 21h мы ах, 9 мов де, ramka2 INT 21h мы ах, 9 мов дх, nwln INT 21h; Wybór DZIALANIA мы ах, 0 INT 16h CMP аль, '1' JE dodawanie CMP аль, '5' JE wyjscie dodawanie: мы ах, 9 мов ое, zmienna1 INT 21h мы ах, 0AH мов дй, bufor INT 21h LEA си, [ bufor +-] мы сй, 0 мы слы, «0» мов п.н., ди-ди добавить, си мов дл, [п.н.] вкл си CMP AX, 1 JGE .dziel толкать ЭРИ разл ЭРИ мы ECX, 0 .odwroc: мы Вх, ди-ди-мы, се добавить ди, Cx мы аль, [BX] вкл сй декабрь си CMP сй, си JL .odwroc поп-ах поп ах поп Cx RET tekst_na_liczbe: толчок BX толчок дх мы ах, 0 мы BX, 0 .petla: мы дх, 10 мул дх мы дли, [ си + BX] югу Д.Л., «0» добавить топор, дх вкл BX BX CMP, сх JL .petla поп йх поп Ьх RET извини, части кода на польском языке, но в целом следует понимать. Большое спасибо за вашу помощь! «0» мов п.н., ди-ди добавить, си мов дл, [п.н.] вкл си CMP AX, 1 JGE .dziel толкать ЭРИ разл ЭРИ мы ECX, 0 .odwroc: мы Вх, ди-ди-мы, се добавить ди, Cx мы аль, [BX] вкл сй декабрь си CMP сй, си JL .odwroc поп-ах поп ах поп Cx RET tekst_na_liczbe: толчок BX толчок дх мы ах, 0 мы BX, 0 .petla: мы дх, 10 мул дх мы дли, [ си + BX] югу Д.Л., «0» добавить топор, дх вкл BX BX CMP, сх JL .petla поп йх поп Ьх RET извини, части кода на польском языке, но в целом следует понимать. Большое спасибо за вашу помощь! [Си + BX] юг Д.Л., «0» добавить топор, дй вкл BX BX CMP, се JL .petla попа йха поп Ьх RET извини, части коды на польском языке, но в целом следует понимать. Большое спасибо за вашу помощь! [Си + BX] юг Д.Л., «0» добавить топор, дй вкл BX BX CMP, се JL .petla попа йха поп Ьх RET извини, части коды на польском языке, но в целом следует понимать. Большое спасибо за вашу помощь!
Inver
1

голосов
3

ответ
2.8k

Просмотры

MS-DOS командной строки набор / р

Я хочу создать MS-DOS .bat программы, которая запрашивает у пользователя, чтобы выбрать параметр, используя следующую строку: Установка / р = неавтоматический Выберите вариант: линия выполнена, но она ничего не делает, и продолжает выполнение остального пакетный файл без подсказки пользователя. Что случилось? Я попробовал это в DOSBox 0.74.
IllidanS4
1

голосов
1

ответ
585

Просмотры

DOSBox AutoExec дизайн меню

Я пытаюсь сделать (несколько) стильное меню DOS в качестве подарка для моего отца. Я был в состоянии получить всю систему меню, чтобы работать, но я хотел Gussy его с некоторыми персонажами окно для рисования и, возможно, цветной текст. В этом видео YouTube, пользователь показывает пример того, что я пытаюсь сделать (пример на 5:00 знак), но не объясняет, как эти символы быть оказаны. В Блокноте документе, оно отображается в виде дурацких символов. Мне нужно, чтобы сохранить файл с особым типом кодировки? Это может быть сделано только в блокноте (я использую TextEdit на Mac)? Может кто-нибудь дать пример меню, которое может быть добавлено в [AutoExec] конфигурации DOSBox в? Кроме того, я не уверен, если это возможно, но как цвет текста / цвет фона можно изменить? При запуске DOSBox на начальном этапе, он показывает свой экран приветствия с синим фоном и полем рисования персонажей, так что я думаю, что все это возможно. Я попытался с помощью экранированных символов Юникода, и я попытался с помощью острого капитала E (как показано в связанном видео), но они просто делают обалденный материал при запуске в DOSBox.
Quantastical
1

голосов
2

ответ
87

Просмотры

Obtaining a variable's value in Assembly Language

Возможно, глупый вопрос, но это мой первый проект в моем классе организации машины и у меня возникают некоторые проблемы. Приведенный ниже код предназначен для отображения «*» в центре экрана сверху вниз. Строка кода, которая обыкновение собираться является: MOV ES: [numLoops * 80 * 2 + (40 * 2)], BYTE PTR «*» Я понимаю, почему это не будет собираться, но я не знаю, что поставить на место из numLoops для того, чтобы получить его значение, так что каждый раз, когда строка кода выполняется он перемещается вверх строку, как numLoops получает убавления. Любые советы будут весьма признателен, спасибо. MyData СЕГМЕНТНАЯ numLoops DB 25 MyData КОНЧАЕТСЯ; ------------------------------------------ ------------------------------------- MyCode СЕГМЕНТ НЕСЕТ CS: MyCode, DS: MyData MainProg PROC MOV AX,
BCRwar1
1

голосов
1

ответ
170

Просмотры

DosBox останавливается, но без каких-либо ошибок в коде

Я написал код в сборке, чтобы загрузить файл в формате BMP. При запуске программы, отладчик не показывает никаких ошибок или предупреждений, но DosBox перестает работать. Спасибо за помощь! IDEAL MODEL небольшой СТЕК 0f500h DATASEG имя файла БД 'simonP.bmp', 0 указатель_на_файл с.в.? Заголовок 54 дБ DUP (0) Палитра дБ 256 * 4 DUP (0) ScrLine DB 320 DUP (0) 'Ошибка' ErrorMsg дБ, 13,10, '$' CODESEG старт: мы ах, @data мы DS, AX; графических режим мов ах, 13h INT 10h вызов OpenFile позвонить ReadHeader позвонить ReadPalette вызов CopyPalette вызов CopyBitMap ргос OpenFile XOR ал, ал мов Dx, смещение файла INT 21h х openError мов [указатель_на_файл], топор RET openError: мов ах, смещение ErrorMsg мов ах, 9h INT 21h RET ENDP OpenFile прок ReadHeader мы ах, 3Fh мы Ьй,
Dar
1

голосов
2

ответ
128

Просмотры

использование «DB» в Intel x86 архитектуры и DOSbox

Я немного новичок в архитектуре x86, а также сборку. У меня есть этот кусок кода, который я не могу понять. data1 СЕГМЕНТ DAT1 дб data1 «ABCDEFGH» ЗАКАНЧИВАЕТСЯ, который находится в начале кода. Позже мы используем этот data1 в коде: мы ах, data1 мов DS, топор я использую DOSBox как эмулятор и турбо-отладчик и там он показывает, как: мы ах, 0B14 Mov Д.С., ах Любую идею, почему? Я также не понимаю, использование БД в целом. Иногда он используется для отображения сообщения, иногда похожего на мой пример. Заранее большое спасибо :)
Ege
1

голосов
1

ответ
25

Просмотры

Сборочно-TASM: на экране кнопки в графическом режиме

Мне было интересно, что это самый простой способ узнать, была ли нажата мышь между определенным диапазоном пикселей, то есть, чтобы отобразить прямоугольную кнопку в графическом режиме и выяснить, если пользователь нажал на нее. Спасибо!
Omri Vidal
1

голосов
1

ответ
492

Просмотры

DOSBOX работы внешнего окна программы

Можно ли открыть файл эксплорер окна от Dosbox? Когда я пытаюсь открыть его, он показывает: «Эта программа не может быть запущена в режиме DOS.» Я типа run.bat в DOSBox, и я запускаю этот файл: run.bat: C: диск Windows CD System32 explorer.exe "HTTP: \\ test.com" спасибо!
morha13
1

голосов
1

ответ
811

Просмотры

С помощью петли на языке ассемблера с помощью DOSBox

Здравствуйте мне нужно, чтобы показать выход, как этот 9_8_7_6_5_4_3_2_1_0 Но я с трудностью для хранения «подчеркивания» временно и, как я заметил, как регистры DH, CH, BH, BL не могут быть использованы для вывода с помощью INT INT 21h. Вот мой код .MODEL маленький .stack .data .code начать: мы ах, 2 мов сй, 10 мы дл, 39h INT 21h обратно: мов дл, 5Fh INT 21h югу дл, 39 INT 21h цикла назад мы ах, 4ch INT конец 21h начать
user14
1

голосов
1

ответ
427

Просмотры

Ошибка при компиляции программы на ассемблере в DOSBox

Я в настоящее время компиляции программы на ассемблере в DOSBox, но я получаю некоторые ошибки. Может кто-то поможет мне исправить их? Я прилагаю скриншот с ошибками, которые я получаю на MASM и ссылки. Это мой код: DATA SEGMENT NUM1 DB? NUM2 DB? РЕЗУЛЬТАТ DB? MSG1 DB 10,13, "ENTER ПЕРВЫЙ НОМЕР умножать: $" MSG2 DB 10,13, "ENTER ВТОРОЙ НОМЕР умножать: $" msg3 DB 10, 13, "РЕЗУЛЬТАТ Умножение: $" КОНЕЦ КОДА СЕГМЕНТ НЕСЕТ DS: ДАННЫЕ, CS: КОД СТАРТ: MOV AX, ДАННЫХ MOV DS, AX LEA DX, MSG1 MOV AH, 9 INT 21H MOV AH, 1 INT 21H SUB AL, 30H MOV NUM1, AL LEA DX, MSG2 MOV AH, 9 INT 21H MOV AH, 1 INT 21H SUB AL, 30H MOV NUM2, А.Л. МУЛ NUM1 МОВ РЕЗУЛЬТАТ, А.Л. ААМ ADD AH, 30H ADD AL, 30H MOV BX, AX LEA DX, msg3 MOV AH, 9 INT 21H MOV AH, 2 MOV DL, BH INT 21H MOV AH,
PyRar
1

голосов
1

ответ
567

Просмотры

Реальное время сборки x86 событие нажатия клавиши TASM

Я пытаюсь сделать змей игру в TASM, но у меня есть проблема; Я не могу показаться, чтобы выяснить, как держать змея движется во время ожидания нажатия клавиши, потому что ах = 0 и INT 16h останавливает Змея и ждет нажатия клавиши. Может кто-то пожалуйста, помогите мне с этим?
user6181605
1

голосов
2

ответ
291

Просмотры

Why is my assembly code to find the largest number not working?

Я очень новой для программирования на ассемблере и честно, это первый код, который я когда-либо писал в компьютере (для сборки). Наибольшее число явно «9», но он показывает некоторый характер (не доступно в клавиатуре). Почему так? Thnx. .MODEL небольшого .stack 64 .data массива дБ 2,5,6,3,9,8 граф 7 дБ большого БД? .code основных процедурный далеко начать: мы ах, @ данные MOV DS, AX LEA Si, массив мы дл, [Si] мы большой, дли вкл си декабрь счетчик L1: MOV AL, [Si] CMP аль, большого JG largefound NoChange: вкл си декабрь счетчик CMP счетчик, 00h JNZ l1 largefound: MOV большой, аль вкл си декабрь счетчик CMP счетчик, 00h JNZ l1 мов дл, большое дополнение дл, 30h мов ах, 02h INT 21h мов ах, 4ch INT 21h Основной ENDP конец главной
gataers
1

голосов
1

ответ
180

Просмотры

Dos Assembly Program hanging during Interrupt

Следующая программа собирает без ошибки или предупреждения. Однако, когда я запускаю его он отображает «АБК» на вершине, а затем вешает DOSBox. Я использую NASM ассемблер и DOSBox. Я пишу NASM eex9_2.asm -o eex9_2.com [Org 0x100] JMP запуск oldisr: дд 0 kbisr: толчок ах толчок эсы мы ах, 0xb800 мов Э.С., ах XOR топор, топор Al, 0x60 мов байт [ES: 0] , 'А' мов байты [исп: 2], 'B' мов байты [ES: 4], 'K' мов Al, 0x20 из 0x20, аль попа-эс поп ах ИРЕШЬ старт: XOR топор, топор мы ы, ах мы Ax, [ES: 9 * 4] мы [oldisr], ах мы ах, [исп: 9 * 4 +-] мы [oldisr +-], ах мы слово [исп: 9 * 4], kbisr; магазин смещения на п * 4 мов [ES: 9 * 4 + 2], CS мов дх,
AhmedBilal
1

голосов
1

ответ
607

Просмотры

цвет текста Изменение в сборе (8086)

У меня есть эта сборка 8086 код (TASM), и текст, который печатается на экране фиолетовый и я не его в фиолетовый цвет (я нужен синий или черный), так как я могу изменить его? код: .MODEL маленький .stack 100h .data; -------------------------------------- -------------------------------------- playMS DB 'PIANO ++ по Реувен', 13, 10 DB 13,10 DB 'добро пожаловать! это ваш фортепиано: '13,10 'DB Пример: фортепиано нота (клавиша клавиатуры)', 13,10 DB 13,10 DB' C # (2) D # (3) F # (5) G # (6) # (7 )», 13,10 'DB C (Q) Д (ж) е (е) Р (г) С (т) А (у) В (и)', 13,10,13,10 БД 13,10 БД ' La Pila пункт не Perder су доблести, жулик MOV AX, BX; Эсто ламу ajusta я Suena PUSH AX ВЫЗОВ Ajustar; Pone ла Frecuencia ан-эль пуэрто. POP AX POP BX ВЫЗОВ Suena, Activa-эль-динамик у се desactiva. RET Bocina ENDP; ---------------------------------------------- ------------------------------; CONVERTIR MINUSCULA СИ ERA MAYUSCULA MINUSCULA PROC CMP AL, 65; 'А' JB Продолжать; С. Л. Tecla ES MENOR Que LA 'А' НЕТ HACE Нада CMP AL, 90; 'Z' JA Продолжать; С. И. Л. Tecla ES мЭРА Que LA 'Z' НЕТ HACE Нада ADD AL, 32; Convierte может Е scula ванной мин фунтов scula , Продолжать: RET MINUSCULA ENDP; -------------------------------------------- --------------------------------; Captura LA Текла CON LA NOTA QUE EL DESEA Новичок. Tecla PROC MOV AH, 8; Si ла сено, obtiene ла Nota INT 21H ВЫЗОВ MINUSCULA RET Tecla ENDP; ---------------------------- ------------------------------------------------; Cicla эль програм хаста дие-эль Новичок presione ла Тек ESC. ; Эль procedimiento reacciona Лас teclas indicadas ан-эль segmento де Datos. ; Cualquier Otra Tecla ES ignorada. ; La Текла presionada эс convertida мин £ scula, я дие ла табла ASCII; Trata distinto унас де Otras. ; Despu ,s де дие Када Текла эс presionada, эль Ciclo Vuelve аль Inicio у; се repite. ; Si ла Tecla presionada corresponde Una Nota музыкальный, эль C ¢ DIGO; correspondiente эс enviado аль Parlante. SPEAKER PROC COMIENZA: CALL Текла CMP AL, 'д'; DO альт JNE S1; SI NO ES LA Tecla ESPERADA, SALTA PARA LA VERIFICAR Siguiente. TONO 523, SI ES LA Текла ESPERADA, GENERA EL SONIDO CORRESPONDIENTE JMP COMIENZA; Despues DEL SONIDO REINICIA PARA ESPERAR OTRO SONIDO. S1: CMP AL, 'W'; RE альт JNE S2 TONO 587 СПМ COMIENZA S2: CMP AL, 'е'; М.И. альт JNE S3 TONO 659 СПМ COMIENZA S3: CMP AL, 'R'; FA альт JNE S4 TONO 698 СПМ COMIENZA S4: CMP AL, 'т'; SOL альт JNE S5 TONO 784 JMP COMIENZA S5: CMP AL, 'у'; LA альт JNE S6 TONO 880 JMP COMIENZA S6: CMP AL, 'и'; СИ альт JNE S8 TONO 988 СПМ NOSALTO1 SALTO1: СПМ COMIENZA NOSALTO1: СПМ COMIENZA S8: CMP AL, '2'; DO # альт JNE S9 TONO 554 СПМ COMIENZA S9: CMP AL, '3'; RE # альт JNE S10 TONO 622 СПМ COMIENZA S10: CMP AL, '5'; FA # альт JNE S11 TONO 740 СПМ COMIENZA S11: CMP AL, '6'; СОЛЬ # альт JNE S12 TONO 830 СПМ COMIENZA S12: CMP AL, '7'; SIB альт JNE S25 TONO 923 СПМ COMIENZA SALTO2: СПМ SALTO1 S25: CMP AL, 27; 27 = Tecla ESC (terminar). JNE SALTO2 RET SPEAKER ENDP; -------------------------------------------------- -------------------------- тзд PROC MOV AH, 9 LEA DX, playMS INT 21H RET тзд ENDP; -------- -------------------------------------------------- ------------------ RUN: MOV AX, @data MOV DS, AX ВЫЗОВ CLRSCR, чистые. ВЫЗОВ тзд; сообщ. ЗВОНИТЕ SPEAKER, звучать. MOV AX, 4C00H INT 21H; ------------------------------------------- --------------------------------- END RUN я не имею ничего против фиолетовые ... Спасибо всем! MOV AX, @data MOV DS, AX ВЫЗОВ CLRSCR, чистые. ВЫЗОВ тзд; сообщ. ЗВОНИТЕ SPEAKER, звучать. MOV AX, 4C00H INT 21H; ------------------------------------------- --------------------------------- END RUN я не имею ничего против фиолетовые ... Спасибо всем! MOV AX, @data MOV DS, AX ВЫЗОВ CLRSCR, чистые. ВЫЗОВ тзд; сообщ. ЗВОНИТЕ SPEAKER, звучать. MOV AX, 4C00H INT 21H; ------------------------------------------- --------------------------------- END RUN я не имею ничего против фиолетовые ... Спасибо всем!
1

голосов
1

ответ
303

Просмотры

Communicate with Arduino using 8086 assembly language

I need to use 8086 assembly language to connect with Arduino in my assignment. When I run the assembly program, the buzzer will sound. I run the assembly program using DOSBox. int buzzer = 11; int val; void setup() { pinMode(buzzer, OUTPUT); Serial.begin(9600); } void loop() { val = Serial.read(); if(-1 != val) { if('H' == val) { unsigned char i; for(i = 0; i < 80; i++) { digitalWrite(buzzer, HIGH); delay(1); digitalWrite(buzzer, LOW); delay(1); } for(i = 0; i < 100; i++) { digitalWrite(buzzer, HIGH); delay(2); digitalWrite(buzzer, LOW); delay(2); } } } } Above is my Arduino code. When COM1 receives 'H', the buzzer will sound. .MODEL SMALL .STACK 64 .DATA .CODE MAIN PROC MOV AX,@DATA MOV DS,AX MOV AH,00 MOV AL,11101011b MOV DX,00 MOV AH,1 MOV AL,'H' MOV DX,00 INT 14H MOV AX,4C00H INT 21H MAIN ENDP END MAIN Above is my assembly code. When I run the assembly code, it is supposed to send 'H' to COM1, and the buzzer will sound. However, nothing happens when I run the assembly program. What is the problem?
LianChyn
1

голосов
1

ответ
88

Просмотры

Работа с HTTP-запросов с x86 Ассамблеи в RealMode

Есть ли способ, чтобы выполнить запрос HTTP на языке ассемблера для Intel 8086 в RealMode (Работа с DOSBox)? У процессоров Intel обеспечивают программные прерывания, или доступ к сетевому драйверу? Есть ли место, где я могу найти объяснение?
Baruch
1

голосов
1

ответ
1.7k

Просмотры

Turbo Pascal BGI Error: Графика не инициализирован (использование InitGraph)

Делаю 7.0 программы Turbo Pascal для моего класса, он должен быть на графическом режиме. Сообщение появляется BGI Error: Графика не инициализирован (используйте InitGraph). Я уже использую InitGraph и graph.tpu и я определил маршрут как «C: \ TP7 \ BGI». Мой ТАК Windows 7, и я использую DosBox 0,74, я уже пытался вставить все файлы из папки BGI в BIN. Что я должен делать?
soulblazer
1

голосов
1

ответ
2.6k

Просмотры

Что это лучший способ для перемещения объекта на экране?

Я хотел бы знать, что это лучший способ для перемещения объекта на screen- для expample: если какая-то форма представлена ​​на экране (в графическом режиме), я хотел бы, чтобы переместить его влево и вправо с помощью клавиш со стрелками клавиатуры. Я знаю, как читать буфер клавиатуры. Важно то, что я хотел бы знать, как переместить что-то гладкое на экране. Я использую DOS-Box, с 8086 архитектурой. И Movment должен быть на графическом режиме (320x200).
Orange
1

голосов
1

ответ
2k

Просмотры

Как запустить 32 битое TASM скомпилированной программы на DOSBox

В настоящее время я пишу сборки программы, скомпилированные с TASM и связанные с Turbo Linker Я ищу способ компилировать и компоновать программу как 32-разрядную сборку вместо 16-битного. Я видел, что есть переключатель / 3 для TLINK команды (который вызывает Turbo Linker в 32-битном режиме), но я не могу показаться, чтобы быть в состоянии найти способ, чтобы составить программу как 32-бит с TASM. Короче говоря: я хочу знать, как я могу скомпилировать простую 32-разрядную программу через среду DOSBox с использованием TASM и TLINK.
Elian Kamal
1

голосов
0

ответ
37

Просмотры

NASM на DOSBox - Программа, казалось бы, сливается с другой программой

У меня странные проблемы с моим кодом ASM запущен в DOSBox. Я написал следующий код: раздел .text глобального начала старта:; Получение аргументов командной строки XOR Си, си XOR топор, топор мы байт [й], 0 мов Al, [DS: 80h]; Получение Аргументы длина строки мы си, топор; Хранение в индексном регистре байта мов [DS: 81h + Si], 0; Добавление символа завершения строки; Открытие файла мов ах, 82h; Имя файла адрес мы Al, 0; Режиме только для чтения мов ах, 3Dh; Вызов 3Dh прерывание INT 21h х выход мы BX, топор; Расчет числа линий мов сх, 0; Обнуление счетчика calclp: LEA DX, [ЬиЕ]; Получение буфера адресов мов ах, 3FH; Вызов чтения нажимной сх; Хранение счетчика мы ого, 40; Чтение 40 байт INT 21h; Вызов прерывания КСС топор, 0; Если ах = 0, никаких символов не были прочитаны -> EOF, выходя из JE FindLast добавить де, ах мы п.н., йх мы байт [Ds: п.н.], 0; Ввод нуля в конце строки поп-ой; Восстановление ого XOR Si, Si; Обнуление индекс LEA п.н., [ЬиЕ]; Получение адреса буфера calcchlp: мов дл, [BP + SI]; Получение полукокса из буфера ИНК си КСС дл, 0; Если ноль - конец буфера JE calclp; Чтение еще 40 байт КСС Д.Л., 0AH; Если новая строка - приращение счетчика JNE calcchlp; Если нет - продолжает цикл вкл сх JMP calcchlp FindLast: поп-сх Леа п.н., [пер]; Сохранение результата мов [п.н.], сх Lea п.н., [прощальный поклон]; Обнуление прощального поклона мов слова [п.н.], 0 MOV слово [BP +-], 0 суб ого, 0Fh CMP сх, 0; Если число строк = <15, первые и последние 15 строк являются одинаковым JLE ясно; В этом случае, просто выход, оставив прощальный поклон = 0 мов ах, 42h; Обнуление указателя файла в начало файла мы Al, 0h мы сх, 0 мов дх, 0 INT 21h flcalclp: Леа ого, [Buf]; Получение буфера адресов мов ах, 3FH; Вызов чтения нажимной сх; Сохранение строки счетчик мы ого, 40; Чтение 40 байт INT 21h; Вызов прерывания КСС топор, 0; Если ах = 0, никакие символы не были прочитаны -> EOF, хотя мы не должны достичь EOF здесь JE выход; В этом случае, это ошибка - выход добавить Dx, топор мы п.н., Dx мов байт [DS: п.н.], 0; Ввод нуля в конце строки поп-ой; Восстановление ой X си, си; Обнуление индекс LEA п.н., [ЬиЕ]; Получение адреса буфера flchlp: мов дл, [BP + SI]; Получение полукокса из буфера ИНК си КСС дл, 0; Если ноль - конец буфера JE flcalclp; Чтение еще 40 байт КСС Д.Л., 0AH; Если новый строка - декремент счетчика JNE flchlp; Если нет - продолжение цикла Декабрь сх CMP ого, 0; Если счетчик = 0, мы достигли 15-линии от конца JE getlastb; Переход к поиску фактический байтовый номер JMP flchlp; Вызов искать, чтобы найти точное число байтов getlastb: мов ах, 42h; Искать вызов мов Al, 1ч; Искомый от текущей позиции мов ого, 0; Смещение = 0 мов дх, 0 INT 21h х выход Lea п.н., [прощальный поклон]; DX: AX содержит смещение от начала, хранения его Mov [п.н.], ах мы [BP +-], дх мы ах, 42h; Обнуление указателя файла в начало файла мы Al, 0h мов ого, 0 мы дх, 0 INT 21h; Очистка экрана ясно: мы Al, 03h; 80x25, 16 цветов видеорежим мов ах, 0h; Включение видео в режиме прерывание 10h; Печать 15 строк Cx мов, 15; Счетчик линий 15 линий printlp: Lea де, [ЬиЙ]; Получение адреса буфера мы ах, 3Fh; Читайте функцию нажимной сх; Сохранение сх мов сх, 40; Количество байт для чтения INT 21h; Чтение в буфере КСС ах, 0 JE keyproc добавить Dx, ах мы п.н., де мы байт [DS: п.н.], 0; Ввод нуля в конце строки поп-ой; Восстановление ого XOR Si, Si; Обнуление индекс LEA п.н., [ЬиЕ]; Получение адреса буфера charlp: мов дл, [BP + SI]; Получение полукокса из буфера КСС дл, 0; Проверка, если символ равен нулю JE printlp; Если это, чтение другой линии КСС Д.Л., 0Ah; Проверка, если символ новой строки JNE printch; Если это не так, jumpt к печати его Декабрь ого; Уменьшение номера счетчик линий КСС ого, 0; Проверка счетчика = 0 JE keyproc; Если это так, мы печатали все линии, выход из цикла printch: мы ах, 02h; Вызов стандартного вывода записи INT 21h вкл си; Приращение индекс JMP charlp keyproc: мов ах, 0; Ожидание нажатия клавиши INT 16h КСС Al, 20h; если пространство, своп состояние JE подкачки CMP аль, 71h; если д, бросить JNE keyproc мов топор, 0; код выхода 0 JMP выход свопа: CMP байт [й], 0; Проверка переменной состояния JE toend; Если это 0, прыжки в последние 15 строк, в противном случае к первому tostart: мы байты [й], 1; Перестановка государственных мов ах, 42h; Вызов искать файл мы Al, 0; С самого начала мов сх, 0; Смещение 0 мов ах, 0 INT 21h х выход; Если ошибка - выход JMP ясно; Если нет - очистка экрана и печать текста toend: мы байта [й], 0; Перестановка состояния мов ах, 42H мов Al, 0; С начала LEA п.н., [прощальный поклон] мов сх, [BP + 16]; Смещение было рассчитан до того мы DX, [п.н.] INT 21h х выход JMP четкий выход: мы ах, 4Ch INT 21h секция .bss ЬаЯ: RESB 40; Текст буфера ул: RESB 1; Переменная состояния, пер: RESW 1; Количество линий прощальный поклон: RESD 1; Количество кулака байт последних 15 строк в принципе, я пытаюсь подсчитать количество строк в некотором файле, а затем быстро переключаться между отображением первого 15 и последние 15 строк указанного файла. Тем не менее, при выполнении моего кода моей программы кажется сливаться с какой-либо другой программой, то есть команды в моем коде следует некоторым другим команды совершенно чуждых мой код. Вот и пример: Мой код находится слева, а выход дизассемблер вправо. Вы можете видеть, что из суб сх, 0FH следующие команды что-то еще, а остальная часть этого кода заканчивается IRET, в результате чего в бесконечном цикле. Я использую NASM версии 2.12.01 и собрать исполняемые файлы для DOS с помощью NASM -f бен example.asm -o example.com. Я использую DOSBox версии 0.74 для выполнения собранных программ.
Verloren
3

голосов
1

ответ
328

Просмотры

Int 21h / ах = возвращает 39ч с AX = 3 при создании каталога

Я пытаюсь создать новый каталог в DOSBox. Я на Debian, используя MASM через DOSBox. Код очень прост, но он не работает. Я выполнил его с отладкой, и он возвращает ошибку 3 (AX = 0003h после выполнения). В соответствии с этим, ошибка в том, что путь не существует. Мой DOSBOX имеет C: диск, установленный на директории, где код .asm является. Я не понимаю, почему я получаю эту ошибку. Если я запускаю MkDir C: \ Каюта из командной строки DOSBox, это создаст Нуэво каталог без проблем .MODEL небольшой .stack .Code мов ого, смещение путь_к_файла мов ах, 39h INT 21h мы ах, 4ch INT 21h RET путь_к_файлу дБ "C: \ Nuevo", 0 конец
Bengalaa
1

голосов
1

ответ
254

Просмотры

Достижение 160x100 режима в x86 Ассамблеи

Я знал на некоторое время, что можно достичь псевдо 160 по 100 графический режим на IBM CGA с помощью CRTC, чтобы изменить высоту строки для двух пикселей. Я пытался сделать это в течение нескольких дней, теперь, приходя в тупик. В Open Source HD Graphics Intel® и Руководство утверждает Эталонные Intel Iris ™ Graphics программиста, я могу сделать это на странице 45 (или на странице 59 в формате PDF) путем записи максимального Scanline регистра, или это то, что я интерпретирую от него. Я пытался писать непосредственно в адрес памяти 3B5 со значением 00000001b или кода для 2-х линий развертки, я считаю. Это ничего не делал вообще, когда я тестировал его в DOSBox. Если вы хотите увидеть код, который я написал, который будет собираться в NASM: BITS 16 XOR BX, BX мов топора, 3b5h мы эс, топор мы ах, 00000001b мов BYTE [эс: BX], ах; написать 00000001b в 0x03b5: 0000, право? кли HLT Я не очень уверен, с вещами низкого уровня, как это, и любая помощь будет оценена.
verbicide
5

голосов
1

ответ
58

Просмотры

моя .exe программа не то, что я ожидал

мой источник MASM файл выглядит следующим образом: qq.asm предположить CS: codesegment codesegment сегмент мы ах, 0FFFFh мы DS, топор мы др, 00FFh мов BX, 0006h мов [BX], аль мы др, [0006] мы ах, 0 мов дй, 0 мы сх, 3 s: добавить дй, топоры петля сек мов топора, 4c00h INT 21h codesegment заканчивается концом я использую MASM программа создает EXE-файл, который с именем qq.exe.When я использую отладки QQ.exe -u, то инструктора являются на картинке: я смущен, что «мы аль, [0006]» инструктор в моей qq.asm обратился к «мам AL, 06» в QQ.exe. Любая помощь будет признателен.
feng smith
5

голосов
1

ответ
3.9k

Просмотры

решения уравнений программы на ассемблере

У меня проблема с моей простой программой в сборке. Я использую DOSBox и TASM. У меня проблема с программой. Операнд типы не совпадают по линии 76 78 80. Это после умножения. Я пытался сделать некоторые изменения, используя difftrent переменного размера; --------------------------------------------; Уравнение = (а + с * б) / г-2 * с,; -------------------------------------------- .MODEL маленький .stack 100h .data БД 0 дБ б 0 дБ с 0 дБ д 0 дБ результат1? result2 дб? message1 DB "Уравнение: (а + с * б) / г-2 * са = $" message2 дБ "Ь = $" message3 дБ "с = $" message4 дБ "d = $" message5 дБ "Результат = $". код запуска: мы ах, @ данные MOV DS, 9h INT 21h мы ах, 1h INT 21h суб аль, 30h; преобразование в вещественное числе MOV C, алы мов ах, SEG message4, получить д и сохранить в переменный MOV DS, AX MOV DX, офсетная message4 мы ах, 9h INT 21h мов ах, 1h INT 21h суб аль, 30h; преобразование в вещественное число мов д, аль мов аль, б; (А + с * б) ------------------------ ошибка мул C Добавить ах, а; ------------------------ ошибка толчок ах; сохранить текущие ах мы ах, C, D-2 * C --------- --------------- ошибка ЗЫ ах, 2 суб д, ах поп Ьх, получить предыдущий топор BX BX ДИВ; DIV ах: BX мы результат1, аль мы результат2, ах добавить result1,30h, преобразование в строку добавить result2,30h; преобразование в строку мов Al, результат1 мов Б.Л., result2 мов ах, SEG message5 MOV DS, ах мы дй, смещенных message5 мы ах, 9h INT 21h мы алы, результат1 мы бл, результат2 мы ​​дл, аль мы ах, 2h INT 21h мы дл, бли мы ах, 2h INT 21h MOV AX, 4C00h INT 21h конец начало
Mack
2

голосов
1

ответ
267

Просмотры

Можно ли иметь пакетный файл ввода текста в приложения?

т.е. имеющие пакетный файл автоматически вводить текст в дос окне, чтобы открыть игры? Я пытаюсь получить Elder Scrolls Daggerfall для автоматического запуска. Он имеет неудобное количество линий ввода перед фактически быть в состоянии играть. Линии я хотел бы его ввести в DOSBox являются: крепление куб.см: \ dosgames -freesize 1000 установить DC: \ dosgames \ dfcd -t CDROM -label Daggerfall с: кд \ Кинжал Кинжал Я пытался принимать более легкий путь и настройки на рабочем столе ярлык для запуска игры, как на вики, но не везло с этим.
Trey
2

голосов
2

ответ
119

Просмотры

Не удается получить доступ к файлу с другого диска

Я использую Windows 7 64bit OS и DOS окно Turbo C ++. Я хочу, чтобы написать простую программу для чтения текстового файла, содержащего одно целое число от E привода моей машины. Имя файла t.txt. Я написал следующий код: #include #include #include #include Int основной (Недействительными) {FILE * ввод; ИНТ данных; если ((вход = Еореп ( "Е: \\ t.txt", "г")) == NULL) Printf ( "Ошибка: Невозможно открыть"); еще {fscanf (вход, "% d", & данных); Е ( "успешно считаны в% D", данные); } Fclose (вход); вход = NULL; Геч (); } Но эта программа не может получить доступ к файлу, и каждый раз, когда он дает выход как: Ошибка: Не удается открыть В чем проблема с этим кодом? Пожалуйста помоги.
LSG
3

голосов
1

ответ
472

Просмотры

8086 Assembly: put variables area at beginning of code segment

I have a code segment which was located at sector 37 of boot.img file, and in my master boot record I loaded this code into memory 0x5678:0x1234, here is my asm code: [BITS 16] ;Set code generation to 16 bit mode ORG 0x1234 ;set addressing to begin at 0x5678:0x1234 mov ax, cs mov ds, ax mov es, ax call cls ;call routine to clear screen call dspmsg ;call routine to display message startdt: call date call cvtmo call cvtday call cvtcent call cvtyear call dspdate call time call cvthrs call cvtmin call cvtsec call dsptime jmp startdt ;use infinite loop to halt? cls: mov ah,06h ;function 06h (Scroll Screen) mov al, 0 ;scroll all lines mov bh,0x0a ;Attribute (light green on black) mov ch,0 ;Upper left row is zero mov cl,0 ;Upper left column is zero mov dh,24 ;Lower left row is 24 mov dl,79 ;Lower left column is 79 int 10H ;BIOS Interrupt 10h (video services) ret dspmsg: mov ah,13h ;function 13h (Display String) mov al,0 ;Write mode is zero mov bh,0 ;Use video page of zero mov bl,0x0c ;Attribute (light red on black) mov cx,msglen ;Character string is 25 long mov dh,3 ;position on row 3 mov dl,[center] ;and column 28 lea bp,[msg] ;load the offset address of string into BP int 10H ret msg: db 'Pradox V 0.1 Jiansong He',10,13 msglen: equ $-msg int 10H ret date: ;Get date from the system mov ah,04h ;function 04h (get RTC date) int 1Ah ;BIOS Interrupt 1Ah (Read Real Time Clock) ret ;CH - Century ;CL - Year ;DH - Month ;DL - Day cvtmo: ;Converts the system date from BCD to ASCII mov bh,dh ;copy contents of month (dh) to bh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h ;add 30h to convert to ascii mov [dtfld],bh mov bh,dh and bh,0fh add bh,30h mov [dtfld + 1],bh ret cvtday: mov bh,dl ;copy contents of day (dl) to bh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h ;add 30h to convert to ascii mov [dtfld + 3],bh mov bh,dl and bh,0fh add bh,30h mov [dtfld + 4],bh ret cvtcent: mov bh,ch ;copy contents of century (ch) to bh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h ;add 30h to convert to ascii mov [dtfld + 6],bh mov bh,ch and bh,0fh add bh,30h mov [dtfld + 7],bh ret cvtyear: mov bh,cl ;copy contents of year (cl) to bh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h ;add 30h to convert to ascii mov [dtfld + 8],bh mov bh,cl and bh,0fh add bh,30h mov [dtfld + 9],bh ret dtfld: db '00/00/0000' dspdate: ;Display the system date mov ah,13h ;function 13h (Display String) mov al,0 ;Write mode is zero mov bh,0 ;Use video page of zero mov bl,0x0a;Attribute mov cx,10 ;Character string is 10 long mov dh,4 ;position on row 4 mov dl,[center] ;and column 28 push ds ;put ds register on stack pop es ;pop it into es register lea bp,[dtfld] ;load the offset address of string into BP int 10H ret time: ;Get time from the system mov ah,02h int 1Ah ret ;CH - Hours ;CL - Minutes ;DH - Seconds cvthrs: ;Converts the system time from BCD to ASCII mov bh,ch ;copy contents of hours (ch) to bh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h ;add 30h to convert to ascii mov [tmfld],bh mov bh,ch and bh,0fh add bh,30h mov [tmfld + 1],bh ret cvtmin: mov bh,cl ;copy contents of minutes (cl) to bh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h ;add 30h to convert to ascii mov [tmfld + 3],bh mov bh,cl and bh,0fh add bh,30h mov [tmfld + 4],bh ret cvtsec: mov bh,dh ;copy contents of seconds (dh) to bh shr bh,1 shr bh,1 shr bh,1 shr bh,1 add bh,30h ;add 30h to convert to ascii mov [tmfld + 6],bh mov bh,dh and bh,0fh add bh,30h mov [tmfld + 7],bh ret tmfld: db '00:00:00' dsptime: ;Display the system time mov ah,13h ;function 13h (Display String) mov al,1 ;Write mode is zero mov bh,0 ;Use video page of zero mov bl,0x0a;Attribute mov cx,8 ;Character string is 8 long mov dh,5 ;position on row 5 mov dl,[center];and column 0 push ds ;put ds register on stack pop es ;pop it into es register lea bp,[tmfld] ;load the offset address of string into BP int 10H ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;variables;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; center: db 25 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;end variables;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; my emulator is dosbox, operation system is lubuntu running on Oracle VM virtual box, my own operating system is win8 x64 notice the variable field at the end of file, if I put this filed at the top, right after I updated my DS and ES register, I got a issue: cls and dspmsg subroutine won't work however if I change the value to center: db 30 or just put this field at the end of my code, it will work. Can someone explain why putting the variable field on top of my code and changing the value of my label will effect the program's performance? Does this has to do with my segment register? here is my loader: ;bit16 ; 16bit by default org 0x7c00 jmp short start nop bsOEM db "OS423 v.0.1" ; OEM String start: ;;load sector into memory & 5678h:1234h mov bx, 0x5678 ;segmented address mov es, bx ;move segemented address to es mov bx,0x1234 ;base address to bx mov ah, 02 ;function read sectors mov al, 01 ;# of sectors to load mov ch, 00 ;track to read mov cl, 02 ;sector to read mov dh, 00 ;head to read mov dl, 00 ;drive number int 0x13 ;call interrupt 13 jmp 0x5678:0x1234 ;jump to memory address ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;variables;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; msg: db 'Welcome to Pradox OS 0.1! Authored by Jiansong he', 10, 13, '$' mlen equ $-msg padding times 510-($-$$) db 0 ;to make MBR 512 bytes bootSig db 0x55, 0xaa ;signature (optional)
paradox
3

голосов
1

ответ
52

Просмотры

Открытие дескриптора файла в DOSBox очищает данные файла

В DOSBox 0.74, когда я пытаюсь открыть дескриптор файла на любой файл с помощью функции 3CH из INT 21h данных файла будет очищен, будучи постоянно уменьшается до 0 байт. Файлы я тестировал все были расположены в каталоге Windows 10 в документах, которая установлена ​​как диск Е в DOSBox. Вот код, который вызывает проблему. Он должен открыть, а затем закрыть дескриптор файла. CF никогда не устанавливается, поэтому никакого кода ошибки. Дескриптор файла в AX устанавливаются на 5. мов ах, varData Mov Д.С., топор, загрузите переменный сегмент в DS, слово переменная ручка определяются здесь, строка имя_файл определяются здесь мы ах, 3CH, выберите Открыть файл функция ручки LEA DX , Fname;
3

голосов
4

ответ
1.2k

Просмотры

о турбо с, работающим под окнами 7

Я использую Windows-64 битной laptop.i установлена ​​турбо с и писать программы с использованием DOSBox, но я не могу запустить программу .... если выбрано запустить его показать какое-то сообщение, как не: ех плзло дать решения этой проблемы
shana
4

голосов
2

ответ
3.4k

Просмотры

16 цветов для фона в текстовом режиме MCGA BIOS (AL = 03h)

MCGA поддерживает глубину цвета 4-бит, то есть 16 цветов. Но когда я пытаюсь напечатать все из этих цветов, я получаю только первые 8 из них, а остальные 8 просто дублировать их как на рисунке рис. Может быть, я делаю что-то здесь не так, или это все из-за DOSBox? Код (MASM, под DOSBox 0.74): НАЗВАНИЕ PROGRAM193; ------------------------------------- --------------------- .MODEL МАЛЫЙ .STACK 64 .DATA; -------------------- -------------------------------------- .Code MAIN PROC FAR MOV AX, @DATA MOV DS , AX MOV AX, 0600h; AH = 06h (прокрутка вверх окна); черный (0) MOV BH, 0Fh; 0 (черный) фон, F (белый) текст MOV CX, 0000h; верхняя линия, левая колонка MOV DX, 004Fh, финишная линия, правый столбец INT 10h; голубой (1) MOV BH, 1Fh MOV CX, 0100h MOV DX, 014Fh INT 10h; зеленый (2) MOV BH, 2Fh MOV CX, 0200h MOV DX, 024Fh INT 10h; циан (3) MOV BH, 3Fh MOV CX, DX-0300H MOV, 034Fh INT 10h; красный (4) MOV BH, 4Fh MOV CX, 0400h MOV DX, 044Fh INT 10h; пурпурного (5) MOV BH, 5Fh MOV CX, 0500h MOV DX, 054Fh INT 10h; Коричневый (6) MOV BH, 6Fh MOV CX, 0600h MOV DX, 064Fh INT 10h; светло-серый (7) MOV BH, 7Fh MOV CX, 0700h MOV DX, 074Fh INT 10h; -------------------------------; | Проблема начинается здесь ... | ; -------------------------------; темно-серый (8) MOV BH, 8FH MOV CX, 0800h MOV DX, 084Fh INT 10h; светло-голубой (9) MOV BH, 9Fh MOV CX, 0900h MOV DX, 094Fh INT 10h; светло-зеленый (А) MOV BH, 0AFh MOV CX, DX 0A00h MOV, 0A4Fh INT 10h; светло-голубой (B), MOV BH, 0BFh MOV CX, DX 0B00h MOV, 0B4Fh INT 10h; светло-красный (С) MOV BH, 0CFh MOV CX, DX 0C00h MOV, 0C4Fh INT 10h; светло-пурпурный (D), MOV BH, 0DFh MOV CX, DX 0D00h MOV, 0D4Fh INT 10h; желтый (Е) MOV BH, 0EFh MOV CX, DX 0E00h MOV, 0E4Fh INT 10h; белый (F) MOV BH, 0F1h MOV CX, DX 0F00h MOV, 0F4Fh INT 10h MOV AX,
yulian
2

голосов
1

ответ
731

Просмотры

Могу ли я запустить программу сборки, который переключается в защищенный режим в DOSBox?

Мы изучаем программу сборки, которая переключает в 386 процессор из реального режима в защищенный режим, а затем обратно в режиме реального времени. Программа составлена ​​с использованием TASM. Поскольку эта программа должна сделать некоторые привилегированные операции, и он должен начать в режиме реального времени, мы должны запустить его из DOS. Для этого мы сказали принести дискеты, чтобы мы могли загрузить DOS на компьютерах университета. Я интересно, если DOSBox может быть использован вместо. Но для этого нужно точно эмулировать I386 в защищенном режиме, а также в режиме реального времени, и я не уверен, если он делает это.
sashoalm

Просмотр дополнительных вопросов