PDA

View Full Version : مشکل در برنامه



mmehdi21
سه شنبه 02 دی 1393, 20:46 عصر
سلام
اگه جواب بدید ممنون میشم

کد زیر یه رشته رو میگیره و توی بافری که معرفی کردم ذخیره میکنه
ولی وقتی خونه اولو توی متغیر T میزارم بجای کارکتر اول 0DH ذخیره شده





STSEG SEGMENT
DB 128 DUP(?)
STSEG ENDS

DTSEG SEGMENT
BUF1 LABEL BYTE
BUFS1 DB 20
BUFC1 DB ?
BUFA1 DB 20 DUP(?)

T DB ?

DTSEG ENDS


CSEG SEGMENT
MAIN PROC FAR
ASSUME SS:STSEG,DS:DTSEG,CS:DTSEG
MOV AX,DTSEG
MOV DS,AX

MOV AH,0AH
MOV DX,OFFSET BUF1
INT 21H

MOV BX,OFFSET BUFA1


MOV AL,[BX]
MOV T,AL


MOV AH,4CH
INT 21H

MAIN ENDP

CSEG ENDS
END MAIN

masoud.8086
سه شنبه 02 دی 1393, 21:07 عصر
سلام نه کد مشکل نداره احتمالا رشته وارد نمیکنی و مستقیم enter میزنی!

mmehdi21
سه شنبه 02 دی 1393, 21:10 عصر
سلام نه کد مشکل نداره احتمالا رشته وارد نمیکنی و مستقیم enter میزنی!

والا خودمم نگا میکنم میشکل نداره
چرا رشته میزنم
بعد مراحلشو نگا میکنم میبینم چیزی ذخیره نمیکنه

mmehdi21
سه شنبه 02 دی 1393, 21:12 عصر
حالا وقتی میام دوتا رشته وارد میکنم
یعنی دوتا بافر هست

تو بافر اول ذخیره میشه ولی تو بافر دوم نمیشه

masoud.8086
سه شنبه 02 دی 1393, 21:27 عصر
منظورت مبهمه؟؟؟؟یعنی چی تو دو تا بافر تو اولی ذخیره میشه تو یکی نمیشه؟؟؟

mmehdi21
سه شنبه 02 دی 1393, 21:43 عصر
منظورت مبهمه؟؟؟؟یعنی چی تو دو تا بافر تو اولی ذخیره میشه تو یکی نمیشه؟؟؟

خب بافرو نگا کنید اندازه رشته توی bufs1 ذخیره میشه و اندازه رشته ورودی هم 1bufc و خود رشته هم bufa1

mmehdi21
سه شنبه 02 دی 1393, 22:28 عصر
منظورت مبهمه؟؟؟؟یعنی چی تو دو تا بافر تو اولی ذخیره میشه تو یکی نمیشه؟؟؟

مثل کد زیر



STSEG SEGMENT
DB 128 DUP(?)
STSEG ENDS




DTSEG SEGMENT
BUF1 LABEL BYTE
BUFS1 DB 20
BUFC1 DB ?
BUFA1 DB 20 DUP(?)

BUF2 LABEL BYTE
BUFS2 DB 20
BUFC2 DB ?
BUFA2 DB 20 DUP(?)

T DB ?

DTSEG ENDS



CSEG SEGMENT
MAIN PROC FAR
ASSUME SS:STSEG,DS:DTSEG,CS:DTSEG
MOV AX,DTSEG
MOV DS,AX

MOV AH,0AH
MOV DX,OFFSET BUF1
INT 21H

MOV AH,0AH
MOV DX,OFFSET BUF2
INT 21H

MOV BX,OFFSET BUFA1
MOV SI,OFFSET BUFA2

MOV AL,[BX]
MOV T,AL

MOV AL,[SI]
MOV T,AL




MOV AH,4CH
INT 21H

MAIN ENDP

CSEG ENDS
END MAIN

masoud.8086
چهارشنبه 03 دی 1393, 14:03 عصر
ببینید برای تعریف بافر بیاید از این روش استفاده کنید(البته این فقط موقعی که داری از ورودی دریافت میکنی )
a db 21,21 dup(?)
خوب اینجا نیازی به اندازه رشته نیس اینجا خونه اول آرایت همیشه خالیه و خونه دوم که اندیس یک هست اندازه طول رشتت وجود داره
بعد میتونی با استفاده ا از lea dx, a یا با استفاده از offset به خونهها ارایت درستذسی داشته باشی
فقط ی نکته میمونه این که باید از اندیس دوم خونه های ارایت به بعد استفاده کنی چون گفتم خونه اول و دوم یعنی خونه صفر و یک رزوو شدس
mov si,2
mov bx,offset a [si]
مشکل بعدی اینکه وقتی ی مقدار از بافر اولت داخل t میریزی و خط پایین تر داری ی مقدار از بافر بعدی داخل t میریزی که باعث میشه مقدار قبلی t حذف بشه..
موفق باشی.

mmehdi21
چهارشنبه 03 دی 1393, 19:40 عصر
ببینید برای تعریف بافر بیاید از این روش استفاده کنید(البته این فقط موقعی که داری از ورودی دریافت میکنی )
a db 21,21 dup(?)
خوب اینجا نیازی به اندازه رشته نیس اینجا خونه اول آرایت همیشه خالیه و خونه دوم که اندیس یک هست اندازه طول رشتت وجود داره
بعد میتونی با استفاده ا از lea dx, a یا با استفاده از offset به خونهها ارایت درستذسی داشته باشی
فقط ی نکته میمونه این که باید از اندیس دوم خونه های ارایت به بعد استفاده کنی چون گفتم خونه اول و دوم یعنی خونه صفر و یک رزوو شدس
mov si,2
mov bx,offset a [si]
مشکل بعدی اینکه وقتی ی مقدار از بافر اولت داخل t میریزی و خط پایین تر داری ی مقدار از بافر بعدی داخل t میریزی که باعث میشه مقدار قبلی t حذف بشه..
موفق باشی.

اینجوری که شما هم میگید تعریف کردم بافرو باز هم همونطوری میشه
این T رو برای اینکه ببینم تو خونه اولشون چی ذخیره میشه گذاشتم و قبل و بعدشو چک میکنم

masoud.8086
چهارشنبه 03 دی 1393, 22:08 عصر
ببین اصلا برنامه مشکل نداره برنامتو تو 8086 اجرا کن و توی vars نگاه کن دقیقا درست کار میکنه!!!
موفق باشی.

mmehdi21
جمعه 05 دی 1393, 17:59 عصر
ببین اصلا برنامه مشکل نداره برنامتو تو 8086 اجرا کن و توی vars نگاه کن دقیقا درست کار میکنه!!!
موفق باشی.

ممنون که پاسخ میدی
خب تو var نگاه کردم دیدم که نمیگیره :))
نمیدونم شاید مشکل از برنامه یا جای دیگه باشه

xman_1365_x
جمعه 05 دی 1393, 18:50 عصر
ممنون که پاسخ میدی
خب تو var نگاه کردم دیدم که نمیگیره :))
نمیدونم شاید مشکل از برنامه یا جای دیگه باشه

دوست عزیز اگر میشه اول صورت مسئله رو درست مطرح کنید!
در برنامه دوم شما فقط یک T تعریف کردین که با گرفتن بافر دوم مقدار کاراکتر بافر اول از دست میره


STSEG SEGMENT
DB 128 DUP(?)
STSEG ENDS


DTSEG SEGMENT
BUF1 LABEL BYTE
BUFS1 DB 20
BUFC1 DB ?
BUFA1 DB 20 DUP(?)

BUF2 LABEL BYTE
BUFS2 DB 20
BUFC2 DB ?
BUFA2 DB 20 DUP(?)

T1 DB ?
T2 DB ?

DTSEG ENDS



CSEG SEGMENT
MAIN PROC FAR
ASSUME SS:STSEG,DS:DTSEG,CS:DTSEG
MOV AX,DTSEG
MOV DS,AX

MOV AH,0AH
MOV DX,OFFSET BUF1
INT 21H

MOV AH,0AH
MOV DX,OFFSET BUF2
INT 21H

MOV BX,OFFSET BUFA1
MOV SI,OFFSET BUFA2

MOV AL,[BX]
MOV T1,AL

MOV AL,[SI]
MOV T2,AL



MOV AH,4CH
INT 21H

MAIN ENDP

CSEG ENDS
END MAIN

امیدوارم روزی برسه تمامی کاربران عنوان مناسبی برای تاپیک هاشون بزارن که بعدا دیگرانم با جستجو بتونند راحت به جوابشون برسند،اگر بخوام طبق قوانین تالار عمل کنم باید بیشتر تاپیک ها و پست هارو پاک کنم:لبخندساده:
موفق باشید