Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для HEKPOMAHT
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 32

Есть программа, но не создается файл .obj

22.12.2011, 14:10. Показов 2821. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код программы:

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
;Определяем стек
STACKSG SEGMENT PARA    STACK   'Stack'
        DW      100    DUP(?)  ;Задаем размер стека
STACKSG ENDS
 
DECIMAL_SIZE EQU 5
 
DATA SEGMENT    ; Описание сегмента данных
 VAR_A dw 256
 VAR_B dw 16
 VAR_C dw 1
 VAR_D dw 32
 VAR_E dw 1
 VAR_RES dw ?
 
        ;Сообщение и буфер десятичного представления числа
 MESSAGE    db "Result is $"    ;Текст сообщения
 NR     db 0AH,0DH,'$'      ;Текст перевода строки
 RESULT     db DECIMAL_SIZE DUP('0');Буфер для перевода цифры в десятичную строку
DATA ENDS
 
 
 
CODE SEGMENT    ; Описание сегмента кода
  ASSUME CS:CODE,DS:DATA,SS:STACKSG
        ; Директива настройки сегментных регистров
PRINT   PROC    near            ;Печать числа в AX на терминал 
                    ;Вход в процедуру
    PUSH    BP          ;Сохранение старой базы автоматических
                    ;переменных
    MOV BP,SP           ;Установка новой базы на вершине стека
    SUB SP,DECIMAL_SIZE+1   ;Выделение памяти для буфера
                    ;(верхушку стека сдвигаем на размер буфера)
 
    MOV CX,DECIMAL_SIZE     ;Количество символов в новой строке
    DEC BP          ;Перевести базу на символ ниже (BP=BP-1)
    MOV [BP], BYTE PTR '$'  ;Занести в буфер символ конца строки
    MOV BX,10           ;База для перевода числа в десятичное
 
NEXT_C: DEC BP              ;Вычисление адреса предыдущего символа
    XOR DX,DX           ;Обнуление регистра DX (расширение операнда для деления)
    DIV BX              ;Деление на 10 (BX=10)
    ADD DL, '0'         ;Превращение остатка от деления в соответствующий символ 
    MOV [BP],DL         ;Запись символа в буфер
    DEC CX              ;Декремент счетчика буфера
    JNZ NEXT_C          ;Переход если не ноль
 
        MOV     AH,09                   ;выводим на экран сообщение
        LEA     DX, MESSAGE         ;загрузка адреса
        INT     21h                     ;вызов прерывания
    
        MOV     DX, BP              ;выводим на экран result
    PUSH    DS          ;Сохранение в стеке значение сегментного регистра
    MOV AX,SS           ;Передача нового значения DS=ES
    MOV DS,AX                   ;DS:DX должен адресовать строку
        MOV     AH,09                   ;
        INT     21h                     ;
    POP DS                      ;Востанавливаем старое значение DS
    LEA DX, NR          ;Переводим строку
    MOV AH,09
    INT 21h
                    ;Выход из процедуры
    ADD SP,DECIMAL_SIZE+1   ;Освобождаем автоматическую память в стеке
    POP BP          ;Востанавливаем старое значение базы
                    ;автоматических переменных
    RET             ;Возврат из процедуры
PRINT   ENDP
 
BEGIN PROC FAR ; Описание процедуры BEGIN
    PUSH DS ; Запись сегментного регистра DS в стек
    SUB AX,AX   ; Запись нуля (нулевой адрес) в стек
    PUSH AX
 
    MOV AX,DATA   ; Настройка сегментного регистра DS на данные
    MOV DS,AX
 
    MOV AX, VAR_A ;место для исправления(задание2)
    MOV BX, VAR_B 
    MOV CX, VAR_D
div BX
MOV DX, AX
MOV AX, VAR_C
mul CX
sub DX,AX
mul VAR_E
 
 
    
        MOV VAR_RES, AX
    CALL PRINT  ; Печать результата
 
    ;Далее идет аналог процедуры PRINT с буфером в зоне статических переменных
    ;(результат печатается второй раз)
    MOV AX, VAR_RES ;Переслать в AX результат
    MOV CX,10   ;Десятичная база
    MOV RESULT+DECIMAL_SIZE, '$'
    MOV BX,OFFSET RESULT+DECIMAL_SIZE   ; Установка базы
 
