Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/43: Рейтинг темы: голосов - 43, средняя оценка - 4.77
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
1

Процедуры, прерывания [FASM]

14.11.2013, 00:09. Показов 8345. Ответов 53
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить процедуру, которая представляет на экране текст из нескольких предложений в виде отдельных фраз с заголовком – нумерацией, например:
Предложение-1:
…………………
Предложение-2:
…………………
и т.д.
использовать эту процедуру для решения следующей задачи: ввести текст из нескольких предложений и вывести его на экран в заданном виде, закончив в главной программе завершающей строкой, выделив её цветом или мерцанием.
У FASM бзик на процедуры? ибо классический синтаксис не работает, использую обыкновенные метки с ret

Выделил то, что не понятно или не реализовано.

Впервые сталкиваюсь с прерываниями и процедурами и как следствие, творение рук моих не работает... где ошибся?

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
format PE Console 4.0
entry Start
 
include 'win32a.inc'
 
section '.data' data readable writeable
 
Maxlen db 255
Actlen db ?
buffer rb 256
line db 'String $'
eline db 'ardos $',05h
 
section '.text' code readable executable
 
Start:
xor eax,eax
xor edx,edx
xor ebx,ebx  
call input
call head
 
call endline
 
input:
mov ah, 0Ah
lea dx, [Maxlen]
int 21h
ret
 
head:
lea dx, [line]
mov ah,09h
int 21h
ret
 
endline:
lea dx, [eline]
mov ah,09h
int 21h
mov ax, 1003h
mov bl, 1
int 10h
 
Exit:
  invoke  ExitProcess, 0
 
section '.idata' import data readable
 
  library kernel, 'KERNEL32.DLL'
 
  import kernel,\
    ExitProcess, 'ExitProcess'
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2013, 00:09
Ответы с готовыми решениями:

[Вопрос] Перехват прерывания прямым доступом к вектору прерывания
Всех приветствую! В данный момент разбираюсь с обработкой аппаратного прерывания (прерывание...

Обработчик прерывания int 21h (по книге Калашникова)
Доброе время суток, я чтиаю книгу Калашникова-Ассемблер и уже втрой день не могу понять почему...

Реализация функции 42h прерывания 13h на FASM
Реализация функции 42h прерывания 13h на FASM. Как это реализовать? Номер устройства при загрузке в...

[FASM] Переделка процедуры
Имею процедуру: proc WindowProc hWindowHandle, wMessage, wParam, lParam push ebx esi edi...

53
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
15.11.2013, 16:18 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Satansoft Посмотреть сообщение
На виртуалке мигнуло, в DOSbox выбило 2 раза String и висяк... панико-панико...
Ну значит, есть баг в DOSbox.
0
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
15.11.2013, 16:24  [ТС] 22
Цитата Сообщение от XiloManX Посмотреть сообщение
Ну значит, есть баг в DOSbox.
В виртуалке скорее всего из-за:
Assembler
1
org 100h
там же выделенная память, предположительно не с начала... Вы через что х16 код запускаете??
0
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
15.11.2013, 16:29 23
Цитата Сообщение от Satansoft Посмотреть сообщение
В виртуалке скорее всего из-за:
Код ASM
1
org 100h
там же выделенная память, предположительно не с начала...
Может быть.
Цитата Сообщение от Satansoft Посмотреть сообщение
Вы через что х16 код запускаете??
Через Консоль, в WinXP.
0
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
15.11.2013, 16:46  [ТС] 24
Цитата Сообщение от XiloManX Посмотреть сообщение
Через Консоль, в WinXP.
А ваш бинарник заработал... только ввод одноразовый, по заданию из несколько.
0
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
15.11.2013, 16:53 25
Цитата Сообщение от Satansoft Посмотреть сообщение
А ваш бинарник заработал...
Ну и отлично.
Цитата Сообщение от Satansoft Посмотреть сообщение
только ввод одноразовый, по заданию из несколько.
Ну, я и не делал несколько.
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
15.11.2013, 17:32 26
Цитата Сообщение от XiloManX Посмотреть сообщение
В 16 битном режиме, 32 битные регистры не используются по определению.
Кто сказал?
Если указан format MZ fasm генерирует файл .exe, соответственно, org 100h ни к чему.
В задании прямо сказано, что текст нужно ввести один раз, а потом разбить его на предложения. Вот код. Предполагается, что предложения разделены одним или несколькими пробелами и заканчиваются точкой.
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
org 100h
start:
 
call input
 
mov ax,3
int 10h
 
xor dx,dx
mov esi,string
movzx cx,[len]
 
@@:
push dx
 
call output
inc [text+6]
inc cx
call parse
 
pop dx
add dh,2
test cx,cx
jnz @b
 
xor ax,ax
int 16h
ret
 
parse:
 
mov edi,esi
mov al,'.'
repnz scasb
mov al,' '
repe scasb
test cx,cx
je @1
dec di
@1:
mov byte [di-1],24h
mov edx,esi
mov esi,edi
 
mov ah,9
int 21h
ret
 
input:
 
mov dx,buffer
mov ah,10
int 21h
 
ret
 
output:
 
push cx
mov ax,1301h
mov bx,0eh
mov cx,len_text
mov bp,text
int 10h
pop cx
 
ret
 
buffer db 254
len db 0
string rb 255 
 
text db 'Offer-1:',0dh,0ah
len_text = $-text
2
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
15.11.2013, 17:32  [ТС] 27
XiloManX, Not at all!, если переложить программу под win32 и используя прерывания получить доступ к DOS консоли, работать будет?
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
15.11.2013, 17:35 28
Цитата Сообщение от Satansoft Посмотреть сообщение
если переложить программу под win32 и используя прерывания получить доступ к DOS консоли
Ничё не понял.
0
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
15.11.2013, 17:39  [ТС] 29
Цитата Сообщение от Not at all! Посмотреть сообщение
Ничё не понял.
Прерывания DOS при PE 4.0 работать будут?
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
15.11.2013, 17:43 30
Satansoft, конечно же нет.
0
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
15.11.2013, 17:45  [ТС] 31
Цитата Сообщение от Not at all! Посмотреть сообщение
Satansoft, конечно же нет.
Неужели из х32 нельзя получить доступ к DOS? Меня все больше манит printf к выводу результата, но как организовать высокоуровневый ввод строки?
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
15.11.2013, 17:56 32
Почему нельзя? Пишите программу под Dos, запускайте, и ntvdm.exe проэмулирует её выполнение в Dos. Вы определитесь, под какую операционную систему нужна программа.
1
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
15.11.2013, 23:12  [ТС] 33
Not at all!, основная ось win7 x64 и 16 битный код на ней не воспроизведется, а консольный ввод и вывод необходимы, как выйти из положения не устанавливая 2-й осью ХРюшку?
0
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,623
Записей в блоге: 2
16.11.2013, 00:14 34
Not at all!, абсолютно прав.
В 16 битном режиме, 32 битные регистры не используются по определению.
32 битные регистры общего назначения доступны начиная с 386-го процессора.
Программы DOS их очень часто используют, если не стоит цель писать под железо
конца 80-х годов... В FASM не знаю как, но в MASM директива .386 даёт компилятору
понять, что нужно использовать команды реального режима 386-го процессора.
1
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
16.11.2013, 01:08 35
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Not at all!, абсолютно прав.

32 битные регистры общего назначения доступны начиная с 386-го процессора.
Программы DOS их очень часто используют, если не стоит цель писать под железо
конца 80-х годов... В FASM не знаю как, но в MASM директива .386 даёт компилятору
понять, что нужно использовать команды реального режима 386-го процессора.
Что-то я не видел ни одной такой программы. Если только, горе программисты их пишут. Даже, если такие программы и есть, то они работают только в каком-нибудь эмуляторе, и навернека в реальной DOS, работать не будут.

Я считаю, что во всём надо придерживатся точности (то есть изначально писать программы под реальную DOS). Если DOS 16 битная, значит и регистры должны быть не больше, чем 16 бит. А то, что там в процессорорах доступно, меня, мягко говоря не волнует.
0
5001 / 1673 / 409
Регистрация: 25.04.2010
Сообщений: 4,623
Записей в блоге: 2
16.11.2013, 02:04 36
Если DOS 16 битная
Дело не в DOS, дело в процессоре.

Если только, горе программисты их пишут.
Ну да конечно, вместо того чтобы написать
Assembler
1
2
3
4
5
6
Mov ax, 1234
Push ax
Shl eax, 16
Pop ax
Mov cx, 1000
Rep StoSd
я буду писать
Assembler
1
2
3
Mov ax, 1234
Mov cx, 2000
Rep StoSw
уж простите горе программиста, за то, что жаждет чуть-чуть скорости...

то они работают только в каком-нибудь эмуляторе
Они работают везде, где есть проц выше или равный 386.
0
644 / 148 / 31
Регистрация: 11.02.2013
Сообщений: 277
16.11.2013, 02:46 37
Цитата Сообщение от Quiet Snow Посмотреть сообщение
уж простите горе программиста, за то, что жаждет чуть-чуть скорости...
Ну, ты можешь как хочешь писать, а я такие выкрутасы не люблю (как я уже говорил - люблю точность). Да и DOS, я не пользуюсь.
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Они работают везде, где есть проц выше или равный 386.
Может быть. Но пока не проверю, не поверю, а проверить неначем.
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
16.11.2013, 05:42 38
Satansoft, ставьте VirtualBox, и на неё хоть ХР х32, хоть Dos.

Добавлено через 16 минут
Цитата Сообщение от XiloManX Посмотреть сообщение
Ну, ты можешь как хочешь писать, а я такие выкрутасы не люблю
"Этого не может быть, потому что этого не может быть никогда!" (С) А.П. Чехов. Письмо к учёному соседу.
0
20 / 16 / 7
Регистрация: 27.02.2012
Сообщений: 742
16.11.2013, 14:01  [ТС] 39
Цитата Сообщение от Not at all! Посмотреть сообщение
Satansoft, ставьте VirtualBox, и на неё хоть ХР х32, хоть Dos.
Стоит VirtualBox с Хрюшей, но не выполняется, видимо из-за отсутствия полного доступа к памяти, а из-под win7 x64 на DOSBox работает. Повторюсь: есть ли способ получить доступ к консольному I/O из-под x64 системы?
0
193 / 188 / 18
Регистрация: 06.10.2013
Сообщений: 357
16.11.2013, 14:20 40
Satansoft, если DOSBox работает, что ещё нужно?
0
16.11.2013, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2013, 14:20
Помогаю со студенческими работами здесь

Добавление процедуры прерывания в класс
Добрый вечер! К примеру написал я класс на с++, для работы которого надо прерывание по...

Вызываю dll (написанную на vc++2008) из Fasm. Через 40 секунд вылет из программы.Без вызова dll из Fasm программа не вылетает.
Программа на vc++2008: #include "MathFuncsDll.h" #include <stdexcept> using namespace std; ...

Вычислить адрес вектора прерывания по номеру прерывания.
17. По заданному номеру прерывания (13 h) вычислите логические адреса хранения исходных адресов...

Вызов прерывания в обработке прерывания
В программе,нажатие кнопки вызывает прерывание,в котором оно обрабатывается.Попутно в обработке...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru