Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. Other Discussions
  3. IT & Infrastructure
  4. assembly studs

assembly studs

Scheduled Pinned Locked Moved IT & Infrastructure
question
3 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    Sirrius
    wrote on last edited by
    #1

    I have a bunch of assembly code here that I was trying to convert from AT&T to NASM. Could somebody please see if I have made any obvious mistakes? It doesnt seem to want to generate the output it supposed to. Thanks for your time and advice. B.

    ; .file "ByteSwap8.c"
    global _ByteSwap8_asm
    section .text

    _ByteSwap8_asm:
    PUSH ebp ;pushl %ebp
    MOV ebp,esp ;movl %esp, %ebp
    PUSH ebx ;pushl %ebx
    SUB esp,28 ;subl $28, %esp
    MOV dword [ebp-12],0 ;movl $0, -12(%ebp)
    L2:
    MOV eax,[ebp-12] ;movl -12(%ebp), %eax
    CMP eax,[ebp+8] ;cmpl 8(%ebp), %eax
    JL L5
    JMP L1
    L5:
    MOV eax,[ebp-12] ;movl -12(%ebp), %eax
    LEA edx,[0+eax+8] ;leal 0(,%eax,8), %edx
    MOV eax,[ebp+12] ;movl 12(%ebp), %eax
    LEA edx,[eax+edx] ;leal (%eax,%edx), %edx
    MOV eax,[edx] ;movl (%edx), %eax
    MOV edx,[edx+4] ;movl 4(%edx), %edx
    MOV [ebp-24],eax ;movl %eax, -24(%ebp)
    MOV [ebp-20],edx ;movl %edx, -20(%ebp)

    MOV     al,\[ebp-24\]							;movb	-24(%ebp), %al
    MOV     \[ebp-25\],al							;movb	%al, -25(%ebp)
    MOV     al,\[ebp-23\]							;movb	-23(%ebp), %al
    MOV     \[ebp-26\],al							;movb	%al, -26(%ebp)
    MOV     al,\[ebp-22\]							;movb	-22(%ebp), %al
    MOV     \[ebp-27\],al							;movb	%al, -27(%ebp)
    MOV     al,\[ebp-21\]							;movb	-21(%ebp), %al
    MOV     \[ebp-28\],al							;movb	%al, -28(%ebp)
    MOV     al,\[ebp-20\]							;movb	-20(%ebp), %al
    MOV     \[ebp-29\],al							;movb	%al, -29(%ebp)
    MOV     al,\[ebp-19\]							;movb	-19(%ebp), %al
    MOV     \[ebp-30\],al							;movb	%al, -30(%ebp)
    MOV     al,\[ebp-18\]							;movb	-18(%ebp), %al
    MOV     \[ebp-31\],al							;movb	%al, -31(%ebp)
    MOV		al,\[ebp-17\]							;movb	-17(%ebp), %al
    MOV		\[ebp-32\],al							;movb	%al, -32(%ebp)
    
    MOV     eax,\[ebp-12\]						;movl	-12(%ebp), %eax
    LEA     ebx,\[0+eax+8\]						;leal	0(,%eax,8), %ebx
    MOV     ecx,\[ebp+12\]						;movl	12(%ebp), %ecx
    MOV     eax,\[ebp-32\]						;movl	-32(%ebp), %eax
    MOV     edx,\[ebp-28\]						;movl	-28(%ebp), %edx
    MOV     \[ecx+ebx\],eax						;movl	%eax, (%ecx,%ebx)
    MOV     \[4+ecx+ebx\],edx						;movl	%edx, 4(%ecx,%ebx)
    LEA		eax,\[ebp-12\]						;leal	-12(%ebp), %eax
    INC  	dword \[eax\]							    ;incl	(%eax)
    JMP		L2									;jmp	    L2
    

    L1:
    ADD esp,28 ;addl $28, %esp
    POP ebx ;popl %ebx
    POP ebp ;popl %ebp
    RET ;ret
    ;.ident "GCC: (GNU) 3.2.3"

    Z 1 Reply Last reply
    0
    • S Sirrius

      I have a bunch of assembly code here that I was trying to convert from AT&T to NASM. Could somebody please see if I have made any obvious mistakes? It doesnt seem to want to generate the output it supposed to. Thanks for your time and advice. B.

      ; .file "ByteSwap8.c"
      global _ByteSwap8_asm
      section .text

      _ByteSwap8_asm:
      PUSH ebp ;pushl %ebp
      MOV ebp,esp ;movl %esp, %ebp
      PUSH ebx ;pushl %ebx
      SUB esp,28 ;subl $28, %esp
      MOV dword [ebp-12],0 ;movl $0, -12(%ebp)
      L2:
      MOV eax,[ebp-12] ;movl -12(%ebp), %eax
      CMP eax,[ebp+8] ;cmpl 8(%ebp), %eax
      JL L5
      JMP L1
      L5:
      MOV eax,[ebp-12] ;movl -12(%ebp), %eax
      LEA edx,[0+eax+8] ;leal 0(,%eax,8), %edx
      MOV eax,[ebp+12] ;movl 12(%ebp), %eax
      LEA edx,[eax+edx] ;leal (%eax,%edx), %edx
      MOV eax,[edx] ;movl (%edx), %eax
      MOV edx,[edx+4] ;movl 4(%edx), %edx
      MOV [ebp-24],eax ;movl %eax, -24(%ebp)
      MOV [ebp-20],edx ;movl %edx, -20(%ebp)

      MOV     al,\[ebp-24\]							;movb	-24(%ebp), %al
      MOV     \[ebp-25\],al							;movb	%al, -25(%ebp)
      MOV     al,\[ebp-23\]							;movb	-23(%ebp), %al
      MOV     \[ebp-26\],al							;movb	%al, -26(%ebp)
      MOV     al,\[ebp-22\]							;movb	-22(%ebp), %al
      MOV     \[ebp-27\],al							;movb	%al, -27(%ebp)
      MOV     al,\[ebp-21\]							;movb	-21(%ebp), %al
      MOV     \[ebp-28\],al							;movb	%al, -28(%ebp)
      MOV     al,\[ebp-20\]							;movb	-20(%ebp), %al
      MOV     \[ebp-29\],al							;movb	%al, -29(%ebp)
      MOV     al,\[ebp-19\]							;movb	-19(%ebp), %al
      MOV     \[ebp-30\],al							;movb	%al, -30(%ebp)
      MOV     al,\[ebp-18\]							;movb	-18(%ebp), %al
      MOV     \[ebp-31\],al							;movb	%al, -31(%ebp)
      MOV		al,\[ebp-17\]							;movb	-17(%ebp), %al
      MOV		\[ebp-32\],al							;movb	%al, -32(%ebp)
      
      MOV     eax,\[ebp-12\]						;movl	-12(%ebp), %eax
      LEA     ebx,\[0+eax+8\]						;leal	0(,%eax,8), %ebx
      MOV     ecx,\[ebp+12\]						;movl	12(%ebp), %ecx
      MOV     eax,\[ebp-32\]						;movl	-32(%ebp), %eax
      MOV     edx,\[ebp-28\]						;movl	-28(%ebp), %edx
      MOV     \[ecx+ebx\],eax						;movl	%eax, (%ecx,%ebx)
      MOV     \[4+ecx+ebx\],edx						;movl	%edx, 4(%ecx,%ebx)
      LEA		eax,\[ebp-12\]						;leal	-12(%ebp), %eax
      INC  	dword \[eax\]							    ;incl	(%eax)
      JMP		L2									;jmp	    L2
      

      L1:
      ADD esp,28 ;addl $28, %esp
      POP ebx ;popl %ebx
      POP ebp ;popl %ebp
      RET ;ret
      ;.ident "GCC: (GNU) 3.2.3"

      Z Offline
      Z Offline
      ZoogieZork
      wrote on last edited by
      #2

      Sirrius wrote:

      LEA ebx,[0+eax+8] ;leal 0(,%eax,8),%ebx

      Careful! The AT&T syntax for memory refs is:

      displacement(base,index,scale)

      Which translates to:

      [base+(index*scale)+displacement]

      So the above line should be:

      lea ebx,[eax*8]

      That's just the first thing I noticed (and it's used in a number of places). - Mike

      S 1 Reply Last reply
      0
      • Z ZoogieZork

        Sirrius wrote:

        LEA ebx,[0+eax+8] ;leal 0(,%eax,8),%ebx

        Careful! The AT&T syntax for memory refs is:

        displacement(base,index,scale)

        Which translates to:

        [base+(index*scale)+displacement]

        So the above line should be:

        lea ebx,[eax*8]

        That's just the first thing I noticed (and it's used in a number of places). - Mike

        S Offline
        S Offline
        Sirrius
        wrote on last edited by
        #3

        How about these conversions, are they okay? LEA edx,[eax+edx] ;leal (%eax,%edx), %edx LEA eax,[ebp-12] ;leal -12(%ebp), %eax INC eax ;incl (%eax) MOV dword [ebp-12],0 ;movl $0, -12(%ebp)

        1 Reply Last reply
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • World
        • Users
        • Groups