реклама на сайте
подробности

 
 
> программа для i8086, поможете написать курсовую?
skef
сообщение Sep 1 2010, 08:49
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



в каких программах (компиляторах) можно написать программу для процессора i8086?


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 61)
zltigo
сообщение Sep 1 2010, 08:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (skef @ Sep 1 2010, 11:49) *
в каких программах (компиляторах) можно написать программу для процессора i8086?

Если Cи, то полагаю, оптимален Watcom. Ну, или любой борлондячий.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 1 2010, 09:09
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



на ассемблере.
нашел какой-то TASM и турбо дебаггер от борланд, но пока не понимаю как в нем работать.


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
Andron_
сообщение Sep 1 2010, 09:33
Сообщение #4


.NET developer
***

Группа: Свой
Сообщений: 218
Регистрация: 20-10-07
Из: Новосибирск
Пользователь №: 31 532



в блокноте)

а потом по табличке в машинные коды перевести :D
Go to the top of the page
 
+Quote Post
skripach
сообщение Sep 1 2010, 09:34
Сообщение #5


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
на ассемблере.

TASM+TLINK


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Sep 1 2010, 09:41
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(skef @ Sep 1 2010, 13:09) *
на ассемблере.
нашел какой-то TASM и турбо дебаггер от борланд, но пока не понимаю как в нем работать.
TASM - это консольный ассемблер, без интерфейса. Натравливаете его на файл - он его и компиллирует в .OBJ. Чтобы получить бинарный файл - нужен еще и линкер. TD - это только отладчик. Если нужна среда разработки - то ищите старый ДОСовский C или С++ от Борлада.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2010, 10:05
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (skef @ Sep 1 2010, 12:09) *
на ассемблере.

Ну тогда действительно tasm/tasm32 3.1 - для реалмодовых самое то. Естественно tlink/tlink32 ему в комплект.
QUOTE
но пока не понимаю как в нем работать.

Книжечку в библиотеке взять, хелпы к борладу почитать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 1 2010, 10:31
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



нифига не понятно.
в папке tasm.exe, tlink.exe, td.exe.
как в турбо дебаггере файл создать?
или как скормить ему .асм - файл?


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 1 2010, 10:50
Сообщение #9





Guests






Цитата
нифига не понятно.

Может лучше готовый курсовик поискать?
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 1 2010, 10:58
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Дебагеру скармливаются исполняемые файлы. Сперва необходимо скомпилировать и скомпоновать линкером.
Из коммандной строки. Например так:
c:\tasm\bin\tasm32 hellow.asm
c:\tasm\bin\tlink hellow.obj /t
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 1 2010, 11:01
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



TASM FAQ
Ну и вообще, смелее используйте поисковики


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 1 2010, 12:17
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



cheers.gif
Спасибо! Началось что-то получаться!


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
Deka
сообщение Sep 1 2010, 17:59
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 18-07-06
Из: Сочи
Пользователь №: 18 890



А ещё есть неплохой сайт WASM
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 1 2010, 19:31
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Deka @ Sep 1 2010, 20:59) *
А ещё есть неплохой сайт WASM

Это несколько из другой оперы - protected mode и winapi. Тут на банальном 8086 учебная задача поставлена.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 2 2010, 08:20
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



laughing.gif
как отображать то, что я набираю с клавиатуры?
и еще необходимо проверять, не введен ли пробел
пытался делать это так:

int 16h ; Читаем код нажатой клавиши, результат в ax
mov al,ax ;пересылаем ax в al============здесь компилятор сообщает об ошибке
int 29h ; Выводим al
cmp ax, ' ' ; введенный символ - пробел?
jz main ;если да, уйти на мейн

Сообщение отредактировал skef - Sep 2 2010, 08:21


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
Sergei_Ilchenko
сообщение Sep 2 2010, 08:24
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 180
Регистрация: 17-05-05
Из: Санкт-Петербург
Пользователь №: 5 128



>> mov al,ax ;пересылаем ax в al============здесь компилятор сообщает об ошибке

ax - регистр 16-ти битовый и "состоящий" из ah и al - 8-ми битовых регистров.

пытаетесь в 8 бит записать 16...
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 2 2010, 08:38
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



а так получится?
int 16h ; Читаем код нажатой клавиши
mov bl,al ;пересылаем из al в bl
mov ax,bx ;пересылаем из bx в ax
int 29h ; Выводим ax
cmp ax, ' ' ;нажатая кнопка - ПРОБЕЛ?
jz main

программа откомпилировалась. однако при запуске выдала не то, что я набирал, а два десятка нулей и собственно все.

Сообщение отредактировал skef - Sep 2 2010, 08:44


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 2 2010, 08:50
Сообщение #18


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Перед вызовом int 16h надо занести 0 в AH.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 08:58
Сообщение #19





Guests






...
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 2 2010, 08:59
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



теперь нули не показал. просто после введенного символа выдал окошко с сообщением:

С: \ WINDO WS\system32\cmd. exe
Процессор NTVDM обнаружил недопустимую инструкцию.
CS:0000 IP:0077 OP:f0 37 05 10 02 Для завершения работы приложения нажмите кнопку "Закрыть".


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 09:13
Сообщение #21





Guests






...
in_out: mov ah,0 ; Ожидаем нажатия и
int 16h ; читаем код клавиши
mov bl,al ; Сохраняем код
mov ah,0eh ; Выводим символ
int 10h ; на экран
cmp bl,' ' ; Если не нажата клавиша
jne in_out ; пробел, повторяем ввод
...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 2 2010, 09:32
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (skef @ Sep 2 2010, 10:38) *
а так получится?
int 16h ; Читаем код нажатой клавиши

А Вы уверены, что именно читаете? а AH что? А Вы уверены, что клавиша вообще нажата?
QUOTE
mov bl,al ;пересылаем из al в bl
mov ax,bx ;пересылаем из bx в ax

Совершенно нелепые действия.
QUOTE
int 29h ; Выводим ax

AX? Да ну?
QUOTE
cmp ax, ' ' ;нажатая кнопка - ПРОБЕЛ?

Круто, но что у Вас в AX? В в AH скорее всего мусор, но по любому AX не 0x20
Вообще-то все это почти хаотичный набор букв sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 10:08
Сообщение #23





Guests






Цитата
Вообще-то все это почти хаотичный набор букв

zltigo, ну что Вы издеваетесь над бедным студентом. smile.gif Он сам не понимает, что пишет.
И вряд ли поймет при таком подходе к делу. Сразу предлагал ему поискать готовый курсовик...
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 2 2010, 10:50
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



нашел несколько готовых курсовых. но это все не то. а защищать как же?
мне надо написать с 0 и до работующего по заданию.
по поводу асемблера - приходилось под микроконтроллеры (avr), но с i8086 я не знаком.


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 10:55
Сообщение #25





Guests






Цитата
мне надо написать с 0 и до работующего по заданию.

Вы даже задание не огласили...
А ввод-вывод я Вам написал в сообщении №21.
Пользуйтесь.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 2 2010, 11:03
Сообщение #26


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(skef @ Sep 1 2010, 13:09) *
на ассемблере.
нашел какой-то TASM и турбо дебаггер от борланд, но пока не понимаю как в нем работать.


MASM посмотрите


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 2 2010, 11:08
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (@Ark @ Sep 2 2010, 12:08) *
zltigo, ну что Вы издеваетесь над бедным студентом.

Слегка раззадорить - да, издеваться - нет. Задание, конечно, получить надо, но вообще-то скорее всего там банальщина к ASM имеющая 10-е отношение - несколько BIOS/DOS вызовов sad.gif.

QUOTE (dimka76 @ Sep 2 2010, 13:03) *
MASM посмотрите

Не стоит - TASM таки солиднее, а в IDEAL mode, действительно близок к идеалу.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 2 2010, 11:27
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



По запросу программы пользователь вводит с клавиатуры
последовательность целых трехзначных положительных десятичных чисел,
разделенных пробелами. Ввод последовательности заканчивается нажатием <Enter>.
Программа выводит эти же числа на экран в порядке возрастания величины числа,
причем в шестнадцатеричной системе счисления.

