ورود

View Full Version : سورس ماکروهای آماده برای اسمبلی



tdkhakpur
شنبه 26 اردیبهشت 1388, 23:20 عصر
سلام دوستان این ماکروها رو سالها پیش برای کارهای خودم آماده کرده بودم و حالا در اختیار شما عزیزان قرار میگیره. همگی موفق باشید.


;-- MACRO LIBERERY FILE ---------------------------------------------------;
; EXIST THIS FILE: IN DATE 1377/9/3 ;
; Designer : HUSHANG KHAKPUR ;
; About This File: ;
; : this file contain macro to writeing easy programs ;
; in asembele language. ;
; there are many information with this macros to use them.;
;--------------------------------------------------------------------------;
;;;;;;;;;;;;;;;;;;;;;;;; MACRO DISCRIPTURE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
;º1)FOR ENDFOR : to creat a ring º
;º2)CLRSCR : clear the screen º
;º3)GOTOXY : set cursor to location (x,y) º
;º4)GETXY : get location of (x,y) º
;º5)PUTCHAR : put a character in to screen º
;º6)IF_ ENDIF_ : º
;º7)SAVESCR : save a rect of screen in to buffer º
;º8)PUSHALL : push all registers in to stack º
;º9)POPALL : POP all registers from in stack º
;º10)SAVESCR : save the current scren buffer º
;º11)PUTSCR : put cantain of the screen that saved by SAVESCR macro º
;º12)COLORSET : define color bytes º
;º13)SENDPORT : send to COM1 & COM2 2 BYTE º
;º14)GETPORT : get from COM1 & COM2 2 BYTE º
;º15)CLRPORT : clear teh COM1 & COM2 by zero º
;º16)READDISK : read fisical disk º
;º17)READBPB : read the data of block parameter dios of disk º
;º18)RESET : reset the disk º
;º19)DELAY : time delay º
;º20)DECIMAL : chenge number in to decimal and sen add of buff via bp º
;º21)PRINTB : print the buffer that send his address º
;º22)PRINTS : print the a string º
;º23)SETVECTOR : set the intrupt vector and save it address º
;º24)RETURN_DK : return the pressed devoloped char º
;º25)SETKEYS : define the devoloped variables º
;º26)PUT : put the word avriable into othe word variable º
;º27)KEEP : resident the file º
;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;
;;=== FOR ENDFOR ================================================== ========;
; This Macro Has No Need To Another Macros.....
; OFFSE_ Is a Variable Word For Refrence IP......
; FIRST_ Is Start Number .........................
; End_ Is End Number ................................
;EXAMPLE:
;;;;;;;;; X1 dw 3
;;;;;;;;; X2 dw 20
;;;;;;;;; offset_ dw ?
;;;;;;;;; FOR offset_, X1, X2
;;;;;;;;; ..........your program to get a crash in ring............
;;;;;;;;; ENDFOR offset, X1, X2
FOR MACRO OFFSE_, FIRST_, END_ ; <---<<<>>>
LOCAL LABEL_ , EXIT_
PUSH BX
MOV BX ,OFFSET LABEL_
MOV WORD PTR OFFSE_ ,BX
POP BX
LABEL_:
ENDM
ENDFOR MACRO OFF_, FIRST_, END_ ; <---<<<>>>
LOCAL LABEL_
ADD WORD PTR FIRST_,1
PUSH BX
PUSH DX
MOV DX, END_
MOV BX, FIRST_
CMP BX, DX
POP DX
POP BX
JG LABEL_
JMP OFF_
LABEL_:
ENDM
;---------------------------------------------------------------------------;
;;== CLEAR SCREEN ================================================== ========;
; This Macro Needs To (FOR ENDFOR) Macros.....
; COLOR Is COLOR Of CHAR ...........................................
; BKCOLOR Is BACKCOLOR Of CHAR ..........................................
CLRSCR MACRO COLOR, BKCOLOR
LOCAL LABEL_ , I , J , x2 , y2 , x1 , y1
JMP LABEL_
I DW ?
J DW ?
x1 DW 0
Y1 DW 0
x2 dW 79
y2 dW 24
LABEL_:
FOR J, y1, y2;----------------------;
MOV word ptr x1, 0;---------------; ;
FOR I, x1, x2;------------------; ;
PUTCHAR x1, y1, 32, COLOR, BKCOLOR ; ;
ENDFOR I, x1, x2;------------------; ;
ENDFOR J, y1, y2;----------------------;
ENDM
;---------------------------------------------------------------------------;
;;== GOTOXY ================================================== ==============;
; This Macro Has No Need To Another Macros.....
; X(BYTE) Is X Postion Of Screen .....................
; Y(BYTE) Is Y Postion Of Screen ......................
GOTOXY MACRO X ,Y
PUSH AX
PUSH BX
PUSH DX
MOV DL ,BYTE PTR X
MOV DH ,BYTE PTR Y
MOV BH ,0
MOV AH ,2
INT 10h
POP DX
POP BX
POP AX
ENDM
;---------------------------------------------------------------------------;
;;== GetXY ================================================== ===============;
; This Macro Has No Need To Another Macros.....
; X (BYTE) Is x Postion Of Screen .....................
; Y (BYTE) Is y Postion Of Screen ......................
GETXY MACRO X , Y
PUSH AX
PUSH BX
PUSH DX
MOV BH ,0
MOV AH ,3
INT 10h
MOV BYTE PTR X ,DL
MOV BYTE PTR Y ,DH
POP DX
POP BX
POP AX
ENDM
;---------------------------------------------------------------------------;
;;== PUTCHAR ================================================== =============;
; x1 (WORD) Is x Postion Of Screen ............................
; y1 (WORD)Is y Postion Of Screen ..............................
; CHAR Is One Character......................................... ..
; COLOR Is COLOR Of CHAR ...........................................
; BKCOLOR Is BACKCOLO Of CHAR ..........................................
PUTCHAR MACRO X, Y, CHAR, COLOR, BKCOLOR
LOCAL LABEL_ , WRD
JMP LABEL_
WRD DW ?
LABEL_:
PUSH AX
PUSH BX
PUSH DX
PUSH ES
MOV AX, X
MOV BX, 2
MUL BX
MOV WORD PTR WRD ,AX
MOV AX, Y
MOV BX, 160
MUL BX
ADD WORD PTR WRD ,AX
MOV BX, 0b800h
PUSH BX
POP ES
MOV BX, WRD
MOV DL, CHAR
MOV DH, COLOR
OR DH, BKCOLOR
MOV WORD PTR ES:[BX] ,DX
POP ES
POP DX
POP BX
POP AX
ENDM
;---------------------------------------------------------------------------;
;;== IF_ ENDIF_ ================================================== =========;
; This Macros Has No Need To Another Macros..............
; NOTE :................................................. ..
; This Macro Change DX , BX , BP......................
; The ARG_1 And ARG_2 Are Tow Words ,And So ARG_0 is...
; One Of This Symbols ( >=< )...........................
; EXAPMPLE :................................................. ....
;;;;;;;;;;;;M DB 15
;;;;;;;;;;;;N DB 14
;;;;;;;;;;;;
;;;;;;;;;;;;IF_ M,'=',N
;;;;;;;;;;;;ENDIF_
;;;;;;;;;;;;
;;;;;;;;;;;;IF_ M,'>',N
;;;;;;;;;;;;ENDIF_
;;;;;;;;;;;;
;;;;;;;;;;;;IF_ M,'<',N
;;;;;;;;;;;;ENDIF_

