Бидний өгхийг дурлаад хичээгээд бэлдээд байдаг IT-н суурь шалгалтыг Монголд зөвхөн C++ , JAVA хэл дээр авдаг бол. Харин Японд үүн дээр нэгмэгдээд COBOL , Assembler дээр өгч болдог юм байна.
Заримдаа диск болон файлтай ажиллахад JAVA хэл нь аюулгүй байдлын үүднээс энэ талын асуудыг C дээр бичигдсэн бэлэн функцууд дуудан орлуулж ажиллуулдаг. Програм зохиогч хөгжүүлэгч нар файлтай ажиллах системын функцууд руу нэвтэрхэд нилээдгүй саад бэрхшээл учирдаг дутагдалтай байдаг билээ.
Аа харин WINDOWS -н үйлдлийн систем дээр ажиллаж байх явцад зарим нэг яв цав баригдсан зарим С хэлний функц процедурууд нь анхлан суралцагч миний хувьд нилээн барьцадмал юм шиг санагдсан.
Энэхүү алдааг өөрийхөөрөө заримдаа орлуулан нэмэн дэлгэрүүлэх шаардлага гардаг нь мэдээж хэрэг тиймээс энэ талаар сонирхдог С хэлний кодерууддаа зориулж жаахан ч гэсэн хэрэг болох болвуу гээд өөрийн туршиж хэрэглэж үзсэн хэдэн коде сийрүүлье.
16bit Assembler’s compiler with source files name length must be 8 character.
Addressing
1) Регистрээр Ex: xor al,ah
2) Утгаар Sub al,30
3) Шууд Mov count,4 Шилжлэг хаяг =16 бит хаяг
4) регистрээр дамжуулан шууд бусаар
mov bx,[si] шилжлэг хаяг = [si/di/bx]
5) индекс mov cx,row[di] шилжлэг хаяг = [si/di]+8/16 бит хаяг
6) base addressing mov dx,6[bp] шилжлэг хаяг = [bx/bp]+8/16 бит хаяг
7) base indexed addressing шилжлэг хаяг = [bx/bp] +[si/di]+8/16 бит хаяг
8) I/O port addressing al,40h
Memory type
· Tiny – near үсрэлт дуудалтууд хэрэглэгдэнэ. Бүх санах ой 64k эзэлдэг.
· Small – near үсрэлт дуудалтууд хэрэглэгдэнэ. Коде сегмент, өгөгдлийн болон стек сегментүүд мөн 64k эзлэх боломжтой.
· Medium – коде сегмент 1М өгөгдлийн болон стек сегментүүд 64к байт санах ойг хэрэглэх боломжтой. Кодонд far, өгөгдөл болон стек сегментүүдтэй харцахдаа near үсрэлт дуудалт ашиглана.
· Compact – medium-эсрэг
· Large – коде болон стек сегментэд 1М, far үсрэлт дуудалтууд хэрэглэх боломжтой.
· Huge – far үсрэлт дуудалтыг өгөгдөл болон кодод хэргэлэнэ.
(near үсрэлт гэдэг нь нэг сегмент дотор буюу 64k)
Data declaretion
DB DEFINE BYTE - 1b
DW DEFINE WORD - 2b
DD DEFINE DOUBLE WORD - 4b
DQ DEFINE QUAD WORD - 8b
DT DEFINE TEN BYTES - 10b
EQU equal - none
- Hexadecimal – ends with H
- Binary – ends with B
- Octal – ends with Q
- Decimal – ends with D or none
Intterrupt
Intterrupt sys/num address
Counter/timer (8253) 8 20-23 high maskable
Keyboard 9 24-27 |
Extra a 28-2b |
Serial port1 b 2c-2f |
Serial port2 c 30-33 |
Hard disk d 34-37 |
Floppy disk e 37-3b |
Printer f 3c-3f low maskable
-system interrupt: техникийн (гар, дэлгэц г.м), программын (BIOS 10-1F),DOS 20-3F
-users interrupt: none definition (60-6f)
void clrscr()
{
asm{
mov ah,6
mov al,0
mov bh,70h
mov bl,0
mov cx,0
mov dx,184fh
int 10h
}
}
void print(char *msg)
{
asm{
mov ah,9
mov dx,msg
int 21h
}
}
void gotoxy(int x,int y)
{
asm{
mov bh,0
mov dx,y
mov ax,x
mov dh,al
mov ax,200h
int 10h
}
}
Гартай ажиллах
char advencedKeyFlag()
{
char a=0;
asm{
mov ah,2
//get keyboard flag address 0417h
int 16h //bios
//return al
mov a,al
}
/*switch(a)
{
case 2^7: insert
case 2^6: caps lock
case 2^5: numberic lock
case 2^4: scroll lock
case 2^3: alt/shift
case 2^2: ctrl/shift
case 2^1: left shift
case 2^0: rigth shift
}
*/
return a;
}
int getKey()
{
//tovch darhiig huleene
int a;
asm{
mov ah,0
int 16h
mov a,ax
//return al,ASCII
// ah,SCAN
// nemelt uuregtei tovch daragdsan bol al,0
}
return a;
}
int getKey1()
{
//tovch darhiig huleehgui
int a;
asm{
mov ah,1
int 16h
mov a,ax
//return al,ASCII
// ah,SCAN
// nemelt uuregtei tovch daragdsan bol al,0
}
return a;
}
void printl(char *msg,int len)
{
asm{
mov ah,40h//output display extended type
mov bx,01 //out display type mode
mov cx,len //max length
mov dx,msg//disarea
int 21h
}
}
void insertl(char *area,int max)
{
asm{
mov ah,3fh
mov bx,01h
mov cx,max
mov dx,area
int 21h
}
}
Desplay type
Monochrom – хар цагаан дэлгэц 4к дэлгэцийн буфертэй. Start Address: b0000h
2к 25*80 тэмдэгт
2к анивчилт, урвуу видео горим, анивчилт, нарийвчлал, доогуур зураас заах аттрибут зэрэг орно.
Colorr/Graphics monitor adapter – Start Address: b8000h
16к өнгөт дэлгэцийн санах ой, 8к тэмдэгтүүд, 8к тэмдэгтүүдийн аттрибутад хэрэглэгдэнэ.
80*25 өнгөт дэлгэцийн адаптер нь 4к хэмжээтэй 4хуудас хадгална.
40*25 баганатай форматтай ажиллах адаптер нь 2к хэмжээтэй 8хуудас хадгална.
Enhanced graphics adapter – 320*200, 640*200,640*350 гэсэн 3 горимтой. өнгөт дэлгэцийн горим нь текст ба график 2 горимтой.
Graphic mode
CGA: 1. 160pixel(picture elements) 100row. 1pixel –г 4bite-р 16 өнгө харуулна.
2. 320 pixel 200row. 1pixel –г 2bite-р харуулна.
3. 640 pixel 200row. 1pixel –г 1bite –р харуулна. Хар цагаан 16к санах ой.
Дэлгэций аттрибутыг 10h тасалдал ашиглан өөрчилж болно. Горит тогтоох, тэмдэгтийн аттрибут унших, дэлгэцэнд тэмдэгт мөр хэвлэх үйлдлүүд орно. DOS-21h тасалдал ашиглаж болно. Санах ойд тэмдэгтийн код тэгш хаяг дээр түүнд харгалзах код нь сондгой хаяг дээр байрлана.
Горим тогтоох үед курсор алга болдог тул 10h тасалдлын 2-р функцаар байрлуулдаг.
void graphic(char a)
{
asm{
mov ah,0 //delgetsiin gorim togtooh
mov al,a
/*
switch(al)
{
case 00: 40*25 har tsagaan text
case 01: 40*25 16 ongotoi text
case 02: 80*25 har tsagaan text
case 03: 80*25 16 ongotoi text
case 04: 320*200 4ongotoi graphic
case 05: 320*200 har tsagaan graphic
case 06: 640*200 har tsagaan graphic
case 07: 80*25 har tsagaan standart
case 0dh: 320*200 16 ongotei EGA graphic
case 0eh: 640*200 16 ongotei EGA graphic
case 0fh: 640*350 har tsagaan EGA graphic
case 10h: 640*350 64 Ongotoi EGA graphic
}
*/
int 10h //bios
}
}
void putchar(char *a,int len)
{
asm{
mov ah,13h
mov al,3
/*
switch(al)
{
case 0:atribut hereglene kursor shiljuulehgui
case 1:atribut hereglene kursor daraagiin bairlald shiljuulne
case 2:ehleed temdegt daraa ni attribut kusor shiljuulehgui
case 3:ehleed temdegt daraa ni attribut kusor shiljuulene
}
*/
mov bh,0//choise page number
lea bp,a//es:bp temdegtiin hayag
mov cx,len//repeat type
mov dx,0//start point
int 10h
}//sain oilgoogui!
}
void putchar1(char cc)
{
asm{
mov ah,0ah//cursoriin bairlald temdegtiig attributgui hevlene
mov al,cc //character
mov bh,00//choise page#
mov cx,1 //repeat
int 10h//bios
}
}
void putchar2(char cc)
{
asm{
mov ah,09h//cursoriin bairlald temdegtiig attributgui hevlene
mov al,cc //character
mov bh,00//choise page#
mov bl,01000011b //attribut iRGBiRGB
mov cx,1 //repeat
int 10h//bios
}
}
long getcursor()
{
long a;
asm{
mov ah,03
mov bh,0//page#
int 10h
//return row dh
//return col dl
//return ch cursor start point
//return cl cursor start point
mov word ptr a,dx
mov word ptr+2 a,cx
}
return a;
}
void setCursorSize(short int tp,short int tl)
{
asm{
mov ah,1 //engiin cursor '|' or '_' helbertei baidag
mov ch,tp //baga 5bited deed tal
mov cl,tl //baga 5bited dood tal
//if monochrom then max_size(0,13)
//else max_size(0,7)
int 10h
}
}
int readchar()
{
int a;
asm{
mov ah,8 //cursoriin bairlaldah attribut temdegt unshina
mov bh,0 //page#
int 10h
//return al character
//return ah attribut
mov a,ax
}
return a;
}
void setFontColor(char color,boolean t)
{
asm{ //delgetsiin huree bolon ar fonii ongo bl registriin utgaar togtoono
mov ah,0bh
mov bh,t
/*if bh then pale togtoono
else delgetsiin huree bolon ar fonii ongo tavina*/
mov bl,color //0<=bl<=0fh
int 10h
}//gehdee ajilaagui
}
No comments:
Post a Comment