и вот как я это собирался сделать:
программа выводит текст введите числа
пользователь вводит числа, они отображаются, преобразуются в шестнадцатиричную форму.
по пробелу они запоминаются (массив). далее пользователь нажимает <Enter>,
и программа вычисляет наименьшее из массива.
далее это число удаляется из массива и вычислятся следующее число.
т.о. выводся в порядке возрастания.


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Sep 2 2010, 11:28
Сообщение #29


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(skef @ Sep 2 2010, 14:50) *
по поводу асемблера - приходилось под микроконтроллеры (avr), но с i8086 я не знаком.

Ну так для начала хотя бы систему команд надо глянуть, чтобы не копировать регистр сам в себя


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 2 2010, 11:34
Сообщение #30


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(zltigo @ Sep 2 2010, 14:08) *
Не стоит - TASM таки солиднее, а в IDEAL mode, действительно близок к идеалу.

TASM-то солиднее, но TASM умер. Только недавно пришлось переписывать TASM-овый код на MASM - у заказчика объектник не линковался MSVC 2005 - он только COFF кушает, OMF - все, окончательно помер sad.gif. И ничего - ML 8.0 очень даже нормально - со времен 5.0 (современник TASM 3.1) он сильно прибавил , даже с локальными метками разобраться малой кровью получилось. Что хотел сказать-то: изучить TASM приятней, а MASM (ML) - полезней smile.gif.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 2 2010, 11:45
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (VslavX @ Sep 2 2010, 13:34) *
TASM-то солиднее, но TASM умер.

Ну в данном случае речь идет явно таком-же мертвом "задании" sad.gif. Для написания чего-либо реального на ASM, естественно логичнее пользоваться тем
поддерживается сегодня.




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vvs157
сообщение Sep 2 2010, 11:55
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(skef @ Sep 2 2010, 14:50) *
приходилось под микроконтроллеры (avr), но с i8086 я не знаком.
Настоятельно советую очень внимательно ознакомится с синтаксисом классического ассемблера 8086. Обнаружите существенные отличия в идеологии по сравнению с 8-ми битными контроллерами. Также очень внимательно посмотрите описание ДОС'овских прерываний, что через что передается и получается. Не забудьте, что есть еще сегментные регистры.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 12:22
Сообщение #33





Guests






Цитата
Также очень внимательно посмотрите описание ДОС'овских прерываний, что через что передается и получается.

На самом деле, досовские функции для этой задачи нафиг не нужны, кроме одной - для корректного выхода
из программы. Для завершения программы поставьте в конце две инструкции:

mov ax,4c00h ; Установка кода фунции и кода выхода из программы
int 21h ; Завершение работы программы и выход в DOS

и на этом про DOS можно забыть.

Для ввода/вывода лучше пользоваться функциями BIOS, как показно в приведенном мною выше примере.
Ну а обработку данных, я думаю, студент сам в состоянии осилить, если говорит что писАл на ассемблерах...
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 12:48
Сообщение #34


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(@Ark @ Sep 2 2010, 16:22) *
Для ввода/вывода лучше пользоваться функциями BIOS

Сможете обосновать?
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 13:06
Сообщение #35





Guests






Цитата
Сможете обосновать?

DOS, также предоставляет функции ввода-вывода на терминал. Студенту рекомендую с ними познакомиться.
Но, насколько я смутно помню из своего немалого опыта, геморроя с ними всегда было больше, чем удобства.
Впрочем, как говориться, на любителя. Основной недостаток этих функций - недостаточная гибкость. Не все
можно через них ввести и вывести, так как это нужно, в отличие от функций BIOS.
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 13:14
Сообщение #36


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



А насколько я помню, ДОС обеспечивал как раз комфортную прослойку и минимизировал количество глюков как раз при вводе-выводе.
Могу ошибаться, но программы, написанные без использования прерываний BIOS работают без глюков под виндой и сегодня. Видимо, в виду своей большей универсальности в приложении к операционкам фирмы Microsoft.

В любом случае, новичку порекомендовал бы ограничиться ДОС`ом. Хотя для такого примитива разницы не вижу.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 13:25
Сообщение #37





Guests






Цитата
А насколько я помню, ДОС обеспечивал как раз комфортную прослойку и минимизировал количество глюков как раз при вводе-выводе.

Спорное утверждение. Понятие о комфортности, видимо, у нас с вами несколько различаются...
Цитата
Могу ошибаться, но программы, написанные без использования прерываний BIOS работают без глюков под виндой и сегодня. Видимо, в виду своей большей универсальности в приложении к операционкам фирмы Microsoft.

Программы, корректно написанные под DOS, нормально и без глюков работают со всей линейкой DOS-Windows.
У меня одна такая до сих пор используется. Кроме функций DOS, которые используются только для обращения к
файловой системе, в ней используются обращения к функциям BIOS: для ввода/вывода на экран, для работы
с COM-портом, для работы с сиcтемным таймером, и так далее... Все это работает нормально и без единого глюка
на всей линейке операционных систем от DOS 3.0 до Windows Vista включительно.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Sep 2 2010, 13:37
Сообщение #38


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(@Ark @ Sep 2 2010, 17:25) *
в ней используются обращения к функциям BIOS:[.....]для работы с COM-портом
Поопросный режим работы с СОМ-портом - очень ненадежно.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 13:41
Сообщение #39





Guests






Цитата
Поопросный режим работы с СОМ-портом - очень ненадежно.

Зависит от используемого протокола,... и используемого программиста. wink.gif
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 2 2010, 13:42
Сообщение #40


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(@Ark @ Sep 2 2010, 16:25) *
Программы, корректно написанные по DOS, нормально и без глюков работают со всей линейкой DOS-Windows.
У меня одна такая до сих пор используется. Кроме функций DOS, которые используются только для обращения к

Судя по всему осталось недолго. У меня недавно умерла последняя программа в формате .com (транслятор локальных меток) - не заработала под Windows 7 - ее просто невозможно запустить - format unsupported. Правда, у меня Home Premium 64-bit (досталась вместе с новым ноутом) . Возможно, версии семерки Professional+ c XP-mode еще поддерживают DOS-программы, но общее направление развития понятно. Еще аналогично померли широкораспространенные досовские bin2hex и hex2bin - перешел на srecord (давно пора).
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 13:55
Сообщение #41


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(@Ark @ Sep 2 2010, 17:25) *
Программы, корректно написанные под DOS, нормально и без глюков работают со всей линейкой DOS-Windows.

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

Так вот возвращаясь к понятию «комфорта». Под комфортом я как раз и имел в виду легкость, с которой достигалась эта корректность. Да и зачем тут спорить, не понимаю.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 14:04
Сообщение #42





Guests






Цитата
Да и зачем тут спорить, не понимаю.

Видимо, не только понятия комфорта, но и корректности написания у нас с вами не совпадают. sad.gif
Вот достал сейчас давно забытый Нортон Коммандер. Запустил. Замечательно работает из под XP.
И ни каких проблем. Потому, что корректно написан.
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 14:15
Сообщение #43


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



А вы откройте, например, Norton Disk Editor.
«Приложение произвело попытку прямого доступа к жесткому диску, что недопустимо. При работе приложения возможны ошибки. ...»
Видимо, написан дураками. Это только маленький пример. Можно много привести. Демки разные с низкоуровневым вводом-выводом. Винда либо не позвляет, либо умирает. Иногда все здорово, когда корректно «попроще» написано.
У нас с вами, действительно, не совпадают понятия. Все люди разные, ничего страшного в этом не вижу. smile.gif
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 14:28
Сообщение #44





Guests






Цитата
У нас с вами, действительно, не совпадают понятия.

Прикладной программе, работающей под ОС, лезть на прямую к "железу" практически всегда
некорректно. Если только речь не идет о специальных утилитах для тестирования. Работать же
через официально предоставленные интерфейсы - как DOS, так и BIOS - всегда корректно.
Все "кривые" досовские программы давно померли, а корректные - успешно дожили до висты.
Если у Вас свои представления о корректности, то я в этом не виноват. smile.gif
Go to the top of the page
 
+Quote Post
x736C
сообщение Sep 2 2010, 14:30
Сообщение #45


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Корректность задним числом не оценивается, но это так.. Вы не виноваты.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Sep 2 2010, 17:51
Сообщение #46


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(@Ark @ Sep 2 2010, 18:28) *
Прикладной программе, работающей под ОС, лезть на прямую к "железу" практически всегда
некорректно.
100% DOS'овских программ, работающих по прерываниям с СОМ-портом обращались напрямую с железом. Старое железо без FIFO под ДОСом в поопросном режиме на скорости больше 2400 пропускало байты из-за обращениям к диску. Весь софт, который использовал LPT не по прямому назначению работал напрямую с регистрами. Практически все ДОСовские САПР'ы имели свои драйверы графических плат для ускорения прорисовки сложной графики.

Цитата(VslavX @ Sep 2 2010, 17:42) *
Судя по всему осталось недолго. У меня недавно умерла последняя программа в формате .com (транслятор локальных меток) - не заработала под Windows 7
DOSBox ( http://dosbox.com ) Вас спасет. Работает даже под Линуксом
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 2 2010, 18:31
Сообщение #47





Guests






Цитата
100% DOS'овских программ, работающих по прерываниям с СОМ-портом обращались напрямую с железом...

Я же Вам говорю - не 100%. Когда-то специально писал для заказчиков программы для работы с компортом
через BIOS, зная что эксплуатировать их будут долго, а переписывать - никто не будет... Уже и DOS давно
отвалилась, и железный COM давно поменяли на USB-переходник, а местами, вообще, сэмулировали через
эзернет и/или интернет... А программки эти до сих пор периодически используют, потому как им все эти
новшества глубоко "по барабану". wink.gif
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 2 2010, 20:50
Сообщение #48


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(vvs157 @ Sep 2 2010, 20:51) *
DOSBox ( http://dosbox.com ) Вас спасет. Работает даже под Линуксом

DOSBox спасает только когда мы с дитенком на нем древний Duna Blaster гоняем (игрулина такая очень старая и коварная, вдвоем играть можно). А упомянутая мной программка это препроцессор исходных текстов, запускается gmake-ом на 8 ядрах, после него разные компиляторы, да вывод всего этого фильтруется перловским скриптом да кидается в MSVC для навигации по ошибкам. Может быть и можно этот колхоз как-то через DOSBox пропустить, только проще оказалось эту последнюю утилиту под Win32 переписать.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Sep 2 2010, 21:02
Сообщение #49


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(@Ark @ Sep 2 2010, 22:31) *
Когда-то специально писал для заказчиков программы для работы с компортом
через BIOS
Это крайне редкое явление (практически уникальное - ни одна коммерческая программа так не делала) в мире ДОС програм для СОМ порта.
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 4 2010, 07:35
Сообщение #50


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



можно поинтересоваться, как последовательно ввести введенные цифры в ОЗУ и вычислить значение введенного числа
(т.е допустим, вводим число 435, для компьютера это последовательность из 4, 3, 5. как дать процессору понять чтобы он
допустим, 5 умножил на 1, 3 на 10, 4 на 100, сложил бы их и т.о., вычислил бы введенное число.)
или я не совсем понимаю, что мне нужно сделать?
CODE

;По запросу программы пользователь вводит с клавиатуры
;последовательность целых трехзначных положительных десятичных чисел,
;разделенных пробелами. Ввод последовательности заканчивается нажатием <Enter>.
;Программа выводит эти же числа на экран в порядке возрастания величины числа,
;причем в шестнадцатеричной системе счисления.
;======================================================================
.model small ;определили модель памяти как small
.stack 128 ;выделели под программу 128 байт памяти
.data ;объявили сегмент данных
;mess db 'Hi man!$' ;определили переменную типа databyte размером 1 байт
next db '', 0Dh, 0Ah, '$' ;определили переменную типа databyte размером 1 байт
mess db 'vvedite chisla?', 0Dh, 0Ah, '$' ;определили переменную типа databyte размером 1 байт
endpr db 'end program', 0Dh, 0Ah, '$'
;db 0Dh,0Ah,24h
.code ;объявили сегмент кода
main:
;следующими двумя строками мы связываем адрес сегмента данных с его реальным расположением в памяти.
;Это связано с тем, что сегмент кода и сегмент данных расположены по одному и тому же
;адресу в памяти при инициализации программы.
mov ax,@data
mov ds,ax
;следующие три строки кода выводят на экран надпись "'vvedite chisla?"
lea dx,mess
mov ah,09h
int 21h
;================================
in_out:
mov ah,0 ; Ожидаем нажатия и
int 16h ; читаем код клавиши
mov bl,al ; Сохраняем код
mov ah,0eh ; Выводим символ
int 10h ; на экран
cmp bl,' ' ; Если не нажата клавиша
je space ; пробел, повторяем ввод
cmp bl,13 ; это клавиша ENTER?
je enter ; если нажата кнопке ENTER, перейти в подпрограмму ENT
:если не нажаты клавиши пробела и ентера, предполагаем что нажаты
;цифры, и последовательно сохраняем их (наверно, в ОЗУ?)
jmp in_out
;================================
;по нажатию пробел нужно последовательно извлечь все введенные
;цифры и вычислить значение введенного числа в десятичном виде
space:
lea dx,next;перевод на следующую строку
mov ah,09h
int 21h
lea dx,next;перевод на следующую строку
mov ah,09h
int 21h
jmp in_out
;================================
;по нажатию ентера вычислять числа в порядке возрастания,
;преобразовывать их в 16-ричные и выводить
enter:
lea dx,next;перевод на следующую строку
mov ah,09h
int 21h
lea dx,endpr;вместо ендпрограмм должен быть вывод чисел
mov ah,09h
int 21h
jmp in_out
;================================
;собственно последние две строчки корректно завершают программу
mov ax,4c00h
int 21h
end main


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 4 2010, 09:09
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



после сравнений с клавишами ентер и пробел, вставил:
CODE

;Ввод числа в виде строки
MOV AH,0AH ;в AH номер функции
LEA DX,BUF ;DS:DX адрес буфера для ввода
INT 21H

;Перевод строки в число, результат в DI
MOV DI,0
LEA BX,BUF+1 ;в BX адрес второго элемента буфера
MOV CX,[BX] ;в CX количество введенных символов
XOR CH,CH
MOV SI,1 ;в SI множитель
MET:
PUSH SI ;сохраняем SI (множитель) в стеке
MOV SI,CX ;в SI помещаем номер текущего символа
MOV AX,[BX+SI];в AX помещаем текущий символ
XOR AH,AH
POP SI ;извлекаем множитель (SI)из стека
SUB AX,30H ;получаем из символа (AX) цифру
MUL SI ;умножаем цифру (AX)на множитель (SI)
ADD DI,AX ;складываем с результирующим числом
MOV AX,SI ;помещаем множитель (SI) в AX
MOV DX,10
MUL DX ;увеличиваем множитель (AX) в 10 раз
MOV SI,AX ;перемещаем множитель (AX) азад в SI
LOOP MET;переходим к предыдущему символу

и перед мейном buf db 05,00,05 dup (' ') ;буфер ввода
теперь думаю, как их соеденить,
нужно ли перед входом в эту "часть программы" сохранять значения регистров (в стеке)?
и при нажатии спейса надо будет обнулять еще много чего...

устал от ассемблера. осталась всего неделя. проникнулся уважение к 8-разрядным микроконтроллерам.

Сообщение отредактировал skef - Sep 4 2010, 10:07


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Sep 4 2010, 11:37
Сообщение #52





Guests






Могу Вам дать несколько рекомендаций чисто по написанию программ на Asm.
Не пишите сразу много кода - иначе найти то, что работает не так, как Вы думаете, будет сложно.
Пишите небольшими порциями, добавляя их программу, и после этого каждый раз компилируя
и проверяя как это работает.

В данном случае, можно начать с ввода-вывода на экран.
Первоначально программа должна просто вводить символы и корректно выводить их на экран, и все.
По клавише Enter - пока должно происходить завершение программы и выход из нее.
Следующим шагом добавляете сохранение символов в буфере в процессе ввода. После завершения ввода
нужно вывести его содержимое на экран, чтобы проверить все ли сделано правильно.
Далее можно добавить обработку введенных символов из буфера, его преобразование и вывод уже
в шестнадцатеричной форме. Сделайте все пока только для одного числа.
Далее переходите к выделению и обработке уже трех чисел.
Далее добавляете сравнение и сортировку по возрастанию...

После добавления каждой порции кода, нужно также добавлять дополнительный отладочный вывод
на экран промежуточных результатов. Обязательно компилировать и смотреть как это работает.
Тогда будете видеть, все ли сделано правильно.

Не переходите к следующему шагу добавления очередной порции кода, пока не добьетесь того,
чтобы программа заработала именно так, как Вы задумали, и у Вас было бы полное понимание как
это работает. Если возникли какие-то сомнения в правильности - нужно вернуться на шаг или
на два назад, на сколько нужно.

P.S. Кстати, коды для завершения программы Вы вставили, но управление на них нигде не передается,
даже метки нет...
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 4 2010, 13:30
Сообщение #53


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



я так и делал. до вставки вычисления числа программа выводила введенные символы, при нажатии
пробела делала одно, при нажатии ентера - другое. если не нажато не то, не другое - третье
(это "скелет" программы) к тому же это не много кода, это что осталось после удаления всего лишнего.
но пока сложности с вычислением введенного числа. вставки чужого кода на асме это ужас.
выход после ентера пока не реализован, но по написании программы там будет вывод значений и выход.


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 5 2010, 08:28
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



В вашем коде есть что то итальянское - очень на спагетти похож wink.gif Добавление 2го куска кода сделало это все похожим на пиццу со спагетти smile.gif
Не надо так делать.

Разбейте вашу программу на логические куски и закодируйте ее в виде последовательности вызовов (в виде call ...). Определитесь что и как вы будете передавать каждой подпрограмме. Потом начинайте писать отдельные подпрограммы (они тоже могут вызывать другие подпрограммы)

Да, прежде всего напишите алгоритм, что и как должно делаться (можно просто на русском языке). Попытки сочинить алгоритм на ходу (в процессе написания программы) ни к чему хорошему не приведут
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 5 2010, 13:55
Сообщение #55


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



алгоритм работы программы я себе вполне ясно представляю. но с этим ассемблером у меня проблемы.
в первом куске кода все вроде бы нормально
(то, что вместо call и ret у меня система jmpов ничего преступного не означает - прога работает как запланировано),
второй кусок я пока удалил, не до него сейчас, надо запустить пока хотя бы в десятичном виде
пока думаю, как организовать массив (в примерах ничего не понятно. как его инициализировать,
как заносить в него числа и как к ним потом обращаться)


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 6 2010, 07:34
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(skef @ Sep 5 2010, 17:55) *
алгоритм работы программы я себе вполне ясно представляю. но с этим ассемблером у меня проблемы.
в первом куске кода все вроде бы нормально
(то, что вместо call и ret у меня система jmpов ничего преступного не означает - прога работает как запланировано),
Оно никак не работает - данные никуда не заносятся, а это и есть основная работа этой части программы.
Пока у вас с алгоритмом обстоит на уровне -
- Хочу построить автомобиль, уже все есть (руль и колеса), остались некоторые мелочи. Вот только с отверткой и гаечным ключом проблемы - не знаю с какой стороны за них браться.

Изложите алгоритм
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 6 2010, 08:22
Сообщение #57


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



1) программа стартует. выводит надпись "введите числа?"
2) пользователь вводит строку. нажимает пробел
(записывает вводимые числа в массив А)
3) при вводе пробела программа переводит число в строку
(перебираем массив A, умножаем элементы массивы на
соответвующие коэффициенты (10,100,1000 и т.д.), суммируем
получаем значение введенного числа, заносим в массив Б)
4) перевод курсора на следующую строку, ожидание сл.строки
(аналогично п.3)
5) пользователь вводит все числа, нажимает ентер.
(начинается сортировка массива Б по возрастанию
и вывод элементов массива)
6) завершение работы программы


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 6 2010, 08:33
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Это не совсем алгоритм - это описание работы программы с точки зрения пользователя. Но для начала и так сойдет.
Вопросы:
1) По пробелу программа ДЕЙСТВИТЕЛЬНО должна переводить строку? Или все же вводить все в одну строку?
2) Что должна делать программа, если пользователь ввел не число и не пробел?
3) Нужна ли возможность редактировать строку в процессе ввода?

Реализация - напишите реализацию алгоритма на каком нибудь псевдо языке, потом переводите его в ассемблер
Go to the top of the page
 
+Quote Post
skef
сообщение Sep 6 2010, 08:39
Сообщение #59


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 29-10-09
Из: брежнев
Пользователь №: 53 292



1) не должна. можно вводить в одну строку.
2) ничего не делать, ждать слудующего символа.
3) нет, не нужна.

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


--------------------
на любой элемент найдется мощность, которая его сожжет.
Go to the top of the page
 
+Quote Post
XVR
сообщение Sep 6 2010, 14:32
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(skef @ Sep 6 2010, 12:39) *
1) не должна. можно вводить в одну строку.
В таком случае можно воспользоваться функцией DOS'а (как в вашем 2м куске кода) - она введет всю строку сама

Цитата
что тактое псевдоязык, и зачем на нем писать, если потом все-равно придется писать на ассме - и опять те же проблемы встанут.
Для того и писать, что бы проблемы не встали - на псевдоязыке можно сосредоточится на описании алгоритма, а его реализация на асме будет тривиальной.

Например:
Код
Ввести строку (0A int 21h)
dst_index = 0
цикл
пропустить до цифры
если конец строки - выйти из цикла
прочесть цифры
записать в dst[dst_index]
увеличить dst_index
повторить
отсортировать dst[0 до dst_index-1]
цикл по i от 0 до dst_index-1
напечатать в hex dst[i]
повторить
exit

пропустить до цифры:
цикл
если достигнут конец массива с символами - выйти с флагом 'конец строки'
если текущий символ цифра - выйти
пропустить текущий символ
повторить

прочесть цифры:
ret = 0
цикл
если достигнут конец массива с символами - выйти из цикла
если текущий символ не цифра - выйти из цикла
ret = ret * 10 + (<текущий символ> - <код цифры '0'>)
пропустить текущий символ
повторить
вернуть ret
В каких регистрах и флагах что расположить (а так же реализацию сортировки и вывода) оставляю в качестве упражнения laughing.gif

Go to the top of the page
 
+Quote Post
Hlad
сообщение Sep 15 2010, 15:03
Сообщение #61





Группа: Новичок
Сообщений: 8
Регистрация: 10-09-10
Пользователь №: 59 413



Вставлю свои пять копеек
а). По поводу DOS/BIOS - если не пользоваться недокументированными функциями DOS - то никаких глюков не будет. BIOS действительно более гибок, но топикстартеру не нужны такие возможности, как вывод текста в произвольном месте произвольным цветом буква и фона. Так что прерывание 21h рулит smile.gif
б). Есть такая книжка, Зубков "Программирование на языке Ассемблера" - почитайте, в интернете в куче мест валяется в виде CHM-файла, там куча примеров.
в). Насчет ввести строку - по мне, исходя из постановки задачи, гораздо эффективнее читать побуквенно. То есть -
1. Запуск. Сброс используемых регистров, вывод приветственных надписей
2. Вызов функции 01h 21-го прерывания/ Здесь читается символ с клавиатуры. С эхом (то есть он появится на экране)
3. Если символ - цифра, то умножаем значение CX на 10 (на первом шаге там должен быть ноль) и прибавляем нашу цифру. Как символ в цифру превратить - писать? Если символ - пробел, то пишем в СХ 0, и переходим к шагу 5. Если символ - CR, то переходим к шагу 6
4. Переходим к шагу 2
5. Сюда мы попадаем, если прочитан пробел. Заносим число из CX в массив. Обнуляем СХ и переходим к шагу 2.
6. Сюда мы попадаем, если нажат Enter. Сортируем массив.
7. Переводим числа в 16-ричную систему (там довольно просто)
8. Выводим на экран
9. Бежим обмывать отметку.

Go to the top of the page
 
+Quote Post
АНТОН КОЗЛОВ
сообщение Sep 16 2010, 05:14
Сообщение #62


Местный
***

Группа: Участник
Сообщений: 344
Регистрация: 3-01-09
Из: УФА
Пользователь №: 42 894



Можно для 86-го процессора все на борланд-паскале компилировать. Ассемблерные вставки есть. Для i-7188 и rtu186 лучше не найти. Кстати, турбо-паскаль 5.5 на русском языке.
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 18:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.02103 секунд с 7
ELECTRONIX ©2004-2016