Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Марина_Киев_КПИ
-21 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 97
1

Не линкуется obj file

10.02.2016, 18:41. Просмотров 947. Ответов 13
Метки нет (Все метки)

Программа тасмом компилируется, но не линкуется. Мне нужно ввести данные и вывести.
Вроде бы все верно сделано "по учебнику", но не пойму чего не работает. Помогите новичку
"Unable to open obj file"

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
STSEG  SEGMENT  PARA  STACK  'STACK'
DB 64 DUP ( 'STACK' ) 
STSEG  ENDS 
DSEG  SEGMENT  PARA  PUBLIC  'DATA'
SOURCE  DB 10, 20, 30, 40 
DEST  DB 4 DUP (?) 
dump  dw (?) 
DSEG  ENDS 
CSEG  SEGMENT PARA PUBLIC  'CODE' 
MAIN  PROC  FAR 
ASSUME  CS: CSEG, DS: DSEG, SS: STSEG 
vvod proc far
lea dx, dump ;
mov ah, 10 ;
int 21h ; 
vvod endp
digit proc far
mov bx, dump
or bx, bx ;проверяют старший разряд числа, там знак
jns m1 ; если знак = 0 переход на м1, иначе
mov al, '-'
int 29h ;выводим '-'
neg bx ;умножаем число в ВХ на -1, то есть из отрицательного числа получаем положительное
m1: mov ax, bx
 xor cx, cx ;обнуляем счетчик десятичных разрядов
 mov bx, 10 ;в ВХ делитель, делить будем на 10
m2: xor dx, dx ;делится число старшая часть числа в dx младшая часть в ax на bx, поэтому dx обнуляем
 div bx ;делим число в dx:ax  на bx
 add dl, '0';к остатку от деления на 10 добавляем "0" чтобы получить соответствующий символ
 push dx ;отправляем остаток в стек
 inc cx ;увеличиваем счетчик десятеричных разрядов на 1
 test ax, ax; больше делить нечего? АХ=0?
 jnz m2 ;если не ноль переходим на м2
m3: pop ax ;извлекаем остатки от деления из стека
 int 29h ;выводим их на экран
 loop m3 ;если СХ не равно 0, перейти по метке м3
 ret
digit endp
MAIN ENDP 
CSEG ENDS 
END MAIN
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2016, 18:41
Ответы с готовыми решениями:

Unable to open file(Не удается открыть файл)\tdc.obj
У меня не открывается программа на ассемблере. Открываю через Far выдает ошибку...

Ошибка при линковке "fatal bad object file record in module near module file offset 0x0000032D"
Добрый вечер, форумчане:) Обращаюсь к знающим ассемблер,а именно TASM. Код...

Не создается файл .obj
Компилируется но не появляется файл .obj Что не так?

Создание obj файла
Здравствуйте. Помогите пожалуйста скомпилить прогу! Перечитал статьи,и как там...

Файл obj создается не в ту директорию [ml]
Всем привет . Ml при создание obj файла почему то пихает его не в туже...

13
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
10.02.2016, 18:57 2
А так компилится и линкуется:
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
; tasm /m3 proga && tlink proga /Tde
.model compact
.stack
.data
SOURCE  DB 10, 20, 30, 40 
DEST  DB 4 DUP (?) 
dump  dw (?) 
.code
MAIN  PROC  FAR 
vvod proc far
lea dx, dump ;
mov ah, 10 ;
int 21h ; 
vvod endp
digit proc far
mov bx, dump
or bx, bx ;проверяют старший разряд числа, там знак
jns m1 ; если знак = 0 переход на м1, иначе
mov al, '-'
int 29h ;выводим '-'
neg bx ;умножаем число в ВХ на -1, то есть из отрицательного числа получаем положительное
m1: mov ax, bx
 xor cx, cx ;обнуляем счетчик десятичных разрядов
 mov bx, 10 ;в ВХ делитель, делить будем на 10
m2: xor dx, dx ;делится число старшая часть числа в dx младшая часть в ax на bx, поэтому dx обнуляем
 div bx ;делим число в dx:ax  на bx
 add dl, '0';к остатку от деления на 10 добавляем "0" чтобы получить соответствующий символ
 push dx ;отправляем остаток в стек
 inc cx ;увеличиваем счетчик десятеричных разрядов на 1
 test ax, ax; больше делить нечего? АХ=0?
 jnz m2 ;если не ноль переходим на м2
m3: pop ax ;извлекаем остатки от деления из стека
 int 29h ;выводим их на экран
 loop m3 ;если СХ не равно 0, перейти по метке м3
 ret
digit endp
MAIN ENDP 
END MAIN
0
Марина_Киев_КПИ
-21 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 97
10.02.2016, 19:23  [ТС] 3
Charles Kludge, проверила - то же самое. Может быть это из-за переменной dump, я не уверена, что она верна тут...
0
Constantin Cat
1951 / 1039 / 365
Регистрация: 28.02.2015
Сообщений: 2,322
Завершенные тесты: 1
10.02.2016, 19:23 4
Цитата Сообщение от Марина_Киев_КПИ Посмотреть сообщение
но не линкуется
Странно, все проглотил TASM 2.00
0
Марина_Киев_КПИ
-21 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 97
10.02.2016, 19:27  [ТС] 5
Constantin Cat, я в фаре линкую, а результат ? вводится/выводится корректно? можете еще глянуть переменную dump. ПС TASM 5.0
0
Constantin Cat
1951 / 1039 / 365
Регистрация: 28.02.2015
Сообщений: 2,322
Завершенные тесты: 1
10.02.2016, 20:03 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не понятно, что Вы хотите сделать:
Assembler
1
2
mov ah, 10
int 21h


Добавлено через 28 минут
Да уж, стиль оставляет желать . . ., это так в КПИ учат?
Есть регистры, которые при вызове подпрограмм не должны менятся ВХ - один из них.
Вот, до делал:
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
STSEG  SEGMENT  PARA  STACK  'STACK'
DB 64 DUP ( 'STACK' ) 
STSEG  ENDS 
DSEG  SEGMENT  PARA  PUBLIC  'DATA'
SOURCE  DB 10, 20, 30, 40 
DEST  DB 4 DUP (?) 
dump  dw -100
DSEG  ENDS 
CSEG  SEGMENT PARA PUBLIC  'CODE' 
MAIN  PROC  FAR 
ASSUME  CS: CSEG, DS: DSEG, SS: STSEG 
digit proc far
mov ax,DSEG
mov ds,ax
mov bx, dump
or  bx, bx ;проверяют старший разряд числа, там знак
jns m1 ; если знак = 0 переход на м1, иначе
mov al, '-'
int 29h ;выводим '-'
neg bx ;умножаем число в ВХ на -1, то есть из отрицательного числа получаем положительное
m1: mov ax, bx
 xor cx, cx ;обнуляем счетчик десятичных разрядов
 mov bx, 10 ;в ВХ делитель, делить будем на 10
m2: xor dx, dx ;делится число старшая часть числа в dx младшая часть в ax на bx, поэтому dx обнуляем
 div bx ;делим число в dx:ax  на bx
 add dl, '0';к остатку от деления на 10 добавляем "0" чтобы получить соответствующий символ
 push dx ;отправляем остаток в стек
 inc cx ;увеличиваем счетчик десятеричных разрядов на 1
 test ax, ax; больше делить нечего? АХ=0?
 jnz m2 ;если не ноль переходим на м2
m3: pop ax ;извлекаем остатки от деления из стека
 int 29h ;выводим их на экран
 loop m3 ;если СХ не равно 0, перейти по метке м3
mov ax,4c00h
int 21h
digit endp
MAIN ENDP 
CSEG ENDS 
END MAIN
1
Марина_Киев_КПИ
-21 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 97
10.02.2016, 20:13  [ТС] 7
Constantin Cat, В КПИ увы ничерта сейчас не учат( Все сами берите да разбирайтесь. Они эту дисциплину порезали сильно, зато английский поставили
0
Constantin Cat
1951 / 1039 / 365
Регистрация: 28.02.2015
Сообщений: 2,322
Завершенные тесты: 1
10.02.2016, 20:17 8
Цитата Сообщение от Марина_Киев_КПИ Посмотреть сообщение
сами берите да разбирайтесь
Вы разобрались с кодом?
0
Марина_Киев_КПИ
-21 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 97
10.02.2016, 20:27  [ТС] 9
Constantin Cat, С кодом я разобралась без проблем. Теперь в вашей версии компилируется, OBJ создается, но когда запускаю exe - черное окно и вылетает из окна доса. Можно поинтересоваться , у вас работает?
0
Constantin Cat
1951 / 1039 / 365
Регистрация: 28.02.2015
Сообщений: 2,322
Завершенные тесты: 1
10.02.2016, 20:33 10
Марина_Киев_КПИ, Ой в другой теме дал ответ.
1
Марина_Киев_КПИ
-21 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 97
10.02.2016, 20:56  [ТС] 11
Constantin Cat, видела. Тоесть работает корректно?
0
Constantin Cat
1951 / 1039 / 365
Регистрация: 28.02.2015
Сообщений: 2,322
Завершенные тесты: 1
11.02.2016, 10:15 12
Цитата Сообщение от Марина_Киев_КПИ Посмотреть сообщение
Тоесть работает корректно
Вы не можете посмотреть результаты?
Как Вы компилируете, как запускаете?
0
Mikl___
Автор FAQ
11783 / 6087 / 555
Регистрация: 11.11.2010
Сообщений: 11,073
11.02.2016, 10:18 13
Марина_Киев_КПИ,
читай внимательно Как создать объектный файл
0
Charles Kludge
Клюг
7642 / 3157 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
11.02.2016, 12:15 14
Цитата Сообщение от Марина_Киев_КПИ Посмотреть сообщение
проверила - то же самое.
tasm 4.01/tlink 4.1 всё кушают.
Цитата Сообщение от Марина_Киев_КПИ Посмотреть сообщение
я в фаре линкую, а результат ?
Дык, и я в FAR'e транслирую и линкую. Правда, линкер обычно от Waterloo, но для чистоты эксперимента взял tlink.
0
11.02.2016, 12:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2016, 12:15

MASM32 - не создаётся obj файл
Начал учить ассемблер, написал программу которая выводит месседжбокс. Запускаю...

Ошибка при линковке .obj
Юзаю компилятор myasm, obj файл создётся нормально, а при линковке пишет, что...

Неправильное линкование res и obj файлов
Написал прогу на масме32 ,создаёт окно,в котором должны быть меню File ,с...


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

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

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