Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
TASM

Программа, запускающая другую некоторое количество раз

27.04.2020, 15:55. Показов 5182. Ответов 6

Студворк — интернет-сервис помощи студентам
Помогите,пожалуйста! Не разбираюсь,А сдать нужно!
Написать программу, запускающую другую программу N раз (N –
число в диапазоне [1…255]). Имя запускаемой программы передается в командной строке
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2020, 15:55
Ответы с готовыми решениями:

Создать приложение, в котoром можнo вопроизвести всe стандартные мультипликации windows некоторое заранее зaданнoe количество раз
Добрый день необходима помощь, нужно Создать прiложение в котoром можнo вопроизвести всe стандартные мультипликации windows некоторое...

Программа, запускающая сама себя
Требуется, чтобы программа запустила сама себя. Использую: system("start programma.exe"); Но при изменении названия файла такая функция...

Не компилируется программа, запускающая DLL-библиотеку
Здравствуйте. Я тут попыталась создать dllку, но все застопорилось на написании программы, которая собственно и будет эту самую dllку...

6
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
28.04.2020, 17:15  [ТС]
на форме нашла только это, но оно выдает ошибки
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
.model small
.data
msg1    db 13,10,'Trying execute second.exe$'
msg2    db 13,10,'Error$'
msg3    db 13,10,'First terminating. Press any key$'
fn  db 'second.exe',0   ;Имя запускаемого файла
param   db 10,' bufer.txt',13   ;командная строка
; === Exec Parameter Block (EPB) для функции 4Bh ===
env dw 0            ;Сегмент среды (окружения DOS) для загружаемой программы
cmd_of  dw offset param     ;Смещение командной строки +
cmd_seg dw @data        ;+ сегмент командной строки
fcb1    dd 0            ;FCB (не используется)
fcb2    dd 0            ;FCB (не используется)
Len dw $-env  ;Длина EPB
dsize=$-msg1        ;размер сегмента данных
 
.stack 256
.code
start:
    mov ah,4ah      ;функция изменения размера блока памяти
    mov bx,((csize/16)+1)+256/16+((dsize/16)+1)+256/16;новый размер программы с учетом всех сегментов
    int 21h     ;ограничиваем блок данных нашей программы
    mov ax,@data    ;Настраиваем сегментные регистры
    mov ds,ax
    mov es,ax
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg1     ;выводимое сообщение
    int 21h         ;выводим на экран
    mov ax,4b00h        ;Функция EXEC (EXECute - загрузка и запуск программы)
    lea dx,fn       ;Имя файла для запуска
    lea bx,env      ; --- Готовим EPB ---
    int 21h         ;запуск
    jb er           ;если ошибка - переход
ex: mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg3     ;выводимое сообщение
    int 21h         ;выводим на экран
    mov ah,1        ;Ожидаем нажатия любой клавиши
    int 21h
    mov ax,4c00h        ;закончить программу
    int 21h
er: mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg2     ;выводимое сообщение
    int 21h         ;выводим на экран
    jmp ex          ;выход
csize=$-start           ;размер сегмента кода
end start
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
05.05.2020, 22:10
Лучший ответ Сообщение было отмечено LinaBrn9 как решение

Решение

Если запускать "себя", то посмотрите
Написать программу запускающую себя n раз

Если другую внешнюю программу, то на основе
Программа по запуску другой программы с параметрами
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
.model tiny
 
.code
 
        org     100h
main    proc
 
        jmp     start
 
        ;Данные
        CrLf            db      0Dh, 0Ah, '$'
        asErrExec       db      0Dh, 0Ah, "Exec failed", 0Dh, 0Ah, '$'
        ChildProcess    db      "z:\command.com", 0
        ChildParams     db      13, ' /C dir *.asm', 0Dh
        N               dw      4
        stkseg          dw      ?               ; save SS register
        stkptr          dw      ?               ; save SP register
        ExecParamRec    label   byte
                wEnvSeg         dw      ?
                pfCmdTail       dd      ?
                pfrFCB_1        dd      ?
                pfrFCB_2        dd      ?
 
start:
        ;программа
 
        ;несколько (N) раз запуск внешней программы
        mov     cx,     [N]
        @@for:
                push    cx
                call    StartProcess
                pop     cx
        loop    @@for
 
 
        ;завершение программы
        xor     ax,     ax
        ;int    16h
        int     20h
 
main    endp
 
StartProcess    proc
        ;уменьшаем объём памяти, выделенной
        ;операционной системой при запуске
        ;для родительской программы
        mov     ah,     4Ah
        mov     bx,     1000h
        ;es - указывает на PSP
        int     21h
        ;подготовка к вызову EXEC
        ;- Сохраните текущие значения
        ;  SS, SP, DS, ES и DTA в переменных,
        ;  адресуемых через регистр CS
        push    es
        push    ds
        mov     [stkseg],       ss
        mov     [stkptr],       sp
        ;- подготовка блока параметров
        mov     ax,     ds:[2Ch]
        mov     [wEnvSeg],      ax
        mov     ax,     cs      ;поместить в ax сегмент PSP
        mov     word ptr[pfrFCB_1],     005Ch
        mov     word ptr[pfrFCB_1+2],   ax
        mov     word ptr[pfrFCB_2],     006Ch
        mov     word ptr[pfrFCB_2+2],   ax
        mov     word ptr[pfCmdTail],    offset ChildParams
        mov     word ptr[pfCmdTail+2],  ax
 
        ;вызов EXEC - внешней программы
        mov     ax,     4B00h
        lea     dx,     [ChildProcess]
        lea     bx,     [ExecParamRec]
        int     21h
 
        ;Восстановите локальные значения SS и SP
        cli                     ; (for bug in some early 8088s)
        mov     ss,cs:[stkseg]  ; restore stack pointer
        mov     sp,cs:[stkptr]
        sti                     ; (for bug in some early 8088s)
        ;Восстановите DS, ES и локальную DTA, если необходимо.
        pop     ds
        pop     es
        ;Проверьте флаг CF, чтобы узнать, не было ли ошибки при EXEC.
        jnc     @@ExecOk
                ;вывод сообщение об ошибке вызова EXEC
                mov     ah,     09h
                lea     dx,     [asErrExec]
                int     21h
        @@ExecOk:
        ;Проверьте код выхода через функцию 4dH WAIT (если надо).
 
        ret
StartProcess    endp
 
end     main
0
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
05.05.2020, 22:14  [ТС]
если у вас работает эта программа,то я буду очень благодарна, если вы просто вышлите скриншоты работы
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
05.05.2020, 22:19
Скомпилируйте её самостоятельно как DOS COM программу и запускайте.
Имейте совесть - ничего не делали, даже читать не пробовали (не с середины учебника, а с первой страницы). Может мне ещё отчёт по лабе составить и сходить защитить?
0
0 / 0 / 0
Регистрация: 20.04.2020
Сообщений: 11
05.05.2020, 22:27  [ТС]
спасибо вам огромное
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
05.05.2020, 23:47
Программа, запускающая другую некоторое количество раз.
В командной строке запускаете с параметрами - первый параметр число, потом через пробел название запускаемой программы (я использовал какой-то HelloWorl из закреплённой темы)
Windows Batch file
1
main.com 12 hello.com
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
.model tiny
 
.code
 
        org     100h
main    proc
 
start:
        ;программа
 
        ;обрабатываем командную строку
        ; - считываем количество запусков программы - первый параметр
        mov     cl,     ds:[80h]
        cmp     cl,     1
        ja      @@GetN
        @@ShowAbout:
                mov     ah,     09h
                lea     dx,     [asAbout]
                int     21h
                jmp     @@exit
        @@GetN:
                xor     ch,     ch
                dec     cx
                mov     si,     82h     ;адрес первого значимого символа строки
                                        ;(DTA+2 в PSP)
                mov     bh,     10
                xor     al,     al
                @@getc:
                        mov     bl,     [si]
                        inc     si
                        cmp     bl,     ' '
                        je      @@storeN
                        sub     bl,     '0'
                        jb      @@ShowAbout
                        cmp     bl,     9
                        ja      @@ShowAbout
                        mul     bh
                        add     al,     bl
                        adc     ah,     0
                        test    ah,     ah
                        jnz     @@ShowAbout
                loop    @@getc
        @@storeN:
                mov     [N],    ax
        @@GetFileName:
                jcxz    @@ShowAbout
                @@SkipSpaces:
                        mov     al,     [si]
                        inc     si
                        cmp     al,     ' '
                loopz   @@SkipSpaces
                jcxz    @@ShowAbout
                dec     si
                mov     word ptr[lpChildProcess],       si
                mov     word ptr[lpChildProcess+2],     ds
                mov     bx,     81h
                add     bl,     ds:[80h]
                mov     byte ptr ds:[bx],       0
 
        ;несколько (N) раз запуск внешней программы
        mov     cx,     [N]
        @@for:
                push    cx
                call    StartProcess
                pop     cx
        loop    @@for
 
 
        ;завершение программы
@@exit:
        xor     ax,     ax
        int     16h
        int     20h
 
main    endp
 
StartProcess    proc
        ;уменьшаем объём памяти, выделенной
        ;операционной системой при запуске
        ;для родительской программы
        mov     ah,     4Ah
        mov     bx,     1000h   ;не долго думая - до размеров одного сегмента
        ;es - указывает на PSP
        int     21h
        ;подготовка к вызову EXEC
        ;- Сохраните текущие значения
        ;  SS, SP, DS, ES и DTA в переменных,
        ;  адресуемых через регистр CS
        push    es
        push    ds
        mov     cs:[stkseg],    ss
        mov     cs:[stkptr],    sp
        ;- подготовка блока параметров
        mov     ax,     ds:[2Ch]
        mov     [wEnvSeg],      ax
        mov     ax,     cs      ;поместить в ax сегмент PSP
        mov     word ptr[pfrFCB_1],     005Ch
        mov     word ptr[pfrFCB_1+2],   ax
        mov     word ptr[pfrFCB_2],     006Ch
        mov     word ptr[pfrFCB_2+2],   ax
        mov     word ptr[pfCmdTail],    offset ChildParams
        mov     word ptr[pfCmdTail+2],  ax
        ;вызов EXEC - внешней программы
        mov     ax,     4B00h
        lea     bx,     [ExecParamRec]          ;es:bx
        lds     dx,     [lpChildProcess]        ;ds:dx
        int     21h
        ;Восстановите локальные значения SS и SP
        cli                     ; (for bug in some early 8088s)
        mov     ss,cs:[stkseg]  ; restore stack pointer
        mov     sp,cs:[stkptr]
        sti                     ; (for bug in some early 8088s)
        ;Восстановите DS, ES и локальную DTA, если необходимо.
        pop     ds
        pop     es
        ;Проверьте флаг CF, чтобы узнать, не было ли ошибки при EXEC.
        jnc     @@ExecOk
                ;вывод сообщение об ошибке вызова EXEC
                mov     ah,     09h
                lea     dx,     [asErrExec]
                int     21h
        @@ExecOk:
        ;Проверьте код выхода через функцию 4dH WAIT (если надо).
 
        ret
StartProcess    endp
 
.data
        ;Данные
        CrLf            db      0Dh, 0Ah, '$'
        asErrExec       db      0Dh, 0Ah, "Exec failed", 0Dh, 0Ah, '$'
        asAbout         db      0Dh, 0Ah, "Use:", 0Dh, 0Ah
                        db      "myprog.com NNN filename.ext", 0Dh, 0Ah
                        db      " NNN - a number of starts (1...255)", 0Dh, 0Ah
                        db      " filename.ext - process", 0Dh, 0Ah, '$'
        ChildParams     db      0, 0Dh
.data?
        N               dw      ?
        stkseg          dw      ?               ; save SS register
        stkptr          dw      ?               ; save SP register
        lpChildProcess  dd      ?
        ExecParamRec    label   byte
                wEnvSeg         dw      ?
                pfCmdTail       dd      ?
                pfrFCB_1        dd      ?
                pfrFCB_2        dd      ?
 
end     main
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2020, 23:47
Помогаю со студенческими работами здесь

Резидентная программа, запускающая счетчик времени
Помогите пожалуйста, нужно сделать TSR-программу, которая должна по горячей клавише запускать счетчик времени, при повторном нажатии время...

Само-запускающая программа, как сделать?
Задача состоит в том что-бы написать программу какая запуститься, к примеру, если вынять с архива или просто скачать то она сразу же будет...

Программа, запускающая первую программу в качестве вновь созданного процесса
Задание: Разработать две программы. Первая находит площадь кольца, внутренний радиус которого равен R1, а внешний радиус равен R2...

Функция, которая копирует строку в другую строку заданное количество раз
Помогите!!!! срочно нужна задача. Не знаю как сделать. Разработать функцию, которая копирует строку в другую строку заданное количество...

Запуск процесса с правами пользователя (запускающая программа работает с правами администратора)
Здравствуйте. Требуется выполнить действие, описанное в заголовке. Читал тему...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
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
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru