flat assembler
Message board for the users of flat assembler.
 Home   FAQ   Search   Register 
 Profile   Log in to check your private messages   Log in 
flat assembler > Non-x86 architectures > [ARM] X86 Conversion: LEA R,[S*I+B+D], SETCC, XCHG, etc

Author
Thread Post new topic Reply to topic
m3ntal



Joined: 08 Dec 2013
Posts: 296
[ARM] X86 Conversion: LEA R,[S*I+B+D], SETCC, XCHG, etc
Another attempt to convert X86 instructions to ARM. Example:

Code:
lea r1, [r2]
lea r1, [r2+r3]
lea r1, [r2+10000000h]
lea r1, [r2-20000000h]
lea r1, [r2*3]
lea r1, [r2*4]
lea r1, [r2*5]
lea r1, [r2*10]
lea r1, [r2+r3*4]
lea r1, [r4+r7*2+30000000h]
lea r240000000h
lea r3, [50000000h]
lea r4, [60000000h+r7]
lea r5, [70000000h+r7*8]

This generates the following ARM disassembly:

Code:
00000000 E1A01002 mov r1r2
00000004 E0821003 add r1r2r3
00000008 E2821201 add r1r210000000h
0000000C E2421202 sub r1r220000000h
00000010 E0821082 add r1r2r2lsl 1
00000014 E1A01102 mov r1r2lsl 2
00000018 E0821102 add r1r2r2lsl 2
0000001C E0821102 add r1r2r2lsl 2
00000020 E0811001 add r1r1r1
00000024 E0821103 add r1r2r3lsl 2
00000028 E0841087 add r1r4r7lsl 1
0000002C E2811203 add r1r130000000h
00000030 E3A02101 mov r240000000h
00000034 E3A03205 mov r350000000h
00000038 E2874206 add r4r760000000h
0000003C E3A05207 mov r570000000h
00000040 E0855187 add r5r5r7lsl 3

LEA macro:

Code:
macro lea [p] {
 common
  define ?s 0
  match r=,[x], p \{         ; r,[?]
   if x is.r32?              ; r,[r]
    mov rx
   else                      ; r,[?]
    match =0 \
     a+b*c?s x \\{
     match n+ic \\\{       ; a+b*c+i
      addms rabn
      if use.ror?
       add ri
      else
       ldr r12, =i
       add rar12
      end if
      define ?s 1
     \\\}
     if ?s eq 0
      if a is.r32? \         ; r+r*c
       & b is.r32?
       addms rabc
      else if b is.r32? \    ; i+r*c
       & a is.i?
       if use.ror.a?
        mov ra
        addms rrbc
       else
        ldr r12, =i
        add rar12
       end if
      else
       'Error'
      end if
     end if
     define ?s 1
    \\}
    match =0 \
     a+b?s x \\{
     if a is.r32? \          ; r+i
      & b is.i?
      if use.ror.b?
       add rab
      else
       ldr r, =b
       add rar
      end if
     else if \
      b is.r32? & \          ; i+r
      a is.i?
      if use.ror.a?
       add rba
      else
       ldr r, =a
       add rbr
      end if
     else                    ; assume
      add rab            ; r=a+b
     end if
     define ?s 1
    \\}
    match =0 \
     a-b?s x \\{           ; r-i
     if a is.r32? \
      & b is.i?
      if use.ror.b?
       sub rab
      else
       ldr r, =b
       sub rar
      end if
     else                    ; ?,?
      'Error'
     end if
     define ?s 1
    \\}
    match =0 \
     a*b?s x \\{           ; r=a*n
     if b eq 4
      mov ralsl 2        ; r=a*4
     else if b eq 2
      mov ralsl 1        ; r=a*2
     else if b eq 3
      add raalsl 1     ; r=a*3
     else if b eq 5
      add raalsl 2     ; r=a*5
     else if b eq 10
      add raalsl 2     ; r=a*10
      add rr
     else                    ; *?
      'Error'
     end if
     define ?s 1
    \\}
    if ?s eq 0               ; r=[i]
     ldr r, =x
    end if
   end if
   define ?s 1
  \}
  match =0 \                 ; no []
   a=,b?s p \{
   if a is.r32?              ; r,?
    if b is.r32?             ; r,r
     mov ab
    else if b is.i?          ; r,i
     ldr a, =b
    else                     ; r,?
     'Error'
    end if
   else                      ; ?,?
    'Error'
   end if
   define ?s 1
  \}
  if ?s eq 0
   'Error'
  end if
}

Attached is 3 examples. INTEL.INC converts X86 instructions to ARM: LEA, MOV/SX/ZX, ADD/SUB/ETC, BSWAP, XCHG, SETCC, BT/R/S, REP LODS/STOS/ETC.


Description:
Download
Filename: example.7z
Filesize: 9.08 KB
Downloaded: 203 Time(s)


_________________
New FASM Site, Examples, Graphics, Updated Libraries
Post 15 Jul 2014, 20:58
View user's profile Send private message Reply with quote
m3ntal



Joined: 08 Dec 2013
Posts: 296
XCHG and SETCC (INTEL.INC)

Code:
;;;;;;;;;;;;;;;;;;;; EXCHANGE ;;;;;;;;;;;;;;;;;;;;

; xchg r1, r2
; xchg r1, [r2+1000h]
; xchg r1, [r2+r3*4]
; xchg [r1+r2*8], r3

macro xchg ab {
 define ?s 0
 match [m], a \{   ; [a], b
  mov r10, [m]
  mov [m], b
  mov br10
  define ?s 1
 \}
 match =0 \
  [m], ?s b \{     ; a, [b]
  mov r10a
  mov a, [m]
  mov [m], r10
  define ?s 1
 \}
 if ?s eq 0
  if a is.r32? \   ; r, r
   & b is.r32?
   mov r10a
   mov ab
   mov br10
  else
   'Error'
  end if
 end if
}

;;;;;;;;;;;;;;;;;;;;;; SETCC ;;;;;;;;;;;;;;;;;;;;;

; set on condition

; sete cl
; setne dh
; setg [r0+r1*4]

macro setcc cx {
 local n
 define ?s 0
 n=-1
 if x in <al,ah>
  n=0
 else if x in <cl,ch>
  n=1
 else if x in <dl,dh>
  n=2
 else if x in <bl,bh>
  n=3
 else
  match [m], x \{      ; [m8]
   mov r100
   mov#c r101
   lea r11, [m]
   strb r10, [r11]
   define ?s 1
  \}
 end if
 if ?s eq 0            ; register
  if n=-1
   'Error'
  end if
  if x in \            ; low 8BIT
   <al,cl,dl,bl>
   dw \                ; bic r, 0FFh
    (0E3C000FFhor \
    (n shl 16or \
    (n shl 12)
   dw \                ; orr#c r, 1
    (c.#c shl 28or \
    (03800001hor \
    (n shl 16or \
    (n shl 12)
  else if x in \       ; high 8BIT
   <ah,ch,dh,bh>
   dw \                ; bic r, 0FF00h
    (0E3C00CFFhor \
    (n shl 16or \
    (n shl 12)
   dw \                ; orr#c r, 0100h
    (c.#c shl 28or \
    (03800C01hor \
    (n shl 16or \
    (n shl 12)
  else
   'Error'
  end if
 end if
}

macro sete x { setcc eqx }  ; equality
macro setz x { setcc eqx }
macro setne x { setcc nex }
macro setnz x { setcc nex }

macro setc x { setcc hsx }
macro setnc x { setcc lox }

macro seta x { setcc hix }  ; unsigned <>
macro setae x { setcc hsx }
macro setb x { setcc lox }
macro setbe x { setcc lsx }

macro setg x { setcc gtx }  ; signed <>
macro setge x { setcc gex }
macro setl x { setcc ltx }
macro setle x { setcc lex }

Post 15 Jul 2014, 21:17
View user's profile Send private message Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  


< Last Thread | Next Thread >

Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001-2005 phpBB Group.

Main index   Download   Documentation   Examples   Message board
Copyright © 2004-2016, Tomasz Grysztar.