Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
ignisdivine
4 / 4 / 0
Регистрация: 27.03.2011
Сообщений: 38
1

Ошибки при слиянии Си и ASM

16.05.2011, 02:25. Просмотров 629. Ответов 0
Метки нет (Все метки)

Здравствуйте. При попытке компоновки и компиляции Си-шного файла и Ассемблерной процедуры
выдает "Too many registers in expression", хотя при написание процедуры, как отдельной программы, а массивов в виде arrayBy[bx][di] проблем (arrayBy dw). Обязательно ли необходимо переходить к двухрегистровой структуре? ([bx][di]) или есть варианты? Спасибо.

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
.model small
.stack 256
.data
 
    SiStep5x5       equ 10
    SiStep3x3       equ 6
    ShiftSTRSize5x5 equ 24
    ShiftCLMSize5x5 equ 6
    STRStep5x6      equ 12
    CLMStep         equ 2
    SizeStr3x3      equ 24 
    SizeClm3x3      equ 4
    SizeStr5x5      equ 48 
    SizeClm5x5      equ 8
   
    shiftStr        dw  ?
    shiftClm        dw  ?
    sum             dw  ?
    ;choice          dw 5
 
.code
 
public _myproc
 
_myproc PROC C arrayTo:dword, arrayBy:dword, choice:word
        
    mov ax, data
    mov ds, ax
    mov es, ax
    
    cmp choice, 5
    ;je  shift_by_strings5  
    jne @temp1
    JMP @shift_by_strings5
    temp1:   
    ; bx - moving in String
    ; di - moving in Columns
    
    mov shiftStr, -12
 
shift_by_strings:       
    sub ax,ax
    mov ax, shiftStr
    cmp ax, ShiftSTRSize5x5
    je quit
    
    add shiftStr, STRStep5x6
    mov shiftClm, -2
          
    
    
    shift_by_columns:
        sub ax,ax
        mov ax, shiftClm
        cmp ax, ShiftCLMSize5x5
        je shift_by_strings
        
        add shiftClm, CLMStep 
        mov bx, -12
        mov si, -6
        mov cx, 0 
        
      
        movings_in_strings:
            mov ax, SizeStr3x3            
            add ax, shiftStr
            
            cmp bx, ax
            je  writing
            
            add bx, STRStep5x6 
            add si, SiStep3x3
            mov di, -2
            
          
            
            movings_in_columns:
                cmp di, SizeClm3x3 
                je  movings_in_strings
                
                add  di, CLMStep
                inc cx
                
                push bx
                push di
                                                     
                add di, shiftClm
                add bx, shiftStr
                
                mov ax, arrayTo[bx][di]
                
                pop di
                 
                mov bx, si
                                                              
                mul arrayBy[bx][di]
                pop bx
                add sum, ax
                jmp movings_in_columns
                        
                
                
writing:
    push bx
    push di
    
    mov bx, shiftStr  
    mov di, shiftClm
    
    mov ax, bx
    add ax, STRStep5x6
    mov bx, ax
    
    mov ax, di
    add ax, CLMStep 
    mov di, ax
    
    mov ax, sum
    mov arrayTo[bx][di], ax
    
    pop bx
    pop di
    
    mov sum, 0
    
    jmp shift_by_columns 
    
     
;branch5x5:
shift_by_strings5:      
    
    mov shiftClm, -2    
    shift_by_columns5:
         
        cmp shiftClm, CLMStep 
        je quit
        
        add shiftClm, CLMStep 
        mov bx, -12
        mov si, -10
        mov cx, 0 
        
      
        movings_in_strings5:
                        
            cmp bx, SizeStr5x5
            je  writing5
            
            add bx, STRStep5x6
            add si, SiStep5x5       
            mov di, -2
            
          
            
            movings_in_columns5:
                mov ax, shiftClm
                add ax, SizeClm5x5
                cmp di, ax 
                je  movings_in_strings5
                
                add  di, CLMStep
                inc cx
                
                push bx
                push di
                                                     
                add di, shiftClm
                
                mov ax, arrayTo[bx][di]
                
                pop di
                 
                mov bx, si
                                                              
                mul arrayBy[bx][di]
                pop bx
                add sum, ax
                jmp movings_in_columns5
                        
                
                
writing5:
    push bx
    push di
    
    
    mov bx, 0
    add bx, STRStep5x6
    add bx, STRStep5x6  
    mov di, shiftClm
    
    mov ax, di
    add ax, CLMStep
    add ax, CLMStep
    mov di, ax
    
    mov ax, sum
    mov arrayTo[bx][di], ax
    
    pop bx
    pop di
    
    mov sum, 0
    
    jmp shift_by_columns5    
 
 
quit:                
                 
    mov ax, [arrayTo] ; exit to operating system.
    ret
 
_myproc ENDP
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
extern "C" {int** myproc(int arrayTo[5][6], int arrayBy[3][3], short what);}
 
int main()
{
    int i,j;
    short res=0;
    int matrix[5][6];
    int matrix_const[3][3];
 
 
    srand(time(0));
    fflush(stdin);
    clrscr();
 
 
    printf("\n Matrix to: \n");
 
    for (i = 0; i < 5; i++)
    {
 
        for (int j = 0; j < 6; j++)
        {
            matrix[i][j]=rand()%20;
            printf("%4d",matrix[i][j]);
        }
    }
 
    printf("\n Matrix of constants: \n");
 
    for (i = 0; i < 3; i++)
    {
 
        for (int j = 0; j < 3; j++)
        {
            matrix_const[i][j]=rand()%20;
            printf("%4d",matrix_const[i][j]);
        }
    }
 
 
 
    myproc(matrix,matrix_const,3);
 
    printf("\Result matrix:\n");
    for(i=0;i<5;i++)
            {
                printf("\n");
                for(int j=0;j<6;j++)
                    {
                        printf("%4d",matrix[i][j]);
                    }
            }
 
    getch();
    return 0;
}

Компилятор Borland C 3.1, Turbo Assembler 3.1

Добавлено через 4 часа 32 минуты
Попробывал изменить несколько. Но в ассемблерном файле остается ошибка
"Unexpected end of file encountered." Хотя процедуру оформил, вроде бы по синтаксису верно. Может кто-то подсказать в чем проблема?

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
.model small
.stack 256
.data
 
    SiStep5x5       equ 10
    SiStep3x3       equ 6
    ShiftSTRSize5x5 equ 24
    ShiftCLMSize5x5 equ 6
    STRStep5x6      equ 12
    CLMStep         equ 2
    SizeStr3x3      equ 24 
    SizeClm3x3      equ 4
    SizeStr5x5      equ 48 
    SizeClm5x5      equ 8
    arrayTo       dw ?
    arrayBy       dw ?
    shiftStr        dw  ?
    shiftClm        dw  ?
    sum             dw  ?
    ;choice          dw 5
 
.code
 
public _myproc
 
_myproc PROC C array1:word, array2:word, choice:word
        
    mov ax, data
    mov ds, ax
    mov es, ax
 
    mov si, [array1]        
    mov di, [array2]    
 
    mov [arrayTo], si
    mov [arrayBy], di
        
 
    cmp choice, 5
    ;je  shift_by_strings5  
    jne @temp1
    JMP @shift_by_strings5
    temp1:   
    ; bx - moving in String
    ; di - moving in Columns
    
    mov shiftStr, -12
 
shift_by_strings:       
    sub ax,ax
    mov ax, shiftStr
    cmp ax, ShiftSTRSize5x5
    je quit
    
    add shiftStr, STRStep5x6
    mov shiftClm, -2
          
    
    
    shift_by_columns:
        sub ax,ax
        mov ax, shiftClm
        cmp ax, ShiftCLMSize5x5
        je shift_by_strings
        
        add shiftClm, CLMStep 
        mov bx, -12
        mov si, -6
        mov cx, 0 
        
      
        movings_in_strings:
            mov ax, SizeStr3x3            
            add ax, shiftStr
            
            cmp bx, ax
            je  writing
            
            add bx, STRStep5x6 
            add si, SiStep3x3
            mov di, -2
            
          
            
            movings_in_columns:
                cmp di, SizeClm3x3 
                je  movings_in_strings
                
                add  di, CLMStep
                inc cx
                
                push bx
                push di
                                                     
                add di, shiftClm
                add bx, shiftStr
                
                mov ax, arrayTo[bx][di]
                
                pop di
                 
                mov bx, si
                                                              
                mul arrayBy[bx][di]
                pop bx
                add sum, ax
                jmp movings_in_columns
                        
                
                
