Advertisement
VXP

Untitled

VXP
Jan 26th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. .model small
  2. .data
  3. ZSEG SEGMENT ;см. [1.3.1]
  4. ZSEG ENDS
  5. msg1 db 13,10,'Trying execute second.exe$'
  6. msg2 db 13,10,'Error$'
  7. msg3 db 13,10,'Press number of your lab, or press esc$'
  8. fn db 'afdebug.exe',0 ;Имя запускаемого файла
  9. fn5 db 'lab5.exe',0
  10. fn6 db 'lab6.exe',0
  11. param2 db 10,' lab2.exe;',13 ;командная строка
  12. param3 db 10,' lab3.exe;',13
  13. param4 db 10,' lab4.exe;',13
  14. paramN Dw 7 dup(0)
  15. ; === Exec Parameter Block (EPB) для функции 4Bh ===
  16. env1 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
  17. cmd_of dw offset paramN ;Смещение командной строки +
  18. cmd_seg dw @data ;+ сегмент командной строки
  19. fcb1 dd 0 ;FCB (не используется)
  20. fcb2 dd 0 ;FCB (не используется)
  21. Len dw $-env ;Длина EPB
  22.  
  23. env2 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
  24. cmd_of2 dw offset param2 ;Смещение командной строки +
  25. cmd_seg2 dw @data ;+ сегмент командной строки
  26. fcb12 dd 0 ;FCB (не используется)
  27. fcb22 dd 0 ;FCB (не используется)
  28. Len2 dw $-env2 ;Длина EPB
  29.  
  30. env3 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
  31. cmd_of3 dw offset param3 ;Смещение командной строки +
  32. cmd_seg3 dw @data ;+ сегмент командной строки
  33. fcb13 dd 0 ;FCB (не используется)
  34. fcb23 dd 0 ;FCB (не используется)
  35. Len3 dw $-env3 ;Длина EPB
  36.  
  37. env4 dw 0 ;Сегмент среды (окружения DOS) для загружаемой программы
  38. cmd_of4 dw offset param4 ;Смещение командной строки +
  39. cmd_seg4 dw @data ;+ сегмент командной строки
  40. fcb14 dd 0 ;FCB (не используется)
  41. fcb24 dd 0 ;FCB (не используется)
  42. Len4 dw $-env4 ;Длина EPB
  43.  
  44. dsize=$-msg1 ;размер сегмента данных
  45.  
  46. env dw 0
  47.  
  48. .stack 256
  49. .code
  50. start:
  51. mov ax,@data ;Настраиваем сегментные регистры
  52. mov ds,ax
  53. mov ah,9 ;функция вывода сообщения на экран
  54. lea dx,msg3 ;выводимое сообщение
  55. int 21h
  56. mov AH,01H
  57. int 21h
  58. cmp al,35h
  59. JNE next
  60. lea cx,fn5
  61. lea ax,env1
  62. mov env,ax
  63. jmp begin
  64. next:
  65. cmp al,36h
  66. JNE next2
  67. lea cx,fn6
  68. lea ax,env1
  69. mov env,ax
  70. jmp begin
  71. next2:
  72. cmp al,32h
  73. JNE next3
  74. lea cx,fn
  75. lea ax,env2
  76. mov env,ax
  77. jmp begin
  78. next3:
  79. cmp al,33h
  80. JNE next4
  81. lea cx,fn
  82. lea ax,env3
  83. mov env,ax
  84. jmp begin
  85. next4:
  86. cmp al,34h
  87. JNE finish
  88. lea cx,fn
  89. lea ax,env4
  90. mov env,ax
  91. jmp begin
  92. finish:
  93. mov ah,4ch ;выход из проги
  94. int 21h
  95. begin:
  96. mov ah,4ah ;функция изменения размера блока памяти
  97. mov bx,((csize/16)+1)+256/16+((dsize/16)+1)+256/16;новый размер программы с учетом всех сегментов
  98. int 21h ;ограничиваем блок данных нашей программы
  99. mov ax,@data ;Настраиваем сегментные регистры
  100. mov ds,ax
  101. mov es,ax
  102. mov ah,9 ;функция вывода сообщения на экран
  103. lea dx,msg1 ;выводимое сообщение
  104. int 21h ;выводим на экран
  105. mov ax,4b00h ;Функция EXEC (EXECute - загрузка и запуск программы)
  106. mov dx,cx ;Имя файла для запуска
  107. mov bx,env ; --- Готовим EPB ---
  108. int 21h ;запуск
  109. jb er ;если ошибка - переход
  110. ex:
  111. jmp start
  112. mov ax,4c00h ;закончить программу
  113. int 21h
  114. er: mov ah,9 ;функция вывода сообщения на экран
  115. lea dx,msg2 ;выводимое сообщение
  116. int 21h ;выводим на экран
  117. jmp ex ;выход
  118. csize=$-start ;размер сегмента кода
  119. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement