汇编

汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。随着现代软件系统越来越庞大复杂,大量经过了封装的高级语言如C/C++,Pascal/ObjectPascal也应运而生。这些新的语言使得程序员在开发过程中能够更简单,更有效率,使软...

2008年国家司法考试法律法规深度汇编 CAD软件开发及技术应用标准汇编 【图】《明清宫藏闽台关系档案汇编》在福州首发 《明清宫藏闽台关系档案汇编》在福州首发 森林工程专业术语汇编 电磁兼容标准汇编(基础卷)第二版

基本资料

汇编大多是指汇编语言,汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。随着现代软件系统越来越庞大复杂,大量经过了封装的高级语言如C/C++,Pascal/Object Pascal也应运而生。这些新的语言使得程序员在开发过程中能够更简单,更有效率,使软件开发人员得以应付快速的软件开发的要求。而汇编语言由于其复杂性使得其适用领域逐步减小。但这并不意味着汇编已无用武之地。由于汇编更接近机器语言,能够直接对硬件进行操作,生成的程序与其他的语言相比具有更高的运行速度,占用更小的内存,因此在一些对于时效性要求很高的程序、许多大型程序的核心模块以及工业控制方面大量应用。此外,虽然有众多编程语言可供选择,但汇编依然是各大学计算机科学类专业学生的必修课,以让学生深入了解计算机的运行原理。 中文名称汇编、汇编语言、汇编程序 外文名称Assembly Language 释????义:把资料或文章等编辑在一起 拼????音:huì biān

词语解释

huì biān1.动词,把资料或文章等编辑在一起2.名词,编辑在一起的资料,文献3.名词,一种计算机语言

词语解释(4)

  huì biān  1.动词,把资料或文章等编辑在一起  2.名词,编辑在一起的资料,文献  3.名词,一种计算机语言

汇编语言

  汇编语言(英语:Assembly language)是一种用于电子计算机、微处理器、单片机或其他可编程器件的低级语言,在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。    使用汇编语言编写的源代码,需要通过使用相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程。  汇编语言采用了助记符(mnemonics)来代表特定低级机器语言的操作。特定的汇编目标指令集可能会包括特定的操作数。许多汇编程序可以识别代表地址和常量的标签(label)和符号(symbols),这样就可以用字符来代表操作数而无需采取写死的方式。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的。  许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。  汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计;在今天的实际应用中,它通常被应用在底层硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

编译环境

  汇编的调试环境总的来说比较少,也很少有非常好的编译器。reallychenchi设计的轻松汇编是一款非常适合初学者的汇编编译器。轻松汇编是一个汇编语言集成开发环境,主要面向汇编语言初学者,也可以用它进行开发。除了普通的编辑功能以外,它还可以自动整理格式、高亮显示和编译、链接、调试汇编程序,非常方便实用。  轻松汇编的最大特点是可以格式整理,就像VC6.0一样,可以设置断点调试,省却了使用者的不少工作。它可以在Win98/2k/XP下运行,是一款很优秀的软件。

常用命令

数据传送指令

  通用数据传送指令
指令英文全拼翻译
MOVMove传送
PUSHPush onto the stack进栈
POPPop from the stack出栈
XCHGExchange交换
  MOV指令为双操作数指令,两个操作数中不能全为内存操作数  格式:MOV DST,SRC   执行操作:dst = src  注:1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器).  2.立即数不能直接送段寄存器  3.不允许在两个存储单元直接传送数据  4.不允许在两个段寄存器间直接传送信息  PUSH入栈指令及POP出栈指令:  堆栈操作是以“后进先出”的方式进行数据操作。  格式:PUSH SRC //Word  执行操作:(SP)-(SP)-2  ((SP)+1,(SP))-(SRC)  注:1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。  2.入栈时高位字节先入栈,低位字节后入栈。  格式:POP DST //Word  执行操作:(DST)-((SP+1),(SP))  (SP)-(SP)+2  注:1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。  2.执行POP SS指令后,堆栈区在存储区的位置要改变。  3.执行POP SP 指令后,栈顶的位置要改变。  XCHG(eXCHanG)交换指令:   将两操作数值交换。  格式:XCHG OPR1,OPR2 //Byte/Word  执行的操作:(OPR1)--(OPR2)  注:1.必须有一个操作数是在寄存器中  2.不能与段寄存器交换数据  存储器与存储器之间不能交换数据。   二 累加器专用传送指令
指令英文全拼翻译
INInput输入
OUTOutput输出
XLATTranslate换码
  IN 输入指令  长格式为:IN AL,PORT(字节)  IN AX,PORT(字)  执行的操作:(AL)-(PORT)(字节)  (AX)-(PORT+1,PORT)(字)  短格式为:IN AL,DX(字节)  IN AX,DX(字)  OUT 输出指令  长格式为:OUT PORT,AL(字节)  OUT PORT,AX(字)  执行的操作:(PORT)-(AL)(字节)  (PORT+1,PORT)-(AX)(字)  短格式为:OUT DX,AL(字节)  OUT DX,AX(字)  执行的操作:((DX))-(AL)(字节)  ((DX)+1,(DX))-AX(字)  XLAT(TRANSLATE)换码指令:   把一种代码转换为另一种代码。  格式:XLAT (OPR 可选) //Byte  执行操作:(AL)-((BX)+(AL))  注:指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码。  三 有效地址送寄存器指令
指令英文全拼翻译
LEALoad effective address有效地址送寄存器
LDSLoad DS with Pointer指针送寄存器DS
LESLoad ES with Pointer指针送寄存器和ES
  LEA(Load Effective Address) :  有效地址传送寄存器指令  格式:LEA REG,SRC //指令把源操作数SRC的有效地址送到指定的寄存器中。  执行操作:(REG)-SRC  注:1. SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器  2.MOV BX,OFFSET OPER_ONE 等价于LEA BX,OPER_ONE  3.MOV SP,[BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中  4.LEA SP,[BX] //将BX的内容作为存储器有效地址送入SP中  LDS(Load DS with pointer):  指针送寄存器和DS指令  格式:LDS REG,SRC //常指定SI寄存器。  执行的操作:(REG)-(SRC)  (DS)-(SRC+2)  注:把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。  LES(Load ES with pointer) 指针送寄存器和ES指令  格式:LES REG,SRC //常指定DI寄存器  执行的操作:(REG)-(SRC)  (ES)-(SRC+2)//与LDS大致相同,不同之处是将ES代替DS而已。  注:把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI寄存器。  四 标志寄存器传送指令
指令英文全拼翻译
LAHFLoad AH with flags标志送AH
SAHFstore AH into flagsAH送标志寄存器
PUSHFpush the flags标志进栈
POPFpop the flags标志出栈
  LAHF ( Load AH with Flags )   标志位送AH指令  格式:LAHF ......  执行操作:(AH)-(PWS的低字节)  注:将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位,SF送D7位,ZF送D6位  SAHF( Store AH into Flags )  AH送标志寄存器指令  格式:SAHF   执行操作: (PWS的低字节)-(AH)  注:将AH寄存器的相应位送到PSW寄存器的低8位的相应位,AH的D7位送SF,D6位送ZF。  PUSHF( PUSH the Flags)   标志进栈指令  格式:PUSHF  执行操作:(SP)-(SP)-2  SP=SP-1,(SP)=PSW的高8位,SP=SP-1,(SP)=PSW的低8位  注:将标志寄存器的值压入堆栈顶部,同时栈指针SP值减2  POPF( POP the Flags )   标志出栈指令  格式:POPF  执行操作:(PWS)-((SP)+1,(SP))  (SP)-(SP+2)  PSW低8位=(SP),SP=SP+1,PSW高8位=(SP),SP=SP+1  注:与PUSHF相反,从堆栈的顶部弹出两个字节送到PSW寄存器中,同时堆栈指针值加2  算术指令  加法指令
指令英文全拼翻译
ADDadd加法
ADCadd with carry带进位加法
INCincrement加1
  ADD(ADD)加法指令  格式:ADD DST,SRC //Byte/Word  执行操作: (DST)-(SRC)+(DST)  注:1.两个存储器操作数不能通过ADD指令直接相加,即DST 和SRC必须有一个是通用寄存器操作数。  2.段寄存器不能作为SRC 和DST.  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=1   SF 根据结果的最高位来设置:最高位为0,则SF=0.   AF 根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1,无进(借)位时AF=0   PF 根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0,为偶数时PF=1   ADC( ADd with Carry)带进位加法指令  格式:ADC DST,SRC //Byte/Word  执行操作: (DST)-(SRC)+(DST)+CF  注:与ADD不同之处是还要加上进位标志位的值。  INC( INCrement) 加1指令  格式:INC OPR //Byte/Word  执行操作: (OPR)-(OPR)+1  注:1.OPR可以是寄存器和存储器操作数,但不能是立即数和段寄存器  2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.  减法指令
指令英文全拼翻译
SUBsubtract减法
SBBsubtract with borrow带借位减法
DECDecrement减1
NEGNegate求补
CMPCompare比较
  SUB( SUBtract ) 不带借位的减法指令  格式:SUB DST,SRC //Byte/Word  执行操作:(DST)-(DST)-(SRC)  注:1.DST和SRC寻址方式及规定与ADD相同。  2.影响全部标志位。(判断标志位参见ADD)  SBB ( SuBtract with Borrow) 带借位减法指令  格式:SBB DST,SRC //Byte/Word  执行操作:(DST)-(DST)-(SRC)-CF  DEC( DECrement ) 减1指令  格式:DEC OPR //Byte/Word  执行操作:(OPR)-(OPR)-1//除CF标志位,其余标志位都受影响。  NEG( NEGate ) 求补指令  格式:NEG OPR  执行操作:(OPR)- -(OPR) //将操作数按位求反后末位加1.  CMP ( CoMPare ) 比较指令  格式:CMP OPR1,OPR2   执行操作:(OPR1)-(OPR2) //与SUB指令一样执行运算,但不保存结果。   注:该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志。
比较情况 无符号数有符号数
A=BZF=1ZF=1
ABCF=0 ZF=0SF^OF=0 ZF=0
ABCF=1 ZF=0SF^OF=1 ZF=0
A=BCF=0 || ZF=1SF^OF=0 || ZF=1
A=BCF=1 || ZF=1SF^OF=1 || ZF=1
  乘法指令
指令英文全拼翻译
MULUnsigned Multiple无符号数乘法
IMULSigned Multiple带符号数乘法
  MUL( unsigned MULtiple ) 无符号数乘法指令  格式:MUL SRC //Byte/Word .  执行操作:字操作:(AX)-(AL)*(SRC) //字节运算时目的操作数用AL,乘积放在AX中  字节操作: (DX,AX)-(AX)*(SRC) //字运算时目的操作数用AX,DX存放乘积的高位字,AX放乘积的低位字  注:1.目的数必须是累加器AX 或AL,指令中不需写出  源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数,而绝对不允许是立即数或段寄存器。   IMUL(sIgned MULtiple) 有符号数乘法指令  格式:IMUL SRC //与MUL指令相同,但必须是带符号数  除法指令
指令英文全拼翻译
DIVUnsigned divide无符号数除法
IDIVSigned divide带符号数除法
CBWConvert byte to word字节转换为字
CWDContert word to double word字转换为双字
  DIV ( unsigned DIVide) 无符号数除法指令  格式:DIV SRC //Byte/Word 其中:SRC的规定同乘法指令MUL  执行操作:字节操作:(AL)-(AX)/(SRC)的商  (AH)-(AX)/(SRC)的余数  字操作:(AX)-(DX,AX)/(SRC)的商  (DX)-(DX,AX)/(SRC)的余数  注:存储器操作数必须指明数据类型:BYTE PTR src 或WORD PTR src  IDIV (sIgned DIVied) 有符号数除法指令  格式:IDIV SRC   执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同。  CBW(Convert Byte to Word) 字节转换为字指令  格式:CBW  执行操作:AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.  CWD(Convert Word to Double word) 字转换为双字指令  格式:CWD  执行操作:AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH  注:这两条指令都不影响条件码。

逻辑指令

  逻辑运算指令
指令英文全拼翻译
ANDand逻辑
ORor逻辑
NOTnot逻辑
XORexclusive or异或
TESTtest测试
  AND,OR,XORTEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同。  NOT是单字节操作指令,不允许使用立即数。  逻辑运算均是按位进行操作,真值表如下:
AND (位与)OR ( 位或| )XOR ( 位异或^ )
1 1 = 11 | 1 = 11 ^ 1 = 0
1 0 = 01 | 0 = 11 ^ 0 = 1
0 1 = 00 | 1 = 10 ^ 1 = 1
0 0 = 00 | 0 = 00 ^ 0 = 0
  AND(and) 逻辑与指令  格式:AND DST,SRC //Byte/Word  执行操作:(DST)-(DST)^(SRC)  注:1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。  2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.  例子:屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与  MOV AL,39H //AL= 0011 1001B[39H]  ADD AL,0FH // AL= 0000 1001B[09H] 即0011 1001B[39H] 0000 1111B[0FH] = 0000 1001B[09H]  AND指令典型用法B:取出某一位的值(见TEST)   OR(or) 逻辑或指令  格式:OR DST,SRC //Byte/Word  执行操作:(DST)-(DST) | (SRC)  注:1.OR指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。  2.常用于将某些位置1.  例子:将AL的第5位置1:  MOV AL,4AH // AL=0100 1010B[4AH]  OR AL,10H // AL=0101 1010B[5AH] 即0100 1010B[4AH] | 0001 0000B[10H] =0101 1010B [5AH]  XOR(eXclusive OR) 逻辑异或指令  格式:XOR DST,SRC //Byte/Word  执行操作:(DST)-(DST)^(SRC)  注:1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志。  2.XOR指令使某些位维持不变则与'0' 相异或,若要使某些位取反则与'1'相异或。  例子:将AL的高4位维持不变,低4位取反:  MOV AL,B8H //AL=1011 1000B[B8H]  XOR AL,0FH //AL=1011 0111B[B7H] 即1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H]  例子:测试某一个操作数是否与另一确定操作数相等:  XOR AX,042EH  JZ .... //如果AX==042EH,则ZF=TRUE(1),执行JZ...  NOT (not) 逻辑非指令  格式:NOT OPR //Byte/Word  执行操作:(OPR)~(OPR) // ~ 01100101 [65H] =10011010 [9AH]  1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。  2.NOT指令不影响任何标志位。  例子:将AL各位取反:  MOV AL,65H //AL=0110 0101B[65H]  NOT AL //AL=1001 1010B[9AH] 即~ 0110 0101B[65H]=1001 1010B[9AH]  TEST(test) 指令  格式:TEST OPR1,OPR2 //Byte/Word  执行操作:opr1 opr2  注:1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0,OF=0,而AF位无定义。  2.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则JZ...  MOV DL,AL //将AL 传送到DL,主要是不要影响AL的值。 以下测试AL的b2位是否为1  NOT DL //先对操作数求反  TEST 0000 0100B //令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令  JZ THER //若AL的b2位为1,则ZF=TRUE(1),执行JZ THER  B:移位指令[所有的移位指令都影响标志位CF、OF、PF、SFZF、AF无定义。]  非循环逻辑移位:把操作数看成无符数来进行移位。

移位指令

指令英文全拼翻译
SHLshift logical left逻辑左移
SALshift arithmetic left算术左移
SHRshift logical right逻辑右移
SARshift arithmetic right算术右移
ROLRotate left循环左移
RORRotate right循环右移
RCLRotate left through carry带进位循环左移
RCRRotate right through carry带进位循环右移
  SHL( SHift logical Left )逻辑左移指令  格式:SHL OPR,CNT //Byte/Word  执行操作:使OPR左移CNT位,并使最低CNT位为全0.  1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。  2.移位次数由CNT决定。每次将OPR的最高位移出并移到CF,最低位补0.  MOV CL,7 //若移位多次,先预置移位次数CL  SHL DX,CL //CNT可取1或CL寄存器操作数  SHR(SHift logical Right) 逻辑右移指令  格式:SHR OPR,CNT //Byte/Word  执行操作:同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.  非循环算术移位:将操作数看成有符号数来进行移位。  SAL(Shift Arithmetic Left) 算术左移指令  格式:SAL OPR,CNT //Byte/Word  执行操作:SAL指令与SHL指令完全相同  SAR(Shift Arithmetic Right) 算术右移指令  格式:SAR OPR,CNT //Byte/Word  执行操作:SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.  循环移位指令  ROL( ROtate Left) 循环左移指令  格式:ROL OPR,CNT //Byte/Word  执行操作:每次移位时,最高位移出并同时移到CF和最低位D0.  ROR (ROtate Right)循环右移指令  格式:ROR OPR,CNT //Byte/Word  执行操作:每次移位时,最低位D0移出并同时移到CF和最高位。  带进位循环移位指令  RCL(Rotate Left through Carry)带进位循环左移指令  格式:RCL OPR,CNT //Byte/Word  RCR (Rotate Right through Carry)带进位循环右移指令  格式:RCR OPR,CNT //Byte/Word

串处理指令

  一 与REP相配合作的MOVS,STOS和LODS指令
