2、sage>MPYEQUMUL'利用MPY替代MUL指令注意EQU偽操作中的表達式名是不允許重復定義的,而=偽操作則允許重復定義。上述兩個偽操作和數(shù)據(jù)定義DB/DW/DD等不同之處,主要體現(xiàn)在:EQU和=不分配內(nèi)存空間,僅僅定義了數(shù)據(jù),編譯時用定義的數(shù)據(jù)替換標識符數(shù)據(jù)定義偽指令DB/DW/DD分配相應的內(nèi)存空間通用數(shù)據(jù)傳輸指令傳送指令MOV數(shù)據(jù)交換指令XCHG地址偏移量加載LEAMOV指令MOVtarget,sourcereg,regmem,regreg,memmem,immedreg,immed存儲器操作數(shù)之間不能相互傳值兩個操作數(shù)的類型
3、須一致段寄存器和立即數(shù)之間不能相互傳值CS不能作為目標寄存器使用合法指令舉例寄存器傳送MOVEDX,ECXMOVES,AXMOVBYTEFLD,AHMOV[DI],BX立即數(shù)傳送MOVCX,40HMOVBYTEFLD,25HMOVWORDFLD[BX],16H直接存儲器傳送MOVCH,BYTEFLDMOVCX,WORDFLD[BX]段寄存器傳送MOVAX,DSMOVWORDFLD,DS非法MOV指令MOVDL,WORD_VALMOVDX,BYTE_VAL注:PTR的使用MOVDL,WORDPTRWORD_VALMOVDX,BYTEPTPB
4、YTE_VALMOVBYTE_VAL1,BYTE_VAL2'存儲器之間不能之間傳送MOVES,23'立即數(shù)到段寄存器不能直接傳送MOVES,DS‘段寄存器間不能傳送MOVCS,23交換數(shù)據(jù)指令XCHGXCHGtarget,sourcereg,regreg,memmem,regMOV和XCHG不能執(zhí)行存儲器之間的數(shù)據(jù)傳送交換數(shù)據(jù)操作的有效方法不需臨時的空間排序經(jīng)常需要此操作ItworksonlywiththegeneralregistersAX,BX,CX,DXBP,SI,DI,SPSEG格式:SEG變量名或者標號例如MOVAX,SEGK1
5、MOVAX,SEGDATAXOFFSET和LEA指令OFFSET操作符取偏移量MOVBX,OFFSETDATA1LEA利用偏移量初始化寄存器BX,SI,DI等,為的是指向存儲器的一個地址舉例DATA1DB25DUP(?)DATA2DB?……LEABX,DATA1'裝入偏移地址MOVDATA2,[BX]'傳送DATA1的第一個字節(jié)數(shù)據(jù)等效的指令LEABX,DATA1‘裝入偏移地址??MOVBX,DATA1LDS和LESLDSREG,SRC執(zhí)行的操作:(REG)?(SRC)(DS)?(SRC+2)把源操作數(shù)指定的4個相繼字節(jié)送到由指令指定的寄
6、存器及DS寄存器中.該指令常指定SI寄存器.LESREG,SRC執(zhí)行的操作:(REG)?(SRC)(ES)?(SRC+2)把源操作數(shù)指定的4個相繼字節(jié)送到由指令指定的寄存器及ES寄存器中.該指令常指定DI寄存器.地址偏移BDB4Fh,20h,3ChWDW2048,-100,0MOVBX,W+2MOVB+1,AHMOVAH,B+5MOVDX,W-3匯編器計算地址的偏移注意:匯編的時刻計算地址MOVAX,B-1不是從B的數(shù)值中減去1TYPE運算符例如V1DB‘ABCD’V2DW1234H,5678HV3DDV2……MOVAL,TYPEV1;0
7、1HMOVBL,TYPEV2;02HMOVCL,TYPEV3;04HLENGTH和SIZELENGTH返回數(shù)組變量元素的個數(shù)SIZE返回數(shù)組元素的字節(jié)大小Size=length*typeORG和$ORGn定位常數(shù)值為n的偏移地址$當前偏移地址例:ORG$+8可以表示跳過8個字節(jié)的存儲區(qū)例題例如:BUFDW1,2,$+1,3如果BUF的偏址為10H,問內(nèi)存情況如何?例如:BUFDB1,2,3,4ABCEQU$-OFFSETBUF問ABC等于什么?PTR強制修改操作數(shù)的類型例如:MOV[BX],AX對MOV[BX],4錯改為:MOVWORDP
8、TR[BX],4MOVBYTEPTR[BX],4簡單的算術(shù)運算ADDdest,sourceSUBdest,sourceINCdestDECdest操作數(shù)的類型一定要一致對標志寄存器起作用源操作