Fragen zu mov byte [sample], al (x86 Assembler Intel-Syntax)



  • Hallo,
    gegeben sei der Code in 32-Bit x86-Assembler unter Linux mit nasm in Intel-Syntax.

    section .text
    	mov eax, 0x33445566 
    
    	mov [sample], al	
    	mov [sample], ax
    	mov [sample], eax
    
    	;mov byte [sample], al	
    	;mov word [sample], ax
    	;mov dword [sample], eax
    
    section .data
    
    	sample:	db 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x11, 0x22
    

    Was ist der Unterschied zwischen oberen drei Befehlen und den Befehlen hinter den Semikolons?
    Anhand der Quellregisterangaben sieht man doch, dass 8, 16 bzw. 32 Bit übertragen werden müssen, oder nicht?
    Ich habe mal die Variable sample einmal mit "mov [sample], al" und einmal mit "mov byte [sample], al" modifizieren lassen und es mit gdb näher angegguckt. Das Ergebnis ist gleich.



  • Kein Unterschied.

    Bei den unteren Befehlen handelt es sich um einen Hinweis, ob ein Byte, Word oder Doubleword zu speichern ist. Bei den oberen Befehlen merkt NASM von selbst anhand des Registers, wieviel Bytes zu speichern sind. Du brauchst den Hinweis nur, wenn NASM das nicht erkennen kann, z.B. bei

    inc [sample]
    

    viele grüße
    ralph



  • Vielen Dank!


Log in to reply