指令英文全拼翻译
REPrepeat重复操作
MOVSMOVe String串传送指令
STOSSTOre into String存入串指令
LODSLOaD from String从串取指令
CLDClear direction flag使地址自动增
STDSet direction flag使地址自动减
  REP(REPeat)重复操作前缀  格式:REP String Primitive   执行的操作:  1)如(CX)=0则退出REP,否则往下执行。  2)(CX)-(CX)-1  3)执行其中的串操作  4)重复1)~3)  注:其中String Primitive可为MOVS,LODS或STOS指令  .MOVS 串传送指令  格式:MOVS ES:BYTE PTR[DI],DS:[SI]  可有三种  MOVS DST,SRC  MOVSB//字节串传送DF=0,SI = SI + 1,DI = DI + 1 ;DF = 1,SI = SI - 1,DI = DI  MOVSW//字串传送DF=0,SI = SI + 2,DI = DI + 2 ;DF = 1,SI = SI - 2,DI = DI - 2   MOVSD//双字串传送DF=0,SI = SI + 4,DI = DI + 4 ;DF = 1,SI = SI - 4,DI = DI - 4  MOVSX//符号传送  MOVZX//零传送  执行的操作:  1)如(CX)=0则退出REP,否则往下执行。  2)(CX)-(CX)-1  3)执行其中的串操作  4)重复1)~3)  .MOVS 串传送指令  注:当方向标志DF=1时用,其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:  1)((DI))-((SI))  2)字节操作: (SI)-(SI)+(或-)1,(DI)-(DI)+(或-)1//当方向标志DF=0时用  3)字操作: (SI)-(SI)+(或-)2,(DI)-(DI)+(或-)2当方向标志DF=0时用//当方向标志DF=1时用-  该指令不影响条件码。  STOS(STOre into String) 存入串指令  格式:STOS DST  STOSB //存放字节串( DI ) = AL  STOSW //存放字串( DI ) = AX  执行操作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容。  字节操作:((DT))←(AL),(DI)←(DI)±1  字操作:((DI))←(AX),(DI)←(DI)±2  注:1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值。  2.DI所指向的存储单元只能在附加段中,即必须是ES:[DI]  3.该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中。  LODS ( LOaD from String ) 从串取指令  格式:LODS SRC  LODSB //从字节串取AL=(SI)  LODSW //从字串取AX= (SI±1) (SI)  执行操作:字节操作:(AL)-((SI)),(SI)-(SI)+-1  字操作:(AX)-((SI)),(SI)-(SI)+-2  把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容。  注:1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值。  2.源串允许使用段超越前缀来改变数据存储的段区。  3.该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容。指令允许使用段跨越前缀来指定非数据段的存储区。该指令也不影响条件码。  4.一般说来,该指令不和REP联用。有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令。  CLD(CLear Direction flag) 清除方向标志指令  格式:CLD  执行操作:令DF=0,其后[SI],[DI]执行增量操作  该指令使DF=0,在执行串操作指令时可使地址自动增量  STD(SeT Direction flag) 设置方向标志指令  格式:STD  执行操作:令DF=1,其后[SI],[DI]执行减量操作  该指令使DF=1,在执行串操作指令时可使地址自动减量。  二与REPE/REPZ和REPNZ/REPNE联合作的CMPS和SCAS指令
指令英文全拼翻译
REPE/REPZRepeat Equal to Zero 等于零时重复操作
REPNE/REPNZRepeat Not Equal to Zero不等于零时重复操作
CMPSCoMPare String串比较指令
SCASSCAn String串扫描指令
  .REPE/REPZ 当相等/为零时重复串操作  格式:REPE(或REPZ) String Primitive  其中String Primitive可为CMPS或SCAS指令。  执行的操作:  1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行  2)(CX)-(CX)-1  3)执行其后的串指令  4)重复1)~3)  .REPNE/REPNZ 当不相等/不为零时重复串操作  格式:REPNE(或REPNZ) String Primitive  其中String Primitive可为CMPS或SCAS指令  执行的操作:  除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同。  CMPS(CoMPare String) 串比较指令  格式:CMPS SRC,DST  CMPSB //字节串比较(SI)-(DI)  CMPSW //字串比较(SI+1)(SI) - (DI+1)(DI)  执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位。  1)((SI))-((DI))  2)字节操作:(SI)-(SI)+-1,(DI)-(DI)+-1  字操作:(SI)-(SI)+-2,(DI)-(DI)+-2   注:指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同。  .SCAS (SCAn String ) 串扫描指令  格式:SCAS DST  SCASB  SCASW  执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位。  字节操作:(AL)-((DI)),(DI)-(DI)+-1  字操作:(AL)-((DI)),(DI)-(DI)+-2  注:该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码。指令的其他特性和MOVS的规定相同。

控制转移指令

  一 JMP ( JuMP ) 无条件转移指令
名称格式 执行操作
段内直接短跳转JMP SHORT OPRIP=IP+8 位偏移量
段内直接近转移JMP NEAR PTR OPRIP=IP+16位偏移量
段内间接转移JMP WORD PTR OPR IP=(EA)
段间直接转移JMP FAR PTR OPR IP=OPR 偏移地址,CS=OPR 段地址
段间间接转移JMP DWORD PTR OPR IP=(EA),CS=(EA+2)
  1)段内直接短转移  格式:JMP SHORT OPR  执行的操作:(IP)-(IP)+8位位移量  2)段内直接近转移  格式:JMP NEAR PTR OPR  执行的操作:(IP)-(IP)+16位位移量  3)段内间接转移  格式:JMP WORD PTR OPR  执行的操作:(IP)-(EA)  4)段间直接(远)转移  格式:JMP FAR PTR OPR  执行的操作:(IP)-OPR的段内偏移地址  (CS)-OPR所在段的段地址  5)段间间接转移  格式:JMP DWORD PTR OPR  执行的操作:(IP)-(EA)  (CS)-(EA+2)  1.无条件转移到指定的地址去执行从该地址开始的指令。  2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容。  3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容。  二 条件转移指令:
指令英文全拼翻译
JZ/JEJump if not zero,or not equal结果不为零(或不相等)则转移
JNZ/JNE Jump if not zero,or not equal结果不为零(或不相等)则转移
JSJump if sign结果为负则转移
JNSJump if not sign结果为正则转移
JOJump if overflow溢出则转移
JNOJump if not overflow不溢出则转移
JP/JPE Jump if parity,or parity even奇偶位为1则转移
JNP/ JPO Jump if not parity,or parity odd奇偶位为0则转移
JB/JNAE/JC Jump if below,or not above or equal,or carry低于,或者不高于或等于,或进位位为1则转移
JNB/JAE/JNC Jump if not below,or above or equal,or not carry不低于,或者高于或者等于,或进位位为0则转移
  根据上一条指令所设置的条件码(标志位)来判断测试条件。  JZ(或JE)(Jump if zero,or equal) 结果为零(或相等)则转移  格式:JE(或JZ) OPR  测试条件:ZF=1   .JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移  格式:JNZ(或JNE) OPR  测试条件:ZF=0  .JS(Jump if sign) 结果为负则转移  格式:JS OPR  测试条件:SF=1  .JNS(Jump if not sign) 结果为正则转移  格式:JNS OPR  测试条件:SF=0  .JO(Jump if overflow) 溢出则转移  格式:JO OPR  测试条件:OF=1  .JNO(Jump if not overflow) 不溢出则转移  格式:JNO OPR  测试条件:OF=0  .JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移  格式:JP OPR  测试条件:PF=1  .JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移  格式:JNP(或JPO) OPR  测试条件:PF=0  .JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移  格式:JB(或JNAE,JC) OPR  测试条件:CF=1  .JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移  格式:JNB(或JAE,JNC) OPR  测试条件:CF=0  2)比较两个无符号数,并根据比较的结果转移  .JB(或JNAE,JC)  格式:同上  .JNB(或JAE,JNC)  格式:同上  .JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移  格式:JBE(或JNA) OPR  测试条件:CFVZF=1  .JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移  格式:JNBE(或JA) OPR  测试条件:CFVZF=0  根据五个标志位:ZF、SF、OF、PF、CF的两种状态(0 FALSE或1 TRUE)产生10种测试条件。
名称简写格式 Flag == TRUE [1]Flag ==FALSE [ 0]
Zero FalgZFJE/JZOPR 结果为零转移JNE/JNZOPR结果不为零转移
Sign FalgSFJS OPR 结果为负转移JNSOPR结果为正转移
Overflow FlagOF JO OPR 溢出转移JNOOPR不溢出转移
Parity FlagPFJP/JPE OPR 结果为偶转移 JNP/JPOOPR 结果为奇转移
Carry Flag CFJC OPR 有进位转移 JNCOPR无进位转移
情况指令满足条件指令满足条件
A BJC CF==1JLSF^OF==1 ZF==0
A ≥ BJNC CF==0JNLSF^OF==0 || ZF==1
A ≤ BJNACF==1 || ZF==1JLGSF^OF==1 || ZF==1
A BJA CF==0 ZF==0JGSF^OF==0 ZF==0
  三 比较两个无符号数,并根据比较的结果转移
指令英文全拼翻译
JB/JNAE/JC Jump if less,or not greater or equal小于,或者不大于或者等于则转移
JNB/JAE/JNCJump if not less,or greater or equal不小于,或者大于或者等于则转移
JBE/JNA Jump if below or equal,or not above低于或等于,或不高于则转移
JNBE/JA Jump if not below or equal,or above不低于或等于,或者高于则转移
  .JB(或JNAE,JC)  格式:同上  .JNB(或JAE,JNC)  格式:同上  .JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移  格式:JBE(或JNA) OPR  测试条件:CFVZF=1  .JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移  格式:JNBE(或JA) OPR  测试条件:CFVZF=0  四 比较两个带符号数,并根据比较的结果转移
指令英文全拼翻译
JL/LNGE Jump if less,or not greater or equal小于,或者不大于或者等于则转移
JNL/JGE Jump if not less,or greater or equal不小于,或者大于或者等于则转移
JLE/JNG Jump if less or equal,or not greater小于或等于,或者不大于则转移
JNLE/JG Jump if not less or equal,or greater不小于或等于,或者大于则转移
  .JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移  格式:JL(或JNGE) OPR  测试条件:SFVOF=1  .JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移  格式:JNL(或JGE) OPR  测试条件:SFVOF=0  .JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移  格式:JLE(或JNG) OPR  测试条件:(SFVOF)VZF=1  .JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移  格式:JNLE(或JG) OPR  测试条件:(SFVOF)VZF=0  五 测试CX的值为0则转移指令  .JCXZ(Jump if CX register is zero) CX寄存器的内容为零则转移  格式:JCXZ OPR//CX==0时转移  测试条件:(CX)=0  注:条件转移全为8位短跳!  循环指令  LOOP(LOOP)循环指令  格式:LOOP OPR   测试条件:CX ≠ 0 //OPR在程序中实际是个标号   .LOOPNZ/LOOPNE 当不为零或不相等时循环指令  格式:LOOPNZ(或LOOPNE) OPR  测试条件:(CX)0且ZF=0  注:这三条指令的步骤是:  1)(CX)-(CX)-1  2)检查是否满足测试条件,如满足则(IP)-(IP)+D8的符号扩充。

过程调用及返回指令

  CALL(CALL) 过程调用指令  格式:CALL DST //DST在程序中实际是子程序标号  执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序。
调用方式格式断点保护入栈情况过程入地址
段内直接CALL NEAR PTR PR1 (SP-1)(SP-2)←IP,CS不进栈CS值保持不变 IP←DST
段内间接CALL WORD PTR (EA)(SP-1)(SP-2)←IP,CS不进栈CS值保持不变IP←(EA)
段间直接CALL FAR PTR PR1(SP-1)(SP-2)←CS,(SP-3)(SP-4)←IP IP←DST偏移地址CS←DST段地址
段间间接CALL DWORD PTR (EA)(SP-1)(SP-2)←CS,(SP-3)(SP-4)←IP IP←(EA),CS←(EA+2)
  注:为了表明是段内调用,可使用NEAR PTR属性操作符作说明。  RET(RETurn)子程序返回指令  格式:RET   RET EXP //带立即数返回  注:子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序。返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.

中断指令

  .INT指令  格式:INT TYPE  或INT  执行的操作:(SP)-(SP)-2  ((SP)+1,(SP))-(PSW)  (SP)-(SP)-2  ((SP)+1,(SP))-(CS)  (SP)-(SP)-2  ((SP)+1,(SP))-(IP)  (IP)-(TYPE*4)  (CS)-(TYPE*4+2)  .INTO 若溢出则中断  执行的操作:若OF=1则:  (SP)-(SP)-2  ((SP)+1,(SP))-(PSW)  (SP)-(SP)-2  ((SP)+1,(SP))-(CS)  (SP)-(SP)-2  ((SP)+1,(SP))-(IP)  (IP)-(10H)  (CS)-(12H)  .IRET 从中断返回指令  格式:IRET  执行的操作:(IP)-((SP)+1,(SP))  (SP)-(SP)+2  (CS)-((SP)+1,(SP))  (SP)-(SP)+2  (PSW)-((SP)+1,(SP))  (SP)-(SP)+2

处理机控制指令

  标志处理指令
指令英文全拼翻译
CLC Clear carry进位位置0指令CF-0
CMCComplement carry进位位求反指令CF-CF
STCSet carry进位位置1指令CF-1
CLDClear direction方向标志置0指令DF-0
STDSet direction方向标志置1指令DF-1
CLIClear interrupt中断标志置0指令IF-0
STISet interrupt中断标志置1指令IF-0
  二其他处理机控制指令
指令英文全拼翻译
NOPNo Opreation无操作
HLTHalt停机
WAITWait等待
ESCEscape换码
LOCKLock封锁
  处理器控制指令  CLC(CLear Carry) 进位位置0指令  格式:CLC //执行操作后,CF=0  CMC(CoMplement Carry) 进位位求反指令  格式:CMC //执行操作后,CF=!CF  STC (SeT Carry) 进位位置1指令  格式:STC //执行操作后,CF=1  HLT (HaLT) 停机指令  格式:HLT  执行操作:使机器暂停工作,使处理器CPU处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,CPU继续工作。  注:该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序。  NOP(No Operetion) 无操作指令  格式:NOP //此指令不执行任何操作,其机器码占一个字节单元  该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代。  .WAIT等待指令  该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续执行。  .ESC换码指令  格式ESC mem  其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去。当然ESC指令不允许使用立即数和寄存器寻址方式。这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数。协处理机(如8087)则是为了提高速度而可以选配的硬件。  .LOCK封锁指令  该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止。当CPU与其他处理机协同工作时,该指令可避免破坏有用信息。

十进制调整指令

  当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出。  在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).  BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示。  压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串。  非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义。
指令英文全拼翻译
DAADecimal Adjust for Addition加法的十进制调整指令
DAS Decimal Adjust for Subtraction减法的十进制调整指令
AAAASCII Adjust for Addition加法的ASCII调整指令
AASASCII Adjust for Subtraction减法ASCII调整指令
  DAA(Decimal Adjust for Addition) 加法的十进制调整指令  格式:DAA  执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中。  DAS(Decimal Adjust for Subtraction) 减法的十进制调整指令  格式:DAS  执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中。  非压缩的BCD码调整指令  AAA(ASCII Adjust for Addition) 加法的ASCII调整指令  格式:AAA  执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中。  AAS(ASCII Adjust for Subtraction) 减法的ASCII调整指令  格式:AAS  执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中。  执行操作:[DI] = [SI],将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI,从而指向下一个元素。  在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值。  格式:MOVS DST,SRC //同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数。  1.目的串必须在附加段中,即必须是ES:[DI]  2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI].

汇编 - 相关资讯

2008年国家司法考试法律法规深度汇编 2008年国家司法考试法律法规深度汇编

基本资料作者:刘东根,岳文松出版社:中国检查出版社出版日期:2008-1-1定价:¥95.00元内容提要本书以司法考试必...

CAD软件开发及技术应用标准汇编 CAD软件开发及技术应用标准汇编

CAD软件开发及技术应用标准汇编我国对CAD技术的发展倍加重视。CAD技术的普及应用使企业能够加速新产品的开发和结构调整...

【图】《明清宫藏闽台关系档案汇编》在福州首发 【图】《明清宫藏闽台关系档案汇编》在福州首发

  中新网福州6月9日电 (林春茵 叶建强)《明清宫藏闽台关系档案汇编》首发式9日在福州举行。专家指,这是迄今为止闽台关...

《明清宫藏闽台关系档案汇编》在福州首发 《明清宫藏闽台关系档案汇编》在福州首发

中新网福州6月9日电 (林春茵 叶建强)《明清宫藏闽台关系档案汇编》首发式9日在福州举行。专家指,这是迄今为止闽台关系档...

森林工程专业术语汇编 森林工程专业术语汇编

森林工程专业术语汇编

电磁兼容标准汇编(基础卷)第二版 电磁兼容标准汇编(基础卷)第二版

电磁兼容标准汇编(基础卷)第二版本卷为电磁兼容标准汇编的基础卷,收入基础类的电磁兼容国家标准19项。

炭素制品及其试验方法标准汇编 炭素制品及其试验方法标准汇编

炭素制品及其试验方法标准汇编2012年6月图书。

中国政府西藏白皮书汇编 中国政府西藏白皮书汇编

中国政府西藏白皮书汇编由中央外宣办、国务院新闻办编辑的《中国政府西藏白皮书汇编》,日前已由人民出版社出版发行。《中国政府...

汇编语言程序设计 汇编语言程序设计

汇编语言程序设计《汇编语言程序设计》作者是刘丽莉,北京大学出版社于2010年11月出版发行的书籍。

袁同礼著书目汇编 袁同礼著书目汇编

袁同礼著书目汇编《袁同礼著书目汇编》是一本于2010年6月国家图书馆出版社出版的图书,作者是袁同礼。

苏联中学生数学奥林匹克试题汇编 苏联中学生数学奥林匹克试题汇编

苏联中学生数学奥林匹克试题汇编2012年高等教育出版社出版社出版苏淳编著图书。

京剧历史文献汇编.清代卷(全十卷) 京剧历史文献汇编.清代卷(全十卷)

京剧历史文献汇编.清代卷(全十卷)

科技人气榜

01 2,4,6 2,4,6 热度:58299
02 骁龙800 骁龙800 热度:57490
03 AMD APU AMD APU 热度:45524
04 质量分数 质量分数 热度:43921
05 平台 平台 热度:24321
06 10 10 热度:23065
07 阿特拉津 阿特拉津 热度:16612
08 钓鱼网站 钓鱼网站 热度:15873

汇编 - 相关图片

投稿