Advertisement
Bisqwit

LongDiv in Turbo Pascal RTL

Dec 20th, 2018
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         PUBLIC  LongDiv
  2.  
  3. ; Longint division
  4. ; In    DX:AX = 1st operand
  5. ;       BX:CX = 2nd operand
  6. ; Out   DX:AX = Result
  7. ;       BX:CX = Remainder
  8. LongDiv:CMP     Test8086,2
  9.         JB      @@0
  10.     .386
  11.         SHL     EAX,16
  12.         SHRD    EAX,EDX,16
  13.         SHL     ECX,16
  14.         SHRD    ECX,EBX,16
  15.         JE      SHORT @@9a
  16.         CDQ
  17.         IDIV    ECX
  18.         MOV     ECX,EDX
  19.         SHLD    EDX,EAX,16
  20.         SHLD    EBX,ECX,16
  21.         RETF
  22.     .8086
  23. @@0:    PUSH    BP
  24.          XOR     BP,BP
  25.          OR      DX,DX
  26.          JNS     @@1
  27.          INC     BP
  28.          NEG     AX
  29.          ADC     DX,0
  30.          NEG     DX
  31. @@1:     OR      BX,BX
  32.          JE      @@5
  33.          JNS     @@2
  34.          INC     BP
  35.          INC     BP
  36.          NEG     CX
  37.          ADC     BX,0
  38.          NEG     BX
  39.          JE      @@5a
  40. @@2:     PUSH    BP
  41.           MOV     SI,CX
  42.           MOV     DI,BX
  43.           XOR     BX,BX
  44.           MOV     CX,DX
  45.           MOV     DX,AX
  46.           XOR     AX,AX
  47.           MOV     BP,16
  48. @@3:      SHL     AX,1
  49.           RCL     DX,1
  50.           RCL     CX,1
  51.           RCL     BX,1
  52.           INC     AX
  53.           SUB     CX,SI
  54.           SBB     BX,DI
  55.           JNC     @@4
  56.           DEC     AX
  57.           ADD     CX,SI
  58.           ADC     BX,DI
  59. @@4:      DEC     BP
  60.           JNE     @@3
  61.          POP     BP
  62.          JMP     SHORT @@6
  63. @@9:    POP     BP
  64. @@9a:   MOV     AX,200
  65.         JMP     HaltError
  66. @@5:    JCXZ    @@9
  67. @@5a:    XCHG    AX,BX
  68.          XCHG    AX,DX
  69.          DIV     CX
  70.          XCHG    AX,BX
  71.          DIV     CX
  72.          MOV     CX,DX
  73.          MOV     DX,BX
  74.          XOR     BX,BX
  75. @@6:     SHR     BP,1
  76.          JNC     @@7
  77.          NEG     CX
  78.          ADC     BX,0
  79.          NEG     BX
  80.          INC     BP
  81. @@7:     DEC     BP
  82.          JNE     @@8
  83.          NEG     AX
  84.          ADC     DX,0
  85.          NEG     DX
  86. @@8:    POP     BP
  87.         RETF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement