Assembly Code Snippet
  • Assembly Code Snippet
  • Assembly Program: 4-Digit Decimal Number Addition
  • ASCII Division and Display in x86 Assembly
  • ASCII Arithmetic Addition in x86 Assembly
  • BCD Addition and Display in Assembly
  • BCD Arithmetic and Display in Assembly
  • Decimal Multiplication and Display in x86 Assembly
  • Assembly Program: Determining Endianness and Displaying Messages
  • Assembly Program: Determining Even and Odd Numbers
  • Assembly Program: Displaying Messages using Syscalls
  • Assembly Program: Finding and Printing the Largest Word in a Sentence
  • Assembly Program: Finding the Largest of Three Numbers
  • Displaying "Hello World!" in x86 Assembly
  • Increment and Display Digits in Assembly
  • Input and Display User Name in Linux Assembly
  • Input and Display User Number in Linux Assembly
  • Introduction to Linux Assembly Programming with Messages
  • Assembly Program: Demonstrating Loop and Testing
  • Changing and Displaying Names in Assembly
  • Selection Sort from Minimum to Maximum
  • Assembly Program: Sentence Word Deletion
  • Sum and Read Input Numbers:
  • Two-Digit Sum and Square - Assembly Program
  • Calculate and Display Sum
  • Sorting Numerical Elements (BubbleSort)
    • Assembly Program: Sorting Numerical Elements
Powered by GitBook
On this page
  • source code
  • Code Explanation
  • Example
  • Usage

Was this helpful?

Edit on GitHub

Assembly Program: Determining Endianness and Displaying Messages

This assembly program determines the endianness of the system by comparing the least significant byte of a stored value. Depending on the endianness, the program displays corresponding messages. It utilizes Linux syscalls for I/O operations and program termination.

source code

section .text

global _start   ; Entry point for the linker (gcc)

_start:

    ; Storing a 4-byte value (0x12345678) in memory
    mov dword [a], 0x12345678

    ; Loading the least significant byte of 'a' into register 'cl'
    mov cl, byte [a]

    ; Comparing the least significant byte with 0x78
    cmp cl, 0x78
    je little    ; Jump if equal to 'little' section

    ; Comparing the least significant byte with 0x12
    jne ext      ; Jump if not equal to 'ext' section

    ; Display 'big' message for big endian architecture
    mov ecx, big
    mov edx, lbig
    mov eax, 4
    mov ebx, 1    ; File descriptor (stdout)
    int 0x80      ; Invoke sys_write syscall

    jmp ext       ; Jump to 'ext' section

little:

    ; Display 'lit' message for little endian architecture
    mov ecx, lit
    mov edx, llit
    mov eax, 4
    mov ebx, 1    ; File descriptor (stdout)
    int 0x80      ; Invoke sys_write syscall

ext:

    ; Exit the program
    mov eax, 1    ; sys_exit syscall number
    mov ebx, 0    ; Return code
    int 0x80      ; Invoke sys_exit syscall

section .data

a dd 30h          ; Memory location to store the value
big db "BIG ENDIAN        -      GODLY", 10 ; Message for big endian
lbig equ $ - big  ; Length of the big endian message
lit db "LITTLE ENDIAN        -       GODLY", 10 ; Message for little endian
llit equ $ - lit  ; Length of the little endian message

Code Explanation

The provided assembly code performs the following steps:

  1. Storing a Value (_start):

    • Stores the 4-byte value 0x12345678 in memory.

    • Loads the least significant byte of the stored value into the cl register.

  2. Comparing Least Significant Byte:

    • Compares the least significant byte with 0x78.

    • If equal, jumps to the little section.

    • If not equal and not 0x12, jumps to the ext section.

  3. Display Big Endian Message (big section):

    • Displays the message "BIG ENDIAN - GODLY" for big endian architecture.

    • Invokes syscall 4 (sys_write) to print the message.

  4. Display Little Endian Message (little section):

    • Displays the message "LITTLE ENDIAN - GODLY" for little endian architecture.

    • Invokes syscall 4 (sys_write) to print the message.

  5. Exit Program (ext section):

    • Exits the program using syscall 1 (sys_exit).

Example

Suppose you run the program on a little endian system. It detects the least significant byte of the stored value as 0x78, which is not equal to 0x12. Therefore, it displays the "LITTLE ENDIAN - GODLY" message:

Output:

LITTLE ENDIAN - GODLY

In this example, the program successfully determines the endianness of the system and displays the appropriate message.

Usage

  1. Ensure you are running this code on a Linux environment or emulator that supports the syscalls used in the code.

  2. Assemble the code using an appropriate assembler (e.g., NASM) and linker (e.g., LD).

  3. Run the assembled binary to execute the program.

  4. Observe the output, which will display the appropriate endianness message based on the system architecture.

Note: Assembly language can interact with system components. Make sure you understand the code before running it, especially when it involves system calls.


PreviousDecimal Multiplication and Display in x86 AssemblyNextAssembly Program: Determining Even and Odd Numbers

Last updated 1 year ago

Was this helpful?