Calculator program returning random values

Reply

Join Date: Apr 2005
Posts: 105
Reputation: jhdobbins is an unknown quantity at this point 
Solved Threads: 3
jhdobbins jhdobbins is offline Offline
Junior Poster

Calculator program returning random values

 
0
  #1
Dec 8th, 2005
can someone help with this issue? Anytime an operation is performed, the output is random characters and/or numbers...

  1. .MODEL TINY
  2. .CODE
  3. ORG 100H
  4.  
  5. START: JMP BEGIN
  6.  
  7. ; DEFINED VARIABLES
  8.  
  9. PORT_A EQU 140H
  10. PORT_B EQU 141H
  11. PORT_C EQU 142H
  12. PORT_CR EQU 143H
  13.  
  14. DIR_MODE EQU 2
  15. OP_MODE EQU 3
  16.  
  17. EON EQU 01000000B
  18. EOFF EQU 10111111B
  19.  
  20. RSDATA EQU 00010000B
  21. RSINSTR EQU 00000000B
  22.  
  23. RS DB RSINSTR
  24. HELPMSG DB 'F5 TO TOGLE MODES, F1 FOR HELP,'
  25. DB 'F10 TO QUIT, ENTER A TWO DIGIT'
  26. $' ;FINISH LATER
  27. SWITCHB DB ' INPUT MODE: BINARY DIP $ '
  28. SWITCHK DB ' INPUT MODE: KEYBOARD $ '
  29. IN1 DB ' $'
  30. IN2 DB ' $'
  31. INOP DB ' $ '
  32. ERRMES DB ' UNKOWN ERROR $'
  33.  
  34. ; SUB-ROUTINES
  35.  
  36. SPACE PROC NEAR
  37. MOV AH, 02H
  38. MOV DL, 0DH
  39. INT 21H
  40. MOV DL, 0AH
  41. INT 21H
  42. RET
  43. SPACE ENDP
  44.  
  45. FKEY PROC NEAR
  46. CMP AH, 3BH
  47. JE HELP
  48.  
  49. CMP AH, 44H
  50. JE EXIT
  51.  
  52. CMP AH, 86H
  53. JE TOGGLE
  54.  
  55. EXIT: MOV AH, 4CH
  56. INT 21H
  57.  
  58. TOGGLE: LEA DX, SWITCHB
  59. MOV AH, 09H
  60. INT 21H
  61. JMP DIPIN
  62.  
  63. HELP: CALL SPACE
  64.  
  65. PUSH AX
  66. LEA DX, HELPMSG
  67. MOV AH, 09H
  68. INT 21H
  69. POP AX
  70. RET
  71. FKEY ENDP
  72.  
  73. ERRS PROC NEAR
  74. LEA DX, ERRMES
  75. MOV AH, 09H
  76. INT 21H
  77. CALL SPACE
  78. JMP GETNUM
  79. ERRS ENDP
  80.  
  81.  
  82. PAUSE300US PROC NEAR
  83. PUSH BX
  84. MOV BX, 0FFH
  85. LOOP1: NOP
  86. DEC BX
  87. CMP BX, 0
  88. JNZ LOOP1
  89. POP BX
  90. RET
  91. PAUSE300US ENDP
  92.  
  93. PAUSE3MS PROC NEAR
  94. PUSH BX
  95. MOV BX, 00AH
  96.  
  97. LOOP2: CALL PAUSE300US
  98. DEC BX
  99. CMP BX,0
  100. JNZ LOOP2
  101. POP BX
  102. RET
  103. PAUSE3MS ENDP
  104.  
  105. PAUSE20MS PROC NEAR
  106. PUSH BX
  107. MOV BX, 007H
  108. LOOP3: CALL PAUSE3MS
  109. DEC BX
  110. CMP BX, 0
  111. JNZ LOOP3
  112. POP BX
  113. RET
  114. PAUSE20MS ENDP
  115.  
  116. OUTPUTNIBBLE PROC NEAR
  117. PUSH AX
  118. PUSH DX
  119. AND AL, 0FH
  120. OR AL, [RS]
  121. MOV DX, 140H
  122. OUT DX, AL
  123. CALL PAUSE300US
  124. OR AL, EON
  125. OUT DX, AL
  126. CALL PAUSE300US
  127. CALL PAUSE300US
  128. AND AL, EOFF
  129. OUT DX, AL
  130. CALL PAUSE3MS
  131. POP DX
  132. POP AX
  133. RET
  134. OUTPUTNIBBLE ENDP
  135.  
  136. OUTPUTBYTE PROC NEAR
  137. PUSH AX
  138. PUSH BX
  139. PUSH CX
  140. MOV BL, AL
  141. MOV CL, 4
  142. SHR AL, CL
  143. CALL OUTPUTNIBBLE
  144. MOV AL, BL
  145. AND AL, 0FH
  146. CALL OUTPUTNIBBLE
  147. POP CX
  148. POP BX
  149. POP AX
  150. RET
  151. OUTPUTBYTE ENDP
  152.  
  153. LCD_INIT PROC NEAR
  154. PUSH AX
  155. MOV AL, 0
  156. MOV DX, 140H
  157. OUT DX, AL
  158. CALL PAUSE20MS
  159. MOV [RS], RSINSTR
  160. MOV AL, 00000011B
  161. CALL OUTPUTNIBBLE
  162. CALL PAUSE3MS
  163. CALL PAUSE3MS
  164.  
  165. MOV AL, 00000011B
  166. CALL OUTPUTNIBBLE
  167. CALL PAUSE300US
  168.  
  169. MOV AL, 00000011B
  170. CALL OUTPUTNIBBLE
  171. CALL PAUSE300US
  172.  
  173. MOV AL, 00000010B
  174. CALL OUTPUTNIBBLE
  175. CALL PAUSE3MS
  176.  
  177. MOV AL, 00101000B
  178. CALL OUTPUTBYTE
  179. CALL PAUSE300US
  180.  
  181. MOV AL, 00001111B
  182. CALL OUTPUTBYTE
  183. CALL PAUSE300US
  184.  
  185. MOV AL, 00000001B
  186. CALL OUTPUTBYTE
  187. CALL PAUSE3MS
  188.  
  189. MOV AL, 00000110B
  190. CALL OUTPUTBYTE
  191. CALL PAUSE300US
  192.  
  193. MOV [RS], RSDATA
  194. POP AX
  195. RET
  196. LCD_INIT ENDP
  197.  
  198. LCD_GOTOXY PROC NEAR
  199. PUSH AX
  200. PUSH BX
  201. MOV [RS], RSINSTR
  202. MOV BL, 0
  203. CMP AH, 0
  204. JZ LINE1
  205. MOV BL,40H
  206. LINE1: ADD AL, BL
  207. OR AL, 80H
  208. CALL OUTPUTBYTE
  209. MOV [RS], RSDATA
  210. POP BX
  211. POP AX
  212. RET
  213. LCD_GOTOXY ENDP
  214.  
  215. EXPONENT PROC NEAR
  216. PUSH CX
  217. MOV CL, AH
  218. MOV AH, AL
  219. MULT: MUL AH
  220. JO ERT
  221. DEC CL
  222. CMP CL, 0
  223. JNZ MULT
  224. JMP DONE
  225. ERT: MOV BL, 12H
  226. DONE: POP CX
  227. RET
  228. EXPONENT ENDP
  229.  
  230. ASCII2BCD PROC NEAR ;2 ASCII NUM IN AX -> BCD IN AL
  231. PUSH CX
  232. SUB AL, 030H
  233. SUB AL, 030H
  234. MOV CL, 4
  235. SHL AH, CL
  236. OR AL, AH
  237. POP CX
  238. RET
  239. ASCII2BCD ENDP
  240.  
  241. BCD2HEX PROC NEAR ;BCD IN AL -> HEX IN AL
  242. PUSH BX
  243. PUSH CX
  244. MOV BL, AL
  245. AND BL, 0FH
  246. MOV CL, 4
  247. SHR AL, CL
  248. MOV BH, 0AH
  249. MUL BH
  250. ADD AL, BL
  251. POP CX
  252. POP BX
  253. RET
  254. BCD2HEX ENDP
  255.  
  256. BCD2ASCII PROC NEAR ;BCD IN AL -> ASCII IN AX, AH LOST
  257. PUSH BX
  258. PUSH CX
  259. MOV BL, AL
  260. MOV CL, 4
  261. SHR AL, CL
  262. ADD AL, 030H
  263. MOV AH, AL
  264. MOV AL, BL
  265. AND AL, 0FH
  266. ADD AL, 030H
  267. POP CX
  268. POP BX
  269. RET
  270. BCD2ASCII ENDP
  271.  
  272. HEX2BCD PROC NEAR ;HEX IN AL -> BCD IN AL
  273. PUSH BX
  274. PUSH CX
  275. MOV BH, 00H
  276. MOV BL, 0AH
  277. DIV BL
  278. MOV CL, 4
  279. SHL AL, CL
  280. OR AL, BH
  281. POP CX
  282. POP BX
  283. RET
  284. HEX2BCD ENDP
  285.  
  286. ;MAIN PROGRAM
  287.  
  288. BEGIN: MOV AX, CS
  289. MOV DS, AX
  290. MOV AL, 2
  291. MOV DX, 143H
  292. OUT DX, AL
  293. MOV AL, 0FFH ;INIT
  294. MOV DX, 140H
  295. OUT DX, AL
  296. MOV AL, 3
  297. MOV DX, 143H
  298. OUT DX, AL
  299. CALL LCD_INIT
  300. MOV BL, 0FH
  301. MOV AX, 0100H
  302. CALL LCD_GOTOXY
  303.  
  304. ;KEYBOARD INPUT
  305.  
  306. GETNUM: LEA DX, SWITCHK
  307. MOV AH, 09H
  308. INT 21H
  309. MOV CL, 02H
  310. LEA DX, IN1
  311. MOV AH, 09H
  312. INT 21H
  313.  
  314. GETKEY1:MOV AH, 0H
  315. INT 16H
  316.  
  317. CMP AL, 0H
  318. JE FKEY1
  319.  
  320. CMP AL, 30H
  321. JL GETKEY1
  322. CMP AL, 39H
  323. JG GETKEY1
  324.  
  325. MOV DL, AL
  326. MOV AH, 02H
  327. INT 21H
  328.  
  329. PUSH AX
  330. DEC CL
  331. CMP CL, 0H
  332. JNE GETKEY1
  333.  
  334. POP AX
  335. POP BX
  336. MOV AH, BL
  337. CALL ASCII2BCD
  338. CALL BCD2HEX
  339. PUSH AX
  340. JMP GETOP
  341.  
  342. FKEY1: CALL FKEY
  343. CALL SPACE
  344. JMP GETKEY1
  345.  
  346. GETOP: LEA DX, INOP
  347. MOV AH, 09H
  348. INT 21H
  349.  
  350. MOV AH, 0H
  351. INT 16H
  352.  
  353. CMP AL, 0H
  354. JE FKEYOP
  355.  
  356. CMP AL, 2AH
  357. JE PUSHOP
  358. CMP AL, 2FH
  359. JE PUSHOP
  360. CMP AL, 2BH
  361. JE PUSHOP
  362. CMP AL, 2DH
  363. JE PUSHOP
  364. CMP AL, 25H
  365. JE PUSHOP
  366. CMP AL, 5EH
  367. JE PUSHOP
  368.  
  369. ;ELSE
  370. JMP GETOP
  371.  
  372. FKEYOP: CALL FKEY
  373. CALL SPACE
  374. JMP GETOP
  375.  
  376. PUSHOP: MOV DL, AL
  377. MOV AH, 02H
  378. INT 21H
  379. PUSH AX
  380.  
  381. GETNUM2:MOV CL, 2
  382. LEA DX, IN2
  383. MOV AH, 09H
  384. INT 21H
  385.  
  386. GETKEY2:MOV AH, 0H
  387. INT 16H
  388.  
  389. CMP AL, 0H
  390. JE FKEY2
  391.  
  392. CMP AL, 30H
  393. JL GETKEY2
  394. CMP AL, 39H
  395. JG GETKEY2
  396.  
  397. MOV DL, AL
  398. MOV AH, 02H
  399. INT 21H
  400.  
  401. PUSH AX
  402. DEC CL
  403. CMP CL, 0H
  404. JNE GETKEY2
  405.  
  406. POP AX
  407. POP BX
  408. MOV AH, BL
  409. CALL ASCII2BCD
  410. CALL BCD2HEX
  411. PUSH AX
  412. JMP SOLVE
  413.  
  414. FKEY2: CALL FKEY
  415. CALL SPACE
  416. JMP GETNUM2
  417.  
  418. ; BINARY INPUT SECTION
  419.  
  420. DIPIN: MOV DX, PORT_C
  421. IN AL, DX
  422. TOG: MOV CX, 0FFFH
  423. WAIT1: NOP
  424. LOOP WAIT1
  425. MOV AH, AL
  426. AND AH, 080H
  427. MOV BL, AH
  428. IN AL, DX
  429. MOV AH, AL
  430. AND AH, 080H
  431. CMP BL, AH
  432. JE TOG
  433. AND AL, 00FH
  434. PUSH AX
  435. TOG2: MOV CX, 0FFFH
  436. WAIT2: NOP
  437. LOOP WAIT2
  438. MOV AH, AL
  439. AND AH, 080H
  440. MOV BL, AH
  441. IN AL, DX
  442. MOV AH, AL
  443. AND AH, 080H
  444. CMP BL, AH
  445. JE TOG2
  446. AND AL, 00FH
  447. POP CX ;HUH?
  448. MOV AH, CL
  449. MOV CL, 4
  450. SHL AH, CL
  451. OR AL, AH
  452. CALL BCD2HEX
  453. PUSH AX
  454.  
  455. TOGOP: MOV CX, 0FFFH
  456. WAITOP: NOP
  457. LOOP WAITOP
  458. MOV AH, AL
  459. AND AH, 080H
  460. MOV BL, AH
  461. IN AL, DX
  462. MOV AH, AL
  463. AND AH, 080H
  464. CMP BL, AH
  465. JE TOGOP
  466. AND AL, 070H
  467. MOV CL, 4
  468. SHR AL, CL
  469. PUSH AX
  470.  
  471. TOG3: MOV CX, 0FFFH
  472. WAIT3: NOP
  473. LOOP WAIT3
  474. MOV AH, AL
  475. AND AH, 080H
  476. MOV BL, AH
  477. IN AL, DX
  478. MOV AH, AL
  479. AND AH, 080H
  480. CMP BL, AH
  481. JE TOG3
  482. AND AL, 00FH
  483. PUSH AX
  484. TOG4: MOV CX, 0FFFH
  485. WAIT4: NOP
  486. LOOP WAIT4
  487. MOV AH, AL
  488. AND AH, 080H
  489. MOV BL, AH
  490. IN AL, DX
  491. MOV AH, AL
  492. AND AH, 080H
  493. CMP BL, AH
  494. JE TOG4
  495. AND AL, 00FH
  496. POP CX
  497. MOV AH, CL
  498. MOV CL, 4
  499. SHL AH, CL
  500. OR AL, AH
  501. CALL BCD2HEX
  502. POP BX ;OPERATER INTO BX
  503. POP CX
  504. MOV AH, CL
  505. JMP CALC
  506.  
  507. ; CALCULATIONS SECTION
  508.  
  509. SOLVE: POP CX
  510. POP BX
  511. POP AX
  512.  
  513. CALC: CALL SPACE
  514.  
  515. CMP BL, 0H
  516. JE MINUSG
  517. CMP BL, 02DH
  518. JE MINUSG
  519.  
  520. CMP BL, 01H
  521. JE PLUSG
  522. CMP BL, 2BH
  523. JE PLUSG
  524.  
  525. CMP BL, 02H
  526. JE PARTG
  527. CMP BL, 2FH
  528. JE PARTG
  529.  
  530. CMP BL, 03H
  531. JE TIMESG
  532. CMP BL, 2AH
  533. JE TIMESG
  534.  
  535. CMP BL, 04H
  536. JE MODG
  537. CMP BL, 25H
  538. JE MODG
  539.  
  540. CMP BL, 05H
  541. JE POWG
  542. CMP BL, 5EH
  543. JE POWG
  544.  
  545. CALL ERRS
  546.  
  547. MINUSG: SUB AL, CL
  548. DAS
  549. MOV DL, AL
  550. MOV AH, 02H
  551. INT 21H
  552. ;JO OVER
  553. JMP DISP
  554.  
  555. PLUSG: CLC
  556. ADC AL, CL
  557. DAA
  558. MOV DL, AL
  559. MOV AH, 02H
  560. INT 21H
  561. JO OVER
  562. JMP DISP
  563.  
  564. PARTG: DIV CL
  565. JO OVER
  566. JMP DISP
  567.  
  568. TIMESG: MUL CL
  569. CMP AH, 0
  570. JNZ OVER
  571. JMP DISP
  572.  
  573. MODG: CALL PARTG
  574. XCHG AL, AH
  575. JMP DISP
  576.  
  577. POWG: CALL EXPONENT
  578. CMP BL, 12H
  579. JE OVER
  580. JMP DISP
  581.  
  582. ; DISPLAY SECTION
  583.  
  584. DISP: MOV DX, PORT_B
  585. OUT DX, AL
  586. CALL HEX2BCD
  587. CALL BCD2ASCII
  588. XCHG AL, AH
  589. CALL OUTPUTBYTE
  590. PUSH AX
  591. MOV DL, AL
  592. MOV AH, 02H
  593. INT 21H
  594. POP AX
  595. XCHG AL, AH
  596. CALL OUTPUTBYTE
  597. PUSH AX
  598. MOV DL, AL
  599. MOV AH, 02H
  600. INT 21H
  601.  
  602. JMP GETNUM
  603.  
  604. OVER: MOV DX, PORT_B
  605. MOV BL, 3
  606.  
  607. BLINK: MOV AL, 0FFH
  608. OUT DX, AL
  609. MOV CX, 0FFFFH
  610.  
  611. ONLED: NOP
  612. LOOP ONLED
  613. MOV AL, 000H
  614. OUT DX, AL
  615. MOV CX, 0FFFFH
  616.  
  617. OFFLED: NOP
  618. LOOP OFFLED
  619. DEC BL
  620. CMP BL, 0
  621. JNZ BLINK
  622. JMP GETNUM
  623.  
  624. END BEGIN
  625. .END
  626.  
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC