Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .data
- ZSEG SEGMENT ;см. [1.3.1]
- ZSEG ENDS
- msg1 db 13,10,'Trying execute second.exe$'
- msg2 db 13,10,'Error$'
- msg3 db 13,10,'Press number of your lab, or press esc$'
- fn db 'afdebug.exe',0 ;Имя запускаемого файла
- fn5 db 'lab5.exe',0
- fn6 db 'lab6.exe',0
- param2 db 10,' lab2.exe;',13 ;командная строка
- param3 db 10,' lab3.exe;',13
- param4 db 10,' lab4.exe;',13
- paramN Dw 7 dup(0)
- ; === Exec Parameter Block (EPB) для функции 4Bh ===
- env1 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
- cmd_of dw offset paramN ;Смещение командной строки +
- cmd_seg dw @data ;+ сегмент командной строки
- fcb1 dd 0 ;FCB (не используется)
- fcb2 dd 0 ;FCB (не используется)
- Len dw $-env ;Длина EPB
- env2 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
- cmd_of2 dw offset param2 ;Смещение командной строки +
- cmd_seg2 dw @data ;+ сегмент командной строки
- fcb12 dd 0 ;FCB (не используется)
- fcb22 dd 0 ;FCB (не используется)
- Len2 dw $-env2 ;Длина EPB
- env3 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
- cmd_of3 dw offset param3 ;Смещение командной строки +
- cmd_seg3 dw @data ;+ сегмент командной строки
- fcb13 dd 0 ;FCB (не используется)
- fcb23 dd 0 ;FCB (не используется)
- Len3 dw $-env3 ;Длина EPB
- env4 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
- cmd_of4 dw offset param4 ;Смещение командной строки +
- cmd_seg4 dw @data ;+ сегмент командной строки
- fcb14 dd 0 ;FCB (не используется)
- fcb24 dd 0 ;FCB (не используется)
- Len4 dw $-env4 ;Длина EPB
- dsize=$-msg1 ;размер сегмента данных
- env dw 0
- .stack 256
- .code
- start:
- mov ax,@data ;Настраиваем сегментные регистры
- mov ds,ax
- mov ah,9 ;функция вывода сообщения на экран
- lea dx,msg3 ;выводимое сообщение
- int 21h
- mov AH,01H
- int 21h
- cmp al,35h
- JNE next
- lea cx,fn5
- lea ax,env1
- mov env,ax
- jmp begin
- next:
- cmp al,36h
- JNE next2
- lea cx,fn6
- lea ax,env1
- mov env,ax
- jmp begin
- next2:
- cmp al,32h
- JNE next3
- lea cx,fn
- lea ax,env2
- mov env,ax
- jmp begin
- next3:
- cmp al,33h
- JNE next4
- lea cx,fn
- lea ax,env3
- mov env,ax
- jmp begin
- next4:
- cmp al,34h
- JNE finish
- lea cx,fn
- lea ax,env4
- mov env,ax
- jmp begin
- finish:
- mov ah,4ch ;выход из проги
- int 21h
- begin:
- 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 - загрузка и запуск программы)
- mov dx,cx ;Имя файла для запуска
- mov bx,env ; --- Готовим EPB ---
- int 21h ;запуск
- jb er ;если ошибка - переход
- ex:
- jmp start
- mov ax,4c00h ;закончить программу
- int 21h
- er: mov ah,9 ;функция вывода сообщения на экран
- lea dx,msg2 ;выводимое сообщение
- int 21h ;выводим на экран
- jmp ex ;выход
- csize=$-start ;размер сегмента кода
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement