# Write Program to Shift String by n Bits in Assembly Language

Our focus is to guide you through the process of shifting a string left by n bits using assembly language. In this comprehensive guide, we'll not only explain the intricacies of this operation but also provide step-by-step instructions to help you craft an assembly program that accomplishes this task with precision. While the example we'll explore is based on x86 assembly, the core principles we cover are versatile and can readily be adapted to a variety of processor architectures. Whether you're a beginner diving into the world of assembly or an experienced programmer looking to expand your skill set, this guide is designed to empower you with the knowledge and confidence needed to manipulate strings at a low level.

## Enhance Assembly Skills through String Shifting

Explore the process of shifting a string by n bits in assembly language. By following our comprehensive step-by-step instructions, you'll gain a deep understanding of string manipulation and low-level programming concepts, which will provide you with help to complete your assembly language assignment. Whether you're a novice or an experienced programmer, mastering these techniques opens the door to more efficient and effective coding solutions.

### Problem Statement

Imagine you have a null-terminated string, and the goal is to shift each character in the string to the left by n bits. Let's break down the process into manageable steps and provide explanations for each part of the assembly code.

Assembly Code Example

Here's the x86 assembly code that achieves the task of shifting a string left by n bits. Explanations are provided for each segment of the code:

``` ```assembly section .data str db "Hello, World!", 0 ; Null-terminated string section .text global _start _start: ; Step 1: Load the address of the string into a register mov esi, str ; ESI points to the beginning of the string ; Step 2: Load the shift amount 'n' into a register mov ecx, 4 ; Shift amount of 4 bits ; Step 3: Loop through the string shift_loop: ; a. Load the current character from memory mov al, byte [esi] ; Load the byte at [esi] into AL register ; b. Shift the character left by 'n' bits shl al, cl ; Shift AL left by CL bits ; c. Store the modified character back to memory mov [esi], al ; Store the modified value back to [esi] ; d. Check for null terminator (end of string) cmp byte [esi], 0 ; Compare the byte at [esi] with 0 je done ; If null terminator, jump to 'done' ; Move to the next character inc esi ; Increment ESI to point to the next character jmp shift_loop ; Repeat the loop done: ; End of program mov eax, 1 ; syscall: exit xor ebx, ebx ; status: 0 int 0x80 ; Call kernel ``` ```

## How It Works

2. The first step involves loading the memory address of the string into the esi register. This register will serve as a guide to navigate through the string.
4. To determine the number of bits to shift each character, the shift amount n is loaded into the ecx register.
5. Loop Through String:
6. The code enters a loop to process each character in the string.
2. The current character is loaded from memory into the al register.
3. Shift Character:
4. The character is shifted left by n bits using the shl instruction.
5. Store Character:
6. The modified character is stored back into memory.
7. Check for Null Terminator:
8. The current character is compared with the null terminator (end of the string). If it's a null terminator, the loop is exited.
9. Move to the Next Character:
10. If not at the end of the string, the esi register is incremented to point to the next character and the loop repeats.
7. Exiting the Program:
8. As the final step, the program is prepared to exit using the system call int 0x80.

## Conclusion

In conclusion, this guide has equipped you with the essential insights and practical steps required to shift a string left by n bits using assembly language. By delving into the intricacies of memory manipulation, shifting operations, and looping techniques, you've gained a solid foundation in assembly programming. Whether you're embarking on your first assembly project or seeking to enhance your programming repertoire, the principles covered here pave the way for greater proficiency in low-level programming tasks.