writing:
    push bx
    push di
    
    mov bx, shiftStr  
    mov di, shiftClm
    
    mov ax, bx
    add ax, STRStep5x6
    mov bx, ax
    
    mov ax, di
    add ax, CLMStep 
    mov di, ax
    
    mov ax, sum
    mov arrayTo[bx][di], ax
    
    pop bx
    pop di
    
    mov sum, 0
    
    jmp shift_by_columns 
    
     
;branch5x5:
shift_by_strings5:      
    
    mov shiftClm, -2    
    shift_by_columns5:
         
        cmp shiftClm, CLMStep 
        je quit
        
        add shiftClm, CLMStep 
        mov bx, -12
        mov si, -10
        mov cx, 0 
        
      
        movings_in_strings5:
                        
            cmp bx, SizeStr5x5
            je  writing5
            
            add bx, STRStep5x6
            add si, SiStep5x5       
            mov di, -2
            
          
            
            movings_in_columns5:
                mov ax, shiftClm
                add ax, SizeClm5x5
                cmp di, ax 
                je  movings_in_strings5
                
                add  di, CLMStep
                inc cx
                
                push bx
                push di
                                                     
                add di, shiftClm
                
                mov ax, arrayTo[bx][di]
                
                pop di
                 
                mov bx, si
                                                              
                mul arrayBy[bx][di]
                pop bx
                add sum, ax
                jmp movings_in_columns5
                        
                
                
writing5:
    push bx
    push di
    
    
    mov bx, 0
    add bx, STRStep5x6
    add bx, STRStep5x6  
    mov di, shiftClm
    
    mov ax, di
    add ax, CLMStep
    add ax, CLMStep
    mov di, ax
    
    mov ax, sum
    mov arrayTo[bx][di], ax
    
    pop bx
    pop di
    
    mov sum, 0
    
    jmp shift_by_columns5    
 
 
quit:                
                 
    mov ax, [arrayTo] ; exit to operating system.
    
ret
 
_myproc endp
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
extern "C" int** myproc(int arrayTo[5][6], int arrayBy[3][3], short what);
 
int main()
{
    int i,j;
    short res=0;
    int matrix[5][6];
    int matrix_const[3][3];
 
 
    srand(time(0));
    fflush(stdin);
    clrscr();
 
 
    printf("\n Matrix to: \n");
 
    for (i = 0; i < 5; i++)
    {
 
        for (int j = 0; j < 6; j++)
        {
            matrix[i][j]=rand()%20;
            printf("%4d",matrix[i][j]);
        }
    }
 
    printf("\n Matrix of constants: \n");
 
    for (i = 0; i < 3; i++)
    {
 
        for (int j = 0; j < 3; j++)
        {
            matrix_const[i][j]=rand()%20;
            printf("%4d",matrix_const[i][j]);
        }
    }
 
 
 
    myproc(matrix,matrix_const,3);
 
    printf("\Result matrix:\n");
    for(i=0;i<5;i++)
            {
                printf("\n");
                for(int j=0;j<6;j++)
                    {
                        printf("%4d",matrix[i][j]);
                    }
            }
 
    getch();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2011, 02:25
Ответы с готовыми решениями:

При сборке выдает ошибку "MASM: fatal error A1000: : 1.asm.asm"
&quot;MASM : fatal error A1000: : 1.asm.asm :\1&gt;link16 /TINY 1.asm.obj,...

Не могу собрать проект на ASM и C из-за ошибки LNK2001
На виртуальной машине поставил MASM и Visual Studio 2005, все время в студии...

Как обработать ошибку при компиляции asm в батнике?
Добрый вечер, необходимо автоматизировать процесс ассемблирования и компоновки,...

Создание проекта с участием c++ и asm модулей. Ошибка asm модуля
Доброго времени суток! Подскажите, пожалуйста, как исправить данную ошибку...

Ошибки при компиляции под PIC16F628A (ASM)
Грубо говоря скопировал исходник, но вылезают ошибки: &quot; Symbol not previously...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2011, 02:25

Ошибка при слиянии
Друзья при слиянии документов ворд и ексел пустые ячейки в екселе при вставке в...

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

Вставить массив из базы при слиянии
Через пошаговый мастер слияния связываю документ ворд с базой ексель. (надо...


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

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

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