Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
young_young
1 / 1 / 0
Регистрация: 17.05.2010
Сообщений: 10
1

Ошибка при линковке "fatal bad object file record in module near module file offset 0x0000032D"

09.12.2012, 22:19. Просмотров 2380. Ответов 2
Метки нет (Все метки)

Добрый вечер, форумчане
Обращаюсь к знающим ассемблер,а именно TASM.
Код программы есть. После команды tasm lab создается obj -файл. При линковании далее ошибка

fatal bad object file record in module near module file offset 0x0000032D

Мне нужна помощь)

Добавлено через 57 минут
хмм... код закинуть чтоли, чтобы хоть кто то откликнулся?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 22:19
Ответы с готовыми решениями:

Error: 32-bit record encountered in module 1.ASM : use "/3" option
Error: 32-bit record encountered in module 1.ASM : use "/3" option что ето за ошибка и как ее...

Не компилируется проект: "Fatal error A1000 cannot open file c:\1.asm"
Здраствуйте, работаю на MASM 32 работаю на виртуальной машине, при компиляции след. кода видает...

LINK : fatal error LNK1181: cannot open input file "first.exe"
В чем ошибка??? Assembling: Go_baby.asm Microsoft (R) Incremental Linker Version 6.00.8447...

Ошибка "File not found" при сохранении файла
Пишу код програмы нажимаю ctr+f9 чтобы сохранить файл и мне выдаётся ошибка file not found что...

Ошибка "Cannot generate COM file: Stack segment present" при компиляции
Ребята, не могу скомпилить программу. Выдаёт ошибку: Cannot generate COM file: Stack segment...

2
Troll_Face
603 / 403 / 8
Регистрация: 26.04.2012
Сообщений: 2,069
09.12.2012, 22:32 2
Цитата Сообщение от young_young Посмотреть сообщение
хмм... код закинуть чтоли, чтобы хоть кто то откликнулся?
да ну, зачем?? мы же экстрасенсы тут, решим проблему методом астрального анализа вашего линковщика
0
young_young
1 / 1 / 0
Регистрация: 17.05.2010
Сообщений: 10
09.12.2012, 22:40  [ТС] 3
sorry)

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
.486
.MODEL FLAT, STDCALL
 
EXTRN  GetStdHandle@4:NEAR
EXTRN  WriteConsoleA@20:NEAR
 
EXTRN  CharToOemA@8:NEAR
EXTRN  ReadConsoleA@20:NEAR
 
EXTRN  ExitProcess@4:NEAR ; функция выхода из программы
 
EXTRN  lstrlenA@4:NEAR ; функция определения длины строки
EXTRN  wsprintfA:NEAR; т.к. число параметров функции не фиксировано, 
            ; используется соглашение, согласно которому очищает стек 
            ; вызывающая процедура
 
; сегмент данных
.DATA
    stdout dd ? ; четырёхбайтовый дескриптор вывода
    stdin dd ?  ; четырёхбайтовый дескриптор ввода
    
    prompt db "Введите строку: ",13,10,0
    resfmt db "У %d символов одинаковые соседи",13,10,0
    res    db 128 dup (?) ; Сюда запишется отформатированная предыдущая строка
        
    ptr1   dd ? ;
    ptr2   dd ? ;
    last   dd ? ;
    result dd ? ;
        
    tmp dd ? ; четыре байта под всякий мусор
        
    str_ db 128 dup (?) ; обрабатываемая строка
    strl dd ?           ; длина этой строки
     
; сегмент кода 
.CODE
    business proc far
        ; ptr1 - предшествующий сосед обрабатываемого символа
        ; ptr1 = str_
        mov ptr1, offset str_
        ; ptr2 - последующий сосед обрабатываемого символа
        mov ptr2, offset str_
        add ptr2, 2
        ; last = (str_ - 1), т.к. с ним надо будет постоянно сравнивать ptr2
        mov last, offset str_
        mov eax, last
        add eax, strl
        mov last, eax
        dec last
        ; result - сколько символов у которых равные соседи
        mov result, 0
        
        ; if (strl > 1)
        cmp strl, 2
        ; {
        jl else_if2
            ; while (true) {
            loop1:
                ; if (ptr2 > last) break;
                mov eax, last
                cmp ptr2, eax
                jg endloop1
                                
                ; if (*ptr1 == *ptr2)
                mov eax, dword ptr [ptr1]
                movsx ebx, byte ptr [eax]
                mov ecx, dword ptr [ptr2]
                movsx edx, byte ptr [ecx]
                cmp ebx, edx
                ; {
                jne endif1
                    ; result++
                    inc result
                ; }
                endif1:
                
                ; ptr1++
                inc ptr1
                ; ptr2++
                inc ptr2
                
                ; это цикл!
                jmp loop1
            ; }
            endloop1:
            
            ; Соседи первого символа
            ; ptr1 = str_ + strl - 1
            mov ptr1, offset str_
            mov eax, ptr1
            add eax, strl
            mov ptr1, eax
            dec ptr1
            ; ptr2 = str_ + 1
            mov ptr2, offset str_
            inc ptr2
            ; if (*ptr1 == *ptr2)
            mov eax, dword ptr [ptr1]
            movsx ebx, byte ptr [eax]
            mov ecx, dword ptr [ptr2]
            movsx edx, byte ptr [ecx]
            cmp ebx, edx
            ; {
            jne endif3
                ; result++
                inc result
            ; }
            endif3:
            
            ; Соседи второго символа
            ; ptr1 = str_ + strl - 2
            mov ptr1, offset str_
            mov eax, ptr1
            add eax, strl
            mov ptr1, eax
            sub ptr1, 2
            ; ptr2 = str_
            mov ptr2, offset str_
            ; if (*ptr1 == *ptr2)
            mov eax, dword ptr [ptr1]
            movsx ebx, byte ptr [eax]
            mov ecx, dword ptr [ptr2]
            movsx edx, byte ptr [ecx]
            cmp ebx, edx
            ; {
            jne endif4
                ; result++
                inc result
            ; }
            endif4:
        ; }
        jmp endif2
        ; else {
        else_if2:
            ; result = 1
            mov result, 1
        ; }
        endif2:
        
        ret
    business endp
 
    START: ; метка точки входа (завершается двоеточием)
    
    ; перекодируем приглашение
    PUSH OFFSET prompt
    PUSH OFFSET prompt
    CALL CharToOemA@8
    
    ; перекодируем результат
    PUSH OFFSET resfmt
    PUSH OFFSET resfmt
    CALL CharToOemA@8
    
    ; дескриптор ввода
    PUSH -10
    CALL GetStdHandle@4 ; в eax будет дескриптор ввода
    MOV stdin, eax
    
    ; дескриптор вывода
    PUSH -11
    CALL GetStdHandle@4 ; в eax будет дескриптор вывода
    MOV stdout, eax
    
    ; вывод приглашения
    PUSH OFFSET prompt
    CALL lstrlenA@4 ; в eax будет длина строки
    
    PUSH 0              ; конец параметров
    PUSH OFFSET tmp     ; длина выведенной строки (не нужна)
    PUSH EAX            ; длина выводимой строки (после предыдущего шага лежит в eax)
    PUSH OFFSET prompt  ; выводимая строка
    PUSH stdout         ; куда выводить
    CALL WriteConsoleA@20
    
    ; ввод строки
    PUSH 0           ; конец параметров
    PUSH OFFSET strl ; длина считанной строки
    PUSH 200         ; максимальная длина считываемой строки
    PUSH OFFSET str_ ; куда читать
    PUSH stdin       ; откуда читать
    CALL ReadConsoleA@20 
    
    push offset str_
    call lstrlenA@4
    mov strl, eax
    sub strl, 2
    
    ; вызов процедуры
    call business
    
    ; формирование результата
    push result
    push offset resfmt
    push offset res
    call wsprintfA
    
    ; вывод результата
    push offset res
    call lstrlenA@4
    PUSH 0
    PUSH OFFSET tmp
    PUSH eax
    PUSH OFFSET res
    PUSH stdout
    CALL WriteConsoleA@20
    
    ; небольшая задержка
    MOV ECX,03FFFFFFFH ; помещение в регистр ECX – счетчик цикла –
    ; большого значения
    L1:
    LOOP L1 ; цикл без тела
    ; выход из программы 
    PUSH 0 ; параметр: код выхода
    CALL ExitProcess@4
    END START
Добавлено через 5 минут
ну и само задание, на всякий)

Имеется строка. Программа должна вернуть количество символов, у которых равные соседи и исходной строке. Еще условие,что первый символ в строке и последний тоже считать "соседями"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 22:40

Ошибка: Fatal: 16 bit segments not supported in module create.ASM
Всем привет Почему при компилировании dos ругается не нормативной лексикой: "Fatal: 16 bit...

Ошибка линковщика: "32-bit record encountered in module"
.386 .model small .stack 256 .data stat db ? col dw ? row dw ? color db 1 flag db 0...

Ошибка при компиляции программы "fatal error A1000: cannot open file : /masm32/include/windows.inc"
.486 .model flat, stdcall include /masm32/include/windows.inc include /masm32/include/user32.inc...


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

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

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