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

Скомпилировать программу на TASM

03.12.2012, 03:38. Показов 2528. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
assume CS:code, DS:data
 
code segment
begin:
mov AX, data
mov DS, AX
 
call Display_Ask_X
call Input          ; ввод X (ограничено 2-мя символами)
mov BX, AX      ; Х будем хранить в ВХ
;call Display_Ask_Y
;call Input         ; ввод Y (ограничено 2-мя символами)
;mov CX, AX     ; Y будем хранить в СХ
call Display_ok
call Analyse        ; наша процедурка
call Output         ; вывод целого числа с АХ - иам наш результат
 
; ждем нажатия любой клавиши
mov AH, 10h
int 16h
; завершение программы
mov AX, 4C00h
int 21h
;----------------------------------------------------------------------------------------------------------
Analyse proc        ; анализируем, что там навводили х в ВХ, 
cmp BX, 0       ; проверяем условие х>0 & y>0
jng lbl_4           
cmp BX, 6
jg lbl_1
jb lbl_3
 
 
lbl_4:          ; =38x^3+5
mov AX, BX ; ложим Х в АХ
imul BX    ;умножаем его на x
mov DI, AX      ; результат кладем на склад
mov AX, BX      ; ложим X в АХ
imul BX    ;умножаем его на x
mov DI, AX      ; результат кладем на склад
mov AX 38 ; здесь пишет ошибку тасм
imul  AX
mov DI, AX  ; результат кладем на склад
mov AX, 5   
add AX, AX      ; складываем его с 5
jmp exit_a
lbl_3:          ; =1250/x
mov AX, 1250
idiv BX          ; делим
jmp exit_a
 
lbl_1:          ; по формуле
mov AX, BX      ; ложим Х в АХ
imul BX         ; умножаем его на x
mov DI, AX      ; результат кладем на склад
mov AX 40; здесь пишет ошибку тасм
imul AX         ; умножаем его на 40
mov DI, AX      ; результат кладем на склад
mov AX, -23
add AX, AX      ; складываем его с -23
exit_a:
 
ret
Analyse endp
;----------------------------------------------------------------------------------------------------------
Input proc
push BX
mov DX, offset Buff     ; вводим наше число
mov AH, 10
int 21h
 
mov SI, offset Buff+1   ; адрес где лежит кол-во введенных цифр
xor CX, CX
mov CL, [SI]        ; берем кол-во введенных цифр для цикла
cmp CX, 0       ; если ноль - на выход
je exit_lbl
 
mov fl, 0           ; по умолчанию сбрасываем флаг негативного числа
inc SI          ; берем первый разряд нашего числа
mov AL, [SI]        ; пхаем его в регстр для обработки
cmp AL,'-'          ; если минус - установить флаг
jne positiv
mov fl, 1           ; флаг негативного числа
dec CL          ; кло-во цифр стало на 1 меньше
cmp CX, 0       ; если кроме минуса там ничего нет - на выход
je exit_lbl
inc SI          ; следующий разряд нашего числа
 
positiv:
xor AX, AX
xor DI, DI
mov DI, 10      ; 10 - кратность
dec SI          ; адрес цифры возвращаем обратно
 
lbl1:
inc SI          ; берем следующий разряд нашего числа
xor BX, BX
mov BL, [SI]        ; пхаем его в регстр для обработки
sub BL, '0'     ; обрабатываем его - перобразуем в людской вид
cmp BL, 9           ; если это не цифра - на выход
ja exit_lbl
mul DI          ; умножаем его на 10
add AX, BX      ; складываем до купы
loop lbl1
 
cmp fl,1            ; если у нас отрицательное число
jne ee
neg AX          ; цепляем ему минус
ee:
 
pop BX
ret
exit_lbl:
call Error_Exit
Input endp
;----------------------------------------------------------------------------------------------------------
Output proc
mov BX, 10      ; основа системы счисления
mov DI, offset Buff+6   ; счетчик на конец буффера
mov fl, 0           ; по умолчанию сбрасываем флаг негативного числа
cmp AX, 0       ; наше число отрицаиельное?
jge Pr1
neg AX          ; если да, то делаем его положительным
mov fl, 1           ; но устанавливаем флаг отриц. числа
 
Pr1: xor DX, DX     ; тут будет остаток
div BX          ; делим АХ на 10 - остаток в DX
mov SI, offset Tabl     ; адес начала таблицы с символами
add SI, DX      ; адрес нужного нам символа
mov DL, [SI]        ; пхаем его в память, там где Buff
mov [DI], DL
dec DI          ; переходим на следующее место
 
cmp AX, 0       ; а не закончилось ли у нас число?
jnz Pr1         ; если нет то опять за свое
 
cmp fl,1            ; если у нас отрицательное число
jne eee
mov DL, '-'
mov [DI], DL        ; цепляем ему минус
dec DI          ; переходим на следующее место
eee:
 
mov AH, 9       ; если да, то гуляем (выводим число на экран)
mov DX, DI      ; это у нас место, где начинается символы числа
inc DX          ; на самом деле чуть правее
int 21h
ret
Output endp
;----------------------------------------------------------------------------------------------------------
Display_ok proc     ; сообщаем, что все хорошо
push AX
mov DX, offset text1
mov AH, 9
int 21h
pop AX
ret
Display_ok endp
;----------------------------------------------------------------------------------------------------------
Error_Exit proc     ; сообщаем, что все пропало и выходим
mov DX, offset text2
mov AH, 9
int 21h
; ждем нажатия любой клавиши
mov AH, 10h
int 16h
; завершение программы
mov AX, 4C00h
int 21h
ret
Error_Exit endp
;----------------------------------------------------------------------------------------------------------
Display_Ask_X proc      ; спрашиваем ввести Х
mov DX, offset text3
mov AH, 9
int 21h
ret
Display_Ask_X endp
;----------------------------------------------------------------------------------------------------------
Display_Ask_Y proc      ; спрашиваем ввести Y
mov DX, offset text4
mov AH, 9
int 21h
ret
Display_Ask_Y endp
;----------------------------------------------------------------------------------------------------------
code ends
 
data segment
Buff db 3, 6 dup(0), '$'
fl db 0
Tabl db '0123456789'
text1 db 13, 10, 'All ok', 13, 10, '$'
text2 db 13, 10, 'Error Exit', 13, 10, '$'
text3 db 13, 10, 'Enter X', 13, 10, '$'
text4 db 13, 10, 'Enter Y', 13, 10, '$'
text5 db 13, 10, 'Z =', 13, 10, '$'
data ends
end
 
stak segment stack
db 256 dup(?)
stak ends
 
end begin
42, 57 рядок шо я не так делаю

2.вопрос(другой код)
в командной строке
tasm /zi /l proga.asm ето делает
tlink /m /v proga.asm а здесь точку входа не находить
шо я не так делаю?
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
assume CS:code, DS:data
 
code segment
begin:
mov AX, data
mov DS, AX
 
call Display_Ask_X
call Input          ; ввод X (ограничено 2-мя символами)
mov BX, AX      ; Х будем хранить в ВХ
call Display_Ask_Y
call Input          ; ввод Y (ограничено 2-мя символами)
mov CX, AX      ; Y будем хранить в СХ
call Display_ok
call Analyse        ; наша процедурка
call Output         ; вывод целого числа с АХ - иам наш результат
 
; ждем нажатия любой клавиши
mov AH, 10h
int 16h
; завершение программы
mov AX, 4C00h
int 21h
;----------------------------------------------------------------------------------------------------------
Analyse proc        ; анализируем, что там навводили х в ВХ, у в СХ
cmp BX, 0       ; проверяем условие х>0 & y>0
jng lbl_b           
cmp CX, 0
jg lbl_1
lbl_b:
cmp BX, 0       ; проверяем условие х=0 & y!=0
jne lbl_c           
cmp CX, 0
jne lbl_2
lbl_c:
cmp BX, 0       ; проверяем условие х!=0 & y=0
je lbl_4            
cmp CX, 0
je lbl_3
 
lbl_4:          ; =1
mov AX, 1
jmp exit_a
lbl_3:          ; =6х
mov AX, 6
imul BX
jmp exit_a
lbl_2:          ; =25у
mov AX, 25
imul CX
jmp exit_a
lbl_1:          ; по формуле
mov AX, BX      ; ложим Х в АХ
imul CX         ; умножаем его на Y
mov DI, AX      ; результат кладем на склад
mov AX, BX      ; ложим X в АХ
add AX, CX      ; складываем его с Y
idiv DI         ; делим
exit_a:
 
ret
Analyse endp
;----------------------------------------------------------------------------------------------------------
Input proc
push BX
mov DX, offset Buff     ; вводим наше число
mov AH, 10
int 21h
 
mov SI, offset Buff+1   ; адрес где лежит кол-во введенных цифр
xor CX, CX
mov CL, [SI]        ; берем кол-во введенных цифр для цикла
cmp CX, 0       ; если ноль - на выход
je exit_lbl
 
mov fl, 0           ; по умолчанию сбрасываем флаг негативного числа
inc SI          ; берем первый разряд нашего числа
mov AL, [SI]        ; пхаем его в регстр для обработки
cmp AL,'-'          ; если минус - установить флаг
jne positiv
mov fl, 1           ; флаг негативного числа
dec CL          ; кло-во цифр стало на 1 меньше
cmp CX, 0       ; если кроме минуса там ничего нет - на выход
je exit_lbl
inc SI          ; следующий разряд нашего числа
 
positiv:
xor AX, AX
xor DI, DI
mov DI, 10      ; 10 - кратность
dec SI          ; адрес цифры возвращаем обратно
 
lbl1:
inc SI          ; берем следующий разряд нашего числа
xor BX, BX
mov BL, [SI]        ; пхаем его в регстр для обработки
sub BL, '0'     ; обрабатываем его - перобразуем в людской вид
cmp BL, 9           ; если это не цифра - на выход
ja exit_lbl
mul DI          ; умножаем его на 10
add AX, BX      ; складываем до купы
loop lbl1
 
cmp fl,1            ; если у нас отрицательное число
jne ee
neg AX          ; цепляем ему минус
ee:
 
pop BX
ret
exit_lbl:
call Error_Exit
Input endp
;----------------------------------------------------------------------------------------------------------
Output proc
mov BX, 10      ; основа системы счисления
mov DI, offset Buff+6   ; счетчик на конец буффера
mov fl, 0           ; по умолчанию сбрасываем флаг негативного числа
cmp AX, 0       ; наше число отрицаиельное?
jge Pr1
neg AX          ; если да, то делаем его положительным
mov fl, 1           ; но устанавливаем флаг отриц. числа
 
Pr1: xor DX, DX     ; тут будет остаток
div BX          ; делим АХ на 10 - остаток в DX
mov SI, offset Tabl     ; адес начала таблицы с символами
add SI, DX      ; адрес нужного нам символа
mov DL, [SI]        ; пхаем его в память, там где Buff
mov [DI], DL
dec DI          ; переходим на следующее место
 
cmp AX, 0       ; а не закончилось ли у нас число?
jnz Pr1         ; если нет то опять за свое
 
cmp fl,1            ; если у нас отрицательное число
jne eee
mov DL, '-'
mov [DI], DL        ; цепляем ему минус
dec DI          ; переходим на следующее место
eee:
 
mov AH, 9       ; если да, то гуляем (выводим число на экран)
mov DX, DI      ; это у нас место, где начинается символы числа
inc DX          ; на самом деле чуть правее
int 21h
ret
Output endp
;----------------------------------------------------------------------------------------------------------
Display_ok proc     ; сообщаем, что все хорошо
push AX
mov DX, offset text1
mov AH, 9
int 21h
pop AX
ret
Display_ok endp
;----------------------------------------------------------------------------------------------------------
Error_Exit proc     ; сообщаем, что все пропало и выходим
mov DX, offset text2
mov AH, 9
int 21h
; ждем нажатия любой клавиши
mov AH, 10h
int 16h
; завершение программы
mov AX, 4C00h
int 21h
ret
Error_Exit endp
;----------------------------------------------------------------------------------------------------------
Display_Ask_X proc      ; спрашиваем ввести Х
mov DX, offset text3
mov AH, 9
int 21h
ret
Display_Ask_X endp
;----------------------------------------------------------------------------------------------------------
Display_Ask_Y proc      ; спрашиваем ввести Y
mov DX, offset text4
mov AH, 9
int 21h
ret
Display_Ask_Y endp
;----------------------------------------------------------------------------------------------------------
code ends
 
data segment
Buff db 3, 6 dup(0), '$'
fl db 0
Tabl db '0123456789'
text1 db 13, 10, 'All ok', 13, 10, '$'
text2 db 13, 10, 'Error Exit', 13, 10, '$'
text3 db 13, 10, 'Enter X', 13, 10, '$'
text4 db 13, 10, 'Enter Y', 13, 10, '$'
text5 db 13, 10, 'Z =', 13, 10, '$'
data ends
end
 
stak segment stack
db 256 dup(?)
stak ends
 
end begin
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2012, 03:38
Ответы с готовыми решениями:

скомпилировать в com(tasm)
привет форумчане) как скомпилировать в ком выдаёт ошибку csg1 segment 'CODE' assume CS:csg1,DS:csg1 org 100h main: int 10h ...

Откомпилировать программу в tasm
Помогите откомпилировать прогу в tasm! .modeltiny .386 .data a dw 8; a dw 9; c dw 1994; d dw 0,?; .code start: mov...

Вычислить кусочечную функцию
Помогите написать в TASM-е format PE console entry start include 'C:\fasmw16918\INCLUDE\win32a.inc' section '.data' data...

1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
03.12.2012, 04:46
Цитата Сообщение от mora10217
42, 57 рядок шо я не так делаю
В обоих случаях пропущена запятая после AX.
Цитата Сообщение от mora10217;
шо я не так делаю?
Стр. 199 не нужна - после нее трансляция заканчивается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2012, 04:46
Помогаю со студенческими работами здесь

Посчитать количество нулей, в двойном слове
Здравствуйте уважаемые обитатели данного форума. Так вышло, что мне нужна ваша помощь. Если есть желающие буду рад, принять вашу помощь. И...

Скомпилировать программу, и найти ошибки если есть
Помогите пожалуйста скомпилировать программу, и найти ошибки если есть P386 MODEL FLAT,stdcall INCLUDE Win32.INC ...

Изучение tasm. Не получается откомпилировать программу
Здравствуйте, уважаемые форумчане!) Пыталась программу написать на tasm, но компилятор tasm.exe ругается на ошибки, помогите...

Нужно переделать готовую программу из TASM в MASM32
Вот собственно у меня такая проблема. Надо переделать данную программу в MASM32.

Как написать и скомпилировать программу наподобие CHKDSK, запускающуюся в Native-режиме?
Есть: Visual C++ Express 2008, 2010. Можно и новее добыть. Нужен: буквально хелловорлд, только не Win32, а способный запускаться, как...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru