PDA

View Full Version : از ورودی عدد 8 بیتی را بصورت باینری بخواند



csharpprogramer88
شنبه 21 آبان 1390, 22:51 عصر
سلام

چطور میتونم یک عدد 8 بیتی را بصورت باینری بخوانم ؟

با تشکر

xman_1365_x
یک شنبه 22 آبان 1390, 07:22 صبح
1-با وقفه هایی که اکو نمیکنه کارکتر رو میخونی بررسی میکنید 0 یا 1 باشه اگر بود نمایش میدین(با اکو) نبود مجددا عدد میگیرین یا پیغام خطا میدین
2 در صورتی که کاراکتر 0 یا 1 بود به یه ریجستر با مقدار اولیه 0 شیفت میکنیدش(میدونید که باید کری رو یک یا صفر کنید و روتیت کنید با شیفت بیتی مقدار 0 وارد میشه!!! )
3-مشخصه که باید توی حلقه باشه که 8 بار تکرار شه
یک نمونه خروجی باینری هم فایل 5_sample.asm در emu8086 هست.
موفق باشی

csharpprogramer88
سه شنبه 24 آبان 1390, 08:29 صبح
1-با وقفه هایی که اکو نمیکنه کارکتر رو میخونی بررسی میکنید 0 یا 1 باشه اگر بود نمایش میدین(با اکو) نبود مجددا عدد میگیرین یا پیغام خطا میدین
2 در صورتی که کاراکتر 0 یا 1 بود به یه ریجستر با مقدار اولیه 0 شیفت میکنیدش(میدونید که باید کری رو یک یا صفر کنید و روتیت کنید با شیفت بیتی مقدار 0 وارد میشه!!! )
3-مشخصه که باید توی حلقه باشه که 8 بار تکرار شه
یک نمونه خروجی باینری هم فایل 5_sample.asm در emu8086 هست.
موفق باشی
سلام
تشکر که جواب دادی ولی من حرفه ای نیستم و منظورتونو از " با وقفه هایی که اکو نمیکنه کارکتر رو میخونی " نمیفهمم
" (میدونید که باید کری رو یک یا صفر کنید و روتیت کنید با شیفت بیتی مقدار 0 وارد میشه!!! ) " یه چیزهایی میدونم اگه ممکنه یه توضیح بدید
" یک نمونه خروجی باینری هم فایل 5_sample.asm در emu8086 هست. " این فایل را چطوری پیدا کنم ؟

با تشکر که جواب دادید

xman_1365_x
سه شنبه 24 آبان 1390, 09:25 صبح
منظورتونو از " با وقفه هایی که اکو نمیکنه کارکتر رو میخونی " نمیفهمم .

دستورات مورد نیاز رو مینویسم کافیه کاردکردشو مطالعه کنید و الگورتیم کارم که توضیح دادم

بدون اکو یا همون ورودی میگره اما نمایش نمیده توی صفحه

INT 16h / AH = 00h - get keystroke from keyboard (no echo).
return:
AH = BIOS scan code.
AL = ASCII character.
(if a keystroke is present, it is removed from the keyboard buffer).

یا

INT 21h / AH=7 - character input without echo to AL.
if there is no character in the keyboard buffer, the function waits until any key is pressed.

example:

mov ah, 7
int 21h

برای نمایش کاراکتر از وقفه زیر استفاده کنید

INT 21h / AH=1 - read character from standard input, with echo, result is stored in AL.
if there is no character in the keyboard buffer, the function waits until any key is pressed.

example:

mov ah, 1
int 21h



" (میدونید که باید کری رو یک یا صفر کنید و روتیت کنید با شیفت بیتی مقدار 0 وارد میشه!!! ) " یه چیزهایی میدونم اگه ممکنه یه توضیح بدید

برای تنظیم کری
clc
stc
برای روتیت از دستور زیر استفاده کنید
rcl


" یک نمونه خروجی باینری هم فایل 5_sample.asm در emu8086 هست. " این فایل را چطوری پیدا کنم ؟

برای دسترسی به مثال های امولاتور موقع اجرا برنامه در تولبار روی examples کلیک کنید یا دستی به مسیر نصب شده امولاتور برین

موففق باشی

csharpprogramer88
سه شنبه 24 آبان 1390, 09:32 صبح
دستورات مورد نیاز رو مینویسم کافیه کاردکردشو مطالعه کنید و الگورتیم کارم که توضیح دادم

بدون اکو یا همون ورودی میگره اما نمایش نمیده توی صفحه

INT 16h / AH = 00h - get keystroke from keyboard (no echo).
return:
AH = BIOS scan code.
AL = ASCII character.
(if a keystroke is present, it is removed from the keyboard buffer).

یا

INT 21h / AH=7 - character input without echo to AL.
if there is no character in the keyboard buffer, the function waits until any key is pressed.

example:

mov ah, 7
int 21h

برای نمایش کاراکتر از وقفه زیر استفاده کنید

INT 21h / AH=1 - read character from standard input, with echo, result is stored in AL.
if there is no character in the keyboard buffer, the function waits until any key is pressed.

example:

mov ah, 1
int 21h




برای تنظیم کری
clc
stc
برای روتیت از دستور زیر استفاده کنید
rcl



برای دسترسی به مثال های امولاتور موقع اجرا برنامه در تولبار روی examples کلیک کنید یا دستی به مسیر نصب شده امولاتور برین

موففق باشی
آقا من از اکو هیچی نمیدونم بدون اکو راهی داره؟

xman_1365_x
سه شنبه 24 آبان 1390, 10:25 صبح
آقا من از اکو هیچی نمیدونم بدون اکو راهی داره؟
خوب من نوشتم که بدونین دیگه به زبان ساده گفتم از شما ورودی بگیره نمایش نده روی مانیتور میشه بدون اکو (without echo) و بلعکس با اکو (with echo)
یک مثال میزنم بهتر متوجه شین ،توضیحات به اندازه کافی براش نوشتم،کار این برنامه روشن هست یک کاراکتر ار ورودی میگیره بعد تبدیل میکنه به عدد تا برای محاسبات آماده شه بعد مقدار رو در حافظه با آدرس x قرار میده در مرحله پردازش cf=1 قرار میدم و در دستور بعد یک بیت روتیت میکنم با این کار یک بیت 1 از سمت چپ به داده ورودی شما اضافه میشه و بعد تبدیل به کاراکتر میشه و در نهایت با وقفه روی صفحه نمایش میدیم
در نهایت بعد از اجرا برنامه اگر شما کارکتر 5 رو وارد کنید در خروجی 7 رو نمایش میده


org 100h

;input:
;get keystroke from keyboard (no echo).
mov ah,7
int 21h ;al = input character


sub al,30h ;al = convert char to num


mov x,al ;x=al

;processing:
stc ;set cf=1
rcl x,1 ;rotate 1 bit to left

add x,30h ;convert num to char
;output
mov ah,2
mov dl,x
int 21h ;display your number after proccess


ret

x db 0 ;initialize for begin x=0

end

موفق باشی