home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.asm.x86      Ahh, the lost art of x86 assembly      4,675 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 3,330 of 4,675   
   Kerr-Mudd,John to All   
   Re: Hex 2 Bin   
   05 Apr 18 08:57:47   
   
   From: notsaying@nospicedham.invalid.org   
      
   On Wed, 04 Apr 2018 09:15:43 GMT, "wolfgang kern"    
   wrote:   
      
   > Kerr-Mudd,John wrote:   
   >   
   >>>>> Criticisms welcome:   
   >   
   >   
   > Yeah, a LUT would be overkill. A bit reordering and CMOVcc, SETcc   
   > could save some jumps.   
   Actually, it's OK   
      
   BE8000AC9891E88D007254954EAC3C20E1FB744B50E87E0091587243982C253C   
   0A773C53BB8B0101C38A1F95FFD35BBF8701B9680080FB10740AB12009C07904   
   F7D8B12D31D2F7F3923C0A1C692F88054F9209C075EE880D575AB409CD21C3BA   
   6401EBF655736167652069733A2063616C63206E756D31205B2B2D2A2F252726   
   28295D206E756D320D0A24EDDDE3D7DAE0D15FD45FEDAC3C20E1FB7431BB0A00   
   3C687503B310AC55523C2D9C74024E4131EDAC3C30720E244FD4379895F7E372   
   0D01C5E2ED959D7502F7D85A5DC358EBFA01C8C329C8C309C8C331C8C321C8C3   
   F7E1C389C549F7E57202E2FAC399F7F1454D750192C3   
      
   161D:0100 BE 80 00       mov          si,0080   
   161D:0103 AC             lodsb   
   161D:0104 98             cbw   
   161D:0105 91             xchg         ax,cx   
   ; call getnum   
   161D:0106 E8 8D 00       call         0196   
   161D:0109 72 54          jb           015F   
   161D:010B 95             xchg         ax,bp   
   ; getoperator   
   161D:010C 4E             dec          si   
   161D:010D AC             lodsb   
   161D:010E 3C 20          cmp          al,20   
   161D:0110 E1 FB          loopzw       010D   
   161D:0112 74 4B          jz           015F   
   161D:0114 50             push         ax   
   ; call getnum   
   161D:0115 E8 7E 00       call         0196   
   161D:0118 91             xchg         ax,cx   
   ; test op   
   161D:0119 58             pop          ax   
   161D:011A 72 43          jb           015F   
   161D:011C 98             cbw   
   161D:011D 2C 25          sub          al,25 ; '%'->0   
   161D:011F 3C 0A          cmp          al,0A ; '/' is top   
   161D:0121 77 3C          ja           015F   
   161D:0123 53             push         bx   
   161D:0124 BB 8B 01       mov          bx,018B ; LUT   
   161D:0127 01 C3          add          bx,ax   
   161D:0129 8A 1F          mov          bl,[bx] ; bh=1   
   161D:012B 95             xchg         ax,bp   
   ; call op rtn   
   161D:012C FF D3          call         bx   
   161D:012E 5B             pop          bx   
   prtnum:   
   161D:012F BF 87 01       mov          di,0187 ; lastdigit   
   161D:0132 B9 68 00       mov          cx,0068 ; 'h'   
   161D:0135 80 FB 10       cmp          bl,10   
   161D:0138 74 0A          jz           0144   
   161D:013A B1 20          mov          cl,20   
   161D:013C 09 C0          or           ax,ax   
   161D:013E 79 04          jns          0144   
   161D:0140 F7 D8          neg          ax   
   161D:0142 B1 2D          mov          cl,2D   ;-ve   
   putc:   
   161D:0144 31 D2          xor          dx,dx   
   161D:0146 F7 F3          div          bx   
   161D:0148 92             xchg         ax,dx   
   161D:0149 3C 0A          cmp          al,0A   
   161D:014B 1C 69          sbb          al,69   
   161D:014D 2F             das   
   161D:014E 88 05          mov          [di],al   
   161D:0150 4F             dec          di   
   161D:0151 92             xchg         ax,dx   
   161D:0152 09 C0          or           ax,ax   
   161D:0154 75 EE          jnz          0144   
   161D:0156 88 0D          mov          [di],cl   
   161D:0158 57             push         di   
   161D:0159 5A             pop          dx   
   msgexit:  ; print $ terminated string in dx   
   161D:015A B4 09          mov          ah,09   
   161D:015C CD 21          int          21   
   endprog:   
   161D:015E C3             ret   
      
   prtusage:   
   161D:015F BA 64 01       mov          dx,0164   
   161D:0162 EB F6          jmp          015A   
   161D:0164 db "Usage is: calc num1 [+-*/%'&()] num2"   
   lastdigit equ $-1   
   db 0D,0A,'$'   
   LUT:   
   161D:018B db ED DD E3 D7 DA E0 D1 5F D4 5F ED   
      
   getnum:   
   161D:0196 AC             lodsb   
   161D:0197 3C 20          cmp          al,20   
   161D:0199 E1 FB          loopzw       0196   
   161D:019B 74 31          jz           01CE   
   161D:019D BB 0A 00       mov          bx,000A   
   161D:01A0 3C 68          cmp          al,68   
   161D:01A2 75 03          jnz          01A7   
   161D:01A4 B3 10          mov          bl,10   
   161D:01A6 AC             lodsb   
   161D:01A7 55             push         bp   
   161D:01A8 52             push         dx   
   161D:01A9 3C 2D          cmp          al,2D   
   161D:01AB 9C             pushfw   
   161D:01AC 74 02          jz           01B0   
   161D:01AE 4E             dec          si   
   161D:01AF 41             inc          cx   
   161D:01B0 31 ED          xor          bp,bp   
   161D:01B2 AC             lodsb   
   161D:01B3 3C 30          cmp          al,30   
   161D:01B5 72 0E          jb           01C5   
   161D:01B7 24 4F          and          al,4F   
   161D:01B9 D4 37          aam          37   
   161D:01BB 98             cbw   
   161D:01BC 95             xchg         ax,bp   
   161D:01BD F7 E3          mul          bx   
   161D:01BF 72 0D          jb           01CE   
   161D:01C1 01 C5          add          bp,ax   
   161D:01C3 E2 ED          loopw        01B2   
   161D:01C5 95             xchg         ax,bp   
   161D:01C6 9D             popfw   
   161D:01C7 75 02          jnz          01CB   
   161D:01C9 F7 D8          neg          ax   
   161D:01CB 5A             pop          dx   
   161D:01CC 5D             pop          bp   
   161D:01CD C3             ret   
   161D:01CE 58             pop          ax   
   161D:01CF EB FA          jmp          01CB   
   addnums:   
   161D:01D1 01 C8          add          ax,cx   
   161D:01D3 C3             ret   
   161D:01D4 29 C8          sub          ax,cx   
   161D:01D6 C3             ret   
   161D:01D7 09 C8          or           ax,cx   
   161D:01D9 C3             ret   
   161D:01DA 31 C8          xor          ax,cx   
   161D:01DC C3             ret   
   161D:01DD 21 C8          and          ax,cx   
   161D:01DF C3             ret   
   161D:01E0 F7 E1          mul          cx   
   161D:01E2 C3             ret   
   expnums:   
   161D:01E3 89 C5          mov          bp,ax   
   161D:01E5 49             dec          cx   
   161D:01E6 F7 E5          mul          bp   
   161D:01E8 72 02          jb           01EC   
   161D:01EA E2 FA          loopw        01E6   
   161D:01EC C3             ret   
   divnums:   
   modnums:   
   161D:01ED 99             cwd   
   161D:01EE F7 F1          div          cx   
   161D:01F0 45             inc          bp   
   161D:01F1 4D             dec          bp   
   161D:01F2 75 01          jnz          01F5   
   161D:01F4 92             xchg         ax,dx   
   161D:01F5 C3             ret   
      
      
    10 spare   
      
      
      
      
   --   
   Bah, and indeed, Humbug.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca