Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
2 / 2 / 0
Регистрация: 08.12.2017
Сообщений: 31
MASM

Error LNK2001: unresolved external symbol _stack

16.05.2019, 16:01. Показов 4240. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Вот такие ошибки. При гуглении нашел, только что нужно перустановить radasm, но больше склоняюсь что у меня код кривой. Нужен совет.

2-ю ошибку, пока еще, не смотрел.

Асемблируется, но при построении выдаёт ошибки:
Lab_5.obj : error LNK2001: unresolved external symbol _stack
Lab_5.exe : fatal error LNK1120: 1 unresolved externals


Код программы:
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
; Template for console application
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
 
Include kernel32.inc
Include masm32.inc
 
IncludeLib kernel32.lib
IncludeLib masm32.lib
 
         .CONST
MsgExit  DB    0AH,0DH, "Press Enter to Exit",0
 
         .DATA
         
         Zapros DB 'Inpute value: ',0 ; запрос     
         Result DB 'Result = ' ; поле результата
         ResStr DB 10 DUP (' '), 0 ; выводимое число
         
         A sdword ?
         B sdword ?
         E sdword ?
         D sdword ?
         n sdword ?
         X sdword ?
 
         .DATA?
    PUBLIC A, B, E, D, n, X
    EXTERN stack:near        
         
    Buffer DB 10 DUP (?) ; буфер ввода 
    inbuf  DB 100 DUP (?)
 
           
 
        
         .CODE
Start:
; 
;    Add you statements
;
    ; var A
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR A, EAX
    
    ; var B
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR B, EAX
    
    ; var E
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR E, EAX
    
    ; var D
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR D, EAX
    
    ; var n
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;?преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR n, EAX
    
    ; Вычисления
    
      ; сравниваем E и D  
    mov EAX, E
    cmp EAX, D
    JG  GREAT
    JE  EQUALLY
    JMP short LESS
           
    GREAT:          ; E > D   
       
       lea EBX,X ; получение адреса результата
       push EBX ; загрузка в стек адреса результата
       push B ; загрузка в стек второго числа
       push n ; загрузка в стек значения степени 
       push A ; загрузк в стек первого числа
             
       call stack; вызываем процедуру
       jmp   short CONTINUE  
       
    EQUALLY:        ; E = D
       mov EAX, A
       sub EAX, B    
       jmp   short CONTINUE
       
    LESS:           ; E < D
       mov EAX,A
       mul word ptr B
       jmp   short CONTINUE
                  
    CONTINUE:  
        mov X,EAX
    ; Преобразование
         
        Invoke dwtoa, X, ADDR ResStr
        
    ; Вывод
    
        Invoke StdOut, ADDR Result
        
        
        XOR EAX,EAX       
        Invoke StdOut,ADDR MsgExit
        Invoke StdIn,ADDR inbuf,LengthOf inbuf      
    
        Invoke ExitProcess,0
        End    Start
Код процедуры:
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
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
         
         EXTERN A:SDWORD,B:SDWORD,n:SDWORD
 
         
         .code
 
stack PROC
       
       push EBP
       mov EBP, ESP
             
       push EAX
       push EBX
       push ECX
       
       mov    EAX,[EBP+8]; A
       mov    EBX,[EBP+16]; B
       mov    ECX,[EBP+12]; n
 
       dec EBX; b-1                
       dec ECX 
            degree:
                mul A 
            loop degree 
       inc EAX; a+1
       div EBX; EAX/EBX 
 
       pop EAX
       pop EBX
       pop ECX
     
       ret 12
       
stack ENDP
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2019, 16:01
Ответы с готовыми решениями:

"Unresolved external symbol" при использовании GetLogicalDrives() в MASM32
Всем привет! .586 .model flat, stdcall extern GetLogicalDrives:near includelib D:\masm32\lib\kernel32.lib

Ошибка сборки "unresolved external symbol" при использовании ассемблерной вставки
Помогите пожалуйста исправить 2 ошибки. Очень долго мучаюсь Error LNK2019 unresolved external symbol _calc referenced in function...

error LNK2001: unresolved external symbol---fatal error LNK1120: 4 unresolved externals
Здравствуйте! Занимаюсь программированием не очень долго, прошу объяснить в доступных терминах для начинающего. Выполняя задание, добавил...

12
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
16.05.2019, 16:35
stack - зарезервированное слово. Назовите иначе.
0
2 / 2 / 0
Регистрация: 08.12.2017
Сообщений: 31
16.05.2019, 16:44  [ТС]
Назвал EgreatD. Тоже самое.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
16.05.2019, 18:57
В модуле нет завершающей директивы END без указания метки, как в основной программе.

Добавлено через 51 секунду
Приводите исходники.

Добавлено через 1 час 28 минут
Смотрите.
В модуле
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
 
          EXTERN A:SDWORD,B:SDWORD,n:SDWORD
 
      public    EgreatD
      .code
 
EgreatD PROC
..................................
       ret 12
 
EgreatD ENDP
end
Несмотря на явные именования, на выходе компилятора название процедуры будет _EgreatD@0
В конце добавляется @0 как количество байт, передаваемых в качестве параметров. Вы, скажите, что передаёте аж 12 байт, но компилятор об этом не знает, т.к. после слова proc нет ни одного параметра - значит их 0.

В основной программе
Assembler
1
2
3
4
.............
    EXTERN stdcall EgreatD@0:near
.................
       call EgreatD@0; вызываем процедуру
Всё.

Добавлено через 4 минуты
Если вам безразлично, чем пользоваться - замените в основной программе EXTERN на PROTO
Assembler
1
2
3
EgreatD     proto   stdcall
.....................
call EgreatD; вызываем процедуру
0
2 / 2 / 0
Регистрация: 08.12.2017
Сообщений: 31
17.05.2019, 12:37  [ТС]
Исправил, но ошибки те-же:

Lab_5.obj : error LNK2001: unresolved external symbol _EgreatD@4
Lab_5.exe : fatal error LNK1120: 1 unresolved externals

Основная программа
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
; Template for console application
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
 
Include kernel32.inc
Include masm32.inc
 
IncludeLib kernel32.lib
IncludeLib masm32.lib
 
         .CONST
MsgExit  DB    0AH,0DH, "Press Enter to Exit",0
 
         .DATA
         
         Zapros DB 'Inpute value: ',0 ; запрос     
         Result DB 'Result = ' ; поле результата
         ResStr DB 10 DUP (' '), 0 ; выводимое число
         
         A sdword ?
         B sdword ?
         E sdword ?
         D sdword ?
         n sdword ?
         X sdword ?
 
         .DATA?
    PUBLIC A, B, E, D, n, X
    EgreatD proto stdcall EgreatD:near        
         
    Buffer DB 10 DUP (?) ; буфер ввода 
    inbuf  DB 100 DUP (?)
 
           
 
        
         .CODE
Start:
; 
;    Add you statements
;
    ; var A
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразование в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR A, EAX
    
    ; var B
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразование в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR B, EAX
    
    ; var E
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразование в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR E, EAX
    
    ; var D
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразование в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR D, EAX
    
    ; var n
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;?преобразование в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR n, EAX
    
    ; Вычисления
    
      ; сравниваем E и D  
    mov EAX, E
    cmp EAX, D
    JG  GREAT
    JE  EQUALLY
    JMP short LESS
           
    GREAT:          ; E > D   
       
       lea EBX,X ; получение адреса результата
       push EBX ; загрузка в стек адреса результата
       push B ; загрузка в стек второго числа
       push n ; загрузка в стек значения степени 
       push A ; загрузка в стек первого числа
             
       call EgreatD; вызываем процедуру
       jmp   short CONTINUE  
       
    EQUALLY:        ; E = D
       mov EAX, A
       sub EAX, B    
       jmp   short CONTINUE
       
    LESS:           ; E < D
       mov EAX,A
       mul word ptr B
       jmp   short CONTINUE
                  
    CONTINUE:  
        mov X,EAX
    ; Преобразование
         
        Invoke dwtoa, X, ADDR ResStr
        
    ; Вывод
    
        Invoke StdOut, ADDR Result
        
        
        XOR EAX,EAX       
        Invoke StdOut,ADDR MsgExit
        Invoke StdIn,ADDR inbuf,LengthOf inbuf      
    
        Invoke ExitProcess,0
        End    Start
Модуль
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
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
         
         EXTERN A:SDWORD,B:SDWORD,n:SDWORD
 
         
         .code
 
EgreatD PROC
       
       push EBP
       mov EBP, ESP
             
       push EAX
       push EBX
       push ECX
       
       mov    EAX,[EBP+8]; A
       mov    EBX,[EBP+16]; B
       mov    ECX,[EBP+12]; n
 
       dec EBX; b-1                
       dec ECX 
            degree:
                mul A 
            loop degree 
       inc EAX; a+1
       div EBX; EAX/EBX 
 
       pop EAX
       pop EBX
       pop ECX
     
       ret 12
              
EgreatD ENDP      
        
        End
Добавлено через 10 минут
В предыдущем сообщении исправил
Assembler
1
EgreatD proto stdcall EgreatD:near
на

Assembler
1
EgreatD proto stdcall

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
.586
.MODEL flat, stdcall
OPTION CASEMAP:NONE
 
EXTERN A:SDWORD,B:SDWORD,n:SDWORD
 
 
.code
 
EgreatD PROC
 
push EBP
mov EBP, ESP
 
push EAX
push EBX
push ECX
 
mov EAX,[EBP+8]; A
mov EBX,[EBP+16]; B
mov ECX,[EBP+12]; n
 
dec EBX; b-1 
dec ECX 
degree:
mul A 
loop degree 
inc EAX; a+1
div EBX; EAX/EBX 
 
pop EAX
pop EBX
pop ECX
 
ret 12
 
EgreatD ENDP 
 
End
Добавлено через 11 минут
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Приводите исходники.
Что значит "Исходники"?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
17.05.2019, 12:51
"Исходники" - исходный текст программы на языке ассемблера. В сообщении #3 вы говорите, что что-то изменили и говорите об ошибке компиляции или компоновки. Вот я и хочу увидеть итоговые изменения.

Решение я вам привёл в сообщении #4.
EgreatD@0
Assembler
1
2
3
4
.............
    EXTERN stdcall EgreatD@0:near
.................
       call EgreatD@0; вызываем процедуру
0
2 / 2 / 0
Регистрация: 08.12.2017
Сообщений: 31
17.05.2019, 13:04  [ТС]
Lab_5.obj : error LNK2001: unresolved external symbol _EgreatD@0
Lab_5.exe : fatal error LNK1120: 1 unresolved externals

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
; Template for console application
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
 
Include kernel32.inc
Include masm32.inc
 
IncludeLib kernel32.lib
IncludeLib masm32.lib
 
         .CONST
MsgExit  DB    0AH,0DH, "Press Enter to Exit",0
 
         .DATA
         
         Zapros DB 'Inpute value: ',0 ; запрос     
         Result DB 'Result = ' ; поле результата
         ResStr DB 10 DUP (' '), 0 ; выводимое число
         
         A sdword ?
         B sdword ?
         E sdword ?
         D sdword ?
         n sdword ?
         X sdword ?
 
         .DATA?
    PUBLIC A, B, E, D, n, X
    EXTERN stdcall EgreatD@0:near        
         
    Buffer DB 10 DUP (?) ; буфер ввода
    inbuf  DB 100 DUP (?)
 
           
 
        
         .CODE
Start:
; 
;    Add you statements
;
    ; var A
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR A, EAX
    
    ; var B
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR B, EAX
    
    ; var E
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR E, EAX
    
    ; var D
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR D, EAX
    
    ; var n
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;?преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR n, EAX
    
    ; Вычисления
    
      ; сравниваем E и D  
    mov EAX, E
    cmp EAX, D
    JG  GREAT
    JE  EQUALLY
    JMP short LESS
           
    GREAT:          ; E > D   
       
       lea EBX,X ; получение адреса результата
       push EBX ; загрузка в стек адреса результата
       push B ; загрузка в стек второго числа
       push n ; загрузка в стек значения степени 
       push A ; загрузка в стек первого числа
             
       call EgreatD@0; вызываем процедуру
       jmp   short CONTINUE  
       
    EQUALLY:        ; E = D
       
       jmp   short CONTINUE
       
    LESS:           ; E < D
       mov EAX,A
       mul word ptr B
       jmp   short CONTINUE
                  
    CONTINUE:  
        mov X,EAX
    ; Преобразование
         
        Invoke dwtoa, X, ADDR ResStr
        
    ; Вывод
    
        Invoke StdOut, ADDR Result
        
        
        XOR EAX,EAX       
        Invoke StdOut,ADDR MsgExit
        Invoke StdIn,ADDR inbuf,LengthOf inbuf      
    
        Invoke ExitProcess,0
        End    Start
Модуль
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
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
         
         EXTERN A:SDWORD,B:SDWORD,n:SDWORD
 
         
         .code
 
EgreatD PROC
       
       push EBP
       mov EBP, ESP
             
       push EAX
       push EBX
       push ECX
       
       mov    EAX,[EBP+8]; A
       mov    EBX,[EBP+16]; B
       mov    ECX,[EBP+12]; n
 
       dec EBX; b-1                
       dec ECX 
            degree:
                mul A 
            loop degree 
       inc EAX; a+1
       div EBX; EAX/EBX 
 
       pop EAX
       pop EBX
       pop ECX
     
       ret 12
              
EgreatD ENDP      
        
        END
Добавлено через 2 минуты
А в RadAsm может проблема?
0
2 / 2 / 0
Регистрация: 08.12.2017
Сообщений: 31
17.05.2019, 13:13  [ТС]
Красным выделил, условие указанное в методичке.

Остальные настройки надо как-то менять? Или может, еще что-то необходимо добавить, дополнить, указать и т.д.?
Миниатюры
Error LNK2001: unresolved external symbol _stack  
0
2 / 2 / 0
Регистрация: 08.12.2017
Сообщений: 31
17.05.2019, 13:26  [ТС]
Создал новый проект. Упустил Asembl Modules, предыдущие выдавал ошибку на этом этапе.
Теперь на этом этапе нет ошибок, но на стадии build остались ошибки:

Lab_5v2.obj : error LNK2001: unresolved external symbol _EgreatD@0
Lab_5v2.exe : fatal error LNK1120: 1 unresolved externals

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
; Template for console application
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
 
Include kernel32.inc
Include masm32.inc
 
IncludeLib kernel32.lib
IncludeLib masm32.lib
 
         .CONST
MsgExit  DB    0AH,0DH, "Press Enter to Exit",0
 
         .DATA
         
         Zapros DB 'Inpute value: ',0 ; запрос     
         Result DB 'Result = ' ; поле результата
         ResStr DB 10 DUP (' '), 0 ; выводимое число
         
         A sdword ?
         B sdword ?
         E sdword ?
         D sdword ?
         n sdword ?
         X sdword ?
 
         .DATA?
    PUBLIC A, B, E, D, n, X
    EXTERN stdcall EgreatD@0:near        
         
    Buffer DB 10 DUP (?) ; буфер ввода
    inbuf  DB 100 DUP (?)
 
           
 
        
         .CODE
Start:
; 
;    Add you statements
;
    ; var A
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR A, EAX
    
    ; var B
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR B, EAX
    
    ; var E
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR E, EAX
    
    ; var D
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR D, EAX
    
    ; var n
    Invoke StdOut, ADDR Zapros
    Invoke StdIn, ADDR Buffer, LengthOf Buffer
    Invoke StripLF, ADDR Buffer
    
    ;?преобразованеии в SDWORD
    
    Invoke atol, ADDR Buffer ; результат в EAX
    mov DWORD PTR n, EAX
    
    ; Вычисления
    
      ; сравниваем E и D  
    mov EAX, E
    cmp EAX, D
    JG  GREAT
    JE  EQUALLY
    JMP short LESS
           
    GREAT:          ; E > D   
       
       lea EBX,X ; получение адреса результата
       push EBX ; загрузка в стек адреса результата
       push B ; загрузка в стек второго числа
       push n ; загрузка в стек значения степени 
       push A ; загрузка в стек первого числа
             
       call EgreatD@0; вызываем процедуру
       jmp   short CONTINUE  
       
    EQUALLY:        ; E = D
       
       jmp   short CONTINUE
       
    LESS:           ; E < D
       mov EAX,A
       mul word ptr B
       jmp   short CONTINUE
                  
    CONTINUE:  
        mov X,EAX
    ; Преобразование
         
        Invoke dwtoa, X, ADDR ResStr
        
    ; Вывод
    
        Invoke StdOut, ADDR Result
        
        
        XOR EAX,EAX       
        Invoke StdOut,ADDR MsgExit
        Invoke StdIn,ADDR inbuf,LengthOf inbuf      
    
        Invoke ExitProcess,0
        End    Start
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
.586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE
         
         EXTERN A:SDWORD,B:SDWORD,n:SDWORD
 
         
         .code
 
EgreatD PROC
       
       push EBP
       mov EBP, ESP
             
       push EAX
       push EBX
       push ECX
       
       mov    EAX,[EBP+8]; A
       mov    EBX,[EBP+16]; B
       mov    ECX,[EBP+12]; n
 
       dec EBX; b-1                
       dec ECX 
            degree:
                mul A 
            loop degree 
       inc EAX; a+1
       div EBX; EAX/EBX 
 
       pop EAX
       pop EBX
       pop ECX
     
       ret 12
              
EgreatD ENDP      
        
        END
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
17.05.2019, 14:15
Я думал, что компилируете пакетным файлом.

Не знаю, как сделать в VS.

А простым пакетным файлом в параметрах компоновщика укажите
link /SUBSYSTEM:CONSOLE ............. Lab_5v2 moduleName
имя основной программы и имя модуля

Возможно, что в VS есть возможность напрямую использовать rsp файлы
Переделка кода из TASM в MASM32

Без VS я компилировал
Windows Batch file
1
2
3
4
d:\masm32\bin\ml.exe /c /coff /Fl /X main.asm
d:\masm32\bin\ml.exe /c /coff /Fl /X module.asm
d:\masm32\bin\link.exe /SUBSYSTEM:CONSOLE main.obj module.obj
pause
Добавлено через 14 минут
На скрине в левом нижнем углу вижу кнопку Main Files - возможно, с её помощью перечисляются файлы проекта.
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
17.05.2019, 22:16
Цитата Сообщение от NAN_13 Посмотреть сообщение
_EgreatD@0
Это вообще-то декорирование символов в стиле C++. Так компилятор C++ имя подпрограммы EgreatD декорирует при компиляции исходника в объектный файл. Приставляет к началу имени подчеркивание и к концу @число_байт_параметров.

Непонятно только причем тут C++ коли ты оба файла ассемблируешь ассемблером. И даже если бы ассемблер вдруг начал декорировать, то он при ассемблировании обоих файлов отдекорировал бы имена одинаково. В объектных файлах имена вышли бы одинаковые и все слинковалось бы. А у тебя ассимметрия откуда-то вылезает. В одном объектнике имя вроде бы без декорации, а во втором вроде бы с декорацией.
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
17.05.2019, 22:23
У топикстартера проблема уже не в именовании, а в непонимании, как при компоновке в Visual Studio указать и основную программу и модуль.
Сама его программа уже должна полностью компилироваться и компоноваться - она правильная.

Я при помощи пакетного файла проверял. А вот из VS - не знаю как работать.

Ещё раз перечитал топик - и увидел
Цитата Сообщение от NAN_13 Посмотреть сообщение
А в RadAsm может проблема?
Может быть это не в VS, а в RadAsm не полностью где-то описан проект (я не работал ни VS ни в RadAsm, даже распознать по картинке не могу)?
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
17.05.2019, 22:47
Отредакируй плиз сообщение выше. Удали последний абзац. Я там запутался немного.

Добавлено через 3 минуты
З.Ы. По идее если в один проект добавить два файла .asm то они должны компоноваться вместе.

Да не твое сообщения, а мое. Плиз. Начиная со слов "А понял. ". Убери этот абзац. Ненавижу когда мое затупление увековечивается.

Добавлено через 6 минут
P.S. Ну а теперь интересное наблюдение про "кому бы пришло в голову".

Я понял так, что тс компонует два файла и у него вылезает сообщение unresolved external symbol _EgreatD@0 . Ну я и давай думать как такое может быть да почему в двух объектных файлах одно и то-же имя отдекорировалось по разному. А тс похоже один файл компоновал сам с собой и от этого ссылка не разрешалась. Ну и кому бы пришло в голову. Я думал там какая-то проблема, а там оказался тупняк.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2019, 22:47
Помогаю со студенческими работами здесь

Error LNK2001: unresolved external symbol
error LNK2001: unresolved external symbol &quot;void __cdecl SearchFile(char *,char *)&quot; (?SearchFile@@YAXPAD0@Z) fatal error LNK1120: 1...

Error LNK2001: unresolved external symbol
Добрий день, нуждаюсь в помощи. При вызове метода Adding из класса StudentManipulator возникает ошибка вида Error 2 error LNK2001:...

error LNK2001: unresolved external symbol
Здравствуйте. Начала изучать С++ по Либерти. На шаблонах компилятор начал выдавать ошибки. Вроде уже все 10 раз проверила. При...

Error LNK2001 unresolved external symbol _strstr
не компилируется исходный код , пишет ошибки Error LNK2001 unresolved external symbol...

Ошибка: error LNK2001: unresolved external symbol _WinMain@16
При определении макроса UNICODE error LNK2001: unresolved external symbol _WinMain@16


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru