operation size not specified

11,249

The data at [edx] could be anything, so its size is unknown to the assembler. You'll have to specify the size of the data you want to push/pop. For example, if you want to push/pop a dword (32 bits) you'd write:

push dword [edx]
pop dword [edx]

By the way, you can combine these lines:

mov edx, esi
add edx, ebx

into:

lea edx,[esi + ebx]
Share:
11,249
Jack
Author by

Jack

Updated on June 05, 2022

Comments

  • Jack
    Jack almost 2 years

    I have a problem with 32bit Assembly, assembling it with NASM on linux. Here is my implementation of insertion sort

    myInsertionSort:
    push ebp
    mov ebp, esp
    push ebx
    push esi
    push edi
    mov ecx, [ebp+12]   ;put len in ecx, our loop variable
    mov eax, 1 ; size of one spot in array, one byte
    mov ebx, 0
    mov esi, [ebp+8] ; the array
    loop loop_1
    loop_1:
        cmp eax, ecx ; if we're done
        jge done_1 ; then done with loop
        push ecx ; we save len, because loop command decrements ecx
        mov ecx, [esi+eax] ; ecx now array[i]
        mov ebx, eax
        dec ebx ; ebx is now eax-1, number of times we should go through inner loop
        loop_2:
            cmp ebx, 0 ; we don't use loop to not affect ecx so we use ebx and compare it manually with 0
            jl done_2
            cmp [esi+ebx], ecx ;we see if array[ebx] os ecx so we can exit the loop
            jle done_2
            mov edx, esi
            add edx, ebx
            push [edx] ; pushing our array[ebx] *****************************
            add edx, eax
            pop [edx] ; poping the last one *********************************
            dec ebx ; decrementing the loop iterator
            jmp loop_2 ; looping again
        done_2:
            mov [esi+ebx+1], ecx
            inc eax ; incrementing iterator
            pop ecx ; len of array to compare now to eax and see if we're done
            jmp loop_1
    done_1:
        pop edi
        pop esi
        pop ebx
        pop ebp ; we pop them in opposite to how we pushed (opposite order, it's the stack, LIFO)
        ret
    

    Now... When I try to compile my code with nasm, I get errors of "operation size not specified" on the lines containing asterisks in the comments :P It's basic insertion sort and I'm not sure what could have gone wrong. Enlighten me, please.