PDA

View Full Version : عناصر ارایه



amir_civil
یک شنبه 29 دی 1387, 22:17 عصر
با سلام
یه سوال ساده دارم و اونم اینه که چه جوری میشه به عناصر ارایه زیر دسترسی پیدا کرد


amir db 'hi',0,'how',0,'we',0

monazzah
دوشنبه 30 دی 1387, 11:18 صبح
سلام


lea si,amir
mov cx,9
for:
دستورات

inc si
loop for

amir_civil
دوشنبه 30 دی 1387, 12:14 عصر
ممنون من تحت ویندوز کار میکنم وفکر کنم باید اینجوری باشه:


mov esi,offset amir ; lea esi,amir
mov cx,9
.
.
.
inc esi
ولی این کد یه فسمتی از رشته رو نشون میده مثلا ow
ولی کل یه کلمه رو نشون نمیده!

hoax3r
دوشنبه 30 دی 1387, 16:08 عصر
سلام
در ادامه صحبت دوستان، در این مورد شما میتونی دو تا کار کنی، راه های دیگه ای هم احتمالا هست

راه اول - بیای حداگثر طول هر رشته رو مساوی در نظر بگیری مثلا در مورد مثال شما 4 بگیری
بعد قسمتهای خالی رو با صفر پر کنی مثل این


amir db 'hi',0,0,'how',0,'we',0,0

حالا آدرس ابتدای هر رشته با این فرمول حساب کن، بعدم میتونی ازش استفاده کنی


(amir + n * max_len)


راه دوم - بیای مثل مفهوم اشاره گر به اشارگر یه آرایه از اشاره گر ها ایجاد کن، در این حالت طول رشته
میتونه متغییر باشه،
یه مثال :


push ebx

mov dword ptr ss:[ebp - 12], offset amir
mov dword ptr ss:[ebp - 8], offset amir + 3
mov dword ptr ss:[ebp - 4], offset amir + 7

xor ebx, ebx
_next:
mov eax, dword ptr ss:[ebp + ebx * 4 - 12] ; 12 is 3 * 4 (DWORD)
; do some work with eax
inc ebx
cmp ebx, 3
jl _next

pop ebx


اینجا من از stack استفاده کردم چون سه تا رشته هست پس سه تا اشاره گر در آرایه ما باید باشه
به ترتیب آدرس ابتدای هر رشته رو در stack میریزیم بعد با استفاده از این دستور بهشون دسرسی پیدا میکنیم


mov eax, dword ptr ss:[ebp + ebx * 4 - 12]


شاد باشید

amir_civil
پنج شنبه 03 بهمن 1387, 13:23 عصر
دوستان اگر راه ساده تری هم هست بگید چون من تازه شروع کردم اسمبلی رو
ممنون