寻址方式(实模式):1.立即数寻址MOVAX,1234H2.寄存器寻址MOVAX,BX3.直接寻址MOVAX,[1234H]4.寄存器间接寻址MOVAX,[BX]5.基址寻址MOVAX,[BX+100H]6.变址寻址MOVAX,[SI+100H]7.基址加变址寻址MOVAX,[BX+SI]8.带位移的基址加变址寻址MOVAX,[BX+SI+100H]数据结构的基址寻址方式字段0字段n字段n-1字段2字段1基址寄存器+(位移量)MOVAX,[BX+100H](位移量)数据阵列的变址寻址方式单元0单元n单元n-1单元2单元1变址寄存器+MOVAX,[SI+100H]单元(0,0)单元(0,1)单元(0,n)(位移量)二维数据阵列的基址加变址寻址方式基址寄存器+MOVAX,[BX+SI+100H]单元(1,0)单元(1,n)单元(1,1)单元(m,n)变址寄存器+调试程序DEBUGR——寄存器命令标志置位复位OFOVNVDFDNUPIFEIDISFNGPLZFZRNZAFACNAPFPEPOCFCYNCAFPFcfPF功能:检查或修改寄存器的值R[寄存器名]调试程序DEBUGD——转储命令功能:检查存储器的内容D[内存地址]调试程序DEBUGE——输入命令功能:检查或修改存储器的内容E[内存地址]•回车:结束输入命令•空格:不修改存储器内容,显示下一个存储单元的内容•输入新值,后回车或空格调试程序DEBUGA——汇编命令功能:汇编程序指令A[起始地址]U——汇编命令功能:反汇编程序指令U[起始地址]调试程序DEBUGT——跟踪命令功能:跟踪程序执行T=[起始地址][指令条数]调试程序DEBUGR——运行命令功能:运行程序G=[起始地址]算术运算指令的例子1.设两个十进制数1234和5678分别存放在数据段中从1000H和2000H开始的单元中,计算这两个数的和,结果存放在3000H开始的单元中MOVAL,[1000]ADDAL,[2000];低字节相加DAA;十进制调整MOV[3000],AL;存低字节和MOVAL,[1001]ADCAL,[2001];高字节带进位相加DAA;十进制调整MOV[3001],AL;存高字节和算术运算指令的例子2.实现非压缩BCD数68=48的程序MOVAL,06MOVBL,08MULBL;AAM;AX(AL)(BL)十进制调整,使(AX)=0408算术运算指令的例子3.实现非压缩BCD数175=3余2的程序MOVAX,0107MOVBL,05AAD;DIVBL;除法,得商(AL)=03,余数(AH)=02十进制调整,使(AX)=0011第三章Pentium微处理器的指令系统3.1概述3.2Pentium微处理器的寻址方式3.3数据传送指令3.4算术运算指令3.5逻辑运算指令3.6串操作指令3.7程序控制指令3.8保护模式的系统控制指令3.9浮点运算指令3.10MMX指令简介3.5逻辑运算指令位操作AND目标操作数,源操作数OR目标操作数,源操作数XOR目标操作数,源操作数NOT目标操作数位操作AND主要用于将二进制数的某些位清0ANDBL,0FHxxxxxxxx(BL)000011110F0000xxxx结果AND位操作OR主要用于将二进制数的某些位置1ORBL,0FHxxxxxxxx(BL)000011110Fxxxx1111结果OR位操作XOR主要用于将二进制数的某些位求反XORBL,0FHxxxxxxxx(BL)000011110Fxxxxxxxx结果XOR移位操作指令格式:SHL目标操作数,计数移1位时,计数值可以为立即数1移多位时,计数值必须先存入CL寄存器MOVCL,3SHLAX,CLP.93位测试TEST用于测试二进制数的某些位(一般为1位)TESTAL,1JNZRIGHTTESTAL,128JNZLEFT当被测试为为0时,ZF置位(ZF=1);当被测试为为1时,ZF复位(ZF=0)位测试位测试:BT目标操作数,源操作数位测试置0:BTR目标操作数,源操作数位测试置1:BTS目标操作数,源操作数位测试取反:BTC目标操作数,源操作数测试目标操作数中由源操作数指定的位,将其值送CF标志源操作数以目标操作数的长度为模MOVAX,1FF0HBTSAX,24位扫描向前位扫描:BSF目标操作数,源操作数向后位扫描:BSR目标操作数,源操作数对源操作数进行扫描,将遇到的第一个1所在的位置送目标操作数,并将ZF清0。如果源操作数为0,则目标操作数不变,且ZF置1MOVEAX,60000000HBSFEBX,EAX3.6串操作指令串传送MOVSBMOVSWMOVSD将一个字节/字/双字从DS:SIES:DI指令前要先将源串首地址DS:SI目标串首地址ES:DI完成操作后自动修改SI、DI,使其指向串的下一个元素串传送完成操作后自动修改SI、DI,使其指向串的下一个元素串操作方向由CLD和STD指令设置CLD地址递增方向(DF=0)STD地址递减方向(DF=1)串传送——重复前缀需要先将串的长度存入CX寄存器每处理完一个元素自动使CX-1,直到CX=0才结束串传送——完成整个串的传送REPMOVSBREPMOVSWREPMOVSD例:P.96例:串传送MOVSI,OFFSETS1MOVDI,OFFSETS2MOVCX,18REPMOVSB….S1DB“Thisisastring!$”S2DB18DUP(0)串比较CMPSBCMPSWCMPSD比较地址为DS:SI、ES:DI的两个字节/字/双字指令前通常加重复前缀REPZ/REPE,从而当发现两个串不同时结束比较。例:串比较MOVSI,OFFSETS1MOVDI,OFFSETS2MOVCX,xxREPZCMPSBJNZNot_EqualEqual:……Not_Equal:…...串搜索SCASBSCASWSCASD在首地址为ES:DI的串中搜索某个元素(字节/字/双字)事先要将待搜索的元素存入AL/AX/EAX指令前通常加重复前缀REPNZ/REPNE,从而当发现待搜索的元素时结束搜索。例:串搜索MOVDI,OFFSETStringMOVCX,xxMOVAL,‘h’REPNZSCASBJNZNot_FoundFound:……Not_Found:…...串装入LODSBLODSWLODSD将地址为DS:SI的一个字节/字/双字装入AL/AX/EAX串装入指令没有重复前缀例:MOVSI,OFFSETStringMOVCX,xxMOVAH,2LODSBMOVDL,ALINT21LOOPNextCharNextChar:串装入串存储LODSBLODSWLODSD将AL/AX/EAX的值存入地址为ES:DI的内存单元利用重复前缀REP,可以建立一个取值相同的数据串3.7程序控制指令控制程序的流向:无条件转移条件转移循环控制过程调用与返回中断无条件转移JMPLabel1.…..Label1:条件转移相当于goto语句根据执行上一指令后标志寄存器的状态而决定是否转移条件转移根据执行上一指令后标志寄存器的状态而决定是否转移JAJAE=JBJBE=JGJGE=JLJLE=JG标号条件转移JZJNZJCJNCJOJNOJPJNPJSJNSJCXZ循环控制LOOPLOOPE/LOOPZLOOPNE/LOOPNZ与CX配合使用,CX存放循环次数第四章汇编语言程序设计4.1概述4.2汇编语言的基本语法4.3汇编语言程序的控制结构4.4DOS/BIOS中断调用4.5保护模式下的汇编语言程序设计4.6Win32汇编语言程序设计4.7与高级语言的接口4.1概述汇编语言程序的上机处理过程主要的汇编程序:MASM、TASM实模式汇编语言源程序的结构DATASEGMENT…...DATAENDSSTACKSEGMENTSTACK…...STACKENDSCODESEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:……CODEENDSENDSTART4.2汇编语言的基本语法1.常量、变量和表达式常量二进制xxxxxxxxB01000101B八进制xxxO或xxxQ721O或721Q十进制xxxx或xxxxD1991或1991D十六进制xxxxH0F1D4H字符串‘xxx’或“xxx”‘AB’数值常量、符号常量(用EQU或=定义)变量内存单元的名字,由DB/DW/DD/DQ/DT定义BUFDB?MOVBUF,AL变量的三种属性:段值SEG偏移量OFFSET类型BYTE/WORD/...标号指令存放单元的符号地址,是转移/调用/循环指令的操作数标号的三种属性:段值SEG偏移量OFFSET类型NEAR/FAR表达式由操作数和运算符组成的序列操作数可以是寄存器、常量(数值常量、符号常量)、存储器操作数(标号、变量)运算符包括:算术运算符、逻辑运算符、关系运算符、数值返回运算符和属性运算符数值返回运算符(分析运算符)SEG变量/标号OFFSET变量/标号TYPE变量/标号变量返回类型:1字节、2字、4双字标号返回类型:-1NEAR、-2FARLENGTH变量SIZE变量属性运算符(合成运算符)•PTR类型PTR表达式MOVWORDPTR[BX],0•THISTHIS类型MY_BYTEEQUTHISBYTEMY_WORDDW100DUP(?)2.指令语句标号:指令助记符操作数;注释3.伪指令语句名字伪操作命令操作数;注释符号定义语句定义符号常量PRICEEQU281PORT=6PORT=PORT+1数据定义语句定义变量、分配存储单元等变量名DB/DW/DD/DQ/DT操作数,…,操作数操作数可以是:数值表达式或表、字符串、?、NDUP表达式VARDW?ARRAYDB100DUP(0)段定义语句P.131过程定义语句P.131程序结束语句END表达式表达式为程序的第一条指令的地址4.3汇编语言程序的控制结构分支结构程序段1程序段2条件JZL1L1:………...L2:…...后继程序L3:…...JMPL3TESTAX,1YN程序段1后继程序条件JZL1L1:………...…...TESTAX,1分支结构YN循环结构先执行、后判断初始化部分循环体修改部分条件先判断、后执行初始化部分循环体修改部分条件后继程序循环结构循环结构循环控制:计数控制LOOP条件控制JZ/...4.4DOS/BIOS中断调用习题1.已知(CS)=0A00H,(DS)=0B00H,(SI)=0100H,(DI)=0200H,(BX)=0300H。指出下列指令中源操作数的寻址方式,并计算③-⑦小题操作数的物理地址。①MOVAX,1234H②MOVAX,BX③MOVAX,[SI]④MOVAX,[1234H]⑤MOVAX,[BX+400H]⑥MOVAX,[BX+SI]⑦MOVAX,[BX+DI+0400H]2.已知(AX)=701FH,(BX)=13F1H。指出执行下列指令后目标操作数的内容和状态标志位的状态。SFZFAFPFCFOF①ADDAX,BX(AX)=H;②SUBAX,BX(AX)=H;③ANDAX,BX(AX)=H;④ORAX,BX(AX)=H;⑤XORAX,BX(AX)=H;⑥IMULBL(AX)=H;⑦MULBH(AX)=H;⑧SHRAX,2(AX)=H;⑨SARAX,2(AX)=H;⑩SHLAX,2(AX)=H.3.已知(CS)=1075FH,(IP)=0300H,(SI)=0100H,(DS:100H)=00H,(DS:101H)=10H。指出执行下列指令后程序控制转到何处。①JMP10H②JMP1000H③JMPWORDPTR[SI]