View Full Version : دریافت رشته وتشخیص وجود کارکتر تکراری با وقفه تله تایپ؟؟؟؟؟؟
ahmadsilavi
یک شنبه 17 خرداد 1394, 17:57 عصر
سوال:
با استفاده از وقفه ورودی یک رشته به طول 20 بایت از ورودی دریافت نموده سپس با وقفه تله تایپ تشخیص دهد که درصورت وجود دو فضای خالی پشت سرهم یا دو علامت سوال پشت سرهم یکی از آنها را حذف نماید وبااستفاده از وقفه خروجی در خروجی نمایش دهد؟
*لطفاً راهنمایی کنید
?are--you--ok?? ==> are-you-ok
masoud.8086
یک شنبه 17 خرداد 1394, 19:31 عصر
سلام
برای وردی اطلاعات که از وقفه int 21h /ah,0ah استفاده میکنی بعد از دریافت میای اشاگر رو به اول رشته میبری و بعد میا چک میکنی که کارکتر علامت شوال یا خط تیره رو پیدا کرده یا نه اگر پیددا کرد که یکی به اشاره گرت اضافه میکنیو کارکتر بعدی رو چک میکنی . اگر اونم شبیه قبلی اون اونو حذف میکنی.بعدش لازمه رشتتو ی شیفت بدی که جای کارکتر خلالی رو پر کنی یا موقع چاپ از روش رد بشی.موفق باشی
ahmadsilavi
یک شنبه 17 خرداد 1394, 22:07 عصر
میشه لطف کنید یه مثال بزنید
masoud.8086
دوشنبه 18 خرداد 1394, 07:36 صبح
فرض کن رشته abc--fd رو وارد کردید
خوب از کارکتر اول مقایسه میکنید که با کد اسکی "_" و "؟" برابر هست یا نه اگر برابر نبود که بره کارکتر بعدی رو مقایسه کنه اگرربرابر بود بیاد کارکتر بعدیشو هم مقایسه کنه و اگر برابر بود همون جا که الان اشارگر وجود داره رو با ی کارکتر خاص پر کنه و موقع چاپ از روی این کارکتر خاص بپره..شبه کدشم پایین میزارم
mov si,0
mov a[si],"_"
je next
کد های برابر نبودن
next:
کدهای برابر بودن
حالا تو کدهای برابر نبودن باید یکی اشاره گرتو ببری جلو
و داخل کدهای برابر بودن باید دوباره ی مقایسه مثل همون که نوشتم انجام بدی اگر برابر بود بیاد مقداری که اشارگر بهش اشاره میکنه رو با ی کارکتر پر کنی.و بعد چاپ..
موفق باشی
ahmadsilavi
دوشنبه 18 خرداد 1394, 09:56 صبح
تشکر از پاسختون ولی تله تایپ کوو؟
لطفا ببینید این کد درسته!
data segment str db 20,?,20 dup(?)
ends
stack segment
dw 128 dup(0)
ends
DISPLAY MACRO MSG
MOV AH,9
LEA DX,MSG
INT 21H
ENDM
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov al,00h
mov ah,00h
int 10h ;video mode
lea dx,str
mov ah,0ah
int 21h ;input in key board
lea si,str
mov cx,20
mov al,0d
mov ah,0eh
int 10h
CHECK:
CMP [si],'?'
JE next
CMP [si],' '
JE next
INC si
next: INC si
CMP [SI],'?'
JNE next
mov [si],''
LOOP CHECK
DISPLAY str
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
ahmadsilavi
دوشنبه 18 خرداد 1394, 10:25 صبح
دوستان متخصص لطفاجواب بدید:افسرده:
ahmadsilavi
دوشنبه 18 خرداد 1394, 12:57 عصر
فرض کن رشته abc--fd رو وارد کردید
خوب از کارکتر اول مقایسه میکنید که با کد اسکی "_" و "؟" برابر هست یا نه اگر برابر نبود که بره کارکتر بعدی رو مقایسه کنه اگرربرابر بود بیاد کارکتر بعدیشو هم مقایسه کنه و اگر برابر بود همون جا که الان اشارگر وجود داره رو با ی کارکتر خاص پر کنه و موقع چاپ از روی این کارکتر خاص بپره..شبه کدشم پایین میزارم
mov si,0
mov a[si],"_"
je next
کد های برابر نبودن
next:
کدهای برابر بودن
حالا تو کدهای برابر نبودن باید یکی اشاره گرتو ببری جلو
و داخل کدهای برابر بودن باید دوباره ی مقایسه مثل همون که نوشتم انجام بدی اگر برابر بود بیاد مقداری که اشارگر بهش اشاره میکنه رو با ی کارکتر پر کنی.و بعد چاپ..
موفق باشی
دوست عزیز وقفه تله تایپ باید کجای کد قرار بگیره؟؟
masoud.8086
دوشنبه 18 خرداد 1394, 12:58 عصر
دوست عزیز من فقط قسمت مقایسه شو براتون توضیح دادم بقیشو نگفتم...تقریبا برنامتون درسته فقط باید از خونه دوم ارایه مقایسه رو انجام بدی و اینکه باید ی شرطه دیگم برای پیدا کردن دو فضای خالی مثل علامت سوال بذارید..موفق باشید
ahmadsilavi
دوشنبه 18 خرداد 1394, 18:00 عصر
دوست عزیز من فقط قسمت مقایسه شو براتون توضیح دادم بقیشو نگفتم...تقریبا برنامتون درسته فقط باید از خونه دوم ارایه مقایسه رو انجام بدی و اینکه باید ی شرطه دیگم برای پیدا کردن دو فضای خالی مثل علامت سوال بذارید..موفق باشید
دوست عزیز لطف کن ببین ایرادش چیه
چاپ نمیکنه و مقدار تکراری دوم رو فقط تغییر میده میخوام از بین ببرمش اگه امکان داره کدش رو اصلاح کن برام ممنون
data segment str db 20,?,20 dup(?)
ends
stack segment
dw 128 dup(0)
ends
DISPLAY MACRO MSG
ENDM
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov al,00h
mov ah,00h
int 10h ;video mode
lea dx,str
mov ah,0ah
int 21h ;input in key board
lea si,str
mov cx,20
mov al,0d
mov ah,0eh
int 10h
CHECK:
CMP [si],20h
JE next2
CMP [si],'?'
JE next
INC si
next:
INC si
CMP [SI],'?'
JNE next
mov [si],0
jmp print
next2:
inc si
cmp [si],20h
JNE next2
mov [si],'a'
jmp print
LOOP CHECK
mov bh,0
mov dh,10
mov dl,10
mov ah,02
int 10h
print:
MOV AH,9
LEA DX,str
INT 21H
end:
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
masoud.8086
دوشنبه 18 خرداد 1394, 19:51 عصر
دوست عزیز شرط های داخل هر دو next اشتباه است دوتا علامت سوال کنار هم یا اسپیسو پیدا نمیکنه داخل کل رشته جستجو میکنه همچنین برنامه خطا داره باید اخر رشته str دالر بزارید..و نمی دونم چرا از وقفه int 10h /ah,0eh استفاده کردید؟؟برنامه بیشتر از اونی خطا و مشکل داره که بشه اصلاحش کرد..
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.