С Новым годом! Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 31

Помогите доделать программу на ассемблере, чтобы она открывалась в Pascal.

29.01.2012, 13:17. Показов 817. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как делать вставку кода ассемблера в Pascal я понимаю только теоретически:
пишем: Uses crt;
label "объявляем метки"
var "объявляем переменные"
asm
"код на ассемблере"
writeln "Выводим необходимые значения"
end.
Вот код на ассемблере (программа находит минимальное слово, которое было введено с клавиатуры и общее количество слов):


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
sseg segment stack 'STACK'
  db 1024 dup (?)
sseg ends  
dseg segment
   str1  db 30 dup (?)                        
   cout   db      13,"Vvedite stroku(Dolzna nachinatsa i zakanchivatsa simvolom):> ",'$'     
   text1 db 13,10,'naimenshee slovo','$' 
   text2 db 13,10,'kolichestvo slov','$'    
   len dw ?
   kol dw 0
   Strmin db 9 dup (?), '$' 
   Negate db ? 
   CRLF db 13, 10, '$' 
dseg ends
cseg segment 'CODE'  
assume cs:cseg, ds:dseg
start:  mov ax, dseg
   mov ds, ax
   mov es, ax  
start1: 
call stroka                         
call strlen
mov len, cx ;длина минимального
mov bx, 0   ;длина текущего слова
lea si, str1  
begin: 
inc ax              
cmp byte ptr [si + bx], ' '
je  nextword_min
inc bx        
cmp ax, len 
je nextword_min        
jmp begin
nextword_min:            ; нашли пробел, значит переходим к следующему слову
add kol, 01 
cmp cx, bx
jl oldlong_min           ;если больше минимального, значит оставить старую длину минимального слова
mov di, si
mov cx, bx
oldlong_min:
add si, bx
inc si
mov bx, 0                    ;проверяем, нет ли ещё пробелов
cmp byte ptr [si + bx], ' '  ;проверяем нет ли ещё пробелов
je  escho_probel
cmp ax, len 
je showword_min   
jmp begin
escho_probel:
inc si
inc ax
cmp byte ptr [si + bx], ' '
je  escho_probel
jmp begin
call vivod
fin:    mov ax, 04c00h
int 21h
;----------------------------------------------
vivod proc near
showword_min:
lea dx, text2
call wrstr    
call newline
mov ax, kol
call StrCon 
mov dx, si
call wrstr 
lea dx, text1
call wrstr    
call newline
mov ax, 00
mov ah, 6
showword_min2: 
mov dl, [di + bx]
cmp dl, ' '
je fin
int 21h
inc di
jmp showword_min2
vivod endp
WrStr proc near
push ax
mov   ah,09h                    
int   21h
pop ax                       
ret                                 
WrStr  endp 
                 
StrCon proc 
push ax
push cx
push dx 
push bx    
mov cx, 10  
lea si, StrMin + 7   
mov Negate, 0                              
                 
cmp ax, 8000h    
jb m6      
neg ax  
mov Negate, 1  
m6: 
cmp ax, 10                                 
                          
jb m7                
cwd                  
div cx                
or dl, 30h           
mov [si], dl       
dec si                 
jmp m6              
m7: 
or al, 30h          
mov [si], al       
cmp Negate, 0                              
                                 
jz m8                
dec si                  
mov byte ptr [si], '-'                     
                                             
m8 : pop bx
pop dx
pop cx
pop  ax   
ret 
StrCon endp
                
stroka proc
push ax
push cx
push bx  
mov     dx,offset cout
call wrstr        
mov     ah,3fh
lea     dx,str1
mov     cx,30
mov     bx,0    
int  21h  
pop bx
pop cx
pop  ax
ret  
stroka endp 
                 
strlen proc
mov di, offset str1
mov cx, 0FFFFh 
xor ax, ax 
repnz scasb 
not cx 
sub cx, 3
ret 
strlen endp 
                
NewLine proc 
push dx          
mov     dx, offset CRLF 
call    WrStr 
pop dx  
ret 
NewLine endp       
cseg ends
end start
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2012, 13:17
Ответы с готовыми решениями:

Помогите доделать программу на ассемблере, чтобы она открывалась в Pascal.
Как делать вставку кода ассемблера в Pascal я понимаю только теоретически: пишем: Uses crt; label "объявляем...

Помогите доделать программу так, чтобы она соответствовала следующим требованиям
Память под хранение элементов массива должна выделяться динамически с помощью оператора new (освобождаться – с помощью delete), размер...

Как перекомпилировать программу, чтобы она открывалась без участия Delphi?
Закончил писать программу. Как ее теперь перекомпилировать, чтобы она открывалась сама, без участия Delphi 7?

5
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.01.2012, 13:30
А это работает в Ассемблере? А то Паскаль не хочет признавать уже первую строку
Assembler
1
sseg segment stack 'STACK'
0
0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 31
29.01.2012, 14:16  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
А это работает в Ассемблере? А то Паскаль не хочет признавать уже первую строку
Assembler
1
sseg segment stack 'STACK'
Эта программа в рабочем состоянии. А то что паскаль не хочет признавать уже первую строку, так это скорее всего потому, что её в паскалевской программе вообще и быть не должно, как в прочем и второй и третей и т.д. аж до метки start. Но это не факт, а лишь предположение, основанное на моих не глубоких теоретических сведениях по поводу этого вопроса.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.01.2012, 14:30
Цитата Сообщение от Kroleg Посмотреть сообщение
её в паскалевской программе вообще и быть не должно,
Это само сабой. Я имею ввиду не признает в таком виде
Pascal
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
uses crt;
begin
clrscr;
asm
sseg segment stack 'STACK'
  db 1024 dup (?)
sseg ends
dseg segment
   str1  db 30 dup (?)                        
   cout   db      13,"Vvedite stroku(Dolzna nachinatsa i zakanchivatsa simvolom):> ",'$'     
   text1 db 13,10,'naimenshee slovo','$' 
   text2 db 13,10,'kolichestvo slov','$'    
   len dw ?
   kol dw 0
   Strmin db 9 dup (?), '$' 
   Negate db ? 
   CRLF db 13, 10, '$' 
dseg ends
cseg segment 'CODE'  
assume cs:cseg, ds:dseg
start:  mov ax, dseg
   mov ds, ax
   mov es, ax
start1:
call stroka
call strlen
mov len, cx ;длина минимального
mov bx, 0   ;длина текущего слова
lea si, str1
begin:
inc ax
cmp byte ptr [si + bx], ' '
je  nextword_min
inc bx
cmp ax, len
je nextword_min
jmp begin
nextword_min:            ; нашли пробел, значит переходим к следующему слову
add kol, 01
cmp cx, bx
jl oldlong_min           ;если больше минимального, значит оставить старую длину минимального слова
mov di, si
mov cx, bx
oldlong_min:
add si, bx
inc si
mov bx, 0                    ;проверяем, нет ли ещё пробелов
cmp byte ptr [si + bx], ' '  ;проверяем нет ли ещё пробелов
je  escho_probel
cmp ax, len
je showword_min
jmp begin
escho_probel:
inc si
inc ax
cmp byte ptr [si + bx], ' '
je  escho_probel
jmp begin
call vivod
fin:    mov ax, 04c00h
int 21h
;----------------------------------------------
vivod proc near
showword_min:
lea dx, text2
call wrstr
call newline
mov ax, kol
call StrCon
mov dx, si
call wrstr
lea dx, text1
call wrstr
call newline
mov ax, 00
mov ah, 6
showword_min2:
mov dl, [di + bx]
cmp dl, ' '
je fin
int 21h
inc di
jmp showword_min2
vivod endp
WrStr proc near
push ax
mov   ah,09h
int   21h
pop ax
ret
WrStr  endp
 
StrCon proc
push ax
push cx
push dx
push bx
mov cx, 10
lea si, StrMin + 7
mov Negate, 0
 
cmp ax, 8000h
jb m6
neg ax
mov Negate, 1
m6:
cmp ax, 10
 
jb m7
cwd
div cx
or dl, 30h
mov [si], dl
dec si
jmp m6
m7:
or al, 30h
mov [si], al
cmp Negate, 0
 
jz m8
dec si
mov byte ptr [si], '-'
 
m8 : pop bx
pop dx
pop cx
pop  ax
ret
StrCon endp
 
stroka proc
push ax
push cx
push bx
mov     dx,offset cout
call wrstr
mov     ah,3fh
lea     dx,str1
mov     cx,30
mov     bx,0
int  21h
pop bx
pop cx
pop  ax
ret
stroka endp
 
strlen proc
mov di, offset str1
mov cx, 0FFFFh
xor ax, ax
repnz scasb
not cx
sub cx, 3
ret
strlen endp
 
NewLine proc
push dx
mov     dx, offset CRLF
call    WrStr
pop dx
ret
NewLine endp
cseg ends
end start;
readln
end.
обычно ассемблерные вставки в таком виде работают.

Добавлено через 44 секунды
Видимо нужно весь ассемблерный код переделывать..

Добавлено через 1 минуту
Может нужно просто написать программу на Паскале по этому условию?
0
0 / 0 / 0
Регистрация: 13.02.2011
Сообщений: 31
29.01.2012, 14:39  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Это само сабой. Я имею ввиду не признает в таком виде
Pascal
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
uses crt;
begin
clrscr;
asm
sseg segment stack 'STACK'
  db 1024 dup (?)
sseg ends
dseg segment
   str1  db 30 dup (?)                        
   cout   db      13,"Vvedite stroku(Dolzna nachinatsa i zakanchivatsa simvolom):> ",'$'     
   text1 db 13,10,'naimenshee slovo','$' 
   text2 db 13,10,'kolichestvo slov','$'    
   len dw ?
   kol dw 0
   Strmin db 9 dup (?), '$' 
   Negate db ? 
   CRLF db 13, 10, '$' 
dseg ends
cseg segment 'CODE'  
assume cs:cseg, ds:dseg
start:  mov ax, dseg
   mov ds, ax
   mov es, ax
start1:
call stroka
call strlen
mov len, cx ;длина минимального
mov bx, 0   ;длина текущего слова
lea si, str1
begin:
inc ax
cmp byte ptr [si + bx], ' '
je  nextword_min
inc bx
cmp ax, len
je nextword_min
jmp begin
nextword_min:            ; нашли пробел, значит переходим к следующему слову
add kol, 01
cmp cx, bx
jl oldlong_min           ;если больше минимального, значит оставить старую длину минимального слова
mov di, si
mov cx, bx
oldlong_min:
add si, bx
inc si
mov bx, 0                    ;проверяем, нет ли ещё пробелов
cmp byte ptr [si + bx], ' '  ;проверяем нет ли ещё пробелов
je  escho_probel
cmp ax, len
je showword_min
jmp begin
escho_probel:
inc si
inc ax
cmp byte ptr [si + bx], ' '
je  escho_probel
jmp begin
call vivod
fin:    mov ax, 04c00h
int 21h
;----------------------------------------------
vivod proc near
showword_min:
lea dx, text2
call wrstr
call newline
mov ax, kol
call StrCon
mov dx, si
call wrstr
lea dx, text1
call wrstr
call newline
mov ax, 00
mov ah, 6
showword_min2:
mov dl, [di + bx]
cmp dl, ' '
je fin
int 21h
inc di
jmp showword_min2
vivod endp
WrStr proc near
push ax
mov   ah,09h
int   21h
pop ax
ret
WrStr  endp
 
StrCon proc
push ax
push cx
push dx
push bx
mov cx, 10
lea si, StrMin + 7
mov Negate, 0
 
cmp ax, 8000h
jb m6
neg ax
mov Negate, 1
m6:
cmp ax, 10
 
jb m7
cwd
div cx
or dl, 30h
mov [si], dl
dec si
jmp m6
m7:
or al, 30h
mov [si], al
cmp Negate, 0
 
jz m8
dec si
mov byte ptr [si], '-'
 
m8 : pop bx
pop dx
pop cx
pop  ax
ret
StrCon endp
 
stroka proc
push ax
push cx
push bx
mov     dx,offset cout
call wrstr
mov     ah,3fh
lea     dx,str1
mov     cx,30
mov     bx,0
int  21h
pop bx
pop cx
pop  ax
ret
stroka endp
 
strlen proc
mov di, offset str1
mov cx, 0FFFFh
xor ax, ax
repnz scasb
not cx
sub cx, 3
ret
strlen endp
 
NewLine proc
push dx
mov     dx, offset CRLF
call    WrStr
pop dx
ret
NewLine endp
cseg ends
end start;
readln
end.
обычно ассемблерные вставки в таком виде работают.

Добавлено через 44 секунды
Видимо нужно весь ассемблерный код переделывать..

Добавлено через 1 минуту
Может нужно просто написать программу на Паскале по этому условию?
Та в том-то и вся соль, что нужно как раз сделать так, чтобы программа написанная на ассемблере работала или в паскале или в C++...
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
29.01.2012, 14:44
Тогда почитай это, а то из Ассемблера только название и знаю...
http://citforum.ru/programming... 3_19.shtml
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2012, 14:44
Помогаю со студенческими работами здесь

Доделать программу, чтобы она показывала наибольшее число из всех выбранных
Мне нужно доделать программу чтоб она показывала наибольшее число из всех выбранных. И показывала на звание строки где находиться это...

Регистрация: спрятать страницу ото всех пользователей, но чтобы она открывалась для текущего пользователя
Всем привет! Ребят, вот допустим я запилил, регестрацию клиента на сайте. У меня есть бд, там хранятся пароли и логины. Клиент заполняет...

Подскажите, как настроить webbrowser1, чтобы при нажатии на ссылку, она открывалась в браузере по умолчанию
Привет всем! Подскажите как настроить webbrowser1 чтобы при нажатии на ссылку она открывалась в браузере по умолчанию или хотя бы в...

помогите пожалуйста доделать программу ( Табулирование )
1)Задача всей програмы - Протабулировать 2 любые неразрывные функции на заданном интервале с заданным шагом ( эт ясделал ) 2)Для обехи...

Помогите написать прогу чтобы она считывала пути из файла
Здравствуйте! Помогите написать прогу чтобы она считывала пути из файла (к примеру F:\Фильмы\ и F:\$Recycle.Bin\ Сам файл...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru