Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/40: Рейтинг темы: голосов - 40, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.12.2008
Сообщений: 3
1

Перевод из си в ассемблер.Сил моих больше нет.

22.06.2009, 19:18. Просмотров 8217. Ответов 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
float sum(float *a, int n);
 
/* … */
 
int i;
float p[N], res = 0;
for(i =0; i<n; i++)
{
  p[N] = 0.1 * i;
}
 
res = sum(p, N)
 
/* … */
 
float sum(float *a, int n)
{
  float r = 0.0;
  int i = 0;
  for(; i < n; i++)
  {
    r += *(a++ + i);
  } 
  return r;
}
а вот ассемблерный код:
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
;##############################
    .386
    .XMM
    .model flat, stdcall
    sum PROTO ,:DWORD,:DWORD   
;##############################
    .DATA 
    var_r   dw  0
    var_i   dw  0
    var_sm   dw  0
    var_res dw  0
        var_p   dw  50dup(0)
        var_dli_vur dw 0
;##############################        
    .CODE
start:
        MOV var_res,0
    mov esi,0d
; кладём в регистр esi число 0
    @@loop:   
; обьявили метку
        MOV var_i,esi
      MOV    cx,var_i
        MOV    AX,1d
        MUL cx
        MOV cx,10
        DIV cx
        MOV var_p[49d],ax
        inc esi  
        cmp esi,50d  
        ja @@loop          
 
        invoke sum, var_p, 50
;возможно не инволк, а команда call
        MOV var_r, eax
 
sum proc     var_a[50]:DWORD,
                  var_n:DWORD
         MOV   var_r,  0
         MOV   var_i,  0
         @@loop2:
         MOV var_dli_vur, 0
         MOV eax,var_dli_vur
         ADD eax, var_r
         ADD ax, var_i
         ADD var_dli_vur, var_a[ax]
         ADD eax, var_dli_vur
         ADD var_a, 1
         inc esi   
         cmp esi,0   
         ja @@loop2 
         return var_r
sum endp
end start
ошибки в ассемблерной коде:

sum proc var_a[50]:DWORD,ругается на квадратную скобку
return var_r ругается на ретерн
и пишет в конце fatal error:unmatched block nesting:sum



Ребят,выручайте!!!Спасите от самоубийства:wall:
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2009, 19:18
Ответы с готовыми решениями:

Огненная обезьяна WebBrowser (нет сил моих больше)
Уважаемые программисты! Взываю к Вашей любви к искусству программировать. Столкнулся (и бьюсь об...

Сил моих больше нет учиться в колледже на программиста
Здравствуйте, ищу совета. Учусь в колледже на программиста, но с каждым днём там у меня буквально...

Помогите выловить баг, сил моих больше нету(((
Программа глючит при добавлении больших структурированных каталогов, раньше думал, что ошибка...

Сил моих нет Денвер постоянно ругается на рабочие коды
Warning: session_start() : Cannot send session cookie - headers already sent by (output started at...

5
Эксперт С++
2919 / 1268 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
22.06.2009, 21:32 2
Что за компилятор-то для С? Любой из известных мне С-компиляторов умеет генерировать ассемблерный код, абсолютно точно соответствующий коду на Си.
Используй эту особенность. Опции командной строки зависят от компилятора.
0
инженер-системотехник
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
22.06.2009, 21:44 3
Ну всесто var_a[50]: DWORD нужно писать var_а dw 50dup(0), причем на строке ниже, чем SUM PROC...
В асме нет команды return, функция возвращает значение обычно в регистре AX...

Ну а по делу, то читай, что написал CheshireCat ))
0
68 / 24 / 2
Регистрация: 16.05.2009
Сообщений: 73
22.06.2009, 23:44 4
вообще это глупо передавать весь массив в качестве аргумента. передавайте указатель на первый элемент. А длинна у вас следом передается. Так что не страшно.
0
0 / 0 / 0
Регистрация: 05.12.2008
Сообщений: 3
23.06.2009, 02:28  [ТС] 5
Спасибо большое за ответы!
мы пишем свой компилятор))
о встроенном дисассемблере знаю)пользуюсь)
но там,вроде бы,используется ebp.а здесь мы его вроде как не используем...хотя наверно,я все напутала...
еще раз всем спасибо.
0
0 / 0 / 0
Регистрация: 24.05.2010
Сообщений: 3
24.05.2010, 09:56 6
подскажите пожалуйста как пользоваться встроенным дисассемблером :-)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2010, 09:56

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

Сил больше нет!
Всем привет! Комп - мать asus p8p67 rex1.xx, i5, gtx650, 8gb оперативки Проблема следующая: 1....

Виснет компьютер, сил больше нет
Здравствуйте, видел уже много подобных ситуаций, но ни один из советов мою проблему не решил. ...

Глючит Сеть нет больше сил
Есть чуть больше 15 копьютеров в сети. XP SP3. 1 2003 Server SP2 с 1С. Общая группа. Один из...

Не могу вывести сайт из-под АГС. Нет больше сил!
Свой сайт я создал еще летом в конце июля 2011 года http://seoslim.ru наполнял контентом в основном...


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

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

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