View Full Version : سوال: کار با رشته ها
m-alizadeh
دوشنبه 16 اردیبهشت 1387, 16:18 عصر
سلام
یه 2 تا سوال دارم.
با فرض اینکه رشته ای با طول 250 کاراکتر در یک متغیر داشته باشیم:
1) چطور می تونم به رشته یا بهتر بگم به ابتدای رشته دسترسی داشته باشم؟
2) بعد از محاسبه تعداد کلمات بکار رفته در رشته چطور می تونم اون تعداد رو چاپ کنم؟
(طریقه چاپ عدد )
با تشکر قبلی .
hoax3r
سه شنبه 17 اردیبهشت 1387, 17:59 عصر
خبا سلام
1 - آدرس متغییری که برای رشته معیین شده مشخص کننده ابتدایه رشته هست
که با دستور LEA می تونید آدرس اون رو بدست بیارید
2 - خوب شما برای چاپ عدد اول باید اونو به یه رشته ی عددی تبدیل کنید بعد چاپش کنید
به این صورت که تک تک رقم ها 48 واحد بهشون اضافه بشه و کنار یکدیگر قرار بگیرن
اگه برنامه مورد نظرتون 16 بیتی هست می تونید از مثالهایی که در این لیبراری هست هم کمک بگیرید،
فایلهای CONV15.ASM و CONV16.ASM
http://www.programmersheaven.com/download/25309/download.aspx
یا اگه از masm32 استفاده میکنید تابعی داخل فایل masm32.lib وجود داره با نام atol برای اینگونه تبدیلات
موفق باشید
m-alizadeh
پنج شنبه 19 اردیبهشت 1387, 11:52 صبح
سلام
آقا ممنون مشکلم تا اینجا حل شد.
مرسی.
حالا اگه یه رشته تعریف کرده باشم که BX به ابتدای اون اشاره می کنه .خودتون بهتر می دونید اگه بنویسم add Bx,1
اونوقت Bx کل رشته رو رد میکنه و سراغ خانه بعد از رشته میره.
چطور می تونم به Bx بگم که بعد از اضافه شدن با یک ، سراغ کاراکتر بعدی تو همون رشته بره؟
آیا مربوط به روش های آدرس دهی میشه ؟ به چه طریق؟
با تشکر.
hoax3r
پنج شنبه 19 اردیبهشت 1387, 17:06 عصر
سلام
شما اگه از دستوری که گفتین استفاده کنید باید به حرف بعدی بره مگه اینکه مشکل از جای دیگه باشه
مثلا این مثال رو ببینید،
.model small
.data
string db "test", 0
.code
main proc far
mov ax, @data
mov ds, ax
lea bx, string
mov al,byte ptr[bx]
add bx, 1
mov ah, byte ptr[bx]
main endp
end main
بعد آدرسد هی رشته string در bx
با این دستور حرف اول داخل al میشه
mov al,byte ptr[bx]
و با این دستورات حرف دوم وارد ah میشه(bx هم یه واحد اضافه کردیم)
add bx, 1
mov ah, byte ptr[bx]
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.