微机原理与接口技术 指令系统整理_第1页
微机原理与接口技术 指令系统整理_第2页
微机原理与接口技术 指令系统整理_第3页
微机原理与接口技术 指令系统整理_第4页
微机原理与接口技术 指令系统整理_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录18086CPU指令21.1.编写说明22指令索引表22.1.8086CPU指令22.2.伪操作指令151 8086CPU指令1.1. 编写说明对8086CPU的指令逐条介绍2 指令索引表2.1. 8086CPU指令序号指令分类指令说明1数据传送指令MOV DST, SRC为双操作数指令,两个操作数中必须有一个是寄存器.1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息2数据传送指令PUSH SRC 堆栈操作是以"后进先出"的方式进行数据操作.

2、入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.3数据传送指令POP DST出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.4数据传送指令XCHG OPR1, OPR2 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.5数据传送指令XLAT (OPR 可选)换码指令: 把一种代码转换为另一种

3、代码.执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.6数据传送指令LEA REG, SRC指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , BX /将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , BX /将BX的内容作为存储器有效地址送入SP中7数据传送指令LDS REG , SRC /常指定S

4、I寄存器。执行操作: REG=(SRC), DS=(SRC+2) /将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。8数据传送指令LES REG, SRC /常指定DI寄存器执行操作: REG=(SRC) , ES=(SRC+2) /与LDS大致相同,不同之处是将ES代替DS而已.9数据传送指令LAHFLAHF ( Load AH with Flags ) 标志位送AH指令/将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位, SF送D7位, ZF送D6位.执行操作: AH=PSW的低位字节。10数据传送指令SAHF SAHF ( Sto

5、re AH into Flags ) AH送标志寄存器指令/将AH寄存器的相应位送到PSW寄存器的低8位的相应位, AH的D7位送SF, D6位送ZF.执行操作: PSW的低位字节=AH。11数据传送指令PUSHF PUSHF ( PUSH the Flags) 标志进栈指令/将标志寄存器的值压入堆栈顶部, 同时栈指针SP值减2执行操作: SP=SP-1,(SP)=PSW的高8位, SP=SP-1, (SP)=PSW的低8位12数据传送指令POPF POPF ( POP the Flags ) 标志出栈指令/与PUSHF相反, 从堆栈的顶部弹出两个字节送到PSW寄存器中, 同时堆栈指针值加2执

6、行操作: PSW低8位=(SP), SP=SP+1, PSW高8位=(SP) , SP=SP+113数据传送指令IN输入输出指令(IN,OUT)只限于使用累加器AX或AL与外部设备的端口传送信息. (INput)输入指令:信息从I/O通过累加器传送到CPUIN AL , PORT /直接的字节输入,PORT是外设端口编号(即端口地址),只能取 00H 0FFH共256个端口地址.IN AX , PORT /直接的字输入,AX存储连续两个端口地址PORT+1,PORTIN AL , DX /间接的字节输入,端口地址范围可通过DX设置为0000H 0FFFFH共65536个端口地址IN AX ,

7、DX /间接的字输入14数据传送指令OUT ( OUTput)输出指令 :信息从CPU通过累加器传送到I/OOUT PORT , AL /直接的字节输出,PORT规定与IN指令相同.OUT PORT , AXOUT DX , AL /间接的字节输出OUT DX , AXMOV AL,05H OUT 27H, AL /将字节05H传送到地址27H的端口15算术运算指令ADD(ADD)ADD DST , SRC /Byte/Word执行操作: dst=dst+src1.两个存储器操作数不能通过ADD指令直接相加, 即DST 和SRC必须有一个是通用寄存器操作数.2.段寄存器不能作为SRC 和DST

8、.3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示:CF根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1, 无进(借)位时CF=0.OF根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1, 否则为0.ZF根据结果来设置:不等于0时ZF=0, 等于0时ZF=1SF根据结果的最高位来设置:最高位为0, 则SF=0.AF根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1, 无进(借)位时AF=0P

9、F根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0, 为偶数时PF=116算术运算指令ADC DST , SRC ADC( ADd with Carry)带进位加法指令ADC DST , SRC /Byte/Word执行操作: dst=dst+src+CF /与ADD不同之处是还要加上进位标志位的值.17算术运算指令INC OPR INC ( INCreament) 加1指令INC OPR /Byte/Word执行操作: OPR=OPR+11.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存器2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.18算术运算

10、指令SUB DST , SRC减法运算指令SUB ( SUBtract ) 不带借位的减法指令SUB DST , SRC /Byte/Word执行操作:dst=dst - src1.DST和SRC寻址方式及规定与ADD相同.2.影响全部标志位.(判断标志位参见ADD)19算术运算指令SBB DST , SRCSBB ( SuBtract with Borrow) 带借位减法指令SBB DST , SRC /Byte/Word执行操作:dst= dst - src - CF20算术运算指令DEC OPR DEC ( DECrement ) 减1指令DEC OPR /Byte/Word执

11、行操作:OPR = OPR - 1 /除CF标志位, 其余标志位都受影响.21算术运算指令NEG ( NEGate ) 求补指令NEG OPR执行操作:opr = 0- opr /将操作数按位求反后末位加1.22算术运算指令CMP ( CoMPare ) 比较指令CMP OPR1 , OPR2执行操作:OPR1 - OPR2 /与SUB指令一样执行运算, 但不保存结果.比情况无符号数有符号数A=BZF=1ZF=1A>BCF=0 && ZF=0SFOF=0 && ZF=0A<BCF=1 && ZF=0SFOF=1 &&

12、ZF=0A>=BCF=0 | ZF=1SFOF=0 | ZF=1A<=BCF=1 | ZF=1SFOF=1 | ZF=123算术运算指令MUL乘法运算指令,无符号数乘法指令MUL SRC /Byte/Word .执行操作:Byte => AX= AL *src /字节运算时目的操作数用AL, 乘积放在AX中 Word => DX=AX *src /字运算时目的操作数用AX, DX存放乘积的高位字, AX放乘积的低位字1.目的数必须是累加器 AX 或AL,指令中不需写出2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.24

13、算术运算指令IMULIMUL (sIgned MULtiple) 有符号数乘法指令IMUL SRC /与MUL指令相同,但必须是带符号数25算术运算指令DIV除法运算指令DIV SRC /Byte/Word 其中: SRC的规定同乘法指令MUL执行操作:Byte => AX / src /字节运算时目的操作数在AX中,结果的商在AL中 ,余数中AH中 Word=> DX,AX /src /字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中 ,余数在DX中存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR src26算术运算指令IDIVIDIV

14、(sIgned DIVied) 有符号数除法指令IDIV SRC /Byte/Word 与DIV指令相同,但必须是带符号数27算术运算指令CBW转换指令CBW (Convert Byte to Word) 字节转换为字指令CBW执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.28算术运算指令CWDCWD (Convert Word to Double word) 字转换为双字指令CWD执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFF

15、H.29算术运算指令DAA十进制调整指令当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出.在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示.压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串.非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义.压缩的BCD码调整指令DAA (Decimal Ad

16、just for Addition) 加法的十进制调整指令DAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.30算术运算指令DASDAS (Decimal Adjust for Subtraction) 减法的十进制调整指令DAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中.31算术运算指令AAA非压缩的BCD码调整指令AAA (ASCII Adjust for Addition) 加法的ASCII调整指令AAA执行操作:执行之前必须先执行ADD或ADC指令

17、,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中.32算术运算指令AASAAS (ASCII Adjust for Subtraction) 减法的ASCII调整指令AAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中.33串操作指令MOVS MOVS ( MOVe String) 串传送指令MOVSB /字节串传送 DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1MOVSW /字串传送 DF=0, SI = SI + 2

18、 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2执行操作:DI = SI ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素.在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.MOVS DST , SRC /同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.1.目的串必须在附加段中,即必须是ES:DI2.源串允许使用段跨越前缀来修饰,但偏移地址必须是SI.34串操作指令STOS STOS (STOre in

19、to String) 存入串指令STOS DSTSTOSB /存放字节串 ( DI ) = ALSTOSW /存放字串 ( DI ) = AX执行品作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值.2.DI所指向的存储单元只能在附加段中,即必须是ES:DI35串操作指令LODSLODS ( LOaD from String ) 从串取指令LODS SRCLODSB /从字节串取 AL=(SI)LODSW /从字串取 AX= (SI±1) (SI)执

20、行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容.1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.2.源串允许使用段超越前缀来改变数据存储的段区.36串操作指令REPREP (REPeat)重复操作前缀REP String Primitive /其中:String Primitive可为MOVS,STOS或LODS指令执行操作:使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP.37串操作指令CLD方向标志设置CLD (CLear Direction flag) 清

21、除方向标志指令执行操作:令DF=0, 其后SI,DI执行增量操作STD (SeT Direction flag) 设置方向标志指令38串操作指令STDSTD执行操作:令DF=1, 其后SI,DI执行减量操作39串操作指令CMPSCMPS (CoMPare String) 串比较指令CMPS SRC , DSTCMPSB /字节串比较 (SI)-(DI)CMPSW /字串比较 (SI+1)(SI) - (DI+1)(DI)执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.40串操作指令SCASSCAS (SCAn String

22、 ) 串扫描指令SCAS DSTSCASBSCASW执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位.41逻辑运算指令和移位指令AND (and) 逻辑与指令AND, OR , XOR 和 TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同.NOT是单字节操作指令,不允许使用立即数.逻辑运算均是按位进行操作,真值表如下:A:逻辑运算指令AND (and) 逻辑与指令AND DST , SRC /Byte/Word执行操作:dst = dst & src1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执

23、行结果影响SF,ZF和PF标志位.2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与MOV AL , 39H /AL= 0011 1001B39HADD AL , 0FH / AL= 0000 1001B09H 即0011 1001B39H & 0000 1111B0FH = 0000 1001B09H3.AND指令典型用法B:取出某一位的值(见TEST)42逻辑运算指令和移位指令OROR (or) 逻辑或指令OR DST , SRC /Byte/Word执行操作:dst = dst | src1.OR指令执行

24、后,将使CF=0, OF=0, AF位无定义,指令执行结果影响SF, ZF和PF标志位.2.常用于将某些位置1.将AL的第5位置1:MOV AL , 4AH / AL=0100 1010B4AHOR AL , 10H / AL=0101 1010B5AH 即0100 1010B4AH | 0001 0000B10H =0101 1010B 5AH43逻辑运算指令和移位指令XORXOR (eXclusive OR) 逻辑异或指令XOR DST , SRC /Byte/Word执行操作:dst = dst src1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志.2.XOR指令使某

25、些位维持不变则与 '0' 相异或,若要使某些位取反则与 '1'相异或.将AL的高4位维持不变,低4位取反:MOV AL, B8H /AL=1011 1000BB8HXOR AL, 0FH /AL=1011 0111BB7H 即1011 1000BB8H 0000 11110FH=1011 0111BB7H测试某一个操作数是否与另一确定操作数相等:XOR AX , 042EHJZ . /如果AX=042EH, 则ZF=TRUE(1), 执行JZ.44逻辑运算指令和移位指令NOTNOT OPR /Byte/Word执行操作:opr = opr / 01100101

