Professional Documents
Culture Documents
Ec 353 MP&MC Lab PDF
Ec 353 MP&MC Lab PDF
Laboratory(EC353)Manual
Preparedby
A.M.V.N.MARUTHI,M.Tech
(Lecturer)
&
Y.SRICHAKRAPANI,M.Tech
(Lecturer)
DEPARTMENTOFECE
BAPATLAENGINEERINGCOLLEGE
BAPATLA
-1-
LISTOFEXPERIMENTS
ExperimentsBasedonALP(8086)
AssemblingandExecutingtheProgram..3
1.ProgramsonDataTransferInstructions.4
2.ProgramsonArithmeticandLogicalInstructions9
3.ProgramsonBranchInstructions17
4.ProgramsonSubroutines.20
5.SortingofanArray22
6.ProgramsonInterrupts(SoftwareandHardware)23
7.8086ProgramsusingDOSandBIOSInterrupts24
ExperimentsBasedonInterfacing&Microcontroller(8051)
8.DACInterfaceWaveformgenerations..26
9.StepperMotorControl.28
10.KeyboardInterface/LCDInterface.29
11.DataTransferbetweentwoPCsusingRS.232CSerialPort
12.ProgramsonDataTransferInstructionsusing8051Microcontroller32
13.ProgramsonArithmeticandLogicalInstructionsusing8051Microcontroller33
14.ApplicationswithMicrocontroller8051..34
-2-
ASSEMBLINGANDEXECUTINGTHEPROGRAM
WritinganALP
AssemblylevelprogramsgenerallyabbreviatedasALParewrittenintexteditorEDIT.
TypeEDITinfrontofthecommandprompttoopenanuntitledtextfile.
EDIT<filename>
Aftertypingtheprogramsavethefilewithappropriatefilenamewithanextension.ASM
Ex:Add.ASM
AssemblinganALP
ToassembleanALPweneededexecutablefilecalledMASM.EXE.Onlyifthisfileisin
currentworkingdirectorywecanassembletheprogram.Thecommandis
MASM<filename.ASM>
Iftheprogramisfreefromallsyntacticalerrors,thiscommandwillgivetheOBJECTfile.In
caseoferrorsitlistoutthenumberoferrors,warningsandkindoferror.
Note:Noobjectfileiscreateduntilallerrorsarerectified.
Linking
AftersuccessfulassemblingoftheprogramwehavetolinkittogetExecutablefile.
Thecommandis
LINK<Filename.OBJ>
Thiscommandresultsin<Filename.exe>whichcanbeexecutedinfrontofthecommand
prompt.
ExecutingtheProgram
Opentheprogramindebuggerbythecommand(noteonlyexefilescanbeopen)bythe
command.
CV<Filename.exe>
Thiswillopentheprogramindebuggerscreenwhereinyoucanviewtheassemblecode
withtheCSandIPvaluesattheleftmostsideandthemachinecode.Registercontent
,memorycontentalsoisviewedusingVIEWoptionofthedebugger.
Executeoptioninthemenuinthemenucanbeusedtoexecutetheprogrameitherin
singlesteps(F8)orburstexecution(F5).
-3-
1. PrograminvolvingDatatransferinstructions
i)Byteandworddatatransferindifferentaddressingmodes
DATASEGMENT
DATA1DB23H
DATA2DW1234H
DATA3DB0HDATA4
DW0H
DATA5DW2345H,6789H
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;InitializeDStopointtostartofthememory
MOVDS,AX ;setasideforstoringofdata
MOVAL,25X ;copy25Hinto8bitALregister
MOVAX,2345H ;copy2345Hinto16bitAXregister
MOVBX,AX ;copythecontentofAXintoBXregister(16bit)
MOV CL,AL ;copy the contentof AL into CL register
MOV AL,DATA1 ;copiesthebyte contents of datasegment
;locationDATA1 into8bit AL
MOVAX,DATA2 ;copiesthewordcontentsofdatasegmentmemory
;locationDATA2into16bitAX
MOVDATA3,AL ;copiestheALcontentintothebytecontentsofdata
;segmentmemorylocationDATA3
MOVDATA4,AX ;copiestheAXcontentintothewordcontentsof
;datasegmentmemorylocationDATA4
MOVBX,OFFSETDATA5;The16bitoffsetaddressofDSmemeorylocation
;DATA5iscopiedintoBX
MOVAX,[BX] ;copiesthewordcontentofdatasegment
;memorylocationaddressedbyBXinto
;AX(registerindirectaddressing)
MOVDI,02H ;addresselement
MOVAX,[BX+DI} ;copiesthewordcontentofdatasegment
;memorylocationaddressedbyBX+DIinto
;AX(baseplusindirectaddressing)
MOVAX,[BX+0002H] ;copiesthewordcontentofdatasegment
;memorylocationaddressedbyBX+0002Hinto
;(16bit)
MOVAL,[DI+2] ;registerrelativeaddressing
MOVAX,[BX+DI+0002H];copiesthewordcontentofdatasegment
-4-
;memorylocationaddressedbyBX+DI+0002H
;intoAX(16bit)
MOVAH,4CH ;ExittoDOSwithfunctioncall4CHINT
21H
CODEENDS ;Assemblerstopreading
ENDSTART
-5-
ii)Blockmove(withandwithoutoverlapping)
Withoutoverlapping
DATASEGMENT
XDB01H,02H,03H,04H,05H ;InitializeDataSegmentsMemoryLocations
YDB05DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;InitializeDStopointtostartofthememory
MOVDS,AX ;setasideforstoringofdata
MOVCX,05H ;Loadcounter
LEASI,X+04 ;SIpointerpointedtotopofthememoryblock
LEADI,X+04+03 ;03isdisplacementofoverlapping,DIpointedto
;thetopofthedestinationblock
Beforeexecution
00
00
00
00
00 Y,DI
05
04
03
02
01 X,SI
Afterexecution
05
04
03
02
01
05
04
03
02
01
-6-
WithOverlapping
DATASEGMENT
XDB01H,02H,03H,04H,05H;InitializeDataSegmentsMemoryLocations
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;InitializeDStopointtostartofthememory
MOVDS,AX ;setasideforstoringofdata
MOVCX,05H ;Loadcounter
LEASI,X+04 ;SIpointerpointedtotopofthememoryblock
LEADI,X+04+03 ;03isdisplacementofoverlapping,DIpointedto
;thetopofthedestinationblock
UP: MOVBL,[SI] ;MovetheSIcontenttoBLregisterMOV
[DI],BL ;MovetheBLregistertocontentofDI
DECSI ;UpdateSIandDI
DECDI
DECCX ;Decrementthecountertillitbecomeszero
JNZUP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
DSBeforeexecution
xx
xx
xx DI
xx
xx
05
SI
04
03
02
01 X
DSAfterexecution
02
xx
01
xx
03
05
02
04
01
03
-7-
iii)BlockInterchange
DATASEGMENT
XDB01H,02H,03H,04H,05HY
DB 11H,12H,13H,14H,15H
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVCX,05H ;Loadthecounter
LEASI,X ;SIpointedtothesourcelocationx
LEADI,Y ;DIpointedtothedestinationlocationy
UP: MOVBL,[SI] ;MovetheSIcontenttoBLregister
MOVAL,[DI] ;MovetheDIcontenttoALregister
MOV[SI],AL ;MoveALregistercontenttocontentofSI
MOV[DI],BL ;MoveBLregistercontenttocontentofDI
INCSI ;UpdateSIandDI
INCDI
DECCX ;Decrementthecountertillitbecomeszero
JNZUP
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
DSBeforeexecutionDSAfterexecution
15
14
13 05
12 04
03
11
02
05
Y,DI 01
04
15
03
14
02 13
01 12
11
X,SI
-8-
2)PrograminvolvingArithmeticandlogicoperationslikeadditionandsubtractionofmulti
precisionnumbers
i)16BitAddition
DATASEGMENT
NUMDW1234H,0F234H
SUMDW2DUP(0)
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM ;FirstnumberloadedintoAX
MOVBX,0H ;ForcarryBXregisteriscleared
ADDAX,NUM+2 ;SecondnumberaddedwithAX
JNCDOWN ;Checkforcarry
INCBX ;IfcarrygeneratedincrementtheBX
DOWN:MOVSUM,AX ;Storingthesumvalue
MOVSUM+2,BX ;Storingthecarryvalue
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
INPUT :1234H,F234H
OUTPUT:10468H
-9-
ii)32Bitaddition
DATASEGMENT
NUM1DW0FFFFH,0FFFFH
NUM2DW1111H,1111HSUM
DW4DUP(0)
dATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM1 ;Move LSB of NUM1 to AX
ADDAX,NUM2 ;Add LSB of NUM2 to AX
MOVSUM,AX ;StoretheLSBinSUM
MOVAX,NUM1+2 ; Move MSB of NUM1 to AX
ADCAX,NUM2+2 ; Add MSB of NUM2 to AX
JNCDOWN ;Checkforcarry
MOVSUM+4,01H ;StorethecarryinSUM+4
DOWN:MOVSUM+2,AX ;StoretheMSBinSUM+2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
INPUT:0FFFFFFFFH,011111111H
OUTPUT:0111111110H
-10-
iv)16BitSubtraction
DATASEGMENT
NUMDW4567H,2345H
DIFDW1DUP(0)
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
CLC ;ClearingCarry
LEASI,NUM ;SIpointedtotheNUM
MOVAX,[SI] ;MoveNUM1toAX
SBBAX,[SI+2] ;MovetheSItoNum2andsubtractwithAX(Takes
;careforbothsmalleraswellaslarger
;Numbersubtraction)
MOVDIF,AX ;Storetheresult
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
INPUT:4567H,2345H
OUTPUT:2222
-11-
v)32BitSubtraction
DATASEGMENT
NUM1 DW 2345H,6762H
NUM2 DW 1111H,1111H
DIFDW2DUP(0)
DATAENDSCODE
SEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,NUM1 ;SIpointedtotheLSBofNUM1
LEADI,NUM2 ;DIpointedtotheLSBofNUM2
MOVAX,[SI] ;MovethecontentofSItoAX
MOVBX,[DI] ;MovethecontentofDItoBX
SUBAX,BX ;SubtractfromBXtoAX
MOVDIF,AX ;StoretheLSBresultinDIF
INCSI ;UpdateSItopointtheMSBofNUM1(if
;ADDSI,02instructionitsaffectcarryflag)
INCSI
INCDI ;UpdateDItopointtheMSBofNUM2
INCDI
MOVAX,[SI] ;MovethecontentofSItoAX
MOVBX,[DI] ;MovethecontentofDItoBX
SBBAX,BX ;SubtractwithborrowfromBXtoAX
MOVDIF+2,AX ;StoretheMSBresultinDIF+2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
INPUT:23456762,11111111
OUTPUT:12345651
INPUT:11111111,23451234
OUTPUT:EDCBFEDD
-12-
MultiplicationandDivisionofsignedandunsignedHexadecimalnumbers
vi)16Bitmultiplicationforunsignednumbers
DATASEGMENT
NUMDW1234H,1234H
PRODDW2DUP(0)DATA
ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,NUM ;SIpointedtotheMultiplicand
MOVAX,[SI] ;MultiplicandhastobeinAXregister
MOVBX,[SI+2] ;SI+2pointedtotheMultiplierandmoveitto
BXMULBX ;Performthemultiplication
MOVPROD,AX ;32bitproductstoredinDXAXregisters
MOVPROD+2,DX
MOVAH,4CH
INT21H
CODEENDSEND
START
INPUT:Multiplicand1234H,
Multiplier 1234H
OUTPUT:DX014B
AX5490
-13-
vii)16Bitmultiplicationforsignednumbers
DATASEGMENT
NUMDW2,1
PRODDW2DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
LEASI,NUM ;SIpointedtotheMultiplicand
MOVAX,[SI] ;MultiplicandhastobeinAXregister
MOVBX,[SI+2] ;SI+2pointedtotheMultiplierandmoveittoBX
IMULBX ;Performthesignmultiplicationusingsign
;Multiplicationoperator(IMUL)
MOVPROD,AX ;32bitproductstoredinDXAXregisters
MOVPROD+2,DX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
INPUT:Multiplicand2,
Multiplier 1
OUTPUT:DXFFFF
AXFFFE ;Resultisintwocomplementform.
-14-
x)16BitDivisionforUnsignednumbers
DATASEGMENT
NUM1DW4567H,2345H
NUM2DW4111H
QUO DW 2 DUP(0)
REM DW 1 DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM1 ;Move the lower bit of Dividend to AX
MOVDX,NUM1+2 ;MovethehigherbitofDividendtoDX
DIVNUM2 ;PerformtheDivisionoperation
MOVQUO,AX ;StorethequotienttoAX
MOVREM,DX ;StoretheremindertoDX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
INPUT:Dividend23454567,
Divisor 4111,
0UTPUT:AX8AC5H(quotient);DX
0952H(reminder);
-15-
xi)16BitDivisionforSignednumbers
DATASEGMENT
NUM1DW4567H,2345H
NUM2DW4111H
QUO DW 2 DUP(0)
REM DW 1 DUP(0)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,NUM1 ;MovethelowerbitofDividendtoAX
MOVDX,NUM1+2 ;MovethehigherbitofDividendtoDX
CWD
IDIVNUM2 ;PerformthesignDivisionoperationusingIDIV
MOVQUO,AX ;StorethequotienttoAX
MOVREM,DX ;StoretheremindertoDX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
INPUT:Dividend44444444,
Divisor 2222,
0UTPUT:AXFE(quotient);
DXFF(reminder) ;Resultisintwocomplementform.
-16-
3)PROGRAMSONBRANCHINSTRUCTIONS
i)Tofindweatherisevenorodd
DATASEGMENTX
DW27H
MSG1DB19,13,'NUMBERISEVEN$'
MSG2DB10,13,'NUMBERISODD$'
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAX,X
TESTAX,01H ;TestforEven/Oddnumber.
JNZEXIT ;ifitisEvengotoExitlabel.
MOVBL,2
DIVBL
CMPAH,0H
JNZEXIT
LEADX,MSG1 ;DeclareitisEvennumber.
MOVAH,09H
INT21H
JMPLAST
EXIT:LEADX,MSG2 ;DeclareitisOddnumber.
MOVAH,09H
INT21H
LAST:MOVAH,4CHINT
21H
CODEENDS
ENDSTART
Result:Output:NumberisODD
-17-
ii)TofindnumberofLogicalonesandzerosinagivendata
DATASEGMENTX
DB0AAHONE
DB?ZERODB
?
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAH,X
MOVBL,8 ;InitializeBLto8.
MOVCL,1 ;InitializeCLto1.
UP:RORAH,CL ;Performthesinglebitrotateoperation
;withrespecttoright.
JNCDOWN ;IfnocarrygotoDOWNlabel.
INCONE ;Incrementone.
JMPDOWN1 ;Jump to DOWN1.
DOWN:INCZERO ;Increment ZERO.
DOWN1:DECBL ;DecrementtheBL.
JNZUP ;IfnozerogotoUPlabel.
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
Output:Ones04
Zeros04
-18-
iii)Programtofindlargestnumberamongthegivendata
DATASEGMENT ;startofdatasegment
XDW0010H,52H,30H,40H,50H
LARDW?
DATAENDS ;endofdatasegment
CODESEGMENT ;startofcodesegment
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;initializedatasegment
MOVDS,AX
MOVCX,05H ;loadCXregisterwithnumberofdatawords
inX
LEASI,X ;initializeSItopointtothefirstnumber
MOVAX,[SI] ;makeacopyofthenumberpointedbySIin
AX
DECCX ;setcountvalueinCXforcomparison
UP: CMPAX,[SI+2] ;comparetwoadjacentnumbers(oneisin
AXandtheotherispointedbySI+2)
JACONTINUE ;ifcontentsofAXisgreaterthanthenext
numberinarrayretainthecontentsofAX
MOVAX,[SI+2] ;ifnotmakeacopyofthelargernumberin
AX
CONTINUE:ADDSI,2 ;pointtothenextnumber
DECCX ;decrementCXtocheckifallnumbersare
compared
JNZUP ;ifnocontinuetocompare
MOVLAR,AX ;ifyesmakeacopyofAX(largestnumber)
inuserdefinedmemorylocationLAR
MOVAH,4CH ;terminatetheprocess
INT21H
CODEENDS ;endofcodesegment
ENDSTART
-19-
4)PROGRAMUSINGSUBROUTINES:
PROGRAMTOFINDFACTORIALOFANUMBERUSINGPROCEDURE
NUMEQU3
MSGDB'FACTORIALOF',NUM+'0','IS:'
ASCRESDB4DUP(?),'H',0DH,0AH,'$'
RESDW?
HEXCODEDB'0123456789ABCDEF'
.CODE
HEX_ASCPROC
MOVDL,10H
MOVAH,0
MOVBX,0
DIVDL ;DIVAL/DLWHEREAL=CHAR&DL=10H
MOVBL,AL ;AL=QUOTIENT
MOVDH,HEXCODE[BX]
MOVBL,AH ;AH=REMAINDER
MOVDL,HEXCODE[BX]
RET
HEX_ASCENDP
FACTPROC
CMPAX,01 ;IFN=1,FACT=1ELSEFACT=N*FACT(N1)
JEEXIT
PUSHAX
DECAX ;N1
CALLFACT ;FACT(N1)
POPAX
MULRES ;N*FACT(N1)
MOVRES,A X ;RES=FACTORIAL
RET
EXIT:
MOVRES,01
RET
FACTENDP
MAIN:
MOVAX,@DATA
MOVDS,AX
MOVAX,NUM ;AX=N
CALLFACT
MOVAL,BYTEPTRRES+1 ;CONVERTMSBOFRESULTTOASCII
CALLHEX_ASC
-20-
MOVASCRES,DH
MOVASCRES+1,DL
MOVAL,BYTEPTRRES;CONVERTLSBOFRESULTTOASCII
CALLHEX_ASC
MOVASCRES+2,DH
MOVASCRES+3,DL
MOVAH,09H
MOVDX,OFFSETMSG;DISPLAYMSG
INT21H
MOVAH,4CH ;EXIT
INT21H
ALIGN16
ENDMAIN
Output:
Factorialofthenumberis06
-21-
5)PROGRAMTOSORTTHEARRAYS
DATASEGMENT ;startofdatasegment
xDW42H,34H,26H,17H,09H
LENEQU05
ASCDDB10DUP(0)
DATAENDS ;endofdatasegment
CODESEGMENT ;startofcodesegment
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;initializedatasegment
MOVDS,AX
MOVBX,LEN1 ;loadBX(counter1) withcount
value(number ofdatawordsinarray1)
MOVCX,BX ;make a copy ofthe countvalueinCX(counter2)
UP1: MOVBX,CX ;loadtheupdatedCXinBX
LEASI,X ;SI pointstothe firstnumberinthearray
UP: MOVAX,[SI] ;make a copy ofthe numberpointedby SI in
AX
MOVDX,[SI+2] ;make a copy ofthe nextnumberinDX
CMPAX,DX ;compare boththe numbers
JBDOWN/JADOWN ;ifAX< DX/AX > DX retainthemasitis
MOV[SI],DX ;ifnotsortthe numbersinascendingorder
MOV[SI+2],AX
DOWN: INCSI ;pointtothenextnumber
INCSI
DECBX ;decrementthecounter1
JNZUP ;comparetillthelargernumberissortedat
theendofthearray
DECCX ;decrementcounter2
JNZUP1 ;comparetillthenumbersaresortedin
ascendingorder
MOVAH,4CH ;terminatetheprocess
INT21H
CODEENDS ;endofcodesegment
ENDSTART
OUTPUT:0917263442
-22-
6)PROGRAMTOUSESOFTWAREANDHARDWAREINTERRUPTSFORRECEIVINGAINPUT
FROMKEYBOARDANDDISPLAYITONSCREEN.
DATASEGMENT
INKEYDB?
BUFDB20DUP(0)
MESDB10,13,BAPATLAEINGINEERINGCOLLEGE$'DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START: MOVAX,DATA
MOVDS,AX
MOVAH,01H ;DOSfunctiontoreadacharacterfromkeyboard;with
echo.[AL=8bitcharacter]
INT21H
MOVINKEY,AL ;ReturnsASCIIvalueofthepressedkey.
MOVBUF,10 ;Loadhowmanycharacterstoenter.
MOVAH,0AH ;Dosfunctiontoreadstringofcharactersfrom
;keyboard.
LEADX,BUF
INT21H
MOVAH,06H ;Dos function to display a
character.MOVDL,'A';Loadthecharactertobedisplayed.
INT21H
MOVAH,09H ;Dosfunctiontoreadstringofcharactersfrom
;keyboard.
LEADX,MES ;DX=offsetaddressofthemessage
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
-23-
7)PROGRAMTOFINDTHELARGESTNUMBERUSINGDOSDISPLAYINTERRUPTS
DATASEGMENT ;startofdatasegment
XDW0010H,0052H,0030H,0040H,0050H
MESDB10,13,'LARGESTNUMBERAMONGTHESERIESIS$'
DATAENDS ;endofdatasegment
CODESEGMENT ;startofcodesegment
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA ;initializedatasegment
MOVDS,AX
MOVCX,05H ;loadCXregisterwith
numberofdatawordsinarray
XLEASI,X ;SIpointstostartofdataword
arrayX
MOVAX,[SI] ;makeacopyofthe
firstnumberinAX
DECCX ;initializeCXwithcount
valueforcomparison
UP: CMPAX,[SI+2] ;comparethecontentsofAX
andthenumberpointedbySI+2
JACONTINUE ;ifAXisgreaterthanthenext
numberinarraythenretain
thecontentsofAX
MOVAX,[SI+2] ;elsemakeacopyofthenext
number(largernumber)in
AX
CONTINUE:ADDSI,2 ;pointtonextnumberinarray
DECCX ;decrementCX
JNZUP ;checkifallnumbers
are
comparedifnocontinue
comparison
AAM ;ifyesconvertlargestbinary
numberinAXtounpackedBCD
ADDAX,3030H ;convertunpackedBCDto
unpackedASCIIequivalent
MOVBX,AX ;makeacopyofitinAX
MOVAX,09H ;displaythemessagestoredat
userdefinedmemorylocation
MES
LEADX,MES
INT21H
MOVDL,BH ;displaythelargestnumber
MOV
AH,02HINT
21H
MOVDL,BL
INT21H
MOVAH,4CH ;terminatetheprocess
INT21H
CODEENDS ;endofcodesegment
-24-
ENDSTART
OUTPUT:LARGESTNUMBERAMONGTHESERIESIS0052
-25-
8)PROGRAMONDACWAVEFORMGENERATIONS:
ALPTOGENERATEARECTANGULARFREQUENCYOF2KHzFREQUENCY
theSignalstayslowforsometime.
thatthesignalstayshighforsometime
generatedofRequiredfrequency
rectangularwaveof2KHzfrequencyisgenerated
rectangularwaveisgenerated
-26-
8504 NOP 90 Introducesadelay
-27-
9)STEPPERMOTORINTERFACE
DATASEGMENT
PORTA EQU 120H
PORTB EQU 121H
PORTC EQU 122H
CWRDEQU123H
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START: MOVAX,DATA
MOVDS,AX
MOVAL,80H ;initialise8255,portaaso/pport
MOVDX,CWRD
OUTDX,AL
MOVDX,PORTA
MOVAL,88H ;loadinitialbitpattern
OUTDX,AL ;outputonporta
UP: CALLDELAY
ROLAL,01H ;rotatelefttogetexitationsequenceof11,22,44,88
OUTDX,AL
JMPUP
DELAY: MOVCX,0FFFFH;delaycanbeadjustedtogetdifferentspeeds
UP2: MOVBX,0FFH
UP1: DECBX
JNZUP1
DECCX
JNZUP2
RET
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
-28-
10)i)MATRIXKEYBOARDINTERFACING
DATASEGMENT
PORTA EQU 120H
PORTC EQU 122H
CWRDEQU123H
ARRAYDB'0123456789.+*/%ACK=MMMM'
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START: MOVAX,DATA
MOVDS,AX ;initialisedatasegment
MOVAL,90H ;initialise8255portaasi/pandportcaso/p
MOVDX,CWRD
OUTDX,AL
REPEAT: MOVDX,PORTC ;makefirstrowofthekeyboardhighthroughpc0
MOVAL,01
OUTDX,AL
MOVDX,PORTA
INAL,DX ;inputcontentsofportaandcheckifkeyispressed
CMPAL,00 ;infirstrow.
JZNEXT
JMPFIRSTROW
NEXT: MOVDX,PORTC ;ifkeynotfoundinfirstrow,checkifkeyisin
;secondrow
MOVAL,02
OUTDX,AL
MOVDX,PORTAIN
AL,DX
CMPAL,00
JNZSECONDROW
MOVAL,04 ;ifkeynotfoundthencheckforkeyclosurein
;thirdrow
MOVDX,PORTC
OUTDX,AL
MOVDX,PORTAIN
AL,DX
CMPAL,00H
JNZTHIRDROW
JMPREPEAT
FIRSTROW:CALLDELAY ;checkallthekeysonebyoneinfirstrow
LEASI,ARRAY
-29-
UP: SHRAL,1
JCDISPLAY ;ifkeyfoundjumptothedisplaysubroutine
INCSI
JMPUP
JMPDISPLAY
SECONDROW:CALLDELAY
LEASI,ARRAY+08H ;secondrowkeysfromarray+08
UP1:SHRAL,1
JCDISPLAY ;ifkeyfoundjumptothedisplaysubroutine
INCSI
JMPUP1
THIRDROW:CALLDELAY
LEASI,ARRAY+10H ;thirdrowkeysfromarray+16(dec)
UP2: SHRAL,1
JCDISPLAY ;ifkeyfoundjumptothedisplaysubroutine
INCSI
JMPUP2
JMPDISPLAY
DISPLAY: MOVDL,[SI]
CMPDL,97 ;24indecimal.8x3rows=24keys
JZEXIT
MOVAH,02H ;displaykeynoinascii
INT21H
JMPREPEAT
EXIT:MOVAH,4CH
INT21H
CODEENDS
ENDSTART
-30-
ii)SEVENSEGMENTDISPLAYINTERFACE
DATASEGMENT
PORTA EQU 120H
PORTB EQU 121H
PORTC EQU 122H
CWRDEQU123H
TABLEDB8CH,0C7H,86H,89HDATA
ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START: MOVAX,DATA ;intialisedatasegment
MOVDS,AX
MOVAL,80H ;initialise8255portbandportcaso/p
MOVDX,CWRDOUT
DX,AL
MOVBH,04 ;BH=noofdigitstobedisplayed
LEASI,TABLE ;SI=startingaddressoflookuptable
NEXTDIGIT:MOVCL,08 ;CL=noofsegments=08
MOVAL,[SI]
NEXTBIT: ROLAL,01
MOVCH,AL ;saveal
MOVDX,PORTB ;onebitissentoutonportb
OUTDX,ALMOV
AL,01
MOVDX,PORTC ;oneclockpulsesentonpc0
OUTDX,ALDEC
AL
MOVDX,PORTC
OUTDX,AL
MOVAL,CH ;getthesevensegmentcodebackinal
DECCL ;sendall8bits,thusonedigitisdisplayed
JNZNEXTBITDEC
BH
INCSI ;displayallthefourdigits
JNZNEXTDIGIT
MOVAH,4CH ;exittodos
INT21H
CODEENDSEND
START
-31-
12)ProgramsonDataTransferInstructionsfor8051Microcontroller:
Aim:
Writea8051ALPtocopyablockof10bytesfromRAMlocationstartingat37hto
RAMlocationstartingat59h.
Program:
ORG00H
MOVR0,#37h ;sourcepointer
MOVR1,#59h ;destpointer
MOVR2,#10 ;counter
L1:MOVA,@R0
MOV@R1,A
INCR0
INCR1
DJNZR2,L1
END
Output:
R0 37H R1 59H
05 05
04 04
03 03
02 02
01 00
05 05
04 04
03 03
02 02
01 01
-32-
13)ProgramsonArithmeticandLogicalOperations:
a) ADDITIONOFFIRST10NATURALNUMBERS
Program:
ORG 00H
MOV R0,#0AH
LOOP:ADDC A,R0
DJNZ R0,LOOP
MOV R1,A
END
Output:
R1: 37h
b)ADDITIONOFTWO16BITNUMBERS:
Program:
MOVA,R7;Movethelowbyteintotheaccumulator
ADDA,R5;Addthesecondlowbytetotheaccumulator
MOVR3,A;Movetheanswertothelowbyteoftheresult
MOVA,R6;Movethehighbyteintotheaccumulator
ADDCA,R4;Addthesecondhighbytetotheaccumulator,pluscarry.
MOVR2,A;Movetheanswertothehighbyteoftheresult
MOVA,#00h;Bydefault,thehighestbytewillbezero.
ADDCA,#00h;Addzero,pluscarryfromstep2.
MOVMOVR1,A;Movetheanswertothehighestbyteoftheresult
Output:
answernowresidesinR1,R2,andR3.RET
-33-
14)Programson8051Applications:
Aim:
Writea8051ALPusingTimer0tocreatea10khzsquarewaveonP1.0
Program:
ORG00H
MOVTMOD,#02H ;8bitautoreloadmode
MOVTH0,#50 ;50reloadvalueinTH0
SETBTR0 ;starttimer0
CLRTF0 ;cleartimer0overflowflag
CPLP1.0 ;toggleportbit
SJMPLOOP ;repeat
END
-34-