home *** CD-ROM | disk | FTP | other *** search
/ PC Media 2 / PC MEDIA CD02.iso / share / prog / realasm1 / movx.asm < prev    next >
Encoding:
Assembly Source File  |  1993-07-18  |  5.6 KB  |  218 lines

  1. .286
  2. ;======================================
  3. ; floating point support
  4. ;
  5. ;--------------------------------------
  6. cseg          segment word public 'code'
  7.               assume  cs:cseg,ss:cseg
  8.               assume  ds:cseg,es:cseg
  9.  
  10.               include math.inc
  11.  
  12. ;======================================
  13. ; invoke movx, dst, src, wide
  14. ;
  15. ; Move wide words from src to dst.
  16. ;--------------------------------------
  17. movx          proc    near uses cx si di, dst:NPB, src:NPB, wide:WORD
  18.  
  19.               mov     si, src
  20.               mov     di, dst
  21.               mov     cx, wide
  22.               cld
  23.               rep     movsw
  24.  
  25.               ret
  26. movx          endp
  27.  
  28. ;======================================
  29. ; invoke clrx, dst, wide
  30. ;
  31. ; Clear wide words of dst.
  32. ;--------------------------------------
  33. clrx          proc    near uses ax cx di, dst:NPB, wide:WORD
  34.  
  35.               mov     di, dst
  36.               mov     cx, wide
  37.               xor     ax, ax
  38.               cld
  39.               rep     stosw
  40.  
  41.               ret
  42. clrx          endp
  43.  
  44. ;======================================
  45. ; invoke addx, dst, src, wide
  46. ;
  47. ; dst += src, returns carry in AX.
  48. ;--------------------------------------
  49. addx          proc    near uses cx si di, dst:NPB, src:NPB, wide:WORD
  50.  
  51.               mov     si, src
  52.               mov     di, dst
  53.               mov     cx, wide
  54.               cld
  55.  
  56.               lodsw
  57.               add     word ptr [di], ax
  58.               inc     di
  59.               inc     di
  60.               dec     cx
  61. @@:
  62.               lodsw
  63.               adc     word ptr [di], ax
  64.               inc     di
  65.               inc     di
  66.               loop    @B
  67.  
  68.               rcl     ax, 1
  69.               and     ax, 1
  70.  
  71.               ret
  72. addx          endp
  73.  
  74. ;======================================
  75. ; invoke subx, dst, src, wide
  76. ;
  77. ; dst -= src, returns borrow in AX.
  78. ;--------------------------------------
  79. subx          proc    near uses cx si di, dst:NPB, src:NPB, wide:WORD
  80.  
  81.               mov     si, src
  82.               mov     di, dst
  83.               mov     cx, wide
  84.               cld
  85.  
  86.               lodsw
  87.               sub     word ptr [di], ax
  88.               inc     di
  89.               inc     di
  90.               dec     cx
  91. @@:
  92.               lodsw
  93.               sbb     word ptr [di], ax
  94.               inc     di
  95.               inc     di
  96.               loop    @B
  97.  
  98.               rcl     ax, 1
  99.               and     ax, 1
  100.  
  101.               ret
  102. subx          endp
  103.  
  104. ;======================================
  105. ; invoke lshx, dst, wide
  106. ;
  107. ; left shift dst, returns carry in AX.
  108. ;--------------------------------------
  109. lshx          proc    near uses cx si, dst:NPB, wide:WORD
  110.  
  111.               mov     si, dst
  112.               mov     cx, wide
  113.               cld
  114.               clc
  115. @@:
  116.               lodsw
  117.               rcl     ax, 1
  118.               mov     word ptr [si]-2, ax
  119.               loop    @B
  120.  
  121.               rcl     ax, 1
  122.               and     ax, 1
  123.  
  124.               ret
  125. lshx          endp
  126.  
  127. ;======================================
  128. ; invoke rshx, dst, wide
  129. ;
  130. ; right shift dst, returns carry in AX.
  131. ;--------------------------------------
  132. rshx          proc    near uses cx si, dst:NPB, wide:WORD
  133.  
  134.               mov     si, dst
  135.               mov     cx, wide
  136.               mov     ax, cx
  137.               shl     ax, 1
  138.               sub     ax, 2
  139.               add     si, ax
  140.               std
  141.               clc
  142. @@:
  143.               lodsw
  144.               rcr     ax, 1
  145.               mov     word ptr [si]+2, ax
  146.               loop    @B
  147.  
  148.               rcl     ax, 1
  149.               and     ax, 1
  150.               cld
  151.  
  152.               ret
  153. rshx          endp
  154.  
  155. ;======================================
  156. ; invoke cmpx, dst, src, wide
  157. ;
  158. ; compares dst, src ( hi to lo)
  159. ;
  160. ; Returns: AX = 1,  if dst > src
  161. ;              -1,  if dst < src
  162. ;               0,  if dst == src
  163. ;--------------------------------------
  164. cmpx          proc    near uses cx si di, dst:NPB, src:NPB, wide:WORD
  165.  
  166.               mov     si, dst                   ;
  167.               mov     di, src                   ;
  168.               mov     cx, wide                  ;
  169.  
  170.               mov     ax, cx                    ;
  171.               shl     ax, 1                     ;
  172.               sub     ax, 2                     ;
  173.               add     si, ax                    ;
  174.               add     di, ax                    ;
  175.  
  176.               xor     ax, ax                    ; assume equal
  177.               std                               ;
  178.               repe    cmpsw                     ; repeat while equal
  179.               cld                               ;
  180.               je      exit                      ; equal !
  181.               mov     ax, 1                     ; assume dst > src
  182.               ja      exit                      ; yes
  183.               neg     ax                        ; no, dst < src
  184. exit:
  185.               ret
  186. cmpx          endp
  187.  
  188. ;======================================
  189. ; invoke cmpxz, dst, wide
  190. ;
  191. ; compares dst, to zero
  192. ;
  193. ; Returns: AX = TRUE,  if dst == zero
  194. ;    else  AX = FALSE
  195. ;--------------------------------------
  196. cmpxz         proc    near uses cx bx si, dst:NPB, wide:WORD
  197.  
  198.               mov     si, dst
  199.               mov     cx, wide
  200.               xor     bx, bx
  201.               cld
  202. @@:
  203.               lodsw
  204.               or      bx, ax
  205.               loop    @B
  206.  
  207.               .IF (bx == 0)
  208.                  mov     ax, TRUE
  209.               .ELSE
  210.                  mov     ax, FALSE
  211.               .ENDIF
  212.  
  213.               ret
  214. cmpxz         endp
  215.  
  216. cseg          ends
  217.               end
  218.