26、65H =10011010 9AH1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.2.NOT指令不影响任何标志位。将AL各位取反:MOV AL,65H /AL=0110 0101B65HNOT AL /AL=1001 1010B9AH 即 0110 0101B65H=1001 1010B9AH45逻辑运算指令和移位指令TEST TEST (test) 指令TEST OPR1 , OPR2 /Byte/Word执行操作:opr1 & opr21.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0, OF=0,而AF位无定义.2.

27、TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假.检测某位是否为1:令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则 JNZ.TEST AL , 0000 00001B /测试AL最低位是否为1: 令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令JNZ THER /最低位若为1, 则ZF=FALSE(0), 执行JNZ THER, 否则执行下一条指令.或者:先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1

28、则JZ.MOV DL , AL /将AL 传送到DL,主要是不要影响AL的值. 以下测试AL的b2位是否为1NOT DL /先对操作数求反TEST 0000 0100B /令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令JZ THER /若AL的b2位为1,则ZF=TRUE(1), 执行JZ THER46逻辑运算指令和移位指令SHLB:移位指令所有的移位指令都影响标志位CF、OF、PF、SF和ZF.AF无定义.非循环逻辑移位:把操作数看成无符数来进行移位.SHL ( SHift logical Left )逻辑左移指令SHL OPR , CNT /Byte/Word执行操作:使O

29、PR左移CNT位,并使最低CNT位为全0.1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.2.移位次数由CNT决定.每次将OPR的最高位移出并移到CF,最低位补0.MOV CL , 7 /若移位多次, 先预置移位次数CLSHL DX , CL /CNT可取1或CL寄存器操作数47逻辑运算指令和移位指令SHRSHR (SHift logical Right) 逻辑右移指令SHR OPR , CNT /Byte/Word同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.48逻辑运算指令和移位指令SAL非循环算术移位:将操作数看成有符号数来进

30、行移位.SAL (Shift Arithmetic Left) 算术左移指令SAL OPR , CNT /Byte/WordSAL指令与SHL指令完全相同49逻辑运算指令和移位指令SARSAR(Shift Arithmetic Right) 算术右移指令SAR OPR , CNT /Byte/WordSAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.50逻辑运算指令和移位指令ROL循环移位指令ROL ( ROtate Left) 循环左移指令ROL OPR , CNT /Byte/Word每次移位时,最高位移出并同时移到CF和最低位D0.51逻辑运算指令和移

31、位指令ROR ROR (ROtate Right)循环右移指令ROR OPR,CNT /Byte/Word每次移位时,最低位D0移出并同时移到CF和最高位.52逻辑运算指令和移位指令RCL带进位循环移位指令RCL (Rotate Left through Carry)带进位循环左移指令RCL OPR,CNT /Byte/Word53逻辑运算指令和移位指令RCR  RCR (Rotate Right through Carry)带进位循环左移指令RCR OPR ,CNT /Byte/Word54控制转移指令JMP JMP ( JuMP ) 无条件转移指令名称 格式 执行操作 段内直接短

32、跳转JMP SHORT OPRIP=IP+8位偏移量段内直接近转移JMP NEAR PTR OPRIP=IP+16位偏移量段内间接转移JMP WORD PTR OPRIP=(EA)段间直接转移JMP FAR PTR OPRIP=OPR偏移地址,CS=OPR段地址段间间接转移JMP DWORD PTR OPRIP=(EA),CS=(EA+2)1.无条件转移到指定的地址去执行从该地址开始的指令.2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容.3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容.55控制转移指令JZ条件转移指令:根据上一条指令所

33、设置的条件码(标志位)来判断测试条件.根据五个标志位:ZF、SF、OF、 PF、 CF的两种状态(0 FALSE或1 TRUE)产生10种测试条件.NameFlagFlag = TRUE 1Flag =FALSE 0Zero FalgZFJZ OPR /结果为零转移JNZ OPR /结果不为零转移Sign FalgSFJS OPR /结果为负转移JNS OPR /结果为正转移Overflow FlagOFJO OPR /溢出转移JNO OPR /不溢出转移Parity FlagPFJP OPR /结果为偶转移JNP OPR /结果为奇转移Carry FlagCFJC OPR /有进位转移JNC

34、 OPR /无进位转移两个数比较:情况无符号数有符号数指令满足条件指令满足条件A < BJCCF=1JLSFOF=1 && ZF=0A BJNCCF=0JNLSFOF=0 | ZF=1A BJNACF=1 | ZF=1JLGSFOF=1 | ZF=1A > BJACF=0 && ZF=0JGSFOF=0 && ZF=056控制转移指令JNZ57控制转移指令JS58控制转移指令JNS59控制转移指令JO60控制转移指令JNO61控制转移指令JP62控制转移指令JNP63控制转移指令JC64控制转移指令JNC65控制转移指令JA66控制转

35、移指令JNA67控制转移指令JL68控制转移指令JNL69控制转移指令JLG70控制转移指令JG71控制转移指令JCXZ OPR测试CX转移指令JCXZ OPR /CX=0时转移72控制转移指令LOOPLOOP(LOOP)循环指令LOOP OPR测试条件:CX 0 /OPR在程序中实际是个标号LOOPZ OPR测试条件:ZF = 1 && CX 0LOOPNZ OPR测试条件:ZF = 0 && CX 0执行操作: 先执行CX=CX-1,再检测上面的测试条件,如满足则IP=IP+符号扩展的D8,不满足则退出循环.73控制转移指令LOOPZ OPR74控制转移指令

36、LOOPNZ OPR75控制转移指令CALL过程调用及返回指令CALL (CALL) 过程调用指令CALL DST /DST在程序中实际是子程序标号执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序.调用方式格式断点保护入栈情况过程入口地址段内直接CALL NEAR PTR PR1(SP-1)(SP-2)IP , CS不进栈CS值保持不变,IPDST段内间接CALL WORD PTR (EA)(SP-1)(SP-2)IP , CS不进栈CS值保持不变,IP(EA)段间直接CALL FAR PTR PR1(SP-1)(SP-2)CS , (S

37、P-3)(SP-4)IPIPDST偏移地址,CSDST段地址段间间接CALL DWORD PTR (EA)(SP-1)(SP-2)CS , (SP-3)(SP-4)IPIP(EA),CS(EA+2)注:为了表明是段内调用,可使用NEAR PTR属性操作符作说明.76控制转移指令RETRET(RETurn)子程序返回指令RETRET EXP /带立即数返回子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序.返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.77处理器控制指令CLCCLC (CLear Carry) 进位位置0指令CLC /执

38、行操作后,CF=078处理器控制指令CMCCMC (CoMplement Carry) 进位位求反指令CMC /执行操作后,CF=!CF79处理器控制指令STCSTC (SeT Carry) 进位位置1指令STC /执行操作后,CF=180处理器控制指令NOPNOP (No Operetion) 无操作指令NOP /此指令不执行任何操作,其机器码占一个字节单元81处理器控制指令HLTHLT (HaLT) 停机指令HLT执行操作后,使机器暂停工作,使处理器CPU处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,CPU继续工作.2.2. 伪操作指令82同一个程序中,标号或变量只能定义

39、一次.标号有三种属性:段、偏移、类型(NEAR PTR,WORD PTR,FAR PRT,DWORD PTR)83数值回送操作符:TYPE、LEGNTH、SIZE、OFFSET、SEGTYPE expression(or label)如果表达式是变量,则回送该变量以字节数表示的类型:DB为 1, DW为 2, DD为 4.如果表达式是标号,则回送该标号类型的数值:NEAR为 -1, FAR为 -2.如果表达式是常量,则回送0.array DW A110H,B02CH,C322H ADD AX, TYPE array 等价于 ADD AX, 2LENGTH variable 对于变量使用DUP的

40、情况,将回送分配给该变量的单元数; 对其它情况则回送1.fees DW 100 DUP(?) MOV CX, LEGNTH fees 等价于MOV CX, 100SIZE variable 回送分配给该变量的字节数MOV CX, SIZE fees 等价于 MOV CX, 200OFFSET variable (or lable) 回送变量或标号的偏移地址.MOV BX,OFFSET OPER_ONE 等价于 LEA BX,OPER_ONE 语句 ,将OPER_ONE的偏移地址送入BXSEG variable(or lable) 回送变量或标号的段地址.若OPER_ONE是DATA_SEG数据

41、段中的一个变量,下面语句取得DATA_SEG段首地址MOV DS , SEG OPER_ONE 等价于 MOV AX , DATA_SEG MOV DS , AX84属性操作符:PTR、THIS、HIGH、LOW、HIGHWORD、LOWWORDtype PTR expression 用来给已分配的存储地址赋予另一种属性,使该地址具有另一种类型.表示按expression表达式寻址,按指定的类型type看待.即PTR是给后面的expression操作数赋予新的数据类型或地址类型.MOV BYTE PTRBX , 5 /存入字节(Byte)单元MOV WORD PTRBX , 5 /存入字(Wo

42、rd)单元THIS type 指定与当前地址计数器相等的一个地址单元的类型.type是NEAR、FAR、PROC,也可以是BYPE、WORD.first_type EQU THIS BYTEword_table DW 100 DUP(?) 此时,first_type的偏移地址与word_table完全相同,但它是字节类型HIGH (LOW) express 字节分离操作符, HIGH取高位字节, LOW取低位字节.HIGHWORD (LOWWORD) express 字分离操作符, HIGHWORD取高位字, LOWWORD取低位字.CONST EQU 0ABCDH MOV AH, HIGHT

43、 CONST 等价于MOV AH,0ABH85数据定义语句:variable_name Mnemonic oper1, oper2.常用的助记符Mnemonic有:DB定义字节,表示其后每个操作数占有一个字节(1Byte)单元DW定义字,表示表示其后每个操作数占有一个字(2Byte)单元DD定义双字,表示表示其后每个操作数占有两个字(4Byte)单元DQ定义四个字,表示表示其后每个操作数占有四个字(8Byte)单元DT定义十个字节,表示表示其后每个操作数占有十个字(10Byte)单元,形成压缩BCD码.data_byte DB 10 , 4 , 10H , ? /共定义了4个字节,其中 

44、9;?' 是保留单元data_word DW 100,?,100H /共定义了3个字(6Byte)str_aa DB 'ABCDEFG' /定义和初始化多于两个能上能下字符的字符串时,只能使用DB伪指令.86符号定义语句(即常量)name EQU expression /定义PURGE name1,name2. /解除CONSTANT EQU 256 /表示CONSTANT的值为25687段定义语句:SEGMENT . ENDS、ASSUME、ORGsegmnet_name SEGMENT align_type combine_type use_type class.s

45、egment_name ENDS /SEGMENT和ENDS成对使用,把汇编语句分成段对于数据段、附加段和堆栈段,一般是存储单元定义、初始化数据、分配单元等伪指令.对于代码段,主要是指令序列和伪指令.可选项说明:详细信息 定位类型align_type:说明段的起始地址就有怎有怎样的边界值.        PARA    缺省项.  指定段的起始地址须从小段边界开始,即以16进表示地址时最低位必须为0.       

46、BYTE     可从任何地址开始.        WORD    必须从字的边界开始,即段地址必须是偶数.        DWORD  必须从双字的边界开始,即以16进制表示地址时最低位必须是4的倍数.        PAGE     必须从页的边界开始,即以16时制表示地址时最低两位必须为00.(能被256整除)组合类型combine_type:说明程序连接的段合并方法.        PRIVATE    缺省项.为私有段,连接时不与其他模块中的同名分段合并.        PUBLIC       将与相同名字的其它分段合并.    

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论