Advertisement
Guest User

Untitled

a guest
Nov 16th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.52 KB | None | 0 0
  1. code segment
  2. assume cs:code,ds:code
  3. org 100h
  4. entry proc
  5. mov dx,offset header
  6. call outstr ;Вывод "Подключенное оборудование".
  7. ;call-вызов подпрограммы, сохраняет
  8. ;перед этим в стеке смещение к точке
  9. ;возврата. Комманда ret, кот. обычно
  10. ;заканчивается подпрограмма, забирает
  11. ;из стека адрес возврата и возвращает
  12. ;управление на комманду, следующую за
  13. ;call (не воздействует на флаги
  14. ;процессора).
  15. mov dx,offset fdd
  16. call outstr ;Вывод строки.
  17. int 11h ;Запрос информации об устройствах
  18. mov bx,ax ;Сохраняем инфу об устройствах в BX(AX часто нужен!)
  19.  
  20. ;определение FDD
  21.  
  22. test bx,1 ;Есть ли FDD?(если ZERO flag !=0, то бит установлен)
  23. Логическое сравнение,
  24. ;логическое умножение "и" над двумя
  25. ;операндами и в зависимости от
  26. результата
  27. ;устанавливает SF(устанавливается в
  28. 1,
  29. ;если в результате выполнения команды
  30. ;образовалось число с установленным
  31. ;знаковым битом), ZF(устанавливается в
  32. 1,
  33. ;если в результате выполнения команды
  34. ;образовалось число, состоящее из
  35. одних
  36. ;двоичных нулей), PF(устанавливается в
  37. 1,
  38. ;если в результате выполнения команды
  39. ;образовалось число с чётным
  40. количеством
  41. ;двоичных единиц в его битах). OF,CF
  42. ;сбрасываются, AF-неопределённое
  43. значение.
  44. ;test не изменяет ни один из
  45. операндов.
  46. ;в качестве первого операнда-р-р,
  47. ячейка памяти.
  48. ;в качестве второго-р-р, ячейка
  49. памяти,
  50. ;непосредственное значение.
  51.  
  52. jnz _more ;Есть. Команда jnz(не нуль,ZF=0)
  53. ;условного перехода, которые
  54. ;осуществляют переход по указанному
  55. ;адресу при выполнению условия,
  56. ;заданного мнемоникой команды.
  57. push bx
  58. mov bx,30h ;Грузим в BX код "0"(fdd отсутствует)
  59.  
  60. jmp _next1 ;Переход безусловный, передает управление в
  61. ;указанную точку того же или другого
  62. ;программного сегмента. Адрес возарата
  63. ;не сохраняется. Команда не
  64. воздействует
  65. ;на флаги процессора.
  66.  
  67. _more: push bx ;Cохраняем BX в стеке(чтобы проводить с ним
  68. манипуляции)
  69. and bx,0c0h ;Выделяем 7 и 6 биты. Логическое "и". Команда
  70. ;осуществляет логическое(побитовое)
  71. ;умножение первого операнда на второй.
  72. ;первый операнд-р-р, ячейка памяти.
  73. ;второй-р-р, ячейка памяти,
  74. ;непосредственное значение. Нельзя
  75. ;определять оба операнда как
  76. ;ячейки памяти.Воздействует на флаги
  77. ;sf,zf,pf.
  78.  
  79. mov cl,6 ;Нужно для следующей команды
  80.  
  81. shr bx,cl ;Сдвиг BX на 6 битов вправо, чтобы получить число FDD.
  82. ;при этом в процессоре
  83. последовательных
  84. ;сдвигов старшие биты операнда
  85. заполняются
  86. ;нулями, а младшие, пройдя через флаг
  87. CF,теряются.
  88. ;операнд-р-р, ячейка памяти. Команда
  89. воздействует
  90. ;на флаги CF,OF,FF,SF,ZF. Команда
  91. логического
  92. ;сдвига вправо всех битов операнда.
  93. Младший бит
  94. ;операнда поступает в флаг CF.
  95.  
  96. add bx,31h ;Прибавляем к полученному числу код "1"(00 означает 1
  97. FDD).
  98. ;команда целочисленного сложения
  99. первого и
  100. ;второго операндов. Значение первого
  101. операнда(р-ра, ячейки памяти)
  102. ;заменяется на сумму, значение
  103. второго(р-ра, ячейки памяти,
  104. ;непосредственного значения) не
  105. изменяется.Воздействует на
  106. ;флаги of,sf,zf,af,pf,cf.
  107. _next1: call outnum ;Вызов процедуры вывода символа
  108.  
  109. ;определение подключенных принтеров
  110.  
  111. mov dx,offset printers
  112. call outstr
  113. pop bx
  114. push bx
  115. and bx,0c000h ;выделяем 15 и 14 биты
  116. mov cl,14
  117. shr bx,cl
  118. add bx,30h
  119. call outnum
  120.  
  121. ;определение последовательного принтера
  122.  
  123. mov dx,offset sprinter
  124. call outstr
  125. pop bx
  126. test bx,2000h ;проверяем установку 13 бита(если ZERO flag !=0, то
  127. бит установлен)
  128. jnz _next2
  129. mov dx,offset absent ;заносим в DX строку "отсутствует"
  130. jmp _out1
  131. _next2: mov dx,offset present ;заносим в DX строку "есть"
  132. _out1: call outstr ;вывод строки
  133.  
  134. ;определение наличия игрового адаптера
  135.  
  136. mov dx,offset game
  137. call outstr
  138. test bx,1000h ;проверяем установку 12 бита
  139. jnz _next3
  140. mov dx, offset absent ;"отсутствует"
  141. jmp _out2
  142. _next3: mov dx,offset present ;"есть"
  143. _out2: call outstr
  144.  
  145. ;определение кол-ва RS232
  146.  
  147. mov dx,offset rs232
  148. call outstr
  149. push bx
  150. and bx,0e00h ;выделяем 11-9 биты
  151. mov cl,9
  152. shr bx,cl
  153. add bx,30h
  154. call outnum
  155. pop bx
  156.  
  157. ;определение нач. видеорежима
  158.  
  159. mov dx,offset video
  160. call outstr
  161. push bx
  162. and bx,30h ;выделяем 5 и 4 биты
  163. mov cl,4
  164. shr bx,cl ;сдвигаем BX на 4 бита
  165. jnz _next4
  166. mov dx,offset unused ;заносим в DX "не используется"
  167. jmp _out3 ;прыжок на вывод строки из DX
  168. _next4: cmp bx,01b ;Команда выполняет вычитание второго
  169. ;операнда из первого. В соответствии
  170. ;с результатом вычитания
  171. устанавливаются
  172. ;состояния флагов CF,PF,AF,ZF,SF,OF.
  173. ;cами операнды не изменяются.
  174. ;первый операнд-р-р, ячейка памяти.
  175. ;второй-р-р, ячека памяти,
  176. непосредственное
  177. ;значение. Всед за командой стоит
  178. команда
  179. ;условного прехода, анализирующая
  180. состояние
  181. ;флагов процессора.
  182. jne _next5 ;jne(не равно,zf=0)
  183. mov dx,offset c40x25 ;заносим в DX "40x25 цветной"
  184. jmp _out3
  185. _next5: cmp bx,10b
  186. jne _next6
  187. mov dx,offset c80x25 ;заносим в DX "80x25 цветной"
  188. jmp _out3
  189. _next6: mov dx,offset bw80x25 ;заносим в DX "80x25 черно-белый"
  190. _out3: call outstr ;вывод DX
  191.  
  192. ;определение наличия сопроцессора
  193.  
  194. mov dx,offset math
  195. call outstr
  196. pop bx
  197. test bx,2 ;проверяем установку 1 бита
  198. jnz _next7
  199. mov dx,offset absent ;"отсутствует"
  200. jmp _out4
  201. _next7: mov dx,offset present ;"есть"
  202. _out4: call outstr
  203.  
  204. ;вычисление физической памяти
  205.  
  206. mov dx,offset mem
  207. call outstr
  208. int 12h
  209. call outdec ;вызов процедуры вывода AX(dec)
  210. mov dx,offset kb
  211. call outstr ;вывод "Kb"
  212. int 20h ;завершение
  213. entry endp
  214.  
  215.  
  216. ;далее идут процедуры
  217.  
  218. outdec proc ;Вывод числа(dec)
  219. mov bx,64h ;заносим в BX 100
  220. mov cx,3 ;число итераций цикла
  221. _vnesh: div bl ;делим AX на 100(в al - целая
  222. ;часть, в ah - остаток)
  223. ;деление целых чисел без знака,
  224. ;находяшихся в р-рах АХ(/на байт,
  225. ;al-частное, ah-остаток) или DX:AX(/
  226. на
  227. ;слово, dx-старшая часть,остаток,
  228. ;ax-младшая,частное), на операнд-
  229. источник
  230. ;(целое число без знака). Размер
  231. делимого
  232. ;в два раза боьше размеров делителя и
  233. ;остатка.
  234. call outchar ;вывод al
  235. push cx
  236. xchg ax,bx ;Обмен данными между операндами, пересылает
  237. ;значение первого операнда во второй,
  238. ;а второго-в первый. Любой операнд-р-р
  239. ;(кроме сегментного), ячейка памяти,
  240. ;команда не воздействует на флаги
  241. процессора.
  242. mov dl,0ah
  243. div dl
  244. xchg ax,bx ;заносим в BX 10
  245. mov cx,8
  246. shr ax,cl
  247. pop cx
  248. loop _vnesh ;Циклическое выполнение, пока содержимое
  249. ;CX не равно нулю(макс.= 65536)
  250. ret ;Возврат из процедуры, извлекает из стека
  251. ;адрес возврата и передаёт управление
  252. назад
  253. ;в программу, первоначально вызвавшую
  254. процедуру.
  255. ;если этой командой завершается
  256. ближняя процедура,
  257. ;объявленная с атрибутом near, или
  258. используется
  259. ;модификация команды retn, со стека
  260. снимается одно
  261. ;слово- относительный адрес точки
  262. возврата. Передача
  263. ;управления в этом случае
  264. осуществляется в пределах
  265. ;одного программного сегмента. Если
  266. завершается
  267. ;дальняя-со стека снимаются 2 слова:
  268. смещение,
  269. ;сегментный адрес точки возврата.
  270. outdec endp
  271.  
  272. outnum proc ;Вывод одной цифры с переходом на след.строку
  273. mov endl,bl
  274. mov dx,offset endl
  275. outstr proc ;Вывод строки
  276. mov ah,9
  277. int 21h
  278. ret ;возврат
  279. outstr endp
  280. outnum endp
  281.  
  282. outchar proc ;Вывод символа
  283. push ax
  284. mov ah,2
  285. mov dl,al
  286. add dl,30h ;преобразуем число в символ
  287. int 21h
  288. pop ax
  289. _ex: ret ;возврат
  290. outchar endp
  291.  
  292. header db 'Подключенное оборудование',13,10,13,10,'$'
  293. fdd db 'Число FDD дисководов: $'
  294. printers db 'Число подключенных принтеров: $'
  295. sprinter db 'Последовательный принтер: $'
  296. game db 'Игровой адаптер: $'
  297. rs232 db 'Число последовательных адаптеров стыка RS232: $'
  298. video db 'Начальный видеорежим: $'
  299. bw80x25 db '80x25 черно-белый',13,10,'$'
  300. c80x25 db '80x25 цветной',13,10,'$'
  301. c40x25 db '40x25 цветной',13,10,'$'
  302. unused db 'не используется',13,10,'$'
  303. math db 'Математический сопроцессор: $'
  304. present db 'есть',13,10,'$'
  305. absent db 'отсутствует',13,10,'$'
  306. endl db '*',13,10,'$'
  307. mem db 'Размер физической памяти: $'
  308. kb db ' Kb',13,10,13,10,'$'
  309. code ends
  310. end entry
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement