Successfully reported this slideshow.
Your SlideShare is downloading. ×

Given the following C function- implement the equivalent assembly lang.docx

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 2 Ad

Given the following C function- implement the equivalent assembly lang.docx

Download to read offline

Given the following C function, implement the equivalent assembly language function, int returnLength(char *myArray, int *length) { int i; i = 0; while (myarray[i] !=0) { myarray[i] - myarray[i) & 0x0F; i+ +;} *length = i; return(value);}
Solution
;Assume that all general purpose registers (rax, rbx, rcx and rdx) are saved before calling the following assembly language procedure. Also, the following procedure assumes that the pointer (address) to \"myArray\" is contained inside the register, \"rdx\" and pointer (address) to the parameter \"length\" is contained inside the register, \"rcx\".
;The return value (length of the string) will be available inside the register, \"eax\", after the procedure returns.
; Procedure to return the length of a string
ReturnLength    PROC NEAR   PUBLIC
mov DWORD PTR[rcx], 0             ; Initialize length with 0
jmp   LOOP2
LOOP1:
mov eax, DWORD PTR [rcx]

movsx rbx, eax
add   rbx, rdx
movzx eax, BYTE PTR [rbx]              ; eax will contain the character at ith location
and eax, 15                                       ; and the character value with 0x0F
mov BYTE PTR [rbx], al                    ; store the result back at the same location
add DWORD PTR [ecx], 1         ; increment i (length) by 1

LOOP2:                                                   ; Checks the while loop and if is not end of the string, then jums to LOOP1.
mov eax, DWORD PTR [rcx]                ; assign i to eax

movsx rbx, eax

add rbx, rdx

movzx eax, BYTE PTR [rbx]        ; Get the character at the ith location

test al, al                                     ; Check whether it is NULL character

jne LOOP1                                  ; If not end of string jump to LOOP1 to peroform the operations given in while loop
mov eax, DWORD PTR [rcx]         ; store the final length in eax and return
ret

ReturnLength      ENDP
.

Given the following C function, implement the equivalent assembly language function, int returnLength(char *myArray, int *length) { int i; i = 0; while (myarray[i] !=0) { myarray[i] - myarray[i) & 0x0F; i+ +;} *length = i; return(value);}
Solution
;Assume that all general purpose registers (rax, rbx, rcx and rdx) are saved before calling the following assembly language procedure. Also, the following procedure assumes that the pointer (address) to \"myArray\" is contained inside the register, \"rdx\" and pointer (address) to the parameter \"length\" is contained inside the register, \"rcx\".
;The return value (length of the string) will be available inside the register, \"eax\", after the procedure returns.
; Procedure to return the length of a string
ReturnLength    PROC NEAR   PUBLIC
mov DWORD PTR[rcx], 0             ; Initialize length with 0
jmp   LOOP2
LOOP1:
mov eax, DWORD PTR [rcx]

movsx rbx, eax
add   rbx, rdx
movzx eax, BYTE PTR [rbx]              ; eax will contain the character at ith location
and eax, 15                                       ; and the character value with 0x0F
mov BYTE PTR [rbx], al                    ; store the result back at the same location
add DWORD PTR [ecx], 1         ; increment i (length) by 1

LOOP2:                                                   ; Checks the while loop and if is not end of the string, then jums to LOOP1.
mov eax, DWORD PTR [rcx]                ; assign i to eax

movsx rbx, eax

add rbx, rdx

movzx eax, BYTE PTR [rbx]        ; Get the character at the ith location

test al, al                                     ; Check whether it is NULL character

jne LOOP1                                  ; If not end of string jump to LOOP1 to peroform the operations given in while loop
mov eax, DWORD PTR [rcx]         ; store the final length in eax and return
ret

ReturnLength      ENDP
.

Advertisement
Advertisement

More Related Content

Similar to Given the following C function- implement the equivalent assembly lang.docx (20)

More from delicecogupdyke (20)

Advertisement

Recently uploaded (20)

Given the following C function- implement the equivalent assembly lang.docx

  1. 1. Given the following C function, implement the equivalent assembly language function, int returnLength(char *myArray, int *length) { int i; i = 0; while (myarray[i] !=0) { myarray[i] - myarray[i) & 0x0F; i+ +;} *length = i; return(value);} Solution ;Assume that all general purpose registers (rax, rbx, rcx and rdx) are saved before calling the following assembly language procedure. Also, the following procedure assumes that the pointer (address) to "myArray" is contained inside the register, "rdx" and pointer (address) to the parameter "length" is contained inside the register, "rcx". ;The return value (length of the string) will be available inside the register, "eax", after the procedure returns. ; Procedure to return the length of a string ReturnLength PROC NEAR PUBLIC mov DWORD PTR[rcx], 0 ; Initialize length with 0 jmp LOOP2 LOOP1: mov eax, DWORD PTR [rcx] movsx rbx, eax add rbx, rdx movzx eax, BYTE PTR [rbx] ; eax will contain the character at ith location and eax, 15 ; and the character value with 0x0F mov BYTE PTR [rbx], al ; store the result back at the same location
  2. 2. add DWORD PTR [ecx], 1 ; increment i (length) by 1 LOOP2: ; Checks the while loop and if is not end of the string, then jums to LOOP1. mov eax, DWORD PTR [rcx] ; assign i to eax movsx rbx, eax add rbx, rdx movzx eax, BYTE PTR [rbx] ; Get the character at the ith location test al, al ; Check whether it is NULL character jne LOOP1 ; If not end of string jump to LOOP1 to peroform the operations given in while loop mov eax, DWORD PTR [rcx] ; store the final length in eax and return ret ReturnLength ENDP

×