Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
1

Вызов подпрограммы для C

02.04.2014, 21:32. Показов 840. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возник вопрос ! Как вызвать код как подпрограмму на Си.
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
.386
.model flat, stdcall
option casemap :none
include kernel32.inc
includelib kernel32.lib
.data
    a db 9, 6, 9, 2, 3,
         8, 3, 8, 3, 2,
         7, 3, 7, 7, 7,
         6, 6, 3, 6, 6  
  row db 4
  col db 5
  max db ?
.code
    main PROC
    xor ebx,ebx
    xor ecx,ecx
    xor edx,edx
 
    movsx ecx,row        ; ecx = row
 
    forkrow:             ; for(i=5; i>0; i--)
    push ecx             ; mem ecx
    movsx ecx,col        ; ecx = col
    sub ecx,1            ; ecx = col - 1
    mov al, a[edx][ecx]  ; al = a[edx][ecx]
 
    forkcol:             ; for(i=4; i>0; i--)
    mov ah, a[edx][ecx-1]   ; ah = a[edx][ecx-1]
    cmp ah,al            ; al>ah
 
    jge @EndMin          ; else
    mov al,ah            ; al = ah
    
    @EndMin:
    loop forkcol
    cmp edx,0           ; один проход
    jz @EndTemp         ; для того чтоб
    mov bl,al           ; bl присвоить
    
    @EndTemp:           ; один из минимумов
    cmp bl,al           ; bl < al
    jl @EndMax          ; else
    
    
    @EndMax:
    mov bl,al           ; bl = al
    add edx,5    ; edx+=5
    pop ecx
    
    loop forkrow
    mov max,bl   ; MAX
 
invoke ExitProcess, 0
main endp
end main
Спасибо большое за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2014, 21:32
Ответы с готовыми решениями:

Вызов подпрограммы по движению мыши для свернутого приложения
По мотивам темы https://www.cyberforum.ru/vb-net/thread526667.html Использовал данные коды в своих...

Вызов подпрограммы
Вечер добрый. Я совсем плохо соображаю в Fortran и програмировании вообще, поэтому строго не...

вызов подпрограммы
у меня задание написать программу вычисления обьема цилиндра. простая программа будет выглядеть...

Вызов подпрограммы по ее адресу
Здравствуйте! Возможно ли вызвать подпрограмму по ее физическому адресу? Нужно написать программу,...

7
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,933
03.04.2014, 10:53 2
ЯНХНП, но могу догадаться, что речь идет об ассемблерной вставке
Примеры раз, два
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
03.04.2014, 16:36  [ТС] 3
нет нет ошибочка , нудно реализовать код как подпрограмму , данные передаются через стек!
я встал на том что бы реализовать циклы через стек.....
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
.686
.model flat, stdcall
include kernel32.inc
includelib kernel32.lib
 
.data
    a db 9, 6, 9, 2, 3,
         8, 3, 8, 3, 2,
         7, 3, 7, 7, 7,
         6, 6, 3, 6, 6  
  row db 4
  col db 5
  max db ?
.code
 
maxi proc
 
    push    EBP
    push    ESI
    mov     EBP, ESP
 
    mov     ECX, [EBP + 16]     
    mov     EBX, [EBP + 12]     
    mov     edx,[ebp+20]
    mov     edx,[esi][4*edx-4]
        lea edi,[edx*4]
        lea edx,[edx*4]
        imul edx,[ebp+16]
        sub edx,1
        add edx,esi
        sub edx,edi
        
    movsx ecx,row        ; ecx = row
 
    forkrow:             ; for(i=5; i>0; i--)
    push ecx             ; mem ecx
    movsx ecx,col        ; ecx = col
    sub ecx,1            ; ecx = col - 1
    mov al, a[edx][ecx]  ; al = a[edx][ecx]
 
    forkcol:             ; for(i=4; i>0; i--)
    mov ah, a[edx][ecx-1]   ; ah = a[edx][ecx-1]
    cmp ah,al            ; al>ah
    jge @EndMin          ; else
    mov al,ah            ; al = ah
    
    @EndMin:
    loop forkcol
    cmp edx,0           ; один проход
    jz @EndTemp         ; для того чтоб
    mov bl,al           ; bl присвоить
    
    @EndTemp:           ; один из минимумов
    cmp bl,al           ; bl < al
    jl @EndMax          ; else
    
    
    @EndMax:
    mov bl,al           ; bl = al
    add edx,5    ; edx+=5
    pop ecx
    
    loop forkrow
 
maxi endp
main PROC
    xor esi, esi
    
    mov ebx,col
    mov eax,row
    lea ecx,a
    
    push eax
    push ebx
    push ecx
    
    call maxi
    
    add esp,12
    mov max,ebx
    
    INVOKE      ExitProcess, 0
main ENDP
END main
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
09.04.2014, 19:22  [ТС] 4
хелп
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
18.04.2014, 17:19  [ТС] 5
все так же не могу разобраться ((
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
23.04.2014, 11:36  [ТС] 6
как быть ?
0
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
23.04.2014, 11:56 7
Дык, в сюшной проге обявить
C
1
2
#define byte signed char 
extern int maxi( byte *arr, byte row, byte col);
А в асме прописать
Assembler
1
2
public  maxi
maxi    proc C, arr:DWORD, row:BYTE, col:BYTE
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
23.04.2014, 20:12  [ТС] 8
да уже не через си , я описался просто, нужно как подпрограмму через стек
0
23.04.2014, 20:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2014, 20:12
Помогаю со студенческими работами здесь

Вызов подпрограммы SYSTEM
Добрый день, уважаемые пользователи форума. Мой вопрос заключается в следующем: при вызове...

Вызов dll из подпрограммы
Я сделал dll и вызов функции из мейна основной программы Я хочю, в мейне загрузить саму dll а...

Вызов подпрограммы из другого .bat
Здравствуйте. В общем мне нужно вызвать :loop из 1.bat в 2.bat. Как реализовать это?

Вызов подпрограммы из обработчика события
Добрый день! Пишу простенькую программу &quot;мигающий светодиод&quot;. Реализовал с использованием...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru