• اگر سمپادی هستی همین الان عضو شو :

    ثبت نام عضویت

ورودی کیبورد :(

  • شروع کننده موضوع شروع کننده موضوع ArmanBadpa
  • تاریخ شروع تاریخ شروع
  • تگ‌ها تگ‌ها
    کرنل

ArmanBadpa

مجهز به ADHD
کنکوری 1406
ارسال‌ها
33
امتیاز
113
نام مرکز سمپاد
شهید بهشتی 2
شهر
نیویورک ، پایتخت استرالیا
سال فارغ التحصیلی
1406
مدال المپیاد
نیاوردم والا
سلام به همگی! من آرمان بادپا هستم و 16 سالمه و تازه وارد این سایت شدم. من مقدار متوسطی از نحوه کار سی پی یو و رجیستر ها و کار با افست و سگمنت ها رو در اسمبلی بلدم جدیدا شروع به طراحی یک هسته سیستم عامل کردم که اسمش CoreShell هست و 16 بیتیه. کدشو پایین براتون قرار میدم تا بررسی کنید. ( بخاطر کامنت نداشتن به بزرگی خودتون ببخشید ) مشکل من اینجاست که میتونم از کیبورد ورودی بگیرم ( این مشکلم نیست یکم جلوتره ) اما نمیدونم چطوری با je و cmp تعریف کنم که وقتی دکمه اینتر فشرده شد یک حلقه کد رو اجرا کنه.
کد:
org 7E00h bits 16 start: mov ah, 06 mov al, 00 mov bh, 07 mov ch, 00 mov cl, 00 mov dh, 24 mov dl, 79 int 10h mov si, kernel_msg .print_loop: lodsb or al, al jz .cis mov ah, 0x0E int 0x10 jmp .print_loop .cis: mov al, [dataline] mov ah, 01 add al, ah mov [dataline],al mov ah, 02 mov bh, 00 mov dh, [dataline] mov dl, 0 int 10h jz .ci mov ah, 02 mov bh, 00 mov dh, [dataline] mov dl, 0 int 10h mov si, command_input .ci: lodsb or al, al mov ah, 0x0E int 0x10 jmp .command_print_loop .command_print_loop: lodsb or al, al jz .input_ci mov ah, 0x0E int 0x10 jmp .command_print_loop .input_ci: mov ah, 02 mov dl,07 int 21h mov ah, 01 int 16h jz .input_ci mov ah, 0 int 16h mov [input_char], al mov si, 0 mov si, input_char jmp .print_input .print_input: lodsb or al, al mov ah, 0x0E int 0x10 jmp .input_ci input_char db "" dataline db 01 ;default input dataline kernel_msg db "CoreShell B&K 16bit was runned, ver 06.06.30", 0 command_input db "CoreShell<:", 0
 
آخرین بار توسط مدیر ویرایش شد:
شرمنده دارم با ویندوز ایکس پی و ایجاد تغییرات در اینسپکتور سایت تایپ میکنم که باگ زیاد داره و متن هام به هم چسبیدن تا دقایقی دیگه لینک فایل کرنلم رو میفرستم
 
سلام به همگی! من آرمان بادپا هستم و 16 سالمه و تازه وارد این سایت شدم. من مقدار متوسطی از نحوه کار سی پی یو و رجیستر ها و کار با افست و سگمنت ها رو در اسمبلی بلدم جدیدا شروع به طراحی یک هسته سیستم عامل کردم که اسمش CoreShell هست و 16 بیتیه. کدشو پایین براتون قرار میدم تا بررسی کنید. ( بخاطر کامنت نداشتن به بزرگی خودتون ببخشید ) مشکل من اینجاست که میتونم از کیبورد ورودی بگیرم ( این مشکلم نیست یکم جلوتره ) اما نمیدونم چطوری با je و cmp تعریف کنم که وقتی دکمه اینتر فشرده شد یک حلقه کد رو اجرا کنه.
کد:
org 7E00h bits 16 start: mov ah, 06 mov al, 00 mov bh, 07 mov ch, 00 mov cl, 00 mov dh, 24 mov dl, 79 int 10h mov si, kernel_msg .print_loop: lodsb or al, al jz .cis mov ah, 0x0E int 0x10 jmp .print_loop .cis: mov al, [dataline] mov ah, 01 add al, ah mov [dataline],al mov ah, 02 mov bh, 00 mov dh, [dataline] mov dl, 0 int 10h jz .ci mov ah, 02 mov bh, 00 mov dh, [dataline] mov dl, 0 int 10h mov si, command_input .ci: lodsb or al, al mov ah, 0x0E int 0x10 jmp .command_print_loop .command_print_loop: lodsb or al, al jz .input_ci mov ah, 0x0E int 0x10 jmp .command_print_loop .input_ci: mov ah, 02 mov dl,07 int 21h mov ah, 01 int 16h jz .input_ci mov ah, 0 int 16h mov [input_char], al mov si, 0 mov si, input_char jmp .print_input .print_input: lodsb or al, al mov ah, 0x0E int 0x10 jmp .input_ci input_char db "" dataline db 01 ;default input dataline kernel_msg db "CoreShell B&K 16bit was runned, ver 06.06.30", 0 command_input db "CoreShell<:", 0
درمورد این پیام:

وقتی از int 16h با ah = 00h استفاده می‌کنی، بایوس بهت دو تا مقدار رجیستر AL و رجیستر AH رو برمیگردونه
AL کد اسکی کلیدیه که فشار دادی
AH اسکن کد مربوط به کلیده

کد اسکی کلید اینتر هم 0Dh هستش و اسکن کد 1Ch داره

پس این شکلی باید تشخیص بدی اگر اشتباه نکنم:
کد:
mov ah, 00h
int 16h

cmp al, 0Dh
je .execute_cmd

کدت هم یک مشکلی که من توش دیدم این بود که شما از int 21h استفاده کردی و این برای داس هستش و تا جایی من میدونم تو محیطی که هیچ سیستم عامل میزبانی وجود نداشته باشه و فقط کرنل شما بخواد ران بشه دردسر ساز میشه
تو اینجور کارا تا جایی من یادم هست فقط از int 10h و int 16h باید استفاده میشد

فکر کنم توی مدیریت بافر ورودی هم مشکل داشته باشه
تا جایی که من کد رو خوندم فکر کنم حلقه دریافت ورودیت هم مشکل داره و نمیتونه همزمان هم ورودی رو از کاربر بگیره هم رو مانیتور نشون بده



من خیلی وقته از اسمبلی دورم و کد اسمبلی نزدم اینا صرفا چیزاییه که از قدیم یادمه، امیدوارم مشکلت حل شه
 
درمورد این پیام:
وقتی از int 16h با ah = 00h استفاده می‌کنی، بایوس بهت دو تا مقدار رجیستر AL و رجیستر AH رو برمیگردونه
AL کد اسکی کلیدیه که فشار دادی
AH اسکن کد مربوط به کلیده
کد اسکی کلید اینتر هم 0Dh هستش و اسکن کد 1Ch داره
پس این شکلی باید تشخیص بدی اگر اشتباه نکنم:
کد:
mov ah, 00h
int 16h
cmp al, 0Dh
je .execute_cmd
کدت هم یک مشکلی که من توش دیدم این بود که شما از int 21h استفاده کردی و این برای داس هستش و تا جایی من میدونم تو محیطی که هیچ سیستم عامل میزبانی وجود نداشته باشه و فقط کرنل شما بخواد ران بشه دردسر ساز میشه
تو اینجور کارا تا جایی من یادم هست فقط از int 10h و int 16h باید استفاده میشد
فکر کنم توی مدیریت بافر ورودی هم مشکل داشته باشه
تا جایی که من کد رو خوندم فکر کنم حلقه دریافت ورودیت هم مشکل داره و نمیتونه همزمان هم ورودی رو از کاربر بگیره هم رو مانیتور نشون بده

من خیلی وقته از اسمبلی دورم و کد اسمبلی نزدم اینا صرفا چیزاییه که از قدیم یادمه، امیدوارم مشکلت حل شه
دست شما درد نکنه مهندس! منم مشکلم دقیقا هم کد کلید اینتر توی اینتراپت بایوس بود. و اره این کدارو از debug ms-dos یاد گرفتم و یکم تازه کارم. البته سیستمم خوب اجرا میشه و همه ورودی ها رو کامل میگیره و روی مانیتور نشون میده و عالی کار میکنه فقط کد کلید اینتر رو بلد نبودم. اینجور کدها رو از کجا پیدا کنم؟
 
آخرین ویرایش:
دست شما درد نکنه مهندس! منم مشکلم دقیقا هم کد کلید اینتر توی اینتراپت بایوس بود. و اره این کدارو از debug ms-dos یاد گرفتم و یکم تازه کارم. البته سیستمم خوب اجرا میشه و همه ورودی ها رو کامل میگیره و روی مانیتور نشون میده و عالی کار میکنه فقط کد کلید اینتر رو بلد نبودم. اینجور کدها رو از کجا پیدا کنم؟
https://www.asciitable.com/
https://theasciicode.com.ar/
https://www.ascii-code.com/
https://www.plantation-productions.com/Webster/www.artofasm.com/DOS/pdf/apndxc.pdf
https://www.scs.stanford.edu/10wi-cs140/pintos/specs/kbd/scancodes-9.html
https://kbdlayout.info/kbdusx/scancodes
https://github.com/stu/xi8088_bios/blob/master/scancode.inc
https://en.wikipedia.org/wiki/INT_16H
و...
 
Back
بالا