Advertisement
Guest User

Untitled

a guest
Oct 21st, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. TITLE LAB4
  2. data segment  
  3.  
  4. enteer db 10, 13, '$'
  5. errorInput db 'Not good choice((($'
  6. firstNum db 'First operand r: $'
  7. secondNum db 'Second operand s: $'
  8. condNum db 'Enter condition x (1 or 0) -> $'
  9. trueNm db 'AH = 0 (x = 0) so z = (r+s)/(r-s)',13,10,'$'
  10. falseNm db 'AH != 0 (x != 0) so z = r/s + s/r + 10',13,10,'$'
  11. caseChoice db 'Select one of the equations you want to solve using r and s -> $'
  12. firstE db '1. If AH = 0 (x = 0) then z = (r+s)/(r-s), else z = r/s + s/r + 10',13,10,'$'
  13. secondE db '2. z = r(s+15)',13,10,'$'
  14. thirdE db '3. z = r^2 - rs + s^2',13,10,'$'
  15. fourthE db '4. z = r^2/(s+2)',13,10,'$'
  16. answer db 'The answer is : $'
  17.  
  18. buff db 6,7 dup(?)
  19.  
  20. r db ?
  21. s db ?
  22. cond db ?
  23. case db ?
  24. error db 'incorrect number$'
  25.  
  26. data ends  
  27.  
  28. pips segment
  29.  
  30. assume cs:pips, ds:data , se:code
  31.  
  32. ;caseCheck:
  33.  
  34. mov ax, data
  35. mov ds, ax
  36. xor ax, ax
  37.  
  38. ;org 1000h
  39.  
  40. ;pfollow1 dw 0
  41. ;pfollow2 dw 0
  42. ;pfollow3 dw 0
  43. ;pfollow4 dw 0
  44.  
  45.  
  46. follow1:  
  47.     call case1
  48.         jmp endcase
  49. follow2: call case2
  50.         jmp endcase
  51. follow3: call case3
  52.         jmp endcase
  53. follow4: call case4
  54.         jmp endcase
  55.  
  56. endcase:
  57.     mov ax,4c00h
  58.     int 21h
  59. ;--------------------------------------------------
  60. case1 proc
  61.  
  62. push ax
  63.  
  64. lea dx,firstE
  65. mov ah, 09
  66. int 21h
  67.  
  68. pop ax
  69.  
  70. ;-------------------------------------- If w then e1 else e2
  71.  
  72. cmp ah,1
  73. je trueChoicecase
  74. cmp ah,0
  75. je falseChoicecase
  76. ;error
  77. lea dx,errorInput
  78. mov ah, 09
  79. int 21h
  80.  
  81. trueChoicecase:
  82.  
  83. lea dx,TrueNm
  84. mov ah, 09
  85. int 21h
  86.  
  87. mov bl,[r]
  88. add bl,[s]
  89.  
  90. mov bh,[r]
  91. sub bh,[s]
  92.  
  93. xor ax,ax
  94. mov al,bl
  95. div bh
  96. xor ah,ah;очищаем остаток
  97. ;ответ в al
  98.  
  99. push ax
  100.  
  101. lea dx,answer
  102. mov ah, 09
  103. int 21h
  104.  
  105. pop ax
  106. call far OutInt
  107.  
  108. lea dx,enteer
  109. mov ah, 09
  110. int 21h
  111.  
  112. jmp nextInstr
  113.  
  114. falseChoicecase:
  115.  
  116. lea dx,FalseNm
  117. mov ah, 09
  118. int 21h
  119.  
  120. xor ax,ax
  121. mov al,[r]
  122.  
  123. mov bl,[s]
  124. div bl
  125. xor ah,ah
  126.  
  127. mov bh,al
  128.  
  129. xor ax,ax
  130.  
  131. mov al,[s]
  132. mov bl,[r]
  133. div bl
  134. xor ah,ah
  135.  
  136. add al,bh
  137. add al,10
  138.  
  139. push ax
  140.  
  141. lea dx,answer
  142. mov ah, 09
  143. int 21h
  144.  
  145. pop ax
  146. call OutInt
  147.  
  148. lea dx,enteer
  149. mov ah, 09
  150. int 21h
  151.  
  152. ret
  153. case1 endp
  154. ;--------------------------------------------------
  155. case2 proc
  156.  
  157. push ax
  158.  
  159. lea dx,secondE
  160. mov ah, 09
  161. int 21h
  162.  
  163. pop ax
  164.  
  165. mov al,[r]
  166. mov ah,[s]
  167. add ah,15
  168. mul ah
  169.  
  170. push ax
  171.  
  172. lea dx,answer
  173. mov ah, 09
  174. int 21h
  175.  
  176. pop ax
  177. call OutInt
  178.  
  179. lea dx,enteer
  180. mov ah, 09
  181. int 21h
  182.  
  183.  
  184. ret
  185. case2 endp
  186. ;--------------------------------------------------
  187. case3 proc
  188.  
  189. push ax
  190.  
  191. lea dx,thirdE
  192. mov ah, 09
  193. int 21h
  194.  
  195. pop ax
  196.  
  197. mov al,[r]
  198. mov bl,[r]
  199. mul bl
  200. mov cx,ax
  201.  
  202. xor ax,ax
  203.  
  204. mov al,[s]
  205. mov bl,[s]
  206. mul bl
  207. add cx,ax
  208.  
  209. xor ax,ax
  210.  
  211. mov al,[r]
  212. mov bl,[s]
  213.  
  214. mul bl
  215. sub cx,ax
  216. mov ax,cx
  217.  
  218.  
  219. push ax
  220.  
  221. lea dx,answer
  222. mov ah, 09
  223. int 21h
  224.  
  225. pop ax
  226. call OutInt
  227.  
  228. lea dx,enteer
  229. mov ah, 09
  230. int 21h
  231.  
  232. ret
  233. case3 endp
  234. ;--------------------------------------------------
  235. case4 proc
  236.  
  237. push ax
  238.  
  239. lea dx,fourthE
  240. mov ah, 09
  241. int 21h
  242.  
  243. pop ax
  244.  
  245. mov al,[r]
  246. mov bl,[r]
  247. mul bl
  248.  
  249. mov bl,[s]
  250. add bl,2
  251.  
  252. div bl
  253. xor ah,ah
  254.  
  255. push ax
  256.  
  257. lea dx,answer
  258. mov ah, 09
  259. int 21h
  260.  
  261. pop ax
  262. call OutInt
  263.  
  264. lea dx,enteer
  265. mov ah, 09
  266. int 21h
  267.  
  268.  
  269. ret
  270. case4 endp
  271.  
  272. ;--------------------------------------------------
  273. pips ends
  274.  
  275.  
  276. ;---------------------------------------------------------------------------------------
  277.  
  278. code segment
  279.  
  280. assume cs:code,ds:data,es:pips
  281.  
  282. begin:
  283. mov ax, data
  284. mov ds, ax
  285. xor ax, ax
  286.  
  287. mov ax, pips
  288. mov es, ax
  289. xor ax, ax
  290. ;--------------------------------------- InputNum,condition
  291. ;first Num r
  292. lea dx,firstNum
  293. mov ah, 09
  294. int 21h
  295.  
  296. call InputInt
  297. mov [r],al
  298.  
  299. xor ax,ax
  300.  
  301. ;second Num s
  302. lea dx,secondNum
  303. mov ah, 09
  304. int 21h
  305.  
  306. call InputInt
  307. mov [s],al
  308.  
  309. xor ax,ax
  310.  
  311. lea dx,CondNum
  312. mov ah, 09
  313. int 21h
  314.  
  315. call InputInt
  316. mov ah,al
  317. ;-------------------------------------- If w then e1 else e2
  318.  
  319. cmp ah,1
  320. je trueChoice
  321. cmp ah,0
  322. je falseChoice
  323. ;error
  324. lea dx,errorInput
  325. mov ah, 09
  326. int 21h
  327.  
  328. trueChoice:
  329.  
  330. lea dx,TrueNm
  331. mov ah, 09
  332. int 21h
  333.  
  334. mov bl,[r]
  335. add bl,[s]
  336.  
  337. mov bh,[r]
  338. sub bh,[s]
  339.  
  340. xor ax,ax
  341. mov al,bl
  342. div bh
  343. xor ah,ah;очищаем остаток
  344. ;ответ в al
  345.  
  346. push ax
  347.  
  348. lea dx,answer
  349. mov ah, 09
  350. int 21h
  351.  
  352. pop ax
  353. call OutInt
  354.  
  355. lea dx,enteer
  356. mov ah, 09
  357. int 21h
  358.  
  359. jmp nextInstr
  360.  
  361. falseChoice:
  362.  
  363. lea dx,FalseNm
  364. mov ah, 09
  365. int 21h
  366.  
  367. xor ax,ax
  368. mov al,[r]
  369.  
  370. mov bl,[s]
  371. div bl
  372. xor ah,ah
  373.  
  374. mov bh,al
  375.  
  376. xor ax,ax
  377.  
  378. mov al,[s]
  379. mov bl,[r]
  380. div bl
  381. xor ah,ah
  382.  
  383. add al,bh
  384. add al,10
  385.  
  386. push ax
  387.  
  388. lea dx,answer
  389. mov ah, 09
  390. int 21h
  391.  
  392. pop ax
  393. call OutInt
  394.  
  395. lea dx,enteer
  396. mov ah, 09
  397. int 21h
  398. ;----------------------------------------- Begin of case
  399.  
  400. nextInstr: 
  401.  
  402. lea dx,firstE
  403. mov ah, 09
  404. int 21h
  405.  
  406. lea dx,secondE
  407. mov ah, 09
  408. int 21h
  409.  
  410. lea dx,thirdE
  411. mov ah, 09
  412. int 21h
  413.  
  414. lea dx,fourthE
  415. mov ah, 09
  416. int 21h
  417.  
  418. lea dx,caseChoice
  419. mov ah, 09
  420. int 21h
  421.  
  422. call InputInt
  423. ;-------------------------------выбор кейса
  424. cmp al,1
  425. je nearfollow1
  426. cmp al,2
  427. je nearfollow2
  428. cmp al,3
  429. je nearfollow3
  430. cmp al,4
  431. je nearfollow4
  432.  
  433. jmp errooor
  434.  
  435. errooor:
  436.  lea dx, error
  437.  mov ah, 09
  438.  int 21h
  439.  
  440.  mov ax, 4c00h
  441.  int 21h    
  442.  
  443. nearfollow1:
  444. jmp far ptr follow1  
  445.  
  446. nearfollow2:
  447. jmp far ptr follow2
  448.  
  449. nearfollow3:
  450. jmp far ptr follow3
  451.  
  452. nearfollow4:
  453. jmp far ptr follow4
  454.  
  455.  
  456. ;---------------------------------why this idea don`t work?
  457. ; косвенный дальний переход (межсегментный по значению регистра = адресу)
  458. ;lea ax,follow1
  459. ;mov word ptr[pfollow1],ax
  460.  
  461. ;lea ax,follow2
  462. ;mov word ptr[pfollow2],ax
  463.  
  464. ;lea ax,follow3
  465. ;mov word ptr[pfollow3],ax
  466.  
  467. ;lea ax,follow4
  468. ;mov word ptr[pfollow4],ax
  469.  
  470. ;sub ax,1
  471. ;mov bx,ax
  472. ;shl bx,1
  473.  
  474. ;add bx,1000h
  475. ;add bx,20h
  476. ;jmp far ptr es:bx
  477.  
  478. ;--------------------------------------------------------
  479.  
  480.  
  481. cont:
  482.  
  483. ;---------------------------------------EXIT   
  484.     mov ax, 4c00h
  485.     int 21h      
  486. ;---------------------------------------Proc:
  487. ;---------------------------------------Input
  488. InputInt proc
  489.  push bx
  490.  push cx
  491.  push dx
  492.  push di
  493.  push si
  494.  mov ah, 0Ah
  495.  xor di, di
  496.  lea dx, buff
  497.  int 21h
  498.  mov dl, 0Ah
  499.  mov ah, 02
  500.  int 21h
  501.  
  502.  xor ax,ax
  503.  mov bx,10
  504.  lea si, buff+2
  505. ii2:
  506.  mov cl, [si]
  507.  cmp cl, 0Dh ; 0Dh -- carriage return
  508.  jz endin ; if zero or equal
  509.  cmp cl, '0'
  510.  jb er ; if smaller
  511.  cmp cl, '9'
  512.  ja er ; if greater
  513.  sub cl, '0'
  514.  mul bx
  515.  add ax, cx
  516.  inc si
  517.  jmp ii2
  518. er:
  519.  lea dx, error
  520.  mov ah, 09
  521.  int 21h
  522.  int 20h
  523. endin:
  524.  pop si
  525.  pop di
  526.  
  527.  pop dx
  528.  pop cx
  529.  pop bx
  530.  ret
  531. InputInt endp
  532. ;----------------------------------------Output
  533. OutInt proc
  534.  xor cx,cx
  535.  mov bx, 10
  536. oi2:
  537.  xor dx,dx
  538.  div bx
  539.  push dx
  540.  inc cx
  541.  test ax,ax
  542.  jnz oi2
  543.  
  544.  mov ah,02h
  545.  
  546. oi3:
  547.  pop dx
  548.  add dl, '0'
  549.  int 21h
  550.  loop oi3
  551.  ret
  552.  
  553. OutInt endp
  554. ;---------------------------------------------------
  555. code ends
  556. ;---------------------------------------------------
  557.  
  558. END begin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement