Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
1

Вызываем функции из clib (библиотека Си) в DOS

18.05.2014, 18:25. Показов 3115. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вобщем, сбылась мечта идиота. Теперь, нежели писать свой ввод/вывод(осoбенно всегда напрягал ввод/вывод вещественных чисел на экран), можно воспользоваться стандартными ф-циями из библиотеки языка Си, той, что под вынью зовётся msvcrt.dll
Что получилось в итоге(за отправную точку было взято вот это):
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
format ms coff
; сохранять в 866 кодовой. 
include 'private\proc.inc'
extrn   __CMain ;обязательно для инициализации Си-библиотеки, отсюда будет вызван main
; объявляем все ф-ции, которые будем вызывать, внешними
extrn system
extrn printf
extrn scanf
extrn _getch
extrn exit
public  main    ; обязательно
section '_TEXT' code    ; тоже обязательно
; #include <stdio.h>
; #include <stdlib.h>
; void main (void)
main:
 
; system ("cls");
    ccall   system, @cls        ; это вместо invoke
; printf("Введите a:");
    mov ebx, 61h
    ccall   printf, entr, ebx
; scanf("%d",&a);
    ccall   scanf, tpi, a
; printf("Введите b:");
    inc ebx
    ccall   printf, entr, ebx
; scanf("%d",&b);
    ccall   scanf, tpi, b
; printf("Введите n:");
    mov eax, 6Eh
    ccall   printf, entr, eax
; scanf("%d",&n);
    ccall   scanf, tpi, n
; {d=(a*b)*n;}
    mov eax,[a] 
        imul    eax,[b] 
        imul    eax,[n] 
    mov [d], eax
 
; printf("(a+b)*n)=%d",d);
    ccall   printf, rslt, eax
; getchar();getchar();
    ccall   _getch
    ccall   exit,0
; }
section '_DATA' data    ; тоже обязательно, секции в Си зовутся именно так
@cls    db  'cls',0
entr    db  'Введите %c:',0
tpi db  '%d',0
rslt    db  '(a+b)*n)=%d',0
; int a,b,n,d;
; d=0;
d   dd  0
a   dd  ?
b   dd  ?
n   dd  ?
Что использовалось: Fasm 1.69.25, Waterloo(Watcom) wlink 1.8, макросы из fasm_macro_0.02.zip(в аттаче), clib3s.lib от OpenWatcom C ну и дос-экстендер dos4gw. Проверял под голым досом(без himem.sys и emm386.sys) - работает.
Вложения
Тип файла: zip fasm_macro_0.02.zip (123.0 Кб, 24 просмотров)
Тип файла: zip clib.zip (26.4 Кб, 24 просмотров)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2014, 18:25
Ответы с готовыми решениями:

Вызываем функцию
Привет. Проблема такая, есть кнопка. В скрипте, кнопка.onclick = функция(). А в этой функции, есть...

Вызываем метод из другого класса
Привет всем. Подскажите, как вызвать метод из другого класса? Уже час бьюсь, не могу вызвать...

Как использовать функции DOS?
Подскажите пожалуйста как испольовать функции DOS в ассемблере. Например такие как 1Bh или 1Ch без...

Стандартные процедуры и функции модулей CRT и DOS»
Наберите текст программы, представленный выше и измените его так, чтобы в верхней части окна...

3
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
19.05.2014, 03:24 2
Charles Kludge,
а всё тоже самое можешь добавить в F.A.Q. при этом добавив пожелания и предостережения?
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
19.05.2014, 10:27  [ТС] 3
Дык, надо определиться с Ваткомом — что из полугига всякого разного действительно нужно. К тому же хочу ещё попробовать подцепить граф. либу - графика у Ваткома довольно неплоха, тянет VESA, в отличие от Бугланда. Так что чуть попозже.
1
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
29.06.2014, 23:02  [ТС] 4
И ещё маленькая победа разума над сознанием: графика потихоньку поддаётся. VESA пока не получается — любая попытка выставить VESA-mode заканчивается зависоном хрюши под ресет. Похоже, DOS4GW не дружит с LFB. Но, зато теперь флаг Багамских островов, например, рисуется легко и непринуждённо.
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
;FASM bahama.asm bahama.obj
;wlink sys dos4g fi bahama.obj,D:\WC11\lib386\dos\CMAIN386.OBJ lib clib3s.lib,graph.lib
format ms coff
include 'private\proc.inc'
include 'gr.inc'
extrn   __CMain
extrn   _setvideomode
extrn   _setcolor
extrn   _rectangle
extrn   _polygon
extrn   _getch
extrn   exit
public  main
section '_TEXT' code
main:
    ccall   _setvideomode, _MRES256COLOR    ;mode X, 13h
; заливаем экран синеньким, точно подбирать цвета лень
    ccall   _setcolor, 7fh
    ccall   _rectangle,_GFILLINTERIOR, 0, 0, 320, 200
; выводим жёлтую полосу посерёдке
    ccall   _setcolor, 2a2a2ah;_YELLOW
    ccall   _rectangle, _GFILLINTERIOR, 0, 66, 320, 132
; и чёрный треугольник слева
    ccall   _setcolor, 0
    ccall   _polygon, _GFILLINTERIOR, 3, trio
 
gtfo:   ccall   _getch
    ccall   _setvideomode, _TEXTC80
    ccall   exit,0
section '_DATA' data
trio    dw  0,0, 100,100, 0,200
Всё ещё очень сыро, так что не обессудьте.
Вложения
Тип файла: zip bahama.zip (30.7 Кб, 16 просмотров)
0
29.06.2014, 23:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2014, 23:02
Помогаю со студенческими работами здесь

Как задекларировать функции DOS? [Delphi + Asm]
Здравствуйте, как задикларировать функции DOS в DELPHI, заранее благодарю. unit Assembler; ...

Как в DOS-BOX написать BAT-файл чтобы ЛЕГКО запустить DOS-программу ?
ВСЕМ ДОБРОГО ВРЕМЕНИ ! Надо на Windows_7 СРОЧНО запустить старую программу, написанную еще под DOS...

Написать программу, выводящую на экран номер версии DOS, а также системную дату и время на языке MS-DOS
написать программу,выводящую на экран номер версии DOS,а также системную дату и время на языке...

Когда DOS был жив, можно ли было переделать windows98 и > драйвера звуковой карты под DOS?
Если я правильно понимаю там прямая запись в порты(если на самом низком уровне) это ведь можно...

WmWare и DOS, как скопировать в DOS файлы
есть MS_DOS в wmWare как скопировать туда асcемблерные файлы с основного компа?

Какие функции есть для перевода из DOS-кодировки в Windows?
Какие функции есть для перевода из DOS-кодировки в Windows?


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

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