Форум программистов, компьютерный форум CyberForum.ru

Assembler начало - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Soduga
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
26.02.2011, 21:27     Assembler начало #1
Здравствуйте подскажите пожалуйста в VS2010 создаю простой проект. Ничего сложного:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
 
int PROC(char* tab, int len);
void _tmain()
{
    char string[10];
    int len;
    printf("vvedite stroky:\n");
    len=PROC(string,10);
    printf("\nstroka:\n%s\ndlina:\n%d", string, len);
    
 
}
и ассемблер
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
.MODEL SMALL,C
.CODE
FUNC PROC STRING:WORD, MAXLEN:WORD
 
MOV AH,1H
MOV BX,STRING
MOV DX,0
 
NACH:
 
    CMP DX,MAXLEN
    JE KON
    INT 21H
    MOV BYTE PTR [BX],AL
    CMP AL,13
    JE KON
    INC BX
    INC DX
    JMP NACH
 
KON:
 
INC BX
MOV BYTE PTR [BX],0
MOV AX,DX
RET
FUNC ENDP
END
Код то правелен. Но ошибка
gjsa.obj : error LNK2019: ссылка на неразрешенный внешний символ "int __cdecl PROC(char *,int)" (?PROC@@YAHPADH@Z) в функции _wmain
visual studio 2010\Projects\gjsa\Debug\gjsa.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
Объясните пожалуйсто.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2011, 21:27     Assembler начало
Посмотрите здесь:

Assembler в СBuilder C++ Builder
C++&Assembler. C++
C++ Builder c++ и assembler
Ребят C++ и Assembler(совместное) C++
C++ Inline Assembler & C++
Eclipse, c++, assembler C++
C++ Assembler или C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
26.02.2011, 23:49     Assembler начало #2
А собственно функция PROC что, сама должна написаться? То, что прототип вы написали - это конечно хорошо, но реализацию бы тоже написать не мешало. Для полного, так сказать, просветления.
Soduga
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
27.02.2011, 08:34  [ТС]     Assembler начало #3
Видимо я что то серьезно не понимаю, поясните.
Novice_1
 Аватар для Novice_1
3 / 3 / 1
Регистрация: 07.02.2011
Сообщений: 81
27.02.2011, 11:17     Assembler начало #4
Вы написали отдельно два куска кода. Не понятно где именно находится код функции proc?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
27.02.2011, 12:14     Assembler начало #5
Все вместе должно выглядеть примерно так:
C++
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
#include "stdafx.h"
 
int PROC(char* STRING, int MAXLEN);
void _tmain()
{
        char string[10];
        int len;
        printf("vvedite stroky:\n");
        len=PROC(string,10);
        printf("\nstroka:\n%s\ndlina:\n%d", string, len);
        
 
}
int PROC(char* STRING, int MAXLEN){
 _asm{
MOV AH,1H
MOV BX,STRING
MOV DX,0
 
NACH:
 
        CMP DX,MAXLEN
        JE KON
        INT 21H
        MOV BYTE PTR [BX],AL
        CMP AL,13
        JE KON
        INC BX
        INC DX
        JMP NACH
 
KON:
 
INC BX
MOV BYTE PTR [BX],0
MOV AX,DX
}
}
некомпилировал и ни чего не проверял, просто оформил как надо.

Добавлено через 7 минут
Пробежался глазами по коду, там ошибка: переменная MAXLEN размером 4 байта, а регистр DX имеет размер 2 байта, поэтому вот в этой строке:
Assembler
1
CMP DX,MAXLEN
компилятор заругается на разный размер. Выход - либо сделать переменную MAXLEN размером 2 байта, либо сравнивать ее с регистром EDX, который имеет размер 4 байта.

Добавлено через 2 минуты
Всмысле в изначальном коде ошибок нет, но если подгонять ф-цию под ваш прототип, то получается несоответствие типов.
vital792
1987 / 1259 / 57
Регистрация: 05.06.2010
Сообщений: 2,213
27.02.2011, 13:14     Assembler начало #6
Цитата Сообщение от Soduga Посмотреть сообщение
в VS2010 создаю простой проект
в vs2010 не будет работать код написанный под дос. А судя по
Цитата Сообщение от Soduga Посмотреть сообщение
.MODEL SMALL,C
и
Цитата Сообщение от Soduga Посмотреть сообщение
INT 21H
это дос.

Kastaneda, он видимо хотел не асм вставку, а отдельно компилировать функцию на асм, и подключить ее к проекту в виде obj файла
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
27.02.2011, 13:47     Assembler начало #7
Цитата Сообщение от vital792 Посмотреть сообщение
в vs2010 не будет работать код написанный под дос
Да, забыл об этом упомянуть. Давно я на АСМе не писал)
Soduga
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
27.02.2011, 20:30  [ТС]     Assembler начало #8
Спасибо большое. Подскажите тогда что можно засунуть как компилятор под wind7/64-bit?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2011, 20:47     Assembler начало
Еще ссылки по теме:

Нужен-ли assembler C++ программисту? C++
Коды Assembler в C/C++ C++
Что быстрее assembler или c++ C++
Можно ли в С++ встраивать код на Assembler C++
Можно ли написать ОС на Assembler'e и C++ C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
27.02.2011, 20:47     Assembler начало #9
Можно сделать ввод строки средствами С, для этого придеться немного переделать ассемблерный код и тогда все будет работать)
Yandex
Объявления
27.02.2011, 20:47     Assembler начало
Ответ Создать тему
Опции темы

Текущее время: 05:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru