Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler для начинающих

Войти
Регистрация
Восстановить пароль
 
Марина_Киев_КПИ
-21 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 97
#1

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

10.02.2016, 18:41. Просмотров 336. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не линкуется obj file (Assembler):

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

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

Создание obj файла - Assembler
Здравствуйте. Помогите пожалуйста скомпилить прогу! Перечитал статьи,и как там пишут,надо ввести ml /c proga,asm - появляется ml не...

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

MASM32 - не создаётся obj файл - Assembler
Начал учить ассемблер, написал программу которая выводит месседжбокс. Запускаю bin\ml.exe /c C:\1.asm, компиляция проходит без ошибок, а...

Ошибка при линковке .obj - Assembler
Юзаю компилятор myasm, obj файл создётся нормально, а при линковке пишет, что не может открыть myasm/bin/lib/kernel32.lib, хотя он там есть.

13
Charles Kludge
Клюг
7634 / 3149 / 363
Регистрация: 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
1000 / 677 / 224
Регистрация: 28.02.2015
Сообщений: 1,768
Завершенные тесты: 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
1000 / 677 / 224
Регистрация: 28.02.2015
Сообщений: 1,768
Завершенные тесты: 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
1000 / 677 / 224
Регистрация: 28.02.2015
Сообщений: 1,768
Завершенные тесты: 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
1000 / 677 / 224
Регистрация: 28.02.2015
Сообщений: 1,768
Завершенные тесты: 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
1000 / 677 / 224
Регистрация: 28.02.2015
Сообщений: 1,768
Завершенные тесты: 1
11.02.2016, 10:15 #12
Цитата Сообщение от Марина_Киев_КПИ Посмотреть сообщение
Тоесть работает корректно
Вы не можете посмотреть результаты?
Как Вы компилируете, как запускаете?
0
Mikl___
Заблокирован
Автор FAQ
11.02.2016, 10:18 #13
Марина_Киев_КПИ,
читай внимательно Как создать объектный файл
0
Charles Kludge
Клюг
7634 / 3149 / 363
Регистрация: 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
Привет! Вот еще темы с ответами:

Файл obj создается не в ту директорию [ml] - Assembler
Всем привет . Ml при создание obj файла почему то пихает его не в туже директорию где .asm а в C:\Documents and Settings\Admin

Как прицепить *.obj к сишному коду - Assembler
Заранее сорри, если подобный топик уже где-то есть, но прошу объяснить сабж в стиле "пошагово, для дауна". нужно написать ассемблерный...

Есть программа, но не создается файл .obj - Assembler
Вот код программы: ;Определяем стек STACKSG SEGMENT PARA STACK 'Stack' DW 100 DUP(?) ;Задаем размер стека ...

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


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

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

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