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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
#1

Асемблерный модуль и С++ - C++

03.06.2012, 20:30. Просмотров 388. Ответов 2
Метки нет (Все метки)

Программа должна считать количество слов вправо от самого короткого.
ввод строки должен быть реализован в модуле С++,
а ее обработка в асемблерном модуле.

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

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

помогите пожалуйста заставить это работать

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
// lr5_book.cpp : Defines the entry point for the console application.
//
 
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
 
extern "C" int _stdcall AddTwo(int i1,int i2);
extern "C" int _stdcall Probel(char* buff);
static char buff[40];
void main()
{   
    int cnt = 0;
    cout << "Enter string: ";
    cin >> buff;
    cnt = Probel(buff);
    cout << "Cnt = " << cnt <<endl;
    getch();
}
 
    /*/
    int one,two,rez;
    cout << "enter int1: ";
    cin >> one;
    cout << "enter int2: ";
    cin >> two;
    rez = AddTwo(one,two);
    cout << "rez = " << rez <<endl;
    /*/
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
58
59
60
61
.686
.model flat
    public _Probel@4
.data
    mlen        dw 0 ; длина самого короткого слова
    kol           dd 0 ; результат
 
.code
_Probel@4 proc
    push ebp
    mov ebp, esp
 
;------------------------------------------------------------------------------------------------
    mov ax,ds
    mov es,ax   
    cld     
    mov al,' '  
    mov cx,40
      lea di,[ebp+4]          ; [ebp+4] думаю что так надо было заменить имя буфера(строки)
    mov dx,di
 
 
contin:REPNE SCASW word ptr [ebp+4]
    je found
to_end: inc kol
    jmp exit1;    
    
found:  dec di
    cmp mlen,0
    je first
    sub di,dx
    cmp di,mlen
    jle new
    inc kol
    inc di
    add di,dx
    mov dx,di
    jmp contin
new:    mov mlen,di
    mov kol,0
    inc di
    add di,dx
    mov dx,di
    jmp contin
 
first:  
      sub di,dx
    mov mlen,di
    add di,dx
    inc di
inc di
    mov dx,di
    jmp contin  
exit1:
;-------------------------------------------------------------------------------
    mov eax,kol  ; возвращаю kol в модуль С++
    pop ebp
    ret 8
    
_Probel@4 endp
end
объект асемблерный код я компилирую через MASM 32 Editor
все вместе собирают 11й Visual Studio

Добавлено через 48 минут
может я не правильно ввожу строку?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 20:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Асемблерный модуль и С++ (C++):

ln^2 и модуль - C++
Как записать ln2|b-c2|

Модуль - C++
Разработать и отладить программу состоящую из модуля, который содержит процедуру, которая обнуляет элементы матрицы под главной диагональю...

Модуль в С++ - C++
Объясните пожалуйста, как создавать модуль(лучше на конкретном примере) в Borland C++ 3.1, а то никак не могу разобраться - нигде внятно не...

модуль числа - C++
всем приветик. помогите пожалуйста исправить ошибку. вот условие и пример: #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include...

модуль Масивы - C++
помогите написать код программы одномерн. Масив : Дано натуральне число N і одновимірний масив A1, A2, …, AN цілих чисел. Знайти три...

Модуль трансляции - C++
Что такое модуль трансляции? Из книги:

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
LK
Заблокирован
03.06.2012, 21:17 #2
C++
1
2
3
__asm { // начало ассемблерной вставки
  //...
} // конец ассемблерной вставки
Ассемблер - это просто (Крис Касперски ака мыщъх)
0
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
04.06.2012, 15:41  [ТС] #3
если бы все было так просто
нужно именно из другого файла подключать процедуру, написанную на языке ассемблера.

Добавлено через 1 час 56 минут
не могу разобраться как обращаться к переданной строке char* в ассемблерном модуле

Добавлено через 16 часов 18 минут
допустим если я передаю char* buff и в асемблерном модуле хочу к нему обратиться как к buff[esi], где esi - индекс, то как правильно это будет написать?

Assembler
1
2
3
4
5
[ebp+4][esi]
 
ebp+4+esi
 
ebp+4[esi]
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2012, 15:41
Привет! Вот еще темы с ответами:

не читает модуль в if() - C++
Вот отрывок проги ,почему у меня здесь выводит не максимальное по модулю значение,а просто максимальное значение w,first-double ...

Корень и модуль - C++
как записать без библиотеки &lt;math.h&gt; корень (x), модуль (x).

Модуль числа - C++
|1-|x||

Модуль числа - C++
Можно ли поставить выражения или числа в модуль в программе? В математике выглядит так: |2-7|=5 Я могу домножить ответ на -1,но меня...


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

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

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