Assembly Tutorials
Here is myprojects during the course microprocessors. Hope it will help you guys. Here you are can find following programs.
- Data and Time Showing
- Controlling DC Motor from/using parallel port
- Controlling Stepper Motor from/using parallel port
#1 – Data and Time Showing
;—————————————–
;— TERM PROJECT —
;— LECTURE: MICROPROCESSORS —
;— LECTURER: HOSSEIN MEHRABANI —
;— CODED BY: SAMET KILICTAS —
;— STUDENT NUMBER: 20040283 —
;— E-MAIL: SAMET@KILICTAS.COM —
;— CYPRUS INTERNATIONAL UNIVERSITY —
;— 26-05-2008 —
;—————————————–
;THE REQUIRED MACROS FOR PROGRAM—————————
;———————————————————-
CURS_POSITION MACRO ROW,COLUMN
MOV BH,00
MOV AH,02
MOV DH,ROW
MOV DL,COLUMN
INT 10H
ENDM
;———————————————————-
CLS_SCREEN MACRO
MOV AX,0600H
mov bh,00
mov bh,0ah
MOV CX,0
MOV DX,184FH
INT 10H
ENDM
;———————————————————-
SHOW_INSCREEN MACRO STRING
MOV AH,09
MOV DX,OFFSET STRING
INT 21H
ENDM
;———————————————————-
;PROGRAM STARTS FROM THIS POINT
;———————————————————-
.MODEL HUGE
.STACK 9000
.DATA
Table DB “00$”,”01$”,”02$”,”03$”,”04$”,”05$”,”06$”,”07$”,”08$”,”09$”
DB “10$”,”11$”,”12$”,”13$”,”14$”,”15$”,”16$”,”17$”,”18$”,”19$”
DB “20$”,”21$”,”22$”,”23$”,”24$”,”25$”,”26$”,”27$”,”28$”,”29$”
DB “30$”,”31$”,”32$”,”33$”,”34$”,”35$”,”36$”,”37$”,”38$”,”39$”
DB “40$”,”41$”,”42$”,”43$”,”44$”,”45$”,”46$”,”47$”,”48$”,”49$”
DB “50$”,”51$”,”52$”,”53$”,”54$”,”55$”,”56$”,”57$”,”58$”,”59$”
mm DB “:$”
mm2 DB “/$”
Date DB “Date: $”
Time DB “ Time: $”
Century DB “20$”
CONSTANTV DB 3
MSG1 DB ‘PROJECT : DISPLAYING THE PROCESSORS DATE AND TIME ON MONITOR’,'$’
MSG2 DB ‘LECTURE : MICROPROCESSORS [LECTURER : HOSSEIN MEHRABANI]‘,’$’
MSG3 DB ‘CODING : SAMET KILICTAS [NO -> 20040283] [CYPRUS INTERNATIONAL UNIVERSITY]‘,’$’
MSG4 DB ‘MOTOR STATUS :’,'$’
MSG5 DB ‘PRESS H BUTTON FOR INSTRCONSTANTVTIONS…’,'$’
MSG6 DB ‘DIRECTION : ?’,'$’
MSG7 DB ‘SPEED : ?’,'$’
MSG8 DB ‘EMAIL : samet@kilictas.com’,'$’
MSG9 DB ‘Good Bye..!’,'$’
.CODE
MAIN PROC
MOV AX,@DATA
PUSH AX
POP DS;**************************************************************************
; Show main screenMAINSCREEN:
CLS_SCREEN
CURS_POSITION 2,2
SHOW_INSCREEN MSG1
CURS_POSITION 3,2
SHOW_INSCREEN MSG2
CURS_POSITION 4,2
SHOW_INSCREEN MSG3
CURS_POSITION 5,2
SHOW_INSCREEN MSG8;**************************************************************************
CURS_POSITION 13,24
SHOW_INSCREEN DateMOV AH,04h ; 04h function to get date information
INT 1AhMOV AL,DL ; Here DL gives me the day information
MUL CONSTANTV
MOV DI,AX
LEA DX,Table[DI]
MOV AH,09h
INT 21hSHOW_INSCREEN mm2
MOV AH,04h ; 04h function to get date information
INT 1AhMOV AL,DH ; Here DH gives me the month information
MUL CONSTANTV
MOV DI,AX
LEA DX,Table[DI]
MOV AH,09h
INT 21hSHOW_INSCREEN mm2
SHOW_INSCREEN Century
MOV AH,04h ; 04h function to get date information
INT 1AhMOV AL,CL ; Here CL gives me the year information
MUL CONSTANTV
MOV DI,AX
LEA DX,Table[DI]
MOV AH,09h
INT 21h;**************************************************************************
SHOW_INSCREEN Time
MOV AH,2Ch ; 2Ch function to get time information
INT 21hMOV AL,CH ; Here CH gives me the hour information
MUL CONSTANTV
MOV DI,AX
LEA DX,Table[DI]
MOV AH,09h
INT 21hSHOW_INSCREEN mm
MOV AL,CL ; Here CH gives me the minute information
MUL CONSTANTV
MOV DI,AX
LEA DX,Table[DI]
MOV AH,09h
INT 21hCURS_POSITION 50,15
;**************************************************************************
GOODBYE:
MOV AH,4CH
INT 21h
MAIN ENDP
END MAIN
#2 – Controlling DC Motor from/using parallel port
HOLD MACRO
MOV AH,07
INT 21H
ENDMWAY MACRO VALUE
MOV DX,378H
MOV AL,VALUE
OUT DX,AL
ENDMCLR MACRO
MOV AX,0600H
MOV BH,00
MOV BH,1fh
MOV CX,0
MOV DX,184fh
INT 10H
ENDMCURSOR MACRO ROW,COLUMN
MOV BH,00
MOV AH,02
MOV DH,ROW
MOV DL,COLUMN
INT 10H
ENDMDSPLY MACRO STRING
MOV AH,09
MOV DX,OFFSET STRING
INT 21H
ENDM.MODEL SMALL
.STACK 64
.DATAMessage1 DB ‘CHOOSE AN OPTION’,'$’
Message2 DB ‘DC MOTOR CONTROL’,'$’
Message3 DB ‘PRESS G FOR TURN THE DC MOTOR TO Counter Clockwise’,'$’
Message4 DB ‘PRESS D FOR TURN THE DC MOTOR TO Clockwise’,'$’
Message5 DB ‘PRESS V FOR STOP THE DC MOTOR’,'$’
Message6 DB ‘Choose an Operation from Menu’,'$’
Message7 DB ‘Counter Clockwise’,'$’
Message8 DB ‘Clockwise ‘,’$’
Message9 DB ‘Stopped ‘,’$’TurnRight EQU 00100101B
TurnLeft EQU 00011101B
STOP EQU 00001111B.CODE
MAIN:
here: MOV AX,@DATA
MOV DS,AX
CALL Choice
CMP AL,’g’
CALL Left
CMP AL,’d’
CALL Right
CMP AL,’v’
CALL AwayChoice:
CLR
CURSOR 3,20
DSPLY Message2
CURSOR 6,10
DSPLY Message3
CURSOR 8,10
DSPLY Message4
CURSOR 10,10
DSPLY Message5
CURSOR 15,12
DSPLY Message6
HOLD
RETLeft:
CURSOR 17,12
DSPLY Message7
WAY TurnLeft
CURSOR 19,12
DSPLY Message1
HOLD
RETRight:
CURSOR 17,12
DSPLY Message8
WAY TurnRight
CURSOR 19,12
DSPLY Message1
HOLD
RETAway:
CURSOR 17,12
DSPLY Message9
CURSOR 21,12
JMP quit
RETquit: WAY STOP
MOV AH,4CH
INT 21H
END MAIN
#3 – Controlling Stepper Motor from/using parallel port
Tweet;—————————————–
;— TERM PROJECT —
;— STEPPER MOTOR WITH 7 SEGMENT —
;— LECTURE: MICROPROCESSORS —
;— LECTURER: HOSSEIN MEHRABANI —
;— CODED BY: SAMET KILICTAS —
;— STUDENT NUMBER: 20040283 —
;— E-MAIL: SAMET@KILICTAS.COM —
;— CYPRUS INTERNATIONAL UNIVERSITY —
;— 26-05-2008 —
;—————————————–
;THE REQUIRED MACROS FOR PROGRAM—————————
;———————————————————-
CURS_POSITION MACRO ROW,COLUMN
MOV BH,00
MOV AH,02
MOV DH,ROW
MOV DL,COLUMN
INT 10H
ENDM
;———————————————————-
CLS_SCREEN MACRO
MOV AX,0600H
mov bh,00
mov bh,0ah
MOV CX,0
MOV DX,184FH
INT 10H
ENDM
;———————————————————-
SHOW_INSCREEN MACRO STRING
MOV AH,09
MOV DX,OFFSET STRING
INT 21H
ENDM
;———————————————————-
PINS_OUT MACRO SEND
MOV CX,SEND
;AND CL,0fh
;OR CL,CONSTANTBCD
MOV DX,378H
MOV AL,OFFSET SEND
OUT DX,AL
ENDM
;———————————————————-
;PROGRAM STARTS FROM THIS POINT
;———————————————————-
.MODEL HUGE
.STACK 2000
.DATA
INSTMSG1 DB ‘INTRUCTIONS:’,'$’
INSTMSG2 DB ‘SPEED UP: W’,'$’
INSTMSG3 DB ‘SPEED DOWN: S’,'$’
INSTMSG4 DB ‘FORWARD: D’,'$’
INSTMSG5 DB ‘BACKWARD: A’,'$’
INSTMSG6 DB ’7 SEGMENT TEST: T BUTTON’,'$’
INSTMSG7 DB ‘EXIT: E BUTTON’,'$’
INSTMSG8 DB ‘PRESS B BUTTON TO MAIN MENU’,'$’
INSTMSG9 DB ‘PAUSE: P’,'$’
H_SYMBOL DB ‘———————————————’,'$’
MSG1 DB ‘PROJECT : STEPPER CONTROLLER WITH 7 SEGMENT DISPLAY’,'$’
MSG2 DB ‘LECTURE : MICROPROCESSORS [LECTURER : HOSSEIN MEHRABANI]‘,’$’
MSG3 DB ‘CODING : SAMET KILICTAS [NO -> 20040283] [CYPRUS INTERNATIONAL UNIVERSITY]‘,’$’
MSG4 DB ‘MOTOR STATUS :’,'$’
MSG5 DB ‘PRESS H BUTTON FOR INSTRUCTIONS…’,'$’
MSG6 DB ‘DIRECTION : ?’,'$’
MSG7 DB ‘SPEED : ?’,'$’
MSG8 DB ‘EMAIL : samet@kilictas.com’,'$’
MSG9 DB ‘Good Bye..!’,'$’
MSG_DELETE DB ‘? ‘,’$’
MSG10 DB ’7 SEGMENT TEST MODE: ?’,'$’
MSG11 DB ‘ON ‘,’$’
MSG12 DB ‘OFF’,'$’
STARTED DB ‘RUNNING, PLEASE WAIT!’,'$’
STOPPED DB ‘STOPPED! ‘,’$’
DIRECTION_FORWARD DB ‘Clockwise ‘,’$’
DIRECTION_BACKWARD DB ‘Counter Clockwise’,'$’
DIRECTION_SIDE DB 1
INTSCREEN_MODE DB 1 ; Default is forward
COUNT DB 20 ; How many step u need ??????
CONSTANTBCD DB 00010000B
SHOWSPEED DB 0
zero DB ’1 -> 1000MS DELAY’,'$’
one DB ’2 -> 800MS DELAY ‘,’$’
two DB ’3 -> 700MS DELAY ‘,’$’
three DB ’4 -> 600MS DELAY ‘,’$’
four DB ’5 -> 500MS DELAY ‘,’$’
five DB ’6 -> 400MS DELAY ‘,’$’
six DB ’7 -> 300MS DELAY ‘,’$’
seven DB ’8 -> 200MS DELAY ‘,’$’
eight DB ’9 -> 100MS DELAY ‘,’$’
;———————–
.CODE
MAIN: MOV AX,@DATA
MOV DS,AX;*********************************
; Show main screenMAINSCREEN:
CLS_SCREEN
CURS_POSITION 2,2
SHOW_INSCREEN MSG1
CURS_POSITION 3,2
SHOW_INSCREEN MSG2
CURS_POSITION 4,2
SHOW_INSCREEN MSG3
CURS_POSITION 5,2
SHOW_INSCREEN MSG8
CURS_POSITION 12,2
SHOW_INSCREEN MSG4
CURS_POSITION 13,2
SHOW_INSCREEN H_SYMBOL
CURS_POSITION 14,2
SHOW_INSCREEN MSG6
CURS_POSITION 15,2
SHOW_INSCREEN MSG7
CURS_POSITION 16,2
SHOW_INSCREEN MSG10
CURS_POSITION 22,2
SHOW_INSCREEN MSG5
CURS_POSITION 30,2
MOV INTSCREEN_MODE,1;*****************************************************************
; Important jump point is here **********************************CHECKPOINT:
; Get input from the keyboard
MOV AH,07
INT 21H; Save the input
MOV BL,AL ; Save AL to BL (i.e. The Ascii value of the key hit); Check the input character ????? What i should do ????
CMP BL,’H' ;H Button
JNE H1
JMP INSTSCREEN
H1: CMP BL,’h’
JNE H2
JMP INSTSCREEN
H2: CMP BL,’P' ;P Button
JNE P1
JMP PAUSE
P1: CMP BL,’p’
JNE P2
JMP PAUSE
P2: CMP BL,’E' ;E Button
JNE E1
JMP GOODBYE
E1: CMP BL,’e’
JNE E2
JMP GOODBYE
E2: CMP BL,’B' ;B Button
JNE B1
JMP MAINSCREEN
B1: CMP BL,’b’
JNE B2
JMP MAINSCREEN
B2: CMP BL,’W' ;W Button
JNE W1
JMP SPEEDUP
W1: CMP BL,’w’
JNE W2
JMP SPEEDUP
W2: CMP BL,’S' ;S Button
JNE S1
JMP SPEEDDOWN
S1: CMP BL,’s’
JNE S2
JMP SPEEDDOWN
S2: CMP BL,’D' ;D Button
JNE D1
JMP FORWARD
D1: CMP BL,’d’
JNE D2
JMP FORWARD
D2: CMP BL,’A' ;A Button
JNE A1
JMP BACKWARD
A1: CMP BL,’a’
JNE A2
JMP BACKWARD
A2: CMP BL,’T' ;T Button
JNE T1
JMP SEGMENTTEST
T1: CMP BL,’t’
JNE M
JMP SEGMENTTEST; If no key exists jump to the mainscreen..!
M: JMP CHECKPOINT;*********************************
; Show instruction screenINSTSCREEN:
CLS_SCREEN
CURS_POSITION 2,2
SHOW_INSCREEN INSTMSG1
CURS_POSITION 3,2
SHOW_INSCREEN H_SYMBOL
CURS_POSITION 4,2
SHOW_INSCREEN INSTMSG2
CURS_POSITION 5,2
SHOW_INSCREEN INSTMSG3
CURS_POSITION 6,2
SHOW_INSCREEN INSTMSG4
CURS_POSITION 7,2
SHOW_INSCREEN INSTMSG5
CURS_POSITION 8,2
SHOW_INSCREEN INSTMSG6
CURS_POSITION 9,2
SHOW_INSCREEN INSTMSG7
CURS_POSITION 10,2
SHOW_INSCREEN INSTMSG9
CURS_POSITION 15,2
SHOW_INSCREEN INSTMSG8
CURS_POSITION 50,50
MOV INTSCREEN_MODE,2
MOV AL,00
JMP CHECKPOINT;*********************************
;All system pausedPAUSE:
PINS_OUT 11110000B
CURS_POSITION 16,25
SHOW_INSCREEN MSG12
CURS_POSITION 50,50
JMP CHECKPOINT;*********************************
; Speed upSPEEDUP:
CMP SHOWSPEED,8
JE NOG
ADD SHOWSPEED,1
NOG: CMP SHOWSPEED,0
JNE aaaa
CURS_POSITION 15,11
SHOW_INSCREEN zero
CURS_POSITION 50,50
MOV CONSTANTBCD,00010000B
PINS_OUT 00010000B
JMP NOU
aaaa: CMP SHOWSPEED,1
JNE qqq
CURS_POSITION 15,11
SHOW_INSCREEN one
CURS_POSITION 50,50
MOV CONSTANTBCD,00100000B
PINS_OUT 00100000B
JMP NOU
qqq: CMP SHOWSPEED,2
JNE www
CURS_POSITION 15,11
SHOW_INSCREEN two
CURS_POSITION 50,50
MOV CONSTANTBCD,00110000B
PINS_OUT 00110000B
JMP NOU
www: CMP SHOWSPEED,3
JNE eee
CURS_POSITION 15,11
SHOW_INSCREEN three
CURS_POSITION 50,50
MOV CONSTANTBCD,01000000B
PINS_OUT 01000000B
JMP NOU
eee: CMP SHOWSPEED,4
JNE rrr
CURS_POSITION 15,11
SHOW_INSCREEN four
CURS_POSITION 50,50
MOV CONSTANTBCD,01010000B
PINS_OUT 01010000B
JMP NOU
rrr: CMP SHOWSPEED,5
JNE ttt
CURS_POSITION 15,11
SHOW_INSCREEN five
CURS_POSITION 50,50
MOV CONSTANTBCD,01100000B
PINS_OUT 01100000B
JMP NOU
ttt: CMP SHOWSPEED,6
JNE yyy
CURS_POSITION 15,11
SHOW_INSCREEN six
CURS_POSITION 50,50
MOV CONSTANTBCD,01110000B
PINS_OUT 01110000B
JMP NOU
yyy: CMP SHOWSPEED,7
JNE uuu
CURS_POSITION 15,11
SHOW_INSCREEN seven
CURS_POSITION 50,50
MOV CONSTANTBCD,10000000B
PINS_OUT 10000000B
JMP NOU
uuu: CMP SHOWSPEED,8
CURS_POSITION 15,11
SHOW_INSCREEN eight
CURS_POSITION 50,50
MOV CONSTANTBCD,10010000B
PINS_OUT 10010000B
NOU:
JMP CHECKPOINT;*********************************
; Speed downSPEEDDOWN:
CMP SHOWSPEED,0
JE NOGG
SUB SHOWSPEED,1
NOGG: CMP SHOWSPEED,0
JNE aaaaa
CURS_POSITION 15,11
SHOW_INSCREEN zero
CURS_POSITION 50,50
MOV CONSTANTBCD,00010000B
PINS_OUT 00010000B
JMP NOUU
aaaaa: CMP SHOWSPEED,1
JNE qqqq
CURS_POSITION 15,11
SHOW_INSCREEN one
CURS_POSITION 50,50
MOV CONSTANTBCD,00100000B
PINS_OUT 00100000B
JMP NOUU
qqqq: CMP SHOWSPEED,2
JNE wwww
CURS_POSITION 15,11
SHOW_INSCREEN two
CURS_POSITION 50,50
MOV CONSTANTBCD,00110000B
PINS_OUT 00110000B
JMP NOUU
wwww: CMP SHOWSPEED,3
JNE eeee
CURS_POSITION 15,11
SHOW_INSCREEN three
CURS_POSITION 50,50
MOV CONSTANTBCD,01000000B
PINS_OUT 01000000B
JMP NOUU
eeee: CMP SHOWSPEED,4
JNE rrrr
CURS_POSITION 15,11
SHOW_INSCREEN four
CURS_POSITION 50,50
MOV CONSTANTBCD,01010000B
PINS_OUT 01010000B
JMP NOUU
rrrr: CMP SHOWSPEED,5
JNE tttt
CURS_POSITION 15,11
SHOW_INSCREEN five
CURS_POSITION 50,50
MOV CONSTANTBCD,01100000B
PINS_OUT 01100000B
JMP NOUU
tttt: CMP SHOWSPEED,6
JNE yyyy
CURS_POSITION 15,11
SHOW_INSCREEN six
CURS_POSITION 50,50
MOV CONSTANTBCD,01110000B
PINS_OUT 01110000B
JMP NOUU
yyyy: CMP SHOWSPEED,7
JNE uuuu
CURS_POSITION 15,11
SHOW_INSCREEN seven
CURS_POSITION 50,50
MOV CONSTANTBCD,10000000B
PINS_OUT 10000000B
JMP NOUU
uuuu: CMP SHOWSPEED,8
CURS_POSITION 15,11
SHOW_INSCREEN eight
CURS_POSITION 50,50
MOV CONSTANTBCD,10010000B
PINS_OUT 10010000B
NOUU:
JMP CHECKPOINT;*********************************
; Show me the step pleasee….;Forward —
STF: MOV COUNT,20
STEPSF: CALL DELAY
PINS_OUT 10100011B
CALL DELAY
PINS_OUT 11110110B
CALL DELAY
PINS_OUT 10101100B
CALL DELAY
PINS_OUT 11111001B
DEC COUNT
CMP COUNT,0
JE F
LOOP STEPSF
F: CURS_POSITION 12,18
SHOW_INSCREEN STOPPED
CURS_POSITION 14,15
SHOW_INSCREEN MSG_DELETE
CURS_POSITION 50,50
JMP CHECKPOINT
RET;Backward —
STB: MOV COUNT,20
STEPSB: CALL DELAY
PINS_OUT 10111001B
CALL DELAY
PINS_OUT 11111100B
CALL DELAY
PINS_OUT 10110110B
CALL DELAY
PINS_OUT 11110011B
DEC COUNT
CMP COUNT,0
JE B
LOOP STEPSB
B: CURS_POSITION 12,18
SHOW_INSCREEN STOPPED
CURS_POSITION 14,15
SHOW_INSCREEN MSG_DELETE
CURS_POSITION 50,50
JMP CHECKPOINT
RET;*********************************
; System little forward pleaseFORWARD:
MOV DIRECTION_SIDE,1
CURS_POSITION 14,15
SHOW_INSCREEN DIRECTION_FORWARD
CURS_POSITION 12,18
SHOW_INSCREEN STARTED
CURS_POSITION 50,50
CALL STF
JMP CHECKPOINT;*********************************
; System little backward pleaseBACKWARD:
MOV DIRECTION_SIDE,2
CURS_POSITION 14,15
SHOW_INSCREEN DIRECTION_BACKWARD
CURS_POSITION 12,18
SHOW_INSCREEN STARTED
CURS_POSITION 50,50
CALL STB
JMP CHECKPOINT;*********************************
; Test the 7 segment displaySEGMENTTEST:
PINS_OUT 10000000B
CURS_POSITION 16,25
SHOW_INSCREEN MSG11
CURS_POSITION 50,50
JMP CHECKPOINT;*********************************
; Delay routines …. which u need it fot stepper motor stepsDELAY: CMP SHOWSPEED,0
JNE aa
MOV CX,65535
JMP NO
aa: CMP SHOWSPEED,1
JNE qq
MOV CX,53032
JMP NO
qq: CMP SHOWSPEED,2
JNE ww
MOV CX,46403
JMP NO
ww: CMP SHOWSPEED,3
JNE ee
MOV CX,39774
JMP NO
ee: CMP SHOWSPEED,4
JNE rr
MOV CX,33145
JMP NO
rr: CMP SHOWSPEED,5
JNE tt
MOV CX,26516
JMP NO
tt: CMP SHOWSPEED,6
JNE yy
MOV CX,19887
JMP NO
yy: CMP SHOWSPEED,7
JNE uu
MOV CX,13258
JMP NO
uu: CMP SHOWSPEED,8
MOV CX,6629NO:
CALL WAITF
RETWAITF: PUSH AX
WAITF1:
IN AL,61H
AND AL,10H
CMP AL,AH
JE WAITF1
MOV AH,AL
LOOP WAITF1
POP AX
RET
SUB CX,CX
RET;*********************************
; Print the good bye messageGOODBYE:
CLS_SCREEN
CURS_POSITION 15,25
SHOW_INSCREEN MSG9
CURS_POSITION 30,25
PINS_OUT 11110000B
MOV AH,4CH
INT 21H
END MAIN
Thanks for dropping by! Feel free to join the discussion by leaving comments, and stay updated by subscribing to the

Hi Samet, hiw are u? this is Hossein mehrabani. How s going on? How is ur life in cyprus? how is ur courses? What are you doing now? I wish best times for u.
take care
Hossein mehrabani