آموزش اسمبلی بخش نوزدهم

آموزش اسمبلی بخش نوزدهم

توسط amin8505 | گروه مقاله های آموزشی | 1394/07/18

نظرات 0

 قدم بعدي نوشتن اطلاعات در فايل است . براي نوشتن در فايل ابتدا شناسه فايل را در  BX قرار ميدهيم . موقعيت محلي از حافظه كه داده ها از آن خوانده خواهند شد با DS:DX و تعداد بايتهائي كه بايد منتقل شود با CX مشخص ميشود. در نهايت بايد سرويس 40h را اجرا كنيم . 

AH= 40H

اشاره به بافر DS:DX= 
تعداد بايتها براي نوشتن CX= 
شناسه فايل BX= 

 هر وقت يك فايل را ايجاد يا باز ميكنيم ، بايد آن را ببنديم مقداري از داده هاي  آن كه در حافظه مانده اند در فايل نوشته شده و حافظه اختصاص يافته به آن هم آزاد
 شود . براي بستن يك فايل شناسه فايل را در BX قرار داده و وقفه 21h را با AH=3Eh اجرا ميكنيم . 

مثال : 
 قبلا در برنامه نويسي سيستم تصوير ديديم كه صفحه نمايش VGA در حالت 80x25  شامل 4000 بايت (80x25x2) براي كاراكتر و مشخصه است كه از آدرس 0000:َB800 شروع ميشود . در اين مثال برنامه اي مينويسيم كه كل صفحه نمايش را از اين محل خوانده و در فايل DUMMY.TXT ذخيره كند. 


.MODEL SMALL
.CODE
ORG 100H
START:
JMP MAIN
BUF DB 4000 DUP(0)
FILE DB 'DUMMY.TXT'/0
HANDLE DW 0
MAIN:
LEA DX/FILE
MOV AH/3CH
XOR CX/CX
INT 21H
MOV HANDLE/AX

PUSH ES
MOV AX/DS
MOV ES/AX
LEA DI/BUF
PUSH DS
MOV AX/0B800H
MOV DS/AX
XOR SI/SI
MOV CX/4000
REP MOVSB
POP DS
POP ES

MOV AH/40H
MOV BX/HANDLE
MOV CX/4000
LEA DX/BUF
INT 21H

MOV AH/3EH
INT 21H

INT 20H
END START



 ما همچنين ميتوانيم داده هاي يك فايل را بخوانيم و در محل خاصي از حافظه (معروف  به Buffer) قرار دهيم . براي خواندن از فايل سرويس 3Fh را با اين پارامترها بكار ميبريم . 
AH=3FH
شناسه فايل BX= 
تعداد بايتها براي خواندن CX= 
آدرس بافر براي انتقال داده هاDS:DX= 

 مثال : حالا برنامه اي مينويسيم كه فايل DUMMY.TXT ايجاد شده در مثال قبل را  خوانده و داده هاي آن را به بافر صفحه تصوير منتقل كند . به اين ترتيب محتواي 
 صفحه نمايش كه در هنگام اجراي SAVEFILE.COM ( برنامه مثال قبل ) ذخيره شده بود ، مجددا نمايش داده ميشود. 


.MODEL SMALL
.CODE 
ORG 100H
START:
JMP MAIN
BUF DB 4000 DUP(0)
FILE DB 'DUMMY.TXT'/0
HANDLE DW 0
MAIN:
LEA DX/FILE
MOV AH/3DH
MOV AL/0 ; READ-ONLY
INT 21H
MOV BX/AX

MOV AH/3FH
MOV CX/4000
LEA DX/BUF
INT 21H

LEA SI/BUF
PUSH ES
MOV AX/0B800H
MOV ES/AX
XOR DI/DI
MOV CX/4000
REP MOVSB
POP ES

MOV AH/3EH
INT 21H

INT 20H
END START

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر