ورود

View Full Version : اشکال در وقفه 10h



leila_safa
شنبه 22 مهر 1385, 01:26 صبح
من برای آز سیستم عامل یه پروژه دارم که باید یه دیسکت startupدرست کنم که توش یه برنامه باشه که یه سری کارا رو انجام بده. اول اشکالم:عصبانی++: :عصبانی++: می پرسم بعد سوالامو رو میگم.


اشکالم اینه که من برای نوشتن کلمه file می خوام ازah=0eh و int 10h استفاده کنم که حرف به حرف بنویسه برام. اما مشکلم اینه که برنامه من توی داس خوب ران می شه و جواب درست میده یعنی بهمث رو می نویسه، اما وقتی رو دیسکت می زنم (از آدرس 7c00) و با vmware اجراش می کنم به جای کلمه file چهار تا فضای خالی میده.
اینم برنامم:



.model tiny
.stack 64h
.data

file db 'file'

.code
org 7c00h
main proc far

; clear screen

mov ax,@data
mov ds,ax

mov ax,0
mov ah,06h
mov al,00
mov bh,07h
mov ch,00
mov cl,00
mov dh,18h
mov dl,47h
int 10h

; write menu to page

mov cx,04
mov di,0
lea di,file
mov ah,0eh
mov bh,00h
mov bl,07h

t1 :
mov al,[di]
int 10h
inc di
loop t1
;MOV AX,10H;
;INT 16H;
main endp
end main

اینم وقتی که روی دیسکت می زنم:




C:\TASM>tasm text.asm
Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International

Assembling file: text.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 418k


C:\TASM>tlink text.obj
Turbo Link Version 7.1.30.1. Copyright (c) 1987, 1996 Borland International

C:\TASM>debug text.exe
-r cx
CX 7D38
:
-w cs:7c00 0 0 38

حالا بگین اشکال کارم کجاست؟

سوالامم اینن:

1_من یه لیستی از وقفه های بایوس (فقط بایوس ) می خوام.
2_ ایا وقفه های بایوس با وقفه های داس فرق میکنن؟

plus
شنبه 22 مهر 1385, 02:39 صبح
وقفه ی داس وقفه ی 21h هستش و 10h و بقیه مربوط به BIOS . نمیدونم مشکل کجاست ولی
به هر حال شما میتونی بجای استفاده از وقفه برای چاپ متن مستقیما توی حافظه ی صفحه ی نمایش بنویسی.یعنی اول آدرس صفحه ی نمایش که b800h هست رو (بوسیله ی AX)توی DS قرار بدی و بعد متن رو توش بنویسی.مثلا :





MOV AX, 0B800h
MOV DS, AX
MOV [00h], 'H'
MOV [02h], 'E'
MOV [04h], 'L'
MOV [06h], 'L'
MOV [08h], 'O'


بایت بعد از هر کاراکتر مربوط به صفتشه...

leila_safa
شنبه 22 مهر 1385, 13:16 عصر
دستتون درد نکنه. اینو که خودم هم می دونم. اتفاقا این جوری توی هر دو محیط جواب میده.
رشته هایی که من باید بنویسم طولانیه. یه حرف یه حرف کارم رو راه نمیندازه.

Younes
دوشنبه 24 مهر 1385, 10:08 صبح
با سلام
شما از یک سگمنت استفاده کنید شاید مشکلتون حل شود یعنی رشته هایتان را هم در سگمنت کد تعریف کنید زیرا مشخصا برنامه شما به آدرس اشتباهی مراجعه می کند. در مورد دسترسی مستقیم به حافظه هم لازم نیست یک حرف یک حرف بنویسید فقط کافی است که وقتی می خواهید رشته را تعریف کنید یک در میان بایت property آن را بگذارید و بعد بایک دستور movs آن را در آدرس مورد نظر بنویسید.