IF_ MACRO ARG_1 , ARG_0 , ARG_2
LOCAL VAR , EXIT , JMP_1 , NOT_E , LOOP1 , E , G , L , START
MOV DL ,ARG_0
CMP DL ,'='
JE E
CMP DL ,'>'
JE G
CMP DL ,'<'
JE L
JMP EXIT
E:
MOV DX ,ARG_1
CMP DX ,ARG_2
JE EXIT
JMP START
G:
MOV DX ,ARG_1
CMP DX ,ARG_2
JG EXIT
JMP START
L:
MOV DX ,ARG_1
CMP DX ,ARG_2
JL EXIT
START:
LEA BX ,EXIT
JMP JMP_1
VAR DB "ENDIF"
JMP_1:
MOV CX ,5
LEA BP ,VAR
LOOP1:
MOV DL ,BYTE PTR [BX]
CMP DL ,BYTE PTR [BP]
JNE NOT_E
INC BP
INC BX
LOOP LOOP1
JMP BX
NOT_E:
INC BX
JMP JMP_1
EXIT :
ENDM
ENDIF_ MACRO
LOCAL VAR , EXIT
JMP EXIT
VAR DB "ENDIF"
EXIT:
ENDM
;---------------------------------------------------------------------------;
;;== PUSH ALL REGISTERS ================================================== ==;
; This Macro Needs To (GOTOXY) Macros.......................
PUSHALL MACRO
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
PUSH ES
PUSH BP
PUSH DI
PUSH SI
ENDM
;---------------------------------------------------------------------------;
;;== POP ALL REGISTERS ================================================== ==;
; This Macro Needs To (GOTOXY) Macros.......................
POPALL MACRO
POP SI
POP DI
POP BP
POP ES
POP DS
POP DX
POP CX
POP BX
POP AX
ENDM
;---------------------------------------------------------------------------;
;;== SAVE SCREEN ================================================== =========;
; This Macro Needs To (FOR ENDFOR) Macros...........................
; x1 (WORD) Is x Left Top Postion Of Screen ............................
; y1 (WORD) Is y Left Top Postion Of Screen ..............................
; x2 (WORD) Is x Right Bottom Postion Of Screen ............................
; y3 (WORD) Is y Right Bottom Postion Of Screen ..............................
; BUFFER Is The Image That Identufier In To Screen...........................
SAVESCR MACRO X1, Y1, X2, Y2, BUFFER
LOCAL JMP_1, X_, I, J, WRD,L1,L2,L3,L4
JMP JMP_1
X_ DW X1
I DW ?
J DW ?
WRD DW ?
L1 DW ?
L2 DW ?
L3 DW ?
L4 DW ?
JMP_1:
MOV DX, X1
MOV L1, DX
MOV DX, X2
MOV L2, DX
MOV DX, Y1
MOV L3, DX
MOV DX, Y2
MOV L4, DX
MOV BP, 0
MOV BX, 0B800H
MOV ES, BX
FOR I, Y1, Y2;---------------------------;
MOV DX, X1 ;
MOV WORD PTR X_ ,DX ;
FOR J, X_, X2;--------------------; ;
MOV AX, X_ ; ;
MOV BX, 2 ; ;
MUL BX ; ;
MOV WORD PTR WRD, AX ; ;
MOV AX, Y1 ; ;
MOV BX, 160 ; ;
MUL BX ; ;
ADD WORD PTR WRD, AX ; ;
MOV BX, WRD ; ;
MOV DX, ES:[BX] ; ;
MOV WORD PTR BUFFER[BP], DX ; ;
ADD BP, 2 ; ;
ENDFOR J, X_, X2;--------------------; ;
ENDFOR I, Y1, Y2;---------------------------;
MOV DX, L1
MOV X1, DX
MOV DX, L2
MOV X2, DX
MOV DX, L3
MOV Y1, DX
MOV DX, L4
MOV Y2, DX
ENDM
;---------------------------------------------------------------------------;
;;== PUT SCREEN ================================================== ==========;
; This Macro Needs To (FOR ENDFOR) Macros...........................
; x1 (WORD) Is x Left Top Postion Of Screen ............................
; y1 (WORD) Is y Left Top Postion Of Screen ..............................
; x2 (WORD) Is x Right Bottom Postion Of Screen ............................
; y3 (WORD) Is y Right Bottom Postion Of Screen ..............................
; BUFFER Is The Image That Identufier In To Screen.............................
PUTSCR MACRO X1, Y1, X2, Y2 , BUFFER
LOCAL JMP_1, X_, I, J, CHAR, COLOR, BKCOLOR,L1,L2,L3,L4
JMP JMP_1
X_ DW X1
I DW ?
J DW ?
CHAR DB ?
COLOR DB ?
BKCOLOR DB ?
L1 DW ?
L2 DW ?
L3 DW ?
L4 DW ?
JMP_1:
MOV DX, X1
MOV L1, DX
MOV DX, X2
MOV L2, DX
MOV DX, Y1
MOV L3, DX
MOV DX, Y2
MOV L4, DX
MOV BX, 0B800H
MOV ES, BX
MOV BP, 0
FOR I, Y1, Y2;---------------------------;
MOV DX, X1 ;
MOV WORD PTR X_ ,DX ;
FOR J, X_, X2;--------------------; ;
MOV DX, BUFFER[BP] ; ;
PUSH DX ; ;
MOV BYTE PTR CHAR, DL ; ;
AND DH ,7 ; ;
MOV BYTE PTR COLOR, DH ; ;
POP DX ; ;
AND DH ,112 ; ;
MOV BYTE PTR BKCOLOR, DH ; ;
PUTCHAR X_, Y1, CHAR, COLOR, BKCOLOR; ;
ADD BP, 2 ; ;
ENDFOR J, X_, X2;--------------------; ;
ENDFOR I, Y1, Y2;---------------------------;
MOV DX, L1
MOV X1, DX
MOV DX, L2
MOV X2, DX
MOV DX, L3
MOV Y1, DX
MOV DX, L4
MOV Y2, DX
ENDM
;---------------------------------------------------------------------------;

;;== INCLUDE COLORS ================================================== ======;
; This Macros Has No Need To Another Macros..............
; NOTE :................................................. ..
; You Must Use This Macro Just Once....................
COLORSET MACRO
LOCAL JMP_1
JMP JMP_1
CH_WITH DB 7
CH_BLACK DB 0
CH_BLUE DB 1
CH_RED DB 4
CH_GREEN DB 2
BK_WITH DB 112
BK_BLACK DB 0
BK_BLUE DB 16
BK_RED DB 64
BK_GREEN DB 32
JMP_1:
ENDM
;---------------------------------------------------------------------------;
;;== SEND BYTE TO PORT 888 DECIMAL =========================================;
; This Macros Need (END FOR ) Macros.............................
; DATA(BYTE) Is data (WORD) That Will Be Send........................
; MESSAGE (BYTE) Is message (WORD) That Will Be Send........................
SENDPORT MACRO MESSAGE, DATA
; MOV DX, 2F8H ;----------;
; MOV AH, BYTE PTR DATA ; SEND TO COM2
; OUT DX, AX;-------------;
; MOV DX, 3F8H;-----------;
; MOV AH, BYTE PTR MESSAGE; SEND TO COM1
; OUT DX, AX;-------------;
MOV AL, BYTE PTR DATA
MOV AH, BYTE PTR MESSAGE
MOV DX, 888H
OUT DX, AX
ENDM
;---------------------------------------------------------------------------;
;;== GET PORT 888 DECIMAL CANTAIN ==========================================;
; This Macros Has Not Need Macros...............................
; DATA (BYTE) Is A Byte That Far Station Send........................
; MESSAGE (BYTE) Is A WORD That Far Station Send........................
GETPORT MACRO MESSAGE, DATA
; MOV DX, 2F8H;-----------------;
; IN AX, DX ; GET FROM COM2
; MOV BYTE PTR DATA , AH;-------;
; MOV DX, 3F8H;-----------------;
; IN AX, DX ; GET FROM COM1
; MOV BYTE PTR MESSAGE, AH;-----;
MOV DX, 888H
IN AX, DX
MOV BYTE PTR MESSAGE, AH
MOV BYTE PTR DATA, AL
ENDM
;----------------------------------------------------------------------------;
;;== CLEAR PORT 888 DECIMAL CANTAIN =========================================;
; This Macros Has Not Need Macros...............................
CLRPORT MACRO
; MOV DX, 2F8H
; MOV AX, 0
; OUT DX, AX
; MOV DX, 3F8H
; MOV AX, 0
; OUT DX, AX
MOV DX, 888H
MOV AX, 0
OUT DX, AX
ENDM
;----------------------------------------------------------------------------;
;;== READ DISK ================================================== ============;
; This Macros Has Not Need Macros...............................
; DRIVE (WORD) Number Of Driver ..................................
; lLOGIC_SECTOR (WORD) Number Of First Sector ........................
; BUFFER(WORD) Is Image To Fill By Data Of sector..............................
; BPB (WORD) Is Image That Refer To Bios Block Parametr Of Disk...................
READDISK MACRO DRIVE, LOGIC_SECTOR, BUFFER, BPB
LOCAL JMP_1 , HEAD, SIALNDER, SECTOR, HEAD_COUNT, TRACK, SEC_PER_TRACK
JMP JMP_1
HEAD DB 0
TRACK DB 0
SECTOR DB 0
HEAD_COUNT DW ?
SEC_PER_TRACK DW ?
JMP_1:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH ES
MOV DX, WORD PTR BPB[1AH]
MOV WORD PTR HEAD_COUNT, DX
MOV DX, WORD PTR BPB[18H]
MOV WORD PTR SEC_PER_TRACK, DX
;-- set head, silander, sector
MOV AX, LOGIC_SECTOR ;---------;
MOV BX, SEC_PER_TRACK ;
DIV BL ;
MOV AH, 0 ;
MOV BX, HEAD_COUNT ; ;GET HEAD
DIV BL ;
MOV BYTE PTR HEAD, AH;---------;
MOV AX, LOGIC_SECTOR ;---------;
MOV BX, SEC_PER_TRACK ;
DIV BL ;
MOV AH, 0 ;
MOV BX, HEAD_COUNT ; ;GET TRACK
DIV BL ;
MOV BYTE PTR TRACK, AL;--------;
MOV AX, LOGIC_SECTOR ;--------;
MOV BX, SEC_PER_TRACK ;
DIV BL ; ;GET SECTOR
MOV BYTE PTR SECTOR, AH ;
ADD BYTE PTR SECTOR, 1;--------;
;-- read disk --------
MOV AH, 2 ; function of int 13 name.
MOV DL, BYTE PTR DRIVE ; number of drive for read
MOV DH, HEAD ; number of head.
MOV CL, SECTOR ; first sectore number.
MOV CH, TRACK ; number of track or silander
MOV AL, 1 ; count of sectores that read.
MOV BX, OFFSET BUFFER
PUSH DS
POP ES
INT 13H
POP ES
POP DX
POP CX
POP BX
POP AX
ENDM
;----------------------------------------------------------------------------;
;;== CLEAR PORT 888 DECIMAL CANTAIN =========================================;
; This Macros Has Not Need Macros...............................
; DRIVE (WORD) Number Of Driver ..................................
; BUFFER Is Image To Fill By Data Of sector..............................
READBPB MACRO DRIVE, BUFFER
PUSH BX
PUSH CX
PUSH DX
PUSH ES
;-- read disk --------
MOV AH, 2 ; function of int 13 name.
MOV DX, DRIVE ; number of drive for read
MOV DH, 0 ; number of head.
MOV CL, 1 ; first sectore number.
MOV CH, 0 ; number of track or silander
MOV AL, 1 ; count of sectores that read.
LEA BX, BUFFER
PUSH DS
POP ES
INT 13H
POP ES
POP DX
POP CX
POP BX
ENDM
;----------------------------------------------------------------------------;
;;== RESET THE DISK ================================================== =======;
; This Macros Has Not Need Macros...............................
; DRIVE (WORD) Number Of Driver ..................................
RESET MACRO DRIVE
PUSH AX
PUSH DX
MOV AH, 0
; MOV DL, BYTE PTR DRIVE
INT 13H
POP DX
POP AX
ENDM
;----------------------------------------------------------------------------;
;;== DELAY ================================================== ===============;
; This Macros (FOE ENDFOR) Macros...............................
; TIMEER (WORD) Number Of Driver ..................................
DELAY MACRO TIMER
LOCAL JMP_1, COUNTER,LOOP1, LOOP2, LOOP3
JMP JMP_1
COUNTER DW TIMER
JMP_1:
MOV AX, TIMER
MOV BL, 10
MUL BL
MOV COUNTER, AX
MOV CX, COUNTER
LOOP1:;-------------------;
PUSH CX ;
MOV CX, 0FFFFH ;
LOOP3:;----------------; ;
NOP ; ;
LOOP LOOP3;------; ;
POP CX ;
LOOP loop1;---------;
ENDM
;---------------------------------------------------------------------------;
;== NUMBER TO DECIMAL ================================================== ====;
; This Macro Chenge HEX Or Binary To Decimal .........................
; NUMBER Is (WORD) .................................................. ..
; RETURN : This Macro Return In bp Address Of Decimal Number That It
; Has In His End '$'
DECIMAL MACRO NUMBER
LOCAL BUFFER,COUNTER, LOOP_, E1, E2, E0, RESUM, WHILE ,WHILE_,E2_, E3, E4,LOOP__, JMP_1, EXIT_
JMP JMP_1
BUFFER DB 15 DUP('$')
COUNTER DB 0
JMP_1:
MOV CX, 11
MOV BUFFER[11], '$'
MOV BX, 10
LOOP__:;----------------------------------;
MOV BYTE PTR BUFFER[BX], 0 ; clear the buffer
DEC BX ;
LOOP LOOP__;------------------------;
CMP NUMBER, 0
JL E0
CMP NUMBER, 9
JG E0
MOV DX, NUMBER
MOV BYTE PTR BUFFER[10], DL
ADD BYTE PTR BUFFER[10], 30H
MOV BP, OFFSET BUFFER[10]
JMP EXIT_
E0:
MOV CX, NUMBER
MOV COUNTER, 0
LOOP_:
ADD COUNTER, 1
CMP COUNTER, 9
JNE E1
MOV BX, 10
MOV DL, COUNTER
ADD BYTE PTR BUFFER[BX], DL
WHILE:
CMP BYTE PTR BUFFER[BX], 9
JLE E2
SUB BYTE PTR BUFFER[BX], 10
DEC BX
ADD BYTE PTR BUFFER[BX], 1
JMP WHILE
E2:
MOV COUNTER, 0
E1:
LOOP LOOP_
RESUM:
MOV BX, 10
MOV DL, COUNTER
ADD BYTE PTR BUFFER[BX], DL
WHILE_:
CMP BYTE PTR BUFFER[BX], 9
JLE E2_
SUB BYTE PTR BUFFER[BX], 10
DEC BX
ADD BYTE PTR BUFFER[BX], 1
JMP WHILE_
E2_:
MOV BX, -1
E3:
INC BX
CMP BYTE PTR BUFFER[BX], 0
JE E3
LEA BP, BUFFER[BX]
E4:
MOV DL, BYTE PTR BUFFER[BX]
ADD BYTE PTR BUFFER[BX], 30H
INC BX
CMP BX, 11
JL E4
EXIT_:
ENDM
;---------------------------------------------------------------------------;
;== PRINT MESSAGE ================================================== ========;
; X (WORD) Is x Postion Of Screen ............................
; Y (WORD)Is y Postion Of Screen ..............................
; STRING Is Offset Of Characters ..................................
; COLOR Is COLOR Of CHAR .............................................
; BKCOLOR Is BACKCOLO Of CHAR ..........................................
PRINTB MACRO X, Y, STRING, COLOR, BKCOLOR
LOCAL JMP_1, JMP_2, CHAR_, OLDX, X1, Y1
JMP JMP_1
X1 DW X
Y1 DW Y
CHAR_ DB ?
OLDX dw ?
JMP_1:
MOV DX, X
MOV X1, DX
MOV DX, Y
MOV Y1, DX
MOV BX, STRING
JMP_2:
PUSH BX
MOV DL, BYTE PTR [BX]
MOV CHAR_, DL
PUTCHAR X1, Y1, CHAR_, COLOR, BKCOLOR
ADD X1, 1
POP BX
INC BX
CMP BYTE PTR [BX], '$'
JNE JMP_2
ENDM
;---------------------------------------------------------------------------;
;== PRINT string ================================================== =========;
; X1 (WORD) Is x Postion Of Screen ............................
; Y1 (WORD)Is y Postion Of Screen ..............................
; STRING Is Characters ............................................
; COLOR Is COLOR Of CHAR .............................................
; BKCOLOR Is BACKCOLO Of CHAR ..........................................
PRINTS MACRO X, Y, STRING, COLOR, BKCOLOR
LOCAL STR, JMP_1, JMP_2, CHAR_, OLDX, X1, Y1
JMP JMP_1
STR DB STRING
ENDCH DB ?
X1 DW X
Y1 DW Y
CHAR_ DB ?
OLDX DW ?
JMP_1:
MOV ENDCH, '$'
MOV DX, X
MOV X1, DX
MOV DX, Y
MOV Y1, DX
MOV BX, OFFSET STR
JMP_2:
MOV DL, BYTE PTR [BX]
MOV CHAR_, DL
PUSH BX
PUTCHAR X1, Y1, CHAR_, COLOR, BKCOLOR
ADD X1, 1
POP BX
INC BX
CMP BYTE PTR [BX], '$'
JNE JMP_2
ENDM
;---------------------------------------------------------------------------;
;== GET VECTORE ADDRESSS OF A INTRUPT ======================================;
; INTERRUPT (WORD) Is Number Of One Intrupt ..........................
; PROCEDUTE (NAME) Is New Ruotin That Replaced With This Int Boarder....
; Old_INT_ADDRESS (DOUBLE WORD) Is Old Ruotin Adress .....................
SETVECTOR MACRO INTERRUPT, PROCEDURE, OLD_INT_ADDRESS
PUSH AX
PUSH BX
PUSH DX
PUSH ES
CLI
MOV AX, 0
MOV ES, AX
MOV AX, INTERRUPT
MOV BX, 4
MUL BX
MOV BP, AX
MOV BX, WORD PTR ES:[BP]
MOV AX, WORD PTR ES:[BP+2]
MOV WORD PTR OLD_INT_ADDRESS,BX
MOV WORD PTR OLD_INT_ADDRESS[2],AX
MOV DX, OFFSET PROCEDURE
MOV WORD PTR ES:[BP], DX
MOV WORD PTR ES:[BP+2], CS
STI
POP ES
POP DX
POP BX
POP AX
ENDM
;---------------------------------------------------------------------------;
;== SET THE DEVOLOPED KEYS =================================================;
SETKEYS MACRO
LOCAL JMP_1
JMP JMP_1
RSHIFT DB 1
LSHIFT DB 2
CTRL DB 4
ALT DB 8
SCROLLOCK DB 16
NUMLOCK DB 32
CAPSLOCK DB 64
INSERT DB 128
LRSHIFT DB 3
JMP_1:
ENDM
;---------------------------------------------------------------------------;
;== RETURN THE DEVOLOPED KEYS =================================================;
RETURN_DK MACRO
LOCAL LOOP_, L1, L2, L3, L4, L5, L6, L7, L8, L9
MOV AH, 2
INT 16H
ENDM
;---------------------------------------------------------------------------;
;== PUT VAR WORD INTO OTHER VAR WORD =====================================;
; ARG1(WORD) Is Distanation ..................
; ARG2(WORD) Is Source .........................
PUT MACRO ARG1, ARG2
PUSH DX
MOV DX, ARG2
MOV ARG1, DX
POP DX
ENDM
;---------------------------------------------------------------------------;
;== RESIDENT THE FILE ================================================== =====;
; ARG Is ThE Proucedure Or Label......................
; NOTE:
; the segment ds must be address of arg segment.....

KEEP MACRO ARG
LEA DX, ARG
INT 27H
ENDM
;---------------------------------------------------------------------------;

Mohammad_Has
سه شنبه 29 اردیبهشت 1388, 23:27 عصر
من قصد دارم یک Compiler با Assembly بنویسم. لطفاً به من یک ایده بدهید تا این برنامه در آینده قابلیت توسعه داشته باشد.

tdkhakpur
چهارشنبه 30 اردیبهشت 1388, 00:52 صبح
من قصد دارم یک Compiler با Assembly بنویسم
سلام:
دوست عزیز یه کامپایلر ساز خوب یه مفسر ساز خوب باید باشه چون کار کامپایل درآوردن کدها 0و1 و جایگذاری اون در جاهای مشخص فایل بصورت باینری هست.
پس اول بزار کار کامپایلر رو MASMو LINK انجام بده اگه کارت(مفسر) درست شد برید سراغ کامپایلر نویسی.
موفق باشید.

mortezamsp
چهارشنبه 30 اردیبهشت 1388, 16:31 عصر
آقامن یه چیزی ازتون میخوام!
من میخوام یه ماشین حساب بسازم تو اسمبلی ، میخوام یه ماکرو تعریف کنم که سه بار یه رقم رو دریافت کنه و یا قبل از دریافت کارکاتر *-/+ کار رو تموم کنه و آخر سر هم اون رو به یه عدد تبدیل کنه.میشه کمکم کنید؟ ممنون میشم.

Open-Source
چهارشنبه 30 اردیبهشت 1388, 18:32 عصر
آقامن یه چیزی ازتون میخوام!
من میخوام یه ماشین حساب بسازم تو اسمبلی ، میخوام یه ماکرو تعریف کنم که سه بار یه رقم رو دریافت کنه و یا قبل از دریافت کارکاتر *-/+ کار رو تموم کنه و آخر سر هم اون رو به یه عدد تبدیل کنه.میشه کمکم کنید؟ ممنون میشم.

یه خورده مبهم هستش میتونی بیشتر توضیح بدی؟:متفکر:

tdkhakpur
چهارشنبه 30 اردیبهشت 1388, 23:05 عصر
سلام:
ببینید شما از ماکروهای فوق میتونی عدد رو تو خروجی چاپ کنی و همچنین میتونی یه رشته رو هم که ختم به علامت $ شده باشه رو نیز در خروجی در نقطه x , y چاپ کنی پس تقریبا کار خروجیت حل شده.
پروسه زیر رو برای چاپ کادر خودت استفاده کن و تغییرش بده


show_message proc
jmp pic_jmp
pic_buffer dw 500 dup(?)
box1 db "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍ[H.KH]»" ; 36 byte
db "º FAR STATION MESSAGE º"
db "º ...press any key... º"
db "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍͼ"
x1 dw ?
y1 dw ?
x2 dw ?
y2 dw ?
i1 dw ?
j1 dw ?
pic_jmp:
mov x1, 20
mov x2, 55
mov y1, 8
mov y2, 11
SAVESCR x1, y1, x2, y2, pic_buffer
mov bp, 0
FOR j1, y1, y2;-----------------------------;
mov x1, 20 ;
FOR i1, x1, x2;-------------------------; ;
PUTCHAR x1, y1, box1[bp], 15, 3;CH_WITH, BK_BLUE ; ;
add bp, 1 ; ;
ENDFOR i1, x1, x2;-------------------------; ;
ENDFOR j1, y1, y2;-----------------------------;
ret
show_message endp

شما با ساخت یک ماکرو برای گرفتن ورودی به شرطی که به یکی از کاراکترهای +-/ برسه از ماکرو خارج بشه استفاده کن.
اگه مشکلی پیش اوم کدت رو بزار اصلاحش میکنم.
موفق باشی.

tdkhakpur
جمعه 01 خرداد 1388, 22:12 عصر
سلام به همگی:
سه ماکروی پر کاربرد برای گرفتن کلید و دریافت و چاپ رشته که به 0 ختم شده در خروجی .
موفق باشید.


;== PRINT string ================================================== =========;
; X1 (WORD) Is x Postion Of Screen ............................
; Y1 (WORD)Is y Postion Of Screen ..............................
; STRING Is Characters ............................................
; COLOR Is COLOR Of CHAR .............................................
; BKCOLOR Is BACKCOLO Of CHAR ..........................................
PRINTS MACRO X, Y, STRING, COLOR, BKCOLOR
LOCAL STROFFSET, JMP_1, JMP_2, CHAR_, OLDX, X1, Y1
JMP JMP_1
X1 DW X
Y1 DW Y
CHAR_ DB ?
OLDX DW ?
JMP_1:
MOV DX, X
MOV X1, DX
MOV DX, Y
MOV Y1, DX
MOV BX, STRING
JMP_2:
MOV DL, BYTE PTR
MOV CHAR_, DL
PUSH BX
PUTCHAR X1, Y1, CHAR_, COLOR, BKCOLOR
ADD X1, 1
POP BX
INC BX
CMP BYTE PTR [BX], 0
JNE JMP_2
ENDM
;---------------------------------------------------------------------------;

ماکروی دریافت کاراکتر



;== get key from keyboaed ================================================== ;
; return key in dx
GETKEY MACRO
LOCAL BEGIN, JUMP1, JUMP2, JUMP3, JUMPEND, DKEYS, KEY
JMP BEGIN
DKEYS DW 1001, 1002, 1003, 1004, 1008, -1
KEY DW ?
BEGIN :
PUSH BP
PUSH BX
LEA BP, DKEYS
JUMP1:
MOV AH, 2
INT 16h
MOV DX, WORD PTR [BP];-----;
MOV KEY, DX ;-----;
MOV AH, 0
AND AX, KEY
MOV KEY, DX
CMP AX, KEY
JE JUMPEND
INC BP
CMP BP, 5
JB JUMP1
MOV AH, 1 ; if buffer is empty jz else jnz
INT 16h
LEA BP, DKEYS
JZ JUMP1
MOV AH, 0 ; wait for pressed one key.
INT 16h
CMP AL, 0
JNE JUMP2
MOV KEY, 0
MOV BYTE PTR KEY, AH
ADD KEY, 1000
JMP JUMP3
JUMP2 :
MOV KEY, 0
MOV BYTE PTR KEY, AL
JUMP3 :
JUMPEND:
POP BX
POP BP
MOV DX, KEY
ENDM
;---------------------------------------------------------------------------;



[B]ماکروی دریافت رشته:
[code]
;== get str from keyboaed ================================================== ;
;STR is address of str buffer
;ENDKEY is that you press key to terminate input action ....
; CURSORPOS is cursor pos
GETSTR MACRO STR, LEN, ENDKEY, CURSORPOS
LOCAL BEGIN, EXIT_, LOOP_, COUNTER, KEY, JUMP1
JMP BEGIN
KEY DW ?
COUNTER DW ?
BEGIN:
MOV CX, LEN
MOV BX, STR
MOV COUNTER, CURSORPOS
ADD BX, CURSORPOS
LOOP_:;----------------------------------------;
PUSH CX ;
PUSH BX ;
GETKEY ; key is in dx
MOV KEY, DX ;
POP BX ;
POP CX ;
CMP KEY, 1000 ;
JB JUMP1 ;
SUB KEY, 1000 ;
JUMP1: ;
MOV DX, KEY ;
MOV BYTE PTR [BX], DL ;
INC BX ;
ADD COUNTER, 1 ;
CMP KEY, ENDKEY ;
JE EXIT_ ;
CMP CX, COUNTER ;
JE EXIT_ ;
JMP FAR PTR LOOP_;------------------------;
EXIT_: ;
DEC BX ;
MOV BYTE PTR [BX], 0 ;
ENDM
;---------------------------------------------------------------------------;

bia2varavi
یک شنبه 03 خرداد 1388, 20:27 عصر
سلام
من یه برنامه میخوام که هردکمه ای را که روی کیبورد فشار میدهی بدون نمایش در صفحه در یک فایل متنی ذخیره کند

tdkhakpur
دوشنبه 04 خرداد 1388, 03:16 صبح
سلام:
برای این کار به وقفه های فایلها یه سری بزن و از ماکروی GETKEY موجود در این تاپیک استفاده کن و مقدار رو در فایلت بریز.
موفق باشی.

arashmidos200x
پنج شنبه 15 مرداد 1388, 15:13 عصر
سلام من یه کمک نسبتا میخوام تا اسمبلی رو ترم تابستون پاس کنم و نرو واسه دفعه سوم اگه کمکم کنید مدیونتونم

چند تا تمرینه که میدونم واسه حرفه ایها کاری نداره . اسمبلی تحت داس هم هست!

1-برنامه ای که رشته ای را گرفته بصورت سطری عمودی در مرکز صفحه چاپ کند
2- همون بالائی بصورت مورب
3-برنامه ای که صفحه نمایش را به 4 قسمت تقسیم کند که رنگهای مختلف داشته باشد 20 تا کلید از ورودی گرفته در هر قسمت صفحه 5 تا را چاپ کند

پنجره ها حاشیه دار باشد

3- برنامه ای که رشته کاراکتری خوانده و بجای نمایش کاراکتر ها ستاره چاپ کند (مثل پسورد)
الف: از func 6 ya
ب:از فانکشن 1 استفاده شود

روی هر کاراکتر نمایش داده شده ستاره چاپ کند

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