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

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

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

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

03.06.2012, 20:30. Просмотров 382. Ответов 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 минут
может я не правильно ввожу строку?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 20:30     Асемблерный модуль и С++
Посмотрите здесь:

C++ Класс модуль
Модуль в С++ C++
модуль Масивы C++
C++ модуль от double?
[C++] ассемблерный модуль C++
C++ Модуль
Корень и модуль C++
модуль числа C++
C++ Модуль трансляции
C++ Модуль числа
ln^2 и модуль C++
не читает модуль в if() C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LK
Заблокирован
03.06.2012, 21:17     Асемблерный модуль и С++ #2
C++
1
2
3
__asm { // начало ассемблерной вставки
  //...
} // конец ассемблерной вставки
Ассемблер - это просто (Крис Касперски ака мыщъх)
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]
Yandex
Объявления
04.06.2012, 15:41     Асемблерный модуль и С++
Ответ Создать тему
Опции темы

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