Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
1

Assembler начало

26.02.2011, 21:27. Просмотров 1259. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2011, 21:27
Ответы с готовыми решениями:

Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все...

Все положительные элементы поместить в начало массива В(n), а отрицательные элементы — в начало массива С(n)
Ребята. Помогите с задачей пожалуйста. Дан массив А(n). Все положительные его элементы поместить...

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

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

8
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
26.02.2011, 23:49 2
А собственно функция PROC что, сама должна написаться? То, что прототип вы написали - это конечно хорошо, но реализацию бы тоже написать не мешало. Для полного, так сказать, просветления.
1
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
27.02.2011, 08:34  [ТС] 3
Видимо я что то серьезно не понимаю, поясните.
0
3 / 3 / 0
Регистрация: 07.02.2011
Сообщений: 81
27.02.2011, 11:17 4
Вы написали отдельно два куска кода. Не понятно где именно находится код функции proc?
0
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
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
2008 / 1280 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
27.02.2011, 13:14 6
Цитата Сообщение от Soduga Посмотреть сообщение
в VS2010 создаю простой проект
в vs2010 не будет работать код написанный под дос. А судя по
Цитата Сообщение от Soduga Посмотреть сообщение
.MODEL SMALL,C
и
Цитата Сообщение от Soduga Посмотреть сообщение
INT 21H
это дос.

Kastaneda, он видимо хотел не асм вставку, а отдельно компилировать функцию на асм, и подключить ее к проекту в виде obj файла
0
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
27.02.2011, 13:47 7
Цитата Сообщение от vital792 Посмотреть сообщение
в vs2010 не будет работать код написанный под дос
Да, забыл об этом упомянуть. Давно я на АСМе не писал)
0
0 / 0 / 0
Регистрация: 26.02.2011
Сообщений: 3
27.02.2011, 20:30  [ТС] 8
Спасибо большое. Подскажите тогда что можно засунуть как компилятор под wind7/64-bit?
0
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
27.02.2011, 20:47 9
Можно сделать ввод строки средствами С, для этого придеться немного переделать ассемблерный код и тогда все будет работать)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2011, 20:47

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

Выписать в массив A с начало положительные числа X, а в начало второго массива B отрицательные числа X.
Из одномерного массива X(8) получить два других массива A(8) и B(8). Выписать в массив A с начало...

Все положительные элементы массива поместить в начало массива B, а отрицательные — в начало C
помогите не как не могу понять как записать код для задачи (Дан числовой массив A размера N. Все...

65. (7 б.) Дан массив A(n). Все положительные его элементы поместить в начало массива B(n), а отрицательные элементы – в начало массива C(n). Подсчита
65. (7 б.) Дан массив A(n). Все положительные его элементы поместить в начало массива B(n), а...

Переход начало и конец вывода строк:каким образом переходить по экрану на начало и конец списка строк?
Разработать процедуры "TOP" установки окна на начало файла и процедуры “BOT” установки на конец...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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