NEXT:   DEC BX
    XOR DX,DX
    DIV CX
    ADD DL, '0'
    MOV [BX],DL
    CMP BX,OFFSET RESULT
    JNE NEXT
 
        MOV     AH,09                   ;
        LEA     DX, MESSAGE         ;выводим на экран сообщение
        INT     21h                     ;
        MOV     AH,09                   ;
        LEA     DX, RESULT          ;выводим на экран result
        INT     21h                     ;
 
 ; RET      ; Возврат в ОС
 BEGIN ENDP
CODE ENDS
END BEGIN
В чем может быть ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2011, 14:10
Ответы с готовыми решениями:

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

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

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

7
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
22.12.2011, 14:31
А какие ошибки компилятора и какой компилятор ? Под TASM без ошибок.
0
 Аватар для HEKPOMAHT
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 32
22.12.2011, 14:46  [ТС]
Версия tasm 4.1 tlink 7.1.30 стоит ХР винда

на 7рке работает на ХР нет, и как сделать, чтоб программа не закрывалась быстро сама?

Добавлено через 8 минут
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
;Определяем стек
STACKSG SEGMENT PARA    STACK   'Stack'
        DW      100    DUP(?)  ;Задаем размер стека
STACKSG ENDS
 
DECIMAL_SIZE EQU 5
 
DATA SEGMENT    ; Описание сегмента данных
 VAR_A dw 256
 VAR_B dw 16
 VAR_C dw 1
 VAR_D dw 32
 VAR_E dw 1
 VAR_RES dw ?
 
        ;Сообщение и буфер десятичного представления числа
 MESSAGE    db "Result is $"    ;Текст сообщения
 NR     db 0AH,0DH,'$'      ;Текст перевода строки
 RESULT     db DECIMAL_SIZE DUP('0');Буфер для перевода цифры в десятичную строку
DATA ENDS
 
 
 
CODE SEGMENT    ; Описание сегмента кода
  ASSUME CS:CODE,DS:DATA,SS:STACKSG
        ; Директива настройки сегментных регистров
PRINT   PROC    near            ;Печать числа в AX на терминал 
                    ;Вход в процедуру
    PUSH    BP          ;Сохранение старой базы автоматических
                    ;переменных
    MOV BP,SP           ;Установка новой базы на вершине стека
    SUB SP,DECIMAL_SIZE+1   ;Выделение памяти для буфера
                    ;(верхушку стека сдвигаем на размер буфера)
 
    MOV CX,DECIMAL_SIZE     ;Количество символов в новой строке
    DEC BP          ;Перевести базу на символ ниже (BP=BP-1)
    MOV [BP], BYTE PTR '$'  ;Занести в буфер символ конца строки
    MOV BX,10           ;База для перевода числа в десятичное
 
NEXT_C: DEC BP              ;Вычисление адреса предыдущего символа
    XOR DX,DX           ;Обнуление регистра DX (расширение операнда для деления)
    DIV BX              ;Деление на 10 (BX=10)
    ADD DL, '0'         ;Превращение остатка от деления в соответствующий символ 
    MOV [BP],DL         ;Запись символа в буфер
    DEC CX              ;Декремент счетчика буфера
    JNZ NEXT_C          ;Переход если не ноль
 
        MOV     AH,09                   ;выводим на экран сообщение
        LEA     DX, MESSAGE         ;загрузка адреса
        INT     21h                     ;вызов прерывания
    
        MOV     DX, BP              ;выводим на экран result
    PUSH    DS          ;Сохранение в стеке значение сегментного регистра
    MOV AX,SS           ;Передача нового значения DS=ES
    MOV DS,AX                   ;DS:DX должен адресовать строку
        MOV     AH,09                   ;
        INT     21h                     ;
    POP DS                      ;Востанавливаем старое значение DS
    LEA DX, NR          ;Переводим строку
    MOV AH,09
    INT 21h
                    ;Выход из процедуры
    ADD SP,DECIMAL_SIZE+1   ;Освобождаем автоматическую память в стеке
    POP BP          ;Востанавливаем старое значение базы
                    ;автоматических переменных
    RET             ;Возврат из процедуры
