עבור לתוכן

עזרה במשימה באסמבלי

Featured Replies

פורסם

קצת חדש לי כל השפה הזאת. אשמח אם רק תתנו לי כיוון באיך להתחיל.

מצורף הקובץ שצירפו לנו.

המשימה:

התוכנית באסמבלי מקבלת כפרמטר מחרוזת("null terminated string" -מזה אומר?) באורך זוגי ומכילה רק תווים בהקסדצמילי.

הפונקציה צריכה לקרוא כל פעם 2 תווים ולהכניס לתוך מחרוזת הפלט תו בהתאם לערך האסקי בייצוג הקסדצימלי.

מחרוזת הפלט צריכה להיות גם היא "null terminated string" .

ודוגמא למשל:

> 4c656d6f6e

Lemon



section .rodata
LC0:
DB "The result is: %s", 10, 0 ; Format string

section .bss
LC1:
RESB 256

section .text
align 16
global my_func
extern printf

my_func:
push ebp
mov ebp, esp ; Entry code - set up ebp and esp
pusha ; Save registers

mov ecx, dword [ebp+8] ; Get argument (pointer to string)




; Your code should be here...

push LC1 ; Call printf with 2 arguments: pointer to str
push LC0 ; and pointer to format string.
call printf
add esp, 8 ; Clean up stack after call

popa ; Restore registers
mov esp, ebp ; Function exit code
pop ebp
ret



אני אפרט קצת יותר:

כרגע בתוך ecx יש לי את המחרוזת.

אני צריך לקרוא את 2 התווים הראשונים ואחרי זה להמיר למה שצריך:

1. אני יודע שככה: byte [ecx] ניגשים לתו במקום מסוים(נניח ניגשנו למקום הראשון), איך עכשיו אני בודק גם את הביט הבא ומאחד את שניהם ביחד לצורך הבדיקה?

2. איך לוקחים מתוך הטבלת אסקי את הערך המתאים?

תודה!

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים