TAAFT
Free mode
100% free
Freemium
Free Trial
Deals
Create tool

Moklezur Rahman

@moklezurrahman Tasks: 10
🛠️ 1 tool 🙏 30 karma
Apprentice
Joined: November 2024

Moklezur Rahman's tools

  • Assembly Generator
    Transform specs into optimized assembly code.
    Open
    62
    2
    4.0
    25
    Released 10mo ago
    100% Free
    1. Re-writing `checkPrimeNumber` in assembly and calling it from C main: ```c #include <stdio.h> // Function prototype for the assembly function extern int checkPrimeNumber(int n); int main() { int n1, n2, i, flag; printf("Enter two positive integers: "); scanf("%d %d", &n1, &n2); printf("Prime numbers between %d and %d are: ", n1, n2); for(i=n1+1; i<n2; ++i) { flag = checkPrimeNumber(i); if(flag == 1) printf("%d ", i); } return 0; } ``` ```assembly .global checkPrimeNumber .text .align 2 checkPrimeNumber: push {r4-r7, lr} @ Save registers mov r4, r0 @ r4 = n (input number) mov r5, #2 @ r5 = i (loop counter) cmp r4, #1 @ if n <= 1 ble not_prime @ it's not prime loop: cmp r5, r4 @ if i >= n bge is_prime @ it's prime udiv r6, r4, r5 @ r6 = n / i mul r7, r6, r5 @ r7 = (n / i) * i cmp r7, r4 @ if (n / i) * i == n beq not_prime @ it's not prime add r5, r5, #1 @ i++ b loop is_prime: mov r0, #1 @ return 1 (prime) b end not_prime: mov r0, #0 @ return 0 (not prime) end: pop {r4-r7, pc} @ Restore registers and return ``` 2. Re-writing `main` in assembly and calling C `checkPrimeNumber`: ```c int checkPrimeNumber(int n) { int i; for(i=2; i<=n/2; ++i) { if(n%i == 0) return 0; } return 1; } ``` ```assembly .global main .extern printf .extern scanf .extern checkPrimeNumber .data input_prompt: .asciz "Enter two positive integers: " input_format: .asciz "%d %d" output_format: .asciz "Prime numbers between %d and %d are: " prime_format: .asciz "%d " .text .align 2 main: push {r4-r8, lr} @ Save registers ldr r0, =input_prompt bl printf sub sp, sp, #8 @ Allocate space for two integers mov r1, sp @ r1 = address of n1 add r2, sp, #4 @ r2 = address of n2 ldr r0, =input_format bl scanf ldr r4, [sp] @ r4 = n1 ldr r5, [sp, #4] @ r5 = n2 add sp, sp, #8 @ Deallocate space mov r2, r5 mov r1, r4 ldr r0, =output_format bl printf add r6, r4, #1 @ r6 = i = n1 + 1 loop: cmp r6, r5 @ if i >= n2 bge end @ exit loop mov r0, r6 bl checkPrimeNumber @ call C function cmp r0, #1 @ if result == 1 bne next_iteration mov r1, r6 ldr r0, =prime_format bl printf next_iteration: add r6, r6, #1 @ i++ b loop end: mov r0, #0 @ return 0 pop {r4-r8, pc} @ Restore registers and return ``` 3. Re-writing both `main` and `checkPrimeNumber` in assembly: ```assembly .global main .extern printf .extern scanf .data input_prompt: .asciz "Enter two positive integers: " input_format: .asciz "%d %d" output_format: .asciz "Prime numbers between %d and %d are: " prime_format: .asciz "%d " .text .align 2 main: push {r4-r8, lr} @ Save registers ldr r0, =input_prompt bl printf sub sp, sp, #8 @ Allocate space for two integers mov r1, sp @ r1 = address of n1 add r2, sp, #4 @ r2 = address of n2 ldr r0, =input_format bl scanf ldr r4, [sp] @ r4 = n1 ldr r5, [sp, #4] @ r5 = n2 add sp, sp, #8 @ Deallocate space mov r2, r5 mov r1, r4 ldr r0, =output_format bl printf add r6, r4, #1 @ r6 = i = n1 + 1 main_loop: cmp r6, r5 @ if i >= n2 bge main_end @ exit loop mov r0, r6 bl checkPrimeNumber @ call local function cmp r0, #1 @ if result == 1 bne main_next_iteration mov r1, r6 ldr r0, =prime_format bl printf main_next_iteration: add r6, r6, #1 @ i++ b main_loop main_end: mov r0, #0 @ return 0 pop {r4-r8, pc} @ Restore registers and return checkPrimeNumber: push {r4-r7, lr} @ Save registers mov r4, r0 @ r4 = n (input number) mov r5, #2 @ r5 = i (loop counter) cmp r4, #1 @ if n <= 1 ble not_prime @ it's not prime check_loop: cmp r5, r4 @ if i >= n bge is_prime @ it's prime udiv r6, r4, r5 @ r6 = n / i mul r7, r6, r5 @ r7 = (n / i) * i cmp r7, r4 @ if (n / i) * i == n beq not_prime @ it's not prime add r5, r5, #1 @ i++ b check_loop is_prime: mov r0, #1 @ return 1 (prime) b check_end not_prime: mov r0, #0 @ return 0 (not prime) check_end: pop {r4-r7, pc} @ Restore registers and return ``` These three versions should fulfill the requirements of the assignment. Each version includes comments explaining the purpose of key instructions and sections of the code.
0 AIs selected
Clear selection
#
Name
Task