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

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

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

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

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 а в ...

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

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

7
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
22.12.2011, 14:31 2
А какие ошибки компилятора и какой компилятор ? Под TASM без ошибок.
0
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 32
22.12.2011, 14:46  [ТС] 3
Версия 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 4
компилируется без ошибок.
запускай из-под cmd, откроется консоль.
tasm 123.asm
tlink 123.obj
exe создается, а на правильность не проверял
0
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 32
22.12.2011, 15:10  [ТС] 5
Вот картинка что мне выдает тасм
Миниатюры
Есть программа, но не создается файл .obj  
0
85 / 85 / 38
Регистрация: 09.12.2011
Сообщений: 174
22.12.2011, 15:19 6
Значит tasm и nariant_4.asm находятся в разных папках.
Или запускай с полным путем tasm c:\папка\nariant_4.asm или скопируй асмовский файл в папку с tasm.
0
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 32
22.12.2011, 15:30  [ТС] 7
так файл там и находится...

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru