PDA

View Full Version : سوال ds:dx



naderi99_bn
دوشنبه 01 آذر 1389, 16:22 عصر
چطوری میشه کاراکترهای خوانده شده را کنار هم قرار داد تا آنرا بصورت یک رشته ds:dx
برای چاپ آماده کرد ؟

Delphi Coder
دوشنبه 01 آذر 1389, 17:49 عصر
کاراکتر های خوانده شده از کجا؟

tdkhakpur
دوشنبه 01 آذر 1389, 19:02 عصر
چطوری میشه کاراکترهای خوانده شده را کنار هم قرار داد تا آنرا بصورت یک رشته ds:dx
برای چاپ آماده کرد ؟

فرضا اگر داده های شما در داخل فضایی از ram به اسم buff قرار داشته باشد میتوانید آدرس مبدا را با ds به که بصورت assume به محل دیتای شما اشاره دارد بسپارید و آدرس آفست یعنی فاصله از مبدا را به dx مانند زیر

]
assume ds:dateseg
mov ax, dateseg
push ax
pop ds
; اینجا شما داده ها رو از ورودی میگیرید و در بافر قرار میدید.
lea dx, buff

naderi99_bn
سه شنبه 02 آذر 1389, 00:37 صبح
یک داده عددی را از پورت سریال دریافت کردم با int 14 که با هر بار خواندن یک کاراکتر در al قرار میگیره باید کارکترها رو کنار هم در ds:dx قرار بدم تا با int 21 ورودی 9 رشته عدد چاپ بشه

tdkhakpur
پنج شنبه 04 آذر 1389, 22:30 عصر
یک داده عددی را از پورت سریال دریافت کردم با int 14 که با هر بار خواندن یک کاراکتر در al قرار میگیره باید کارکترها رو کنار هم در ds:dx قرار بدم تا با int 21 ورودی 9 رشته عدد چاپ بشه

خب مشکلی زیادی ندارید فقط یک شمارنده مانند bx رو در نظر بگیر و ابتدائا اون رو 0 قرار بده با هر بار خودن از پورت با استفاده از این شمارنده کاراکترها یا داده های دریافتی رو داخل بافر بریزید ولی در انتهای کار زمانی که میخواهید داده را چاپ کنید علامت $ رو آخر بافز قرار بدید مانند زیر.


buff db 1000 dup(?);

mov bx, 0
again:
; اینجا از پورت داده رو بگیرید
mov byte ptre buff[bx], al
inc bx
mov byte ptre buff[bx], '$'
cmp al, '*' ; اینجا حسن ختام داده های ورودی از پورت رو بررسی کنید
jne again

;حالا نوبت چاپ
mov ah, 9
lea dx, buff
int 21h

در فوق فرض بر این شده که انتهای داده دریافتی شما از پورت علامت * هست.
ضمنا اینکه الگوریت فوق کار ساده چاپ داده هایی هست که از پورت بصورت اسکی دریافت میکنید در صورت باینری بودن باید الگوریتم تبدیل به اسکی رو هم بنویسید.