![第7章 微处理器程序设计_第1页](http://file4.renrendoc.com/view/6d70bde924afaa8d59ec103aec6961c9/6d70bde924afaa8d59ec103aec6961c91.gif)
![第7章 微处理器程序设计_第2页](http://file4.renrendoc.com/view/6d70bde924afaa8d59ec103aec6961c9/6d70bde924afaa8d59ec103aec6961c92.gif)
![第7章 微处理器程序设计_第3页](http://file4.renrendoc.com/view/6d70bde924afaa8d59ec103aec6961c9/6d70bde924afaa8d59ec103aec6961c93.gif)
![第7章 微处理器程序设计_第4页](http://file4.renrendoc.com/view/6d70bde924afaa8d59ec103aec6961c9/6d70bde924afaa8d59ec103aec6961c94.gif)
![第7章 微处理器程序设计_第5页](http://file4.renrendoc.com/view/6d70bde924afaa8d59ec103aec6961c9/6d70bde924afaa8d59ec103aec6961c95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CHAPTER7ProgrammingtheMicroprocessor
(第7章微处理器程序设计)(P.217)MachineLanguageandAssemblyLanguage
(机器语言和汇编语言)(P.105)Machinelanguageisthenativebinarycodethatthemicroprocessorunderstandsandusesasitsinstructiontocontrolitsoperation.Anobjectprogramiswritteninmachinelanguage.Assemblylanguageisasymbolicprogramminglanguage.Anassemblysourceprogramiswritteninassemblylanguage.Example AssemblyLanguage:ADDAL,2MachineLanguage:0000010000000010TheAssembler
(汇编程序)(P.218)Theassemblerprogramconvertsasymbolicsourcemodule(assemblysourceprogram)intoahexadecimalobjectfile.Therearetwoassembleroftenusedbythe8086/8088microprocessor.OneisASM-86,andanotherisMASM-86macroassemblerprogram.assemblysourceprogramAssemblerobjectprogramProgrammingthe8086/8088Microprocessor
(8086/8088汇编语言源程序开发)Toprogrammingthe8086/8088microprocessor,anassemblysourceprogramisgenerated,assembled,linkedanddebuggedintheMSDOSorPCDOSoperatingsystem.Therearetwoprogrammingforms.MemorymodelsFull-segmentdescriptionsMemorymodels
(存储模型)(P.776)ModelTypeDescriptionTinyAlldataandcodemustfitintoonecodesegment.SmallThismodelcontainstwosegments:onedatasegmentof64Kbytesandonecodesegmentof64Kbytes.MediumThismodelcontainsonedatasegmentof64Kbytesandanynumberofcodesegmentsforlargeprograms.CompactOnecodesegmentcontaintheprogram,andanynumberofdatasegmentscontainthedata.LargeThelargemodelallowsanynumberofcodeanddatasegments.STOSDATA4ES:[DI]=EAX;DI=DI+4(ifDATA4isadoubleword)TABLEA-1MemorymodelsfortheassemblerEXAMPLEA-4
.MODEL SMALL .STACK 100H .DATA FROG DB 10 DATA1 DB 100DUP(2) .CODEBEGIN: MOV AX,DGROUP MOV DS,AX ………. END BEGINFull-segmentdescriptions
(完整的段描述)EXAMPLE: DATA SEGMENT DATA1DB0F8H,60H,0ACH,74H,3BH DATA2DB0C1H,36H,9EH,0D5H,20H DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX …….. CODEENDSENDSTARTCharacteristics
(汇编语言源程序的特点)Anassemblysourceprogramcontainssomesegments.AsegmentisdefinedwithSEGMENT/ENDS.Anassemblysourceprogramiscomposedofagroupofassemblystatements.Anassemblystatementiswritteninaline.TheassemblysourceprogramisendedwithENDdirective.Formatofanassemblystatement
(汇编语言语句的组成)Therearetwokindofinstructions.DirectivestatementInstructionstatementDirectivestatement
(指示性语句)Format:VariablenameDirectiveOperand;NotationNoteAfterandirectivestatementisassembled,thereisnoobjectcodesgeneratedanditisnotexecutedbythemicroprocessor.Whenandirectivestatementisassembled,itallocatedmemorylocationsforthedataThenotationisprefixedwithasemicolon.Instructionstatement
(指令性语句)FormatLabel:InstructionopcodeOperand;NotationNoteAninstructionstatementisconvertedintoobjectcodebyanassemblerandisexecutedbythemicroprocessor.Alabelisfollowedwithacolon.ElementsofAssemblyLanguage
(汇编语言的基本元素)TheelementsoftheassemblylanguagearesymbolicaddressInstructionopcodeDirectiveOperandNotationsymbolicaddress
(符号地址)VariableAvariableisthenameofseveralmemorylocationsthatstorethedata.Itrepresentsthestartingaddressofthesememorylocations.Avariableisusuallylocatedindatasegment.Itcanalsolocatedinothersegment,forexample,theextrasegment.Avariablecanbedefinedasbyte-sized,word-sizedordoubleword-sizedbythedirectives.LabelAlabelrepresentsthestartingaddressofaninstruction.Alabelcanbedefinedasneartype(bydefault)orfartypebythedirective.InstructionOpcodeandDirective
(指令操作码和伪指令)AinstructionopcoderepresentstheoperationofaninstructionsuchasMOVandADD.DirectivessuchasDBandDWareisnotexecutedbythemicroprocessor.Thereare20directiveinASM-86.VariableDefinitionDirectivesSymbolEvaluationDirectivesDataTypeDefinitionDirectivesSegmentDefinitionDirectivesProcedureDefinitionDirectivesAssemblySourceEndDirectivesVariableDefinitionDirectives
(数据定义伪指令)DBFormat:Variablename DBOperand[,Operand]Thisdirectiveallocatememorylocationsforthebyte-sizedoperands.Thestartingaddressissymbolizedbythevariablename.Theoperandscanbeimmediate,formula,ASCII,?orDUPformula.DWFormat:Variablename DWOperand[,Operand]Thisdirectiveallocatememorylocationsfortheword-sizedoperands.Thestartingaddressissymbolizedbythevariablename.Theoperandscanbeimmediate,formula,ASCII,?orDUPformula.DBFormat:Variablename DDOperand[,Operand]Thisdirectiveallocatememorylocationsforthedoubleword-sizedoperands.Thestartingaddressissymbolizedbythevariablename.Theoperandscanbeimmediate,formula,ASCII,?orDUPformula.Example
;Assumethedatasegmentaddressis0A0CH DATA SEGMENT ;datasegmentnamedDATAstarts.0000H41H,42H,0DH,0AH BUF DB
‘AB’,0DH,0A0004H00H,00H A DW BUF0006HAAH,FFH B DW 0FFAAH0008H00H,00H,0CH,0AH C DD BUF000CH02H,42H,02H,42H M DB 2DUP(2,‘B’)0010H31H,32H,01H,02H DB ‘12’,1,2
DATA ENDS ;datasegmentend.SymbolEvaluationDirectives
(符号赋值伪指令)Formatsymbolname EQU formulaExample CREQU40H ADREQUABC ADREQUCXDataTypeDefinitionDirectives
(定义存储单元类型伪指令)ThedirectivesBYTEPTR,WORDPTRandDWORDPTRcanbeappendedtoaninstructiontospecifythetypeofthememorylocation.ExampleMOV BYTE PTR[DI],00 ;clearthecontentofthememory ;locationaddressedbyDI.MOV WORD PTR[1000],00 ;clearthecontentofthememory ;location[1000],[1001]indata ;segmentINC BYTE PTR[DI] ;incrementthecontentofthe ;memorylocationindatasegment ;addressedbyDIJMP DWORDPTR[2000] ;jumptoinstructionwhose ;addressisstoredinthememory ;location ;[2000],[2001],[2002],[2003]in ;datasegment SegmentDefinitionDirectives
(段定义伪指令)SEGMENT/ENDSFormat:segmentname SEGMENT …… segmentname ENDSNote:TheSEGMENT/ENDSdirectivesdefineandnameasegment.ASSUMEFormat:ASSUMESR:segmentname[,SR:segmentname]TheASSUMEdirectivestatementiswritteninfrontoftheprogramtoshowwhichsegmentiscodeone,andsoon.ThecontentofCSisevaluatedbythesystem.AndthecontentsofothersegmentregistersareevaluatedbytheMOVinstructionsinprogram.ProcedureDefinitionDirectives
(过程定义伪指令)FormatprocedurenamePROC[NEAR/FAR] …… …… RET procedurename ENDPTheNEARandFARdirectiveshowthetypeofprocedure.AssemblySourceEndDirectives
(源程序结束伪指令)FormatEND [label]NoteTheENDdirectiveshowtheassemblertheendofthesourceprogram.Thelabel,bydefault,isusuallytheonebeforethefirstinstructioninprogram.操作数ASM-86汇编程序允许汇编语言中操作数以常数、标号、变量和表达式等多种形式出现。(一)常数常数可以采用十进制数、二进制数、十六进制数、八进制数、科学表示法(8.75E-4)、ASCII码(‘A’、‘8’)。(二)寄存器如AX、AL、SI等。(三)标号标号代表一条指令的符号地址,必须用英文字母开头,中间可以是英文字母和数字。它可用作转移指令或过程调用指令中的符号地址。(四)变量变量代表内存中一段连续的存储区的地址(最低字节的地址)。它也必须用英文字母开头,中间可以是英文字母和数字。它可以在指令中表示存储器操作数。(五)表达式表达式是为了编程方便,允许编程者将一个运算式直接作为一个操作数使用,真正的操作数是这个表达式的运算结果。表达式可以由操作数和运算符组成,运算符有以下几种:(1)算术运算符算术运算符有+、-、*、/和MOD(取模,即取整数相除后的余数)等。例:MOVAX,100MOD17执行后,AX的内容是15。(2)逻辑运算符逻辑运算符有AND(与)、OR(或)、XOR(异或)、和NOT(非)。(3)关系运算关系运算符有EQ(=)、NE(≠)、LT(<)、GT(>)、LE(≤)、GE(≥)等。关系运算的结果只有两个值:关系成立,结果为0FFFFH,关系不成立,结果为0。(4)特殊算符①取偏移地址算符OFFSETOFFSET算符可以求出一个标号或变量的偏移量地址。如MOVSI,OFFSETDATA1,表示将DATA1的偏移量地址送SI。②取段地址算符SEGSEG算符可以求出一个标号或变量的段地址。如MOVAX,SEGARRAY。③取类型算符TYPETYPE算符可以求出变量的类型,结果是该变量的字节数;还可以求出标号的类型,NEAR类型,结果为-1,FAR类型结果为-2。④取变量个数算符LENGTH如用DW伪指令定义变量ARRAY为10个字,ARRAYDW10DUP(?)则执行MOVCX,LENGTHARRAY后,CX的内容为10。⑤取变量字节数算符SIZEARRAYDW10DUP(?)则执行MOVCX,SIZEARRAY后,CX的内容为20。⑥合成算符PTR和THISPTR用于指定存储器操作数的临时类型。如:ARRAYDB12,34,56,78,MOVAX,WORDPTRARRAY将变量ARRAY临时指定为字变量送AX(即将3412送AX)。THISH和PTR一样也是用于规定变量的类型,如果希望某一个数据区既作为字变量使用,又可以作为字节变量来使用,可以用THIS算符把它定义为字节型,再用伪指令DW将它定义为字型变量。如:ABCEQUTHISBYTEXYZDW10DUP(?)ABC和XYZ具有相同的段地址和偏移量地址,但变量ABC为字节型;变量XYZ为字型。上面2个语句实际上相当于:XYZDW10DUP(?)ABC EQUBYTEPTRXYZ⑦短标号算符SHORTSHORT算符可以将一个标号规定为短标号类型。即标号所在的语句到引用标号的语句之间的字节数,不超过8位补码所能表示的范围(-128~127)。⑧字节分离算符HIGH和LOWHIGH和LOW分别取一个数值或表达式的高字节或低字节。如:STUFFEQU1234HMOVAH,HIGHSTUFF;AH←12HMOVAL,LOWSTUFF;AL←34H注释注释是为了程序阅读方便,而加的解释和说明。在指令之后,用;号隔开。7-1MODULARPROGRAMMING(模块化的程序设计)(P.218)TheAssemblerandLinker
(汇编程序和连接程序)(P.215)Theassemblerprogramconvertsasymbolicsourcemodule(file)intoahexadecimalobjectfile.ThelinkerprogramisprovidedwithMSDOSorMASMsothatprogrammingmodulescanbelinkedtogetherintoacompleteprogram.PUBLICandEXTRN(p.219)ThePUBLICdirectiveisplacedintheopcodefieldofanassemblylanguagestatementtodefinealabelofcode,data,orentiresegmentaspublic,sothatthelabelcanbeusedbyotherprogrammodules.Example7-3 .MODEL SMALL .DATA PUBLIC DATA1 ;declareDATA1 and DATA2 ;public PUBLIC DATA2 DATA1 DB 100DUP(?) DATA2 DB 100DUP(?) .CODE .STARTUP PUBLIC READ ;declareREADpublic READ PROC FAR MOV AH,6 ;readkeyboard MOV DL,0FFH INT 21H JE READ ;ifnokeytyped RET READ ENDP ENDTheEXTRNstatementappearsinbothdataandcodesegmentstodefinelabelsasexternaltothesegment.Ifdataaredefinedasexternal,theirsizesmustbedefinedasBYTE,WORDandDWORD.Ifajumporcalladdressisexternal,itmustbedefinedasNEARorFAR.EXAMPLE7-4.MODEL SMALL.DATA EXTRN DATA1:BYTE EXTRN DATA2:BYTE EXTRN DATA3:WORD EXTRN DATA4:DWORD.CODE EXTRN READ:FAR.STARTUP MOV DX,OFFSETDATA1 MOV CX,10STARTUP: CALL READ STOSB LOOP START.EXITENDLibraries(库)(P.220)Libraryfilesallowcommonprocedurestobecollectedintooneplacesotheycanbesuedbymanydifferentapplication.Thelibraryfileisinvokedwhenaprogramislinkedwiththelinkerprogram.
CreatingaLibraryFileAlibraryfileiscreatedwiththeLIBcommand,typedattheDOSprompt.Alibraryfileisacollectionofassembled.OBJfilesthateachperformoneprocedureortask.PleasenoticethatthenameoftheproceduremustbedeclaredPUBLICinalibraryfile.Oncethelibraryfileislinkedtoyourprogramfile,onlythelibraryproceduresactuallyusedbyyourprogramareplacedintheexecutionfile.Don’tforgettouselabelEXTRNwhenspecifyinglibrarycallsfromyourprogrammodule.EXAMPLE7-5,7-6,7-7(P.221)Macros(宏)(P.222)Amacroisagroupofinstructionsthatperformonetask,justasaprocedureperformsonetask.Thenameofthemacroandanyparametersassociatedwithitaretyped,andtheassemblertheninsertsthemacrointotheprogram.MacrosequencesexecutefasterthatprocedurebecauseaprocedureisaccessedviaaCALLinstruction,whiletheinstructionsofthemacroareplacedinyourprogrambytheassembleratthepointofusage.TheMACROandENDMdirectivedelineateamacrosequence.EXAMPLE7-8MOVE MACRO A,B ;;movesthe word- ;;sizedcontentsof ;;memorylocationB ;;intoword-sized ;;memorylocationA. PUSH AX MOV AX,B MOV A,AX POP AX ENDM
MOVE VAR1,VAR2 ;usetheMOVEmacro
PUSH AX MOV AX,VAR2 MOV VAR1,AX POP AX
PUSH AX MOV AX,VAR4 MOV VAR3,AX POP AX
MOVE VAR3,VAR4 ;usetheMOVEmacroTheModularProgrammingApproach
(模块化的程序设计方法)(P.231)Themodularprogrammingapproachofteninvolvesateamofpeoplewithdifferentprogrammingtasks.Often,theteammanagerdevelopsthesystemflowchartofshell,andthendividesitintomodulesforteammembers.Ateammembermightbeassignedthetaskofdevelopingamacrodefinitionfile.Anotherteammembermightbeassignedthetaskofdevelopingtheprocedures.Finally,severalprogramfilesormodulesmightbeformedintothefinalsystem.ProgrammingProcedure
(程序设计过程)Analyzetheprogrammingdutyanduseaproperalgorithm.Drawtheflowchart.Start/EndIn/OutProcessDirectionLineNYJudgementPageLinkSymbolFIGUREGeneralSymbolinaflowchartEdittheprogram.Assemble,linkanddebugtheprogram.EditasourcefileAssemblethesourcefile(ASM/MASM)Issyntaxwrong?NYLinkthesourcefile(LINK)NYYFIGUREProgrammingProcedureIssyntaxwrong?Debugtheobjectfile(DEBUG)Islogicwrong?NExecuteexecutablefileEndBasicArchitecture
(基本结构)Therearethreebasicarchitectureforanassemblysourceprogram.SequentialarchitectureBrancharchitectureLooparchitectureProcedureSequentialarchitecture
(顺序结构)Theprogramisexecutedintheorderthattheinstructionsarewritten.ExampleNword-sizeddataarestoredindatasegment.TheyareaccessedwithSI.ProgramtosumthesedatawithAXandstoretheresultinSUM.AllocatememoryforNWord-sizeddataandSUMInitializethesegmentregistersSI←dataoffsetaddressAX←AX+[SI]SavetheresultinSUMEndFigureTheflowchartofsummingNword-sizeddataStartAX←0SI←SI+1SI←SI+1AX←[SI]+AX⋮⋮DATA SEGMENTNUM DW 100 DUP(?) ;AssumeN=100SUM DW ? DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODEGO: MOV AX,DATA MOV DS,AX ;initializethedatasegmentregister XOR AX,AX ;[AX]←0 MOV SI,OFFSETNUM ;moveaoffsetaddressintoSI ADD AX,[SI] ;sumisinAX INC SI INC SI ADD AX,[SI] ;repeataddition INC SI INC SI ADD AX,[SI]
⋮ MOV SUM,AX ;storetheresultinSUM NOP NOPCODE ENDS END GOBrancharchitecture
(分支结构)Torealizethebrancharchitecture,itisusuallytojumptodifferentinstructionsunderdifferentconditionsuchasflagbits(C,Z,S,O,P),CX.TheinstructionsthatinfluencetheflagbitsareCMP,CMPSB,CMPSW,algorithmandlogicinstructions,shiftandrotateinstructions.TheinstructionsthatgeneratejumpoperationareJUMPandconditionalJUMPinstructions.Example:Programtoreadtwodatafromthekeyboard.Comparethemanddisplaythebiggeroneonthevideodisplay.A>B?NYA←BEndStartReadA,BfromthekeyboarddisplaythebiggeroneonthevideodisplaySTACK SEGMENT DW 100DUP(?)STACK ENDSCODE SEGMENT ASSUME SS:STACK,CS:CODEGO: MOV AH,1 INT 21H ;Callthe1DOSfunctiontoread ;onedatafromthekeyboard MOV BL,AL MOV AH,1 INT 21H ;Readanotherdata CMP AL,BL ;Comparethesetwodata JG LA ;ifAL>BLthenjumptoLA MOV AL,BLLA: MOV DL,AL MOV AH,2 INT 21H ;Call2DOSfunctiontodisplaythethebigger ;dataonthevideodisplay MOV AH,4CH INT 21H ;Call4CHDOSfunctiontoreturnDOSCODE ENDS END GOExample:Thedatainputfrom3portiscomparedwithareferenceparameter.Theabsolutevalueoftheirdifferenceisoutputto4port.A>B?NYA-BEndStartInputadataBfrom3portOutputthedifferenceto4portDefineareferenceparameterAB-ADATA SEGMENTA DB 6 ;DefineareferenceDATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODEGO: MOV AX,DATA MOV DS,AX MOV BL,A IN AL,3 ;Inputadatafrom3port CMP AL,BL ;Comparewithreference JG LB ;iflargerthan,thenjumptoLB SUB BL,AL MOV AL,BL ;Difference→AL JMP LB1LB: SUB AL,BLLB1: OUT 4,AL ;Outputthedifferenceto4port NOP NOP NOPCODE ENDS END GOExample:Countseparatelythenumbersofexcellent,good,medium,passingandfailstudentinaclass.Inputendsymbol=‘9’?NYEndStartInitializedataA=A+1Inagradefromthekeyboard=‘5’?Y=‘4’?NB=B+1Y=‘3’?NC=C+1Y=‘2’?NB=B+1YNE=E+1DATA SEGMENTA DB 0B DB 0C DB 0D DB 0E DB 0DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODEGO: MOV AX,DATA MOV DS,AXBEGIN: MOV AH,1 INT 21H ;Inputagradefromkeyboard CMP AL,‘9’ ;Isendsymbol‘9’? JE G1 ;Yes,jumptoG1A1: CMP AL,‘5’ JNE B1 INC A ;A←A+1 JMP BEGINB1: CMP AL,‘4’ JNE C1 INC B ;B←B+1 JMP BEGINC1: CMP AL,‘3’ JNE D1 INC C ;C←C+1 JMP BEGIND1: CMP AL,‘2’ JNE E1 INC D ;D←D+1 JMP BEGINE1: INC E ;E←E+1 JMP BEGING1: NOP NOP NOPCODE ENDS END GOLooparchitecture
(循环结构)Inlooparchitecture,thereisaloopinstructionsuchasLOOP、LOOPZ/LOOPEorLOOPNZ/LOOPNEthatmaketheCPUrepeatsomeinstructions.FIGUREAsinglelooparchitecture
Conditionistrue?NYLoopprocessingEndStartInitializationSavetheresultParametermodificationLoopcontrolLoopendLoopinitializationLoopprocessingExampleTheASCIIcode‘0’~’9’aredisplayedonthevideodisplay.CODE SEGMENT ASSUME CS:CODEBEGIN: MOV CX,0AH ;initializeloopcounter MOV DL,30H MOV AH,2DISPLAY: INT 21H ;callthedisplaymoduleof ;theDOS INC DL ;modifytheASCIIcode LOOP DISPLAY MOV AH,4CH INT 21H ;returntheDOSCODE ENDS END BEGINExample:AF3Hisconvertedintoadecimalandisdisplayedonthevideodisplay.
DoubleloopArchitectureAL-[BX]<0?NYDL←DL+1EndStatBX←KIOK,AL←0F3H,CX←3DL←30HAL←AL+[BX],displaytheASCIIcodeinDLBX←BX+1CX=0?YNReturntoDOSInnerloopInitializationLoopcontrolLoopprocessing
OuterloopInitializationLoopprocessingLoopcontrolDATA SEGMENTKIOK DB 100,10,1 ;theweightofdecimalDATA ENDSSTACK SEGMENT DB 100DUP(?)TOP LABEL WORDSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATA MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,TOP ;thestacktopisaccessedwithSP MOV AL,0F3H ;convert11110011Bintoa ;decimal LEA BX,KIOK MOV CX,3 ;outloopcountCVDEC: MOV DL,30H ;’0’CVDEC1: SUB AL,[BX] JB CVDEC2 ;ifAL-[BX]<0,jumptoCVDEC2
INC DL ;ifAL-[BX]>0,incrementDL LOOP CVDEC1CVDEC2: ADD AL,[BX]
PUSH AX ;savethecontentofAX MOV AH,2 INT 21H ;calltheDOStodisplayanASCII POP AX INC BX ;findthenextdecimalbit LOOP CVDEC MOV AH,4CH INT 21H ;returntotheDOSCODE ENDS END BEGINProcedureMainprocedureCALLCALLProcedureRETAprocedurecallMainprocedureCALLCALLProcedureRETNestedcallsProcedureRETCALLExample:Sumseveralword-sizeddataDATA SEGMENTSUM DW ?FIRST DW 6,88,13,46DATA ENDSSSEG SEGMENT DW 6DUP(?)TOP LABEL WORDSSEG ENDS ;aprocedurethatsumseveralword-sizeddataisasfollowsCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:SSEGSU PROC FAR ;delineateaprocedure PUSH SI MOV SI,0 MOV AX,0NEXT: ADD AX,[BX][SI] INC SI INC SI LOOP NEXT POP SI RET ;returnstatementSU ENDP ;endaprocedureCODE ENDS ;themainprocedureisasfollowsCLR SEGMENT ASSUME CS:CLR,DS:DATA,SS:SSEGSTART: MOV AX,DATA MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,TOP ;thestacktopis ;accessedwithSP MOV CX,4 MOV BX,OFFSETFIRST CALL SU ;calltheprocedure MOV SUM,AX MOV AH,4CH INT 21H ;returntotheDOSCLR ENDS END START7-5EXAMPLEPROGRAMS
(程序举例)Example:Programtofindthemaximumofseveralword-sizeddataandsaveitinthememory.DATA SEGMENTBUFFER DW 11,23,0A12H,1001H,70H,12DCH DW 0F127H,6,8000H,255COUNT EQU 10MAX DW ?DATA ENDSCODE SEGMENTSTART PROC FAR ASSUME CS:CODE,DS:DATABEGIN: MOV AX,DATA MOV DS,AX
MOV CX,COUNT ;thedatanumber LEA BX,BUFFER MOV AX,[BX] ;copythefirstdataintoAX INC BX DEC CX ;theloopcountAGAIN: CMP AX,[BX] JGE NEXT ;ifAX>[BX],jumptothe ;labelnext MOV AX,[BX] ;elseexchangeAXand[BX]NEXT: INC BX LOOP AGAIN RETSTART ENDPCODE ENDS END STARTQuestion:Isthereanyothermethodtosolvethis problem?Example:Programtodisplayadoubleword-sizedhexadecimaldataonthevideodisplay.ThefirstalgorithmPositiontherightmostdigit.Compareitwith9.Ifitisbelow9,itisaddedwith30Hor‘0’Ifitisabove9,itisaddedwi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球开放式框架工业显示器行业调研及趋势分析报告
- 2025年全球及中国平盘电滑环行业头部企业市场占有率及排名调研报告
- 2025-2030全球TGV基板行业调研及趋势分析报告
- 2025年全球及中国完全生物基聚酰胺行业头部企业市场占有率及排名调研报告
- 幼儿绘本讲述与演绎幼儿绘本讲述的停连运用技巧讲解
- 2025景区商场蛇年新春嘉年华活动策划方案
- 2025绿洲集团工程合同管理规范
- 沙石采购合同范本工程合同
- 2025【合同范本】打印机耗材长期供货合同
- 防雷技术服务合同
- 湖南汽车工程职业学院单招职业技能测试参考试题库(含答案)
- 第2课+古代希腊罗马(教学设计)-【中职专用】《世界历史》(高教版2023基础模块)
- 中储粮兰州公司考试笔试题库
- 焊接机器人在汽车制造中应用案例分析报告
- 重建成长型思维课件
- 电捕焦油器火灾爆炸事故分析
- 质量问题分析及措施报告
- 汽修厂安全风险分级管控清单
- 现代通信原理与技术(第五版)PPT全套完整教学课件
- 病例展示(皮肤科)
- DB31T 685-2019 养老机构设施与服务要求
评论
0/150
提交评论