ورود

View Full Version : سوال: کسی میدونه مشکله این کد چیه



tanzadeh7
سه شنبه 28 مرداد 1393, 21:23 عصر
سلام من دارم یه سیستم عامل طراحی میکنم با اسمبلی حالا کسی میدونه مشکل این کد کجاست


Bits 16
jmp Main
;in = -. out= -

convert_sector:
push bx
push ax
mov bx, ax
mov dx, 0
div WORD [sectorspertrack]
add dl, 01h
mov cl, dl
mov ax, bx
mov dx, 0
div WORD [sectorspertrack]
mov dx, 0
div WORD [sides]
mov dh, dl
mov ch, al
pop ax
pop bx
mov dl, BYTE [bootdrive]
ret

sectorspertrack dw 18
sides dw 0

reset_floppy:
mov ah, 0
mov dl, BYTE[bootdrive]
int 13h
jmp load_root

print:
lodsb
cmp al, 0
je Done
mov ah, 0eh
int 10h
jmp print

Done:
ret

Main:
cli
mov ax, 0x0000
mov ss, ax
mov sp, 0xFFFF
sti

mov ax, 07C0h
mov ds, ax
mov es, ax

mov [bootdrive], dl


mov bx, buffer
mov cl,2
mov ch,0
mov dh,1
mov ah,2
mov al,14
pusha

load_root:
int 13h
jnc loaded_root
call reset_floppy
jmp load_root

loaded_root:
popa
mov di, buffer
mov cx, 224
mov ax, 0
search_loop:
push cx
pop dx
mov si, filename
mov cx, 11
rep cmpsb
je found_file
add ax, 32
mov di, buffer
add di, ax
push dx
pop cx
loop search_loop
int 18h


found_file:
mov ax, WORD [di+15]
mov WORD [FirstSector], ax

mov bx, buffer
call convert_sector
mov ah, 2
mov al, 9
pusha
load_fat:
int 13h
jnc loaded_fat
call reset_floppy
jmp load_fat

loaded_fat:
mov ah, 2
mov al, 1
push ax

load_file_sector:
mov ax, WORD [FirstSector]
mov ax, 31
call convert_sector
mov ax, 2000h
mov es, ax
mov bx, WORD [pointer]

pop ax
push ax

int 13h
jnc calculate_next_sector
call reset_floppy
jmp load_file_sector

calculate_next_sector:
mov ax, [FirstSector]
mov dx, 0
mov bx, 6
mul bx
mov bx, 4
div bx
mov si, buffer
mov si, ax
mov ax, WORD [si]

or dx, dx
jz even

odd:
shr ax, 4
jmp short next_sectors_caculate

even:
and ax, 0FFFh

next_sectors_caculate:
mov WORD [FirstSector], ax
cmp ax, 0FF8
jae end
add WORD [pointer], 512
jmp load_file_sector

end:
pop ax
mov dl, BYTE [bootdrive]
jmp 2000h:0000h


cli
hlt

bootdrive db 0
msg db "Hello world!", 0
filename db "KERNEL BIN"
FirstSector dw 0
pointer dw 0


times 510-($-$$) db 0

dw 0xAA55

buffer: ;byte 513


این ارور رو میده


boot.asm:153: error: expression syntax error

masoud.8086
چهارشنبه 29 مرداد 1393, 00:20 صبح
سلام این کد مشکل نداره من با MASM وTASM ازش OBJ ساختم
ورژن کامپایلرتو عوض کن امکان داره این ارور از اون باشه
موفق باشی.

xman_1365_x
چهارشنبه 29 مرداد 1393, 10:34 صبح
در خط 153 که خطا داده، انتهاش پسوند h نداره
موفق باشی

tanzadeh7
چهارشنبه 29 مرداد 1393, 13:23 عصر
در خط 153 که خطا داده، انتهاش پسوند h نداره
موفق باشی

میشه خط 153 درست شدش رو واسم بزاری من تازه شروع به یادگیری اسمبلی کردم

tanzadeh7
پنج شنبه 30 مرداد 1393, 11:28 صبح
یعنی هیچ کس نمیدونه مشکل این کد چیه:متعجب:

masoud.8086
پنج شنبه 30 مرداد 1393, 12:28 عصر
سلام دوست عزیز این کد مشکل نداره اگر خط 153 ارور میده بخاطر اینکه آخر خط باید h بذاری که به معنای هگز هست البته در بعضی کامپایلرها ارور میده در بعضی نمیده بعدشم ناراحت نشیا جسارتا به قول خودت اگه داری سیستم عاملو طراحی میکنی پس ارور به این سادگی رو باید بدونی چیه؟؟ولی پایین نوشتی من تازه شروع کردم به یادگیری...:متفکر:بیبخیال.. اگه میخوای اسمبلی یاد بگیری باید از پایه قوی باشی(مبناها) بعد اول روی دستورات مسلط بشی و این فقط با تمرین بدست میاد کتاب اسمبلی نیکمهر منبع خوبیا واسه یادگیری اگه سوالی داشتی من در خدمتم..
اینم کد خطا cmp ax, 0FF8 که درستش میشه cmp ax,0FF8h چندتا تایپیک قبل این یه تایپیک به نام ابر پروژهای اسمبلی و یکی دیگه موازی کاری در اسمبلی هست برنامه هاش کاره منه ی نگا بنداز..موفق باشی..

tanzadeh7
پنج شنبه 30 مرداد 1393, 20:44 عصر
سلام دوست عزیز این کد مشکل نداره اگر خط 153 ارور میده بخاطر اینکه آخر خط باید h بذاری که به معنای هگز هست البته در بعضی کامپایلرها ارور میده در بعضی نمیده بعدشم ناراحت نشیا جسارتا به قول خودت اگه داری سیستم عاملو طراحی میکنی پس ارور به این سادگی رو باید بدونی چیه؟؟ولی پایین نوشتی من تازه شروع کردم به یادگیری...:متفکر:بیبخیال.. اگه میخوای اسمبلی یاد بگیری باید از پایه قوی باشی(مبناها) بعد اول روی دستورات مسلط بشی و این فقط با تمرین بدست میاد کتاب اسمبلی نیکمهر منبع خوبیا واسه یادگیری اگه سوالی داشتی من در خدمتم..
اینم کد خطا cmp ax, 0FF8 که درستش میشه cmp ax,0FF8h چندتا تایپیک قبل این یه تایپیک به نام ابر پروژهای اسمبلی و یکی دیگه موازی کاری در اسمبلی هست برنامه هاش کاره منه ی نگا بنداز..موفق باشی..
این کتابی که گفتید رو دانلود کردم. فیلم های اموزش اسمبلی سراغ دارید؟ زیاد تو گوگل سرچ کردم ولی پیدا نکردم.

masoud.8086
پنج شنبه 30 مرداد 1393, 22:18 عصر
سلام اره فیلم آموزش اسمبلی زیاد نیس اونم به فارسی انشاا. در صدد هستم خودم هم ی کتاب اموزش اسمبلی بصورتpdf و هم آموزش فیلم درست کنم (البته اجازشو استادم داده)قضیه کتاب که اینقد سرم شلوغه فعلا منتفیه ولی فیلمو قول میدم تو آینده نزدیک اماده کنم بصورت جلسه ای انشاا.. فعلا درگیر تایپیک کرک نرم افزار با اسمبلیم دارم آماده میکنم ولی سوالی داشتی حتما بپرس مطمین باش کمکت میکنم
در ضمن وبلاگ منم www.emu8086.mihanblog.com (http://www.emu8086.mihanblog.com) برنامه های ساده توش هست ی سر بزن.. دیگه تو تایپیک پیام نذاز پیام خصوصی بفرست اگه کاری داشتی

tanzadeh7
جمعه 31 مرداد 1393, 10:49 صبح
سلامن یه مشکل دیگر دارم بوت لودری که ساختم بوت نمیشه

من با دستورات زیر اونو رو فایل imge رایت میکنم و به نرم افزار Qemu پاس میدم


dd if=boot.bin of=boot.img bs=512


qemu -fda boot.img

در اخر کار نرم افزار Qemu خطا No bootable found رو میده

masoud.8086
جمعه 31 مرداد 1393, 11:07 صبح
فکر کنم فایل مذکور در حفاظت سیستم عامل هست و شما نمیتونی در محیط o /s توش چیزی بنویسی..و خطای شما به این معناست که نمی تونه بوت تیبلو پدا کنه.. موفق باشی.

tanzadeh7
جمعه 31 مرداد 1393, 12:54 عصر
چگونه باید فایل رو در نرم افزار Qemu تست کنم.آیا حتما باید فلاپی داشته باشم؟ کامپیوتر من فلاپی ساپورت نمیکنه باید چیکار کنم. من قبل از کامل کردن بوت لودر تست میکردم و متنی رو که میخواستم نمایش میداد

kernel.programmer
جمعه 31 مرداد 1393, 17:21 عصر
دستوری که برای qemu استفاده کردین مشکلی نداره. پشتیبانی نکردن فلاپی روی سیستم شما هم ارتباطی با qemu نداره چون همه چیزو شبیه سازی میکنه. اگر نخواین از فلاپی استفاده کنید به جای fda- می تونید hda- وارد کنید.

شاید امیجی که درست کردین ایراد داره با یک هگز ادیتور مثل hexdump تو لینوکس یا HxD تو ویندوز چک کنید امیجی که ایجاد شده مشکلی نداشته باشد.

tanzadeh7
جمعه 31 مرداد 1393, 21:52 عصر
این خروجی hexdump هست



0000000 45eb 5053 c389 00ba f700 2d36 8000 01c2
0000010 d188 d889 00ba f700 2d36 ba00 0000 36f7
0000020 002f d688 c588 5b58 168a 0112 12c3 0000
0000030 b400 8a00 1216 cd01 eb13 ac2f 003c 0674
0000040 0eb4 10cd f5eb fac3 00b8 8e00 bcd0 ffff
0000050 b8fb 07c0 d88e c08e 1688 0112 00bb b102
0000060 b502 b600 b401 b002 600e 13cd 0573 c0e8
0000070 ebff 61f7 00bf b902 00e0 00b8 5100 be5a
0000080 0120 0bb9 f300 74a6 830e 20c0 00bf 0102
0000090 52c7 e259 cde8 8b18 0f45 2ba3 bb01 0200
00000a0 5fe8 b4ff b002 6009 13cd 0573 82e8 ebff
00000b0 b4f7 b002 5001 2ba1 b801 001f 43e8 b8ff
00000c0 2000 c08e 1e8b 012d 5058 13cd 0573 60e8
00000d0 ebff a1e3 012b 00ba bb00 0006 e3f7 04bb
00000e0 f700 bef3 0200 c689 048b d209 0574 e8c1
00000f0 eb04 2503 0fff 2ba3 3d01 0ff8 0873 0681
0000100 012d 0200 b0eb 8a58 1216 ea01 0000 2000
0000110 f4fa 4800 6c65 6f6c 7720 726f 646c 0021
0000120 454b 4e52 4c45 2020 4942 004e 0000 0000
0000130 0000 0000 0000 0000 0000 0000 0000 0000
*
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000200


از کجا بفهمم مشکلی داره یا نه

kernel.programmer
جمعه 31 مرداد 1393, 23:47 عصر
برای فهمیدنش کدهارو با سورست مقایسه کن مثلا دو بایت آخر 55AA هست (امضای آخر mbr) آپکدهای اولتم EB 45 که همون jmp Main میشه تا اینجا مشکلی نیست. فقظ این ایمیج اگر فقط همینه یعنی همین ۵۱۲ بایت ایراد داره. نمی دونم یک بار خوندینش ببینین چکار میکنه یا فقط کپی کردنینش :متفکر:

این کد یکسری افستها رو از دیسک (فایل ایمیج) می خونه و چون وجود نداره اررور میده. اگر این ایمیج قراره یه فلاپی باشه باید به اندازه یک فلاپی هم فضا بهش اختصاص بدین.

tanzadeh7
شنبه 01 شهریور 1393, 10:36 صبح
خروجی hexdump رو با سورس مقایسه کردم مشکلی نداشت میشه فایل ها رو تو یه بخش از بنویسی و با کامپیوتر واقعی تست کنی مثلا اطلاعات رو داخل sda3 بنویسم
اینجوری

dd if=boot.bin of=/dev/sda3 bs=1440

update-grub

tanzadeh7
شنبه 01 شهریور 1393, 15:15 عصر
کسی نمیدونه مشکل این بوت لودر چیه که بوت نمیشه