PRINT   ENDP
 
BEGIN PROC FAR ; Описание процедуры BEGIN
    PUSH DS ; Запись сегментного регистра DS в стек
    SUB AX,AX   ; Запись нуля (нулевой адрес) в стек
    PUSH AX
 
    MOV AX,DATA   ; Настройка сегментного регистра DS на данные
    MOV DS,AX
 
    MOV AX, VAR_A ;место для исправления(задание2)
    MOV BX, VAR_D 
    MOV CX, VAR_E
add AX, VAR_B 
sub AX,VAR_C 
div BX
mul CX
 
    
        MOV VAR_RES, AX
    CALL PRINT  ; Печать результата
 
    ;Далее идет аналог процедуры PRINT с буфером в зоне статических переменных
    ;(результат печатается второй раз)
    MOV AX, VAR_RES ;Переслать в AX результат
    MOV CX,10   ;Десятичная база
    MOV RESULT+DECIMAL_SIZE, '$'
    MOV BX,OFFSET RESULT+DECIMAL_SIZE   ; Установка базы
 
NEXT:   DEC BX
    XOR DX,DX
    DIV CX
    ADD DL, '0'
    MOV [BX],DL
    CMP BX,OFFSET RESULT
    JNE NEXT
 
        MOV     AH,09                   ;
        LEA     DX, MESSAGE         ;выводим на экран сообщение
        INT     21h                     ;
        MOV     AH,09                   ;
        LEA     DX, RESULT          ;выводим на экран result
        INT     21h                     ;
 
  RET       ; Возврат в ОС
 BEGIN ENDP
CODE ENDS
END BEGIN
а эта прога тоже работает без ошибок?
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
22.12.2011, 14:58
компилируется без ошибок.
запускай из-под cmd, откроется консоль.
tasm 123.asm
tlink 123.obj
exe создается, а на правильность не проверял
0
 Аватар для HEKPOMAHT
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 32
22.12.2011, 15:10  [ТС]
Вот картинка что мне выдает тасм
Миниатюры
Есть программа, но не создается файл .obj  
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
22.12.2011, 15:19
Значит tasm и nariant_4.asm находятся в разных папках.
Или запускай с полным путем tasm c:\папка\nariant_4.asm или скопируй асмовский файл в папку с tasm.
0
 Аватар для HEKPOMAHT
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 32
22.12.2011, 15:30  [ТС]
так файл там и находится...

Добавлено через 3 минуты
епть, понял, там знак "_" не должен быть во я лох))

Добавлено через 6 минут
как сделать задержку экрана???
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
23.12.2011, 04:15
HEKPOMAHT, перед выходом из программы поставь
Assembler
1
2
mov ah,0
int 16h
программа будет ожидать нажатия на любую клавишу
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2011, 04:15
Помогаю со студенческими работами здесь

Есть obj файл, как перевести его обратно в asm
Здравствуйте.Есть obj файл, как перевести его обратно в asm?

Программа не может найти файл obj
есть 2 проги на ассемблере и паскале,но когда запускаю прогу на паскале пишет что не может найти файл obj подскажите что делать((((оч...

Программа компилируется,но файл не создается
Какая-то проблема, программа компилируется,но файл не создается и ничего не делается :( using System; using...

Есть функция которая считывает модельку из .obj формата, как к этому делу прикрутить материалы (.mtl файл)
Добрый день! Есть функция которая считывает модельку из .obj формата, подскажите пожалуйста как к этому делу прикрутить материалы (.mtl...

Не создается .obj, при этом в .lst ошибки нет, но часть кода выпадает
.model small .stack 100 .data s db ? mes1 db "Tsifra$" mes2 db "Zaglavnaia bukva$" mes3 db "Strochnaia bukva$" ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru