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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Soduga
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
#1

Assembler начало - C++

26.02.2011, 21:27. Просмотров 1120. Ответов 8
Метки нет (Все метки)

Здравствуйте подскажите пожалуйста в 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 неразрешенных внешних элементов
Объясните пожалуйсто.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2011, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Assembler начало (C++):

inline assembler VS чтение по указателю - C++
Доброе время суток. Задача состоит в чтении 1 байта по адресу указателя. Проблема с пониманием, что не так с типами операндов. char...

Пошаговая стратегия (начало) - C++
ребят тут такое дело. мне нужно написать пошаговую стратегию(для начала элементарную) на языке с++. для начала нужно создать 1)Класс...

Каретку в начало Edit'a - C++
нужно чтобы при переключении на контрол EDIT каретка переходила в начало на событие EN_SETFOCUS повесил POINT point; point.x=0; ...

c++ и assembler - C++ Builder
Ктонибудь знает какойнибудь код на ассемблере, а то в одной книжка прочитал: чтобы в c++ вставить код ассемблера нужно писать так: asm{...

Assembler в СBuilder - C++ Builder
С++ знаю хорошо, Ассемблер начал не давно изучать,часто пишу программы для кафедр с огромными вычислениями(двух ядерный 2.4Ггц может на час...

Классы начало - C++ Builder
Как записать результат в Edit1 при нажатии button1 в unit1.h записано : class myclass {public: int chet(); }; в срр...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
26.02.2011, 23:49 #2
А собственно функция PROC что, сама должна написаться? То, что прототип вы написали - это конечно хорошо, но реализацию бы тоже написать не мешало. Для полного, так сказать, просветления.
1
Soduga
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
27.02.2011, 08:34  [ТС] #3
Видимо я что то серьезно не понимаю, поясните.
0
Novice_1
3 / 3 / 1
Регистрация: 07.02.2011
Сообщений: 81
27.02.2011, 11:17 #4
Вы написали отдельно два куска кода. Не понятно где именно находится код функции proc?
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
27.02.2011, 12:14 #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 минуты
Всмысле в изначальном коде ошибок нет, но если подгонять ф-цию под ваш прототип, то получается несоответствие типов.
0
vital792
1990 / 1262 / 57
Регистрация: 05.06.2010
Сообщений: 2,213
27.02.2011, 13:14 #6
Цитата Сообщение от Soduga Посмотреть сообщение
в VS2010 создаю простой проект
в vs2010 не будет работать код написанный под дос. А судя по
Цитата Сообщение от Soduga Посмотреть сообщение
.MODEL SMALL,C
и
Цитата Сообщение от Soduga Посмотреть сообщение
INT 21H
это дос.

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

Добавление элементов в начало файла - C++ Builder
Дана структура типа Пациент. Не могу понять как добавить к элементов в начало файла#include <iostream.h> #include <stdio.h> #include...

Assembler начало. - Assembler
Привет. Есть желание изучать именно этот язык. До этого никогда не кодил. В интернете не мало статей и мануалов "с чего начать", но...

Начало изучения Assembler'а - Assembler
Приветствую вас, дорогие форумчане! Только начал изучать ассемблер соло, застопорился с самого начала, а помочь вокруг некому. Скачал...

Вход и выход из Assembler Delphi+Assembler - Assembler
Здравствуйте. Скажите пожалуйста, при систематическом входе и выходе из Assembler, содержание регистров теряется? Происходит сбой. unit...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.02.2011, 20:47
Ответ Создать тему
Опции темы

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