汇编语言指令详解
- 格式:doc
- 大小:665.50 KB
- 文档页数:36
常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。
在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。
本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。
一、数据传输指令1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。
例如,MOV AX, BX将寄存器BX的内容复制到AX中。
2. LEA指令:LEA指令用于将内存地址加载到寄存器中。
例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。
3. PUSH指令:PUSH指令用于将数据压入栈中。
例如,PUSH AX将AX中的数据压入栈中。
4. POP指令:POP指令用于从栈中弹出数据。
例如,POP BX将栈中的数据弹出到BX中。
二、算术运算指令1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。
例如,ADD AX, BX将BX的值加到AX中。
2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。
例如,SUB AX, BX从AX中减去BX的值。
3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。
例如,MUL BX将累加器的值与BX相乘。
4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。
例如,DIV BX将累加器的值除以BX。
三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。
例如,AND AX, BX将AX与BX进行逻辑与操作。
2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。
例如,OR AX, BX将AX与BX进行逻辑或操作。
3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。
汇编语言指令功能总结汇编语言是一种低级语言,主要用于编写机器码指令的程序。
在计算机科学领域中,汇编语言是非常重要的,因为它可以直接操作计算机的硬件资源。
本文将对汇编语言中常用的指令功能进行总结。
1. 数据传输指令数据传输指令用于将数据从一个位置传送到另一个位置。
常用的数据传输指令包括MOV(将数据从一个位置复制到另一个位置)、XCHG(交换两个位置的数据)、PUSH(将数据压入堆栈)、POP (将数据从堆栈中弹出)等。
2. 算术运算指令算术运算指令用于执行各种算术运算,例如加法、减法、乘法和除法。
常用的算术运算指令包括ADD(将两个数相加)、SUB(将一个数减去另一个数)、MUL(将两个数相乘)、DIV(将一个数除以另一个数)等。
3. 逻辑运算指令逻辑运算指令用于执行各种逻辑运算,例如与、或、非和异或。
常用的逻辑运算指令包括AND(对两个数执行与运算)、OR(对两个数执行或运算)、NOT(对一个数执行非运算)、XOR(对两个数执行异或运算)等。
4. 控制转移指令控制转移指令用于实现程序的跳转和循环执行。
常用的控制转移指令包括JMP(无条件跳转到指定的地址)、JZ(如果前一个运算结果为零则跳转)、JC(如果前一个运算结果进位则跳转)等。
5. 位操作指令位操作指令用于对数据的位进行操作。
常用的位操作指令包括AND(将两个数的对应位执行与运算)、OR(将两个数的对应位执行或运算)、NOT(取反操作)等。
6. 字符串操作指令字符串操作指令用于对字符串进行操作。
常用的字符串操作指令包括MOVSB(将一个字节从源地址复制到目的地址)、LODSB(将一个字节从源地址加载到AL寄存器)、STOSB(将AL寄存器中的值存储到目的地址)等。
7. 输入输出指令输入输出指令用于与计算机的输入输出设备进行交互。
常用的输入输出指令包括IN(从指定的端口读取数据)、OUT(将数据发送到指定的端口)等。
总结:汇编语言中的指令功能丰富多样,可以实现各种复杂的操作。
汇编语言指令详解汇编语言是一种低级语言,它直接操作计算机的硬件。
与高级语言相比,汇编语言更具操作性,可以更精确地控制计算机的执行过程。
在编写汇编语言程序时,我们需要使用指令来完成各种操作,并且对不同的指令进行详细的了解。
本文将详细介绍一些常用的汇编语言指令及其功能。
一、数据传输指令数据传输指令用于在寄存器间传输数据或将数据从寄存器传送到内存中。
常用的数据传输指令包括MOV、LDA、STA等。
MOV指令用于将数据从一个寄存器传送到另一个寄存器。
例如,MOV AX, BX表示将寄存器BX中的数据传送到寄存器AX中。
LDA指令用于将一个内存单元的数据传送到累加器中。
例如,LDA 1000H将内存单元1000H中的数据传送到累加器中。
STA指令用于将累加器的数据传送到一个内存单元中。
例如,STA 2000H将累加器中的数据传送到内存单元2000H中。
二、算术运算指令算术运算指令用于对数据进行加、减、乘、除等运算操作。
常用的算术运算指令包括ADD、SUB、MUL、DIV等。
ADD指令用于将两个操作数相加,并将结果存储在目的操作数中。
例如,ADD AX, BX表示将寄存器AX和寄存器BX的数据相加,并将结果存储在寄存器AX中。
SUB指令用于将目的操作数减去源操作数,并将结果存储在目的操作数中。
例如,SUB AX, BX表示将寄存器AX减去寄存器BX的数据,并将结果存储在寄存器AX中。
MUL指令用于执行无符号整数乘法运算。
例如,MUL AX, BX表示将寄存器AX和寄存器BX的数据相乘,并将结果存储在寄存器AX 中。
DIV指令用于执行无符号整数除法运算。
例如,DIV AX, BX表示将寄存器AX的数据除以寄存器BX的数据,并将商存储在寄存器AX 中,余数存储在寄存器DX中。
三、逻辑运算指令逻辑运算指令用于对数据进行逻辑操作,如与、或、非、位移等。
常用的逻辑运算指令包括AND、OR、NOT、SHL等。
AND指令用于对两个操作数执行位与操作,并将结果存储在目的操作数中。
汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。
它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。
汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。
下面将详细介绍汇编语言中常用的基本指令。
1. 数据传送指令数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。
MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。
例如,MOV AX, BX可以将BX的值传送给AX。
ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。
格式为ADD 目标操作数, 源操作数。
例如,ADD AX, BX可以将AX与BX的值相加,并将结果保存在AX中。
SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存到目标操作数中。
格式为SUB 目标操作数, 源操作数。
例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。
MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。
格式为MUL 目标操作数, 源操作数。
例如,MUL AX, BX可以将AX与BX的值相乘,并将结果保存在AX中。
2. 算术逻辑指令算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。
ADD指令在前面已经提到,用于将两个操作数相加。
SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。
MUL指令在前面已经提到,用于将两个操作数相乘。
DIV指令用于将目标操作数除以源操作数,并将商保存到目标操作数,余数保存在DX中。
格式为DIV 操作数。
例如,DIV BX可以将AX的值除以BX,并将商保存在AX中,余数保存在DX中。
AND指令用于对两个操作数进行按位与运算,并将结果保存到目标操作数中。
格式为AND 目标操作数, 源操作数。
例如,AND AX,BX可以将AX与BX的值按位与,并将结果保存在AX中。
汇编常用指令汇编语言是计算机底层的一种编程语言,通过编写汇编指令可以直接控制机器的硬件和内存。
在使用汇编语言编写程序时,掌握一些常用指令是非常重要的。
本文将介绍一些常用的汇编指令,帮助读者更好地理解和应用汇编语言。
一、数据传输指令数据传输指令用于在寄存器和内存之间传输数据,包括将数据从内存加载到寄存器中,以及将寄存器中的数据存储到内存中。
常用的数据传输指令包括:1. MOV:将一个操作数的值传送给另一个操作数。
例如,"MOV AX, BX"表示将BX中的值传送给AX寄存器。
2. XCHG:交换两个操作数的值。
例如,"XCHG AX, BX"表示交换AX和BX的值。
3. PUSH:将数据压入栈中。
例如,"PUSH AX"表示将AX的值压入栈中。
4. POP:从栈中弹出数据。
例如,"POP AX"表示将栈顶的值弹出并存储到AX中。
二、算术和逻辑指令算术和逻辑指令用于执行各种算术运算和逻辑操作,包括加法、减法、乘法、除法以及与、或、非等逻辑运算。
常用的算术和逻辑指令包括:1. ADD:将两个操作数相加。
例如,"ADD AX, BX"表示将BX的值加到AX中。
2. SUB:将第一个操作数减去第二个操作数。
例如,"SUB AX, BX"表示用BX的值减去AX,并将结果存储到AX中。
3. MUL:将两个操作数相乘。
例如,"MUL AX, BX"表示将AX乘以BX,并将结果存储到一组寄存器中。
4. DIV:将第一个操作数除以第二个操作数。
例如,"DIV AX, BX"表示用AX的值除以BX,并将商存储到一组寄存器中。
5. AND:对两个操作数执行逻辑与运算。
例如,"AND AX, BX"表示将AX和BX进行逻辑与操作。
6. OR:对两个操作数执行逻辑或运算。
汇编指令大全(有注释)_IT计算机_专业资料汇编指令大全(有注释)为了方便开发者理解和使用汇编语言,本文汇编指令大全提供了对常用指令的详细注释。
汇编语言是一种低级编程语言,直接操作计算机的硬件和寄存器。
掌握汇编语言对于理解计算机底层原理和优化程序性能至关重要。
下面列举了一些常用的汇编指令,以供参考。
1. MOV指令:用于将一个数据从一个位置复制到另一个位置。
可以在寄存器和内存之间传输数据。
示例:MOV AX, 10h ; 将数据10h复制到寄存器AX中MOV [BX], AX ; 将寄存器AX中的数据复制到内存地址BX指向的位置2. ADD指令:用于将两个数据相加,并将结果存储在指定的位置。
示例:ADD AX, BX ; 将寄存器AX和BX中的数据相加,并将结果保存在AX中ADD [BX], CX ; 将内存地址BX指向的数据与寄存器CX中的数据相加,并将结果保存在内存地址BX指向的位置3. SUB指令:用于将两个数据相减,并将结果存储在指定的位置。
示例:SUB AX, BX ; 将寄存器AX的数据减去BX的数据,并将结果保存在AX中SUB [BX], CX ; 将内存地址BX指向的数据减去寄存器CX的数据,并将结果保存在内存地址BX指向的位置4. INC指令:用于将指定位置的数据加1。
示例:INC AX ; 将寄存器AX的数据加1INC [BX] ; 将内存地址BX指向的数据加15. DEC指令:用于将指定位置的数据减1。
示例:DEC AX ; 将寄存器AX的数据减1DEC [BX] ; 将内存地址BX指向的数据减16. JMP指令:用于无条件跳转到指定的代码位置。
示例:JMP label1 ; 无条件跳转到标签label1处JMP 100h ; 无条件跳转到内存地址100h处7. CMP指令:用于比较两个数据的大小,并根据比较结果设置条件码寄存器。
示例:CMP AX, BX ; 比较寄存器AX和BX的数据大小,并设置条件码寄存器CMP [BX], CX ; 比较内存地址BX指向的数据和寄存器CX的数据大小,并设置条件码寄存器8. JE指令:用于在两个数据相等时跳转到指定的代码位置。
汇编语言各种指令的解释与用法汇编语言是一种低级语言,通过编写汇编程序可以直接操作计算机硬件。
在汇编语言中,各种指令起到了关键的作用。
本文将对常用的汇编语言指令进行解释,并说明其用法。
1. 数据传输指令数据传输指令用于在存储器和寄存器之间传输数据。
常用的数据传输指令包括MOV、PUSH和POP。
- MOV指令用于将数据从一个位置传送到另一个位置。
语法格式为:MOV 目的地,源。
- PUSH指令用于将数据压入栈中。
语法格式为:PUSH 寄存器/内存地址。
- POP指令用于从栈中弹出数据并存放到指定位置。
语法格式为:POP 寄存器/内存地址。
2. 算术运算指令算术运算指令用于进行各种算术运算,如加法、减法、乘法和除法。
常用的算术运算指令有ADD、SUB、MUL和DIV。
- ADD指令实现两个操作数的加法。
语法格式为:ADD 目的操作数,源操作数。
- SUB指令实现两个操作数的减法。
语法格式为:SUB 目的操作数,源操作数。
- MUL指令实现两个操作数的乘法。
语法格式为:MUL 操作数。
- DIV指令实现两个操作数的除法。
语法格式为:DIV 操作数。
3. 分支控制指令分支控制指令用于根据条件来选择不同的执行路径,包括条件跳转和无条件跳转。
常用的分支控制指令有JMP、JZ、JE和JNE。
- JMP指令用于无条件跳转到指定的地址。
语法格式为:JMP 标号/偏移量。
- JZ指令用于在零标志位为1时跳转到指定地址。
语法格式为:JZ标号/偏移量。
- JE指令用于在相等标志位为1时跳转到指定地址。
语法格式为:JE 标号/偏移量。
- JNE指令用于在不相等标志位为1时跳转到指定地址。
语法格式为:JNE 标号/偏移量。
4. 逻辑运算指令逻辑运算指令用于实现与、或、非、异或等逻辑运算。
常用的逻辑运算指令有AND、OR、NOT和XOR。
- AND指令用于执行按位与运算。
语法格式为:AND 目的操作数,源操作数。
- OR指令用于执行按位或运算。
汇编常用指令1. 前言汇编语言是一种低级别的计算机语言,它是由一些指令组成的。
指令是一条计算机执行的命令,从基本上讲,这些指令代表着标准的操作,例如加、减、乘、除、移位和比较等。
汇编语言可以通过编写程序来控制一个计算机的行为,这些程序通常被称为汇编程序。
本文将介绍汇编语言中一些常用的指令。
2. 数据传送指令数据传送指令是汇编语言中最基本的指令之一,它主要用来将数据从一个位置传送到另一个位置。
在汇编语言中,数据传送指令通常使用MOV语句来实现。
下面是一些常用的数据传送指令:- MOV AX, BX:将BX中存储的数据传送到AX中。
- MOV AX, [BX]:将BX中存储的地址所指向的数据传送到AX中。
- MOV [BX], AX:将AX中存储的数据传送到BX所指向的地址中。
3. 算术运算指令算术运算指令主要用来执行各种数学运算,例如加法、减法、乘法和除法等操作。
下面是一些常用的算术运算指令:- ADD AX, BX:将BX中存储的数据与AX中存储的数据相加,并将结果存储在AX中。
- SUB AX, BX:将BX中存储的数据从AX中存储的数据中减去,并将结果存储在AX中。
- MUL BX:将AX中存储的数据与BX中存储的数据相乘,并将结果存储在AX中。
- DIV BX:将AX中存储的数据除以BX中存储的数据,并将结果存储在AX和DX中。
4. 位运算指令位运算是一种在二进制数字级别上的运算,它可以执行各种位操作,例如AND、OR、XOR和NOT等操作。
下面是一些常用的位运算指令:- AND AX, BX:将BX中存储的数据与AX中存储的数据按位进行AND运算,并将结果存储在AX中。
- OR AX, BX:将BX中存储的数据与AX中存储的数据按位进行OR 运算,并将结果存储在AX中。
- XOR AX, BX:将BX中存储的数据与AX中存储的数据按位进行XOR运算,并将结果存储在AX中。
- NOT AX:将AX中存储的数据按位进行取反操作。
汇编教程汇编指令详解汇编语言是一种底层的计算机语言,通过使用汇编指令对计算机进行编程。
本文将对汇编指令进行详细解释,帮助读者理解和使用汇编语言。
1.数据传送指令:数据传送指令用于将数据从一个位置传送到另一个位置。
例如,MOV指令可以将数据从一个寄存器移动到另一个寄存器,或从存储器中读取数据并将其移动到寄存器中。
2.算术运算指令:算术运算指令用于执行各种算术运算,如加法、减法、乘法和除法。
例如,ADD指令可以将两个操作数相加,而MUL指令可以将两个操作数相乘。
3.逻辑运算指令:逻辑运算指令用于执行逻辑运算,如与、或、非和异或。
例如,AND指令可以对两个操作数执行按位与运算,而OR指令可以对两个操作数执行按位或运算。
4.控制转移指令:控制转移指令用于在程序执行过程中改变控制流。
例如,JMP指令可以无条件地将程序跳转到指定的地址,而条件分支指令(如JE、JNE等)可以根据特定的条件决定是否跳转。
5.程序调用指令:程序调用指令用于调用子程序。
例如,CALL指令可以将控制交给一个子程序,并在子程序执行完后返回到调用点。
6.中断指令:中断指令用于触发计算机的中断处理程序。
例如,INT 指令可以使计算机执行与指定中断向量相关联的中断处理程序。
7.输入输出指令:输入输出指令用于与计算机的外部设备进行数据交换。
例如,IN指令可以从外部设备中读取数据,而OUT指令可以向外部设备发送数据。
除了上述常用的汇编指令外,不同的计算机体系结构可能还有其他特定的指令。
因此,在学习和使用汇编语言时,了解特定体系结构的指令集是很重要的。
此外,汇编语言还包括一些程序框架和编程技巧,如标号、注释、宏定义、条件编译等。
这些工具和技巧可用于简化和优化汇编程序的开发过程。
总结起来,汇编语言是一种底层的计算机语言,通过使用各种指令对计算机进行编程。
掌握和理解各种汇编指令对于编写高效和优化的汇编程序非常重要。
希望本文能够帮助读者更好地理解和使用汇编语言。
汇编语言指令汇总汇编语言是一种底层编程语言,用于编写计算机程序。
在汇编语言中,指令是执行特定操作的基本单元。
以下是一些常见的汇编语言指令的汇总:1.数据传输指令:-MOV:将源操作数的值复制到目的操作数。
-PUSH:将数据压入栈中。
-POP:从栈中弹出数据。
-LEA:将源操作数的有效地址加载到目的操作数中。
2.算术和逻辑指令:-ADD:将两个操作数相加,结果存储在目的操作数中。
-SUB:将第二个操作数从第一个操作数中减去,结果存储在目的操作数中。
-MUL:将两个操作数相乘,结果存储在目的操作数中。
-DIV:将第一个操作数除以第二个操作数,商存储在目的操作数中。
3.分支和循环指令:-JMP:无条件跳转到指定的地址。
-CMP:比较两个操作数的值。
-JZ/JNZ:当比较结果为零/非零时,跳转到指定的地址。
-JE/JNE:当比较结果为相等/不相等时,跳转到指定的地址。
-JG/JGE/JL/JLE:当比较结果为大于/大于等于/小于/小于等于时,跳转到指定的地址。
-LOOP:循环指令,根据计数寄存器的值重复执行指定的代码块。
4.中断指令:-INT:引发中断,将程序控制权转移到中断服务程序。
-IRET:从中断服务程序返回到调用程序。
5.位操作指令:-AND/OR/XOR:按位与/或/异或操作。
-NOT:按位取反操作。
-SHL/SHR:逻辑左移/逻辑右移操作。
6.I/O指令:-IN:从输入端口读取数据。
-OUT:向输出端口写入数据。
7.标志位操作指令:-CLC:清除进位标志位。
-STC:设置进位标志位。
-CLI:禁用中断。
-STI:启用中断。
8.字符串指令:-MOVS:将一个字符串从源地址移动到目的地址。
-CMPS:比较两个字符串的内容。
-LODS:从源地址加载一个字符或一个字符串。
-STOS:存储一个字符或一个字符串到目的地址。
9.其他指令:-NOP:空操作指令。
-HLT:停止运行指令。
以上只是一些常见的汇编语言指令,汇编语言的指令集因计算机体系结构而异。
汇编语言常用指令大全汇编语言是一种计算机编程语言,使用指令来控制计算机硬件执行特定的操作。
在本文中,我们将介绍一些常用的汇编语言指令,以帮助读者更好地理解和学习汇编语言。
一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。
例子:MOV AX, BX 将寄存器BX中的值复制到寄存器AX中。
2. PUSH:将数据压入堆栈。
例子:PUSH AX 将寄存器AX中的值压入堆栈。
3. POP:从堆栈中弹出并获取数据。
例子:POP AX 从堆栈中弹出一个值,并将其存入寄存器AX中。
二、算术指令1. ADD:将两个操作数相加。
例子:ADD AX, BX 将寄存器AX和BX中的值相加,并将结果存入寄存器AX中。
2. SUB:将一个操作数从另一个操作数中减去。
例子:SUB AX, BX 将寄存器BX中的值从寄存器AX中减去,并将结果存入寄存器AX中。
3. MUL:将两个操作数相乘。
例子:MUL AX, BX 将寄存器AX和BX中的值相乘,并将结果存入寄存器AX中。
三、逻辑指令1. AND:进行逻辑与操作。
例子:AND AX, BX 对寄存器AX和BX中的值进行逻辑与操作,并将结果存入寄存器AX中。
2. OR:进行逻辑或操作。
例子:OR AX, BX 对寄存器AX和BX中的值进行逻辑或操作,并将结果存入寄存器AX中。
3. NOT:进行逻辑非操作。
例子:NOT AX 对寄存器AX中的值进行逻辑非操作。
四、条件分支指令1. JMP:无条件跳转到指定的地址。
例子:JMP label 跳转到标记为label的地址。
2. JZ:当操作数为零时跳转到指定的地址。
例子:JZ label 如果寄存器AX中的值为零,则跳转到标记为label 的地址。
3. JC:当进位标志为1时跳转到指定的地址。
例子:JC label 如果进位标志位为1,则跳转到标记为label的地址。
五、循环指令1. LOOP:当计数器不为零时,循环执行指定的代码块。
汇编语言指令详解大全助记符指令说明字节数周期数(数据传递类指令)MOV A,Rn 寄存器传送到累加器 1 1MOV A,direct直接地址传送到累加器2 1MOV A,@Ri 累加器传送到外部RAM(8 地址)1 1MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1MOV Rn,direct直接地址传送到寄存器2 2MOV Rn,#data累加器传送到直接地址2 1MOV direct,Rn寄存器传送到直接地址2 1MOV direct,direct直接地址传送到直接地址3 2MOV direct,A累加器传送到直接地址2 1MOV direct,@Ri间接RAM 传送到直接地址2 2MOV direct,#data立即数传送到直接地址3 2MOV @Ri,A 直接地址传送到直接地址1 2MOV @Ri,direct直接地址传送到间接RAM2 1MOV @Ri,#data立即数传送到间接RAM2 2MOV DPTR,#data1616 位常数加载到数据指针3 1MOVC A,@A+DPTR代码字节传送到累加器1 2MOVC A,@A+PC 代码字节传送到累加器1 2MOVX A,@Ri 外部RAM(8 地址)传送到累加器1 2MOVX A,@DPTR 外部RAM(16 地址)传送到累加器1 2MOVX @Ri,A 累加器传送到外部RAM(8 地址)1 2MOVX @DPTR,A 累加器传送到外部RAM(16 地址)1 2PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1XCH A,direct直接地址和累加器交换2 1XCH A, @Ri 间接RAM 和累加器交换1 1XCHD A, @Ri间接RAM 和累加器交换低4 位字节1 1 (算术运算类指令)INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1 DEC direct 直接地址减1 2 2 DEC @Ri 间接RAM 减1 1 1MUL AB 累加器和B 寄存器相乘1 4DIV AB 累加器除以B 寄存器 1 4 DA A 累加器十进制调整 1 1ADD A,Rn 寄存器与累加器求和 1 1ADD A,direct 直接地址与累加器求和2 1ADD A,@Ri 间接RAM 与累加器求和1 1ADD A,#data 立即数与累加器求和 2 1ADDC A,Rn 寄存器与累加器求和(带进位)1 1ADDC A,direct 直接地址与累加器求和(带进位)2 1ADDC A,@Ri 间接RAM 与累加器求和(带进位)1 1ADDC A,#data 立即数与累加器求和(带进位)2 1SUBB A,Rn 累加器减去寄存器(带借位)1 1SUBB A,direct 累加器减去直接地址 2 1(带借位)SUBB A,@Ri 累加器减去间接RAM(带借位)1 1SUBB A,#data累加器减去立即数(带借位)2 1 (逻辑运算类指令)ANL A,Rn 寄存器“与”到累加器1 1ANL A,direct 直接地址“与”到累加器2 1ANL A,@Ri 间接RAM“与”到累加器1 1ANL A,#data 立即数“与”到累加器2 1ANL direct,A 累加器“与”到直接地址2 1ANL direct, 立即数“与”到直接 3 2#data 地址ORL A,Rn 寄存器“或”到累加器1 2ORL A,direct 直接地址“或”到累加器2 1ORL A,@Ri 间接RAM“或”到累加器1 1ORL A,#data 立即数“或”到累加器2 1ORL direct,A 累加器“或”到直接地址2 1ORL direct,#data立即数“或”到直接地址3 1XRL A,Rn 寄存器“异或”到累加器1 2XRL A,direct 直接地址“异或”到累加器2 1XRL A,@Ri 间接RAM“异或”到累加器1 1XRL A,#data 立即数“异或”到累加器2 1XRL direct,A 累加器“异或”到直接地址2 1XRL direct,#data立即数“异或”到直接地址3 1CLR A 累加器清零 1 2 CPL A 累加器求反 1 1 RL A 累加器循环左移 1 1RLC A 带进位累加器循环左移1 1RR A 累加器循环右移 1 1RRC A 带进位累加器循环右移1 1SWAP A 累加器高、低4 位交 1 1换(控制转移类指令)JMP @A+DPTR 相对DPTR 的无条件间接转移1 2JZ rel 累加器为0 则转移2 2JNZ rel 累加器为1 则转移2 2CJNE A,direct,rel 比较直接地址和累加器,不相等转移3 2CJNE A,#data,rel 比较立即数和累加器,不相等转移3 2CJNE Rn,#data,rel 比较寄存器和立即数,不相等转移2 2CJNE @Ri,#data,rel 比较立即数和间 3 2接RAM,不相等转移DJNZ Rn,rel 寄存器减1,不为0 则转移3 2DJNZ direct,rel 直接地址减1,不为0 则转移3 2NOP 空操作,用于短暂延时1 1ACALL add11 绝对调用子程序 2 2 LCALL add16 长调用子程序 3 2 RET 从子程序返回 1 2RETI 从中断服务子程序返回1 2AJMP add11 无条件绝对转移 2 2 LJMP add16 无条件长转移 3 2 SJMP rel 无条件相对转移 2 2(布尔指令)CLR C 清进位位 1 1 CLR bit 清直接寻址位 2 1 SETB C 置位进位位 1 1 SETB bit 置位直接寻址位 2 1 CPL C 取反进位位 1 1 CPL bit 取反直接寻址位 2 1ANL C,bit 直接寻址位“与”到进位位2 2ANL C,/bit 直接寻址位的反码“与”到进位位2 2ORL C,bit 直接寻址位“或”到进位位2 2ORL C,/bit 直接寻址位的反码“或”到进位位2 2MOV C,bit 直接寻址位传送到进位位2 1MOV bit, C 进位位位传送到直接 2 2寻址JC rel 如果进位位为1 则转移2 2JNC rel 如果进位位为0 则转移2 2JB bit,rel如果直接寻址位为1则转移3 2JNB bit,rel如果直接寻址位为0则转移3 2JBC bit,rel直接寻址位为1 则转移并清除该位2 2(伪指令)ORG 指明程序的开始位置DB 定义数据表DW 定义16 位的地址表EQU 给一个表达式或一个字符串起名DATA 给一个8 位的内部RAM起名XDATA 给一个8 位的外部RAM 起名BIT 给一个可位寻址的位单元起名END 指出源程序到此为止(指令中的符号标识)Rn 工作寄存器R0-R7Ri 工作寄存器R0 和R1@Ri 间接寻址的8 位RAM 单元地址(00H-FFH)#data8 8 位常数#data16 16 位常数addr16 16 位目标地址,能转移或调用到64KROM 的任何地方addr11 11 位目标地址,在下条指令的2K 范围内转移或调用Rel 8 位偏移量,用于SJMP 和所有条件转移指令,范围-128~+127Bit 片内RAM 中的可寻址位和SFR 的可寻址位Direct 直接地址,范围片内RAM 单元(00H-7FH)和80H-FFH$ 指本条指令的起始位置。
汇编语言指令大全前言汇编语言是一种底层的计算机语言,用于编写程序时直接操作硬件,并且能够直接控制计算机的指令执行。
在学习汇编语言时,掌握各种指令是非常重要的,本文将系统性地介绍汇编语言中常用的指令,以便读者更好地理解和使用汇编语言。
数据传送指令数据传送指令用于在寄存器、内存之间传送数据,常用的数据传送指令有MOV、XCHG等。
MOVMOV指令将数据从一个地方(来源)移动到另一个地方(目的地),语法如下:MOV 目的地, 来源例如:MOV AX, 5XCHGXCHG指令用于交换两个操作数的值,语法如下:XCHG 寄存器1, 寄存器2例如:XCHG AX, BX算术操作指令算术操作指令用于进行各种算术运算,如加法、减法、乘法、除法等,常用的算术操作指令有ADD、SUB、MUL、DIV等。
ADDADD指令用于两个操作数相加并将结果存储在目的地,语法如下:ADD 目的地, 源操作数例如:ADD AX, BXSUB指令用于从目的地减去源操作数的值,语法如下:SUB 目的地, 源操作数例如:SUB AX, 10MULMUL指令用于无符号乘法操作,将累加器AL与源操作数执行乘法,结果存储在累加器中,语法如下:MUL 源操作数例如:MUL BLDIVDIV指令用于无符号除法操作,将累加器AX中的双字数值除以源操作数,商存储在AX中,余数存储在DX中,语法如下:DIV 源操作数例如:DIV CX控制转移指令控制转移指令用于改变程序执行的顺序,如无条件跳转、条件跳转等,常用的控制转移指令有JMP、JZ、JC等。
JMPJMP指令用于无条件跳转到指定的地址执行,语法如下:JMP 目标地址例如:JMP STARTJZ指令表示“零标志”(Zero Flag),即在上一个运算结果为零时跳转到指定地址执行,语法如下:JZ 目标地址例如:JZ LOOPJCJC指令表示“进位标志”(Carry Flag),即在发生进位时跳转到指定地址执行,语法如下:JC 目标地址例如:JC ADD_OVERFLOW总结本文介绍了汇编语言中常用的数据传送指令、算术操作指令和控制转移指令,这些指令是汇编语言编程时必须掌握的基础知识。
汇编语言指令汇总汇编语言是一种低级编程语言,它直接操作计算机硬件,使用指令来完成特定的任务。
下面是一些常用的汇编语言指令汇总。
1.操作数传送指令:-MOV:将数据从一个位置复制到另一个位置。
-XCHG:交换两个位置中的数据。
2.算术指令:-ADD:将两个数相加并将和存储在指定位置。
-SUB:将两个数相减并将差存储在指定位置。
-MUL:将两个数相乘并将结果存储在指定位置。
-DIV:将两个数相除并将商存储在指定位置。
-INC:将一个数增加1-DEC:将一个数减少13.逻辑指令:-AND:对两个数进行逻辑与操作并将结果存储在指定位置。
-OR:对两个数进行逻辑或操作并将结果存储在指定位置。
-XOR:对两个数进行逻辑异或操作并将结果存储在指定位置。
-NOT:对一个数进行逻辑非操作并将结果存储在指定位置。
4.控制指令:-JMP:无条件跳转到指定位置。
-JZ:如果前一条指令的结果为0,则跳转到指定位置。
-JNZ:如果前一条指令的结果不为0,则跳转到指定位置。
-JC:如果前一条指令产生进位,则跳转到指定位置。
-JNC:如果前一条指令不产生进位,则跳转到指定位置。
5.栈操作指令:-PUSH:将数据放入栈中。
-POP:将栈顶的数据弹出。
6.输入输出指令:-IN:从外部设备中读取数据。
-OUT:将数据发送到外部设备。
7.循环指令:-LOOP:根据计数寄存器的值,重复执行指定的代码块。
8.过程调用指令:-CALL:调用一个子程序。
-RET:从子程序返回。
9.字符串指令:-MOVS:将一个字节或一个字从一个位置复制到另一个位置。
-CMPS:将两个位置中的字节或字进行比较。
除了以上提到的指令外,不同的汇编语言还有其它特定的指令,用于特定的硬件操作或功能实现。
这些指令的语法与使用方法可能略有不同,具体请参考所使用的汇编语言的文档或手册。
总之,汇编语言指令是汇编语言的基础,熟练掌握和理解这些指令对于编写高效和可靠的汇编程序至关重要。
常见汇编语言指令及解释#1常见汇编语言指令解释:1.Rn表示R0~R7中的一个2.#data表示8位的数值00H~FFH3.direct表示8位的地址00H~FFH4.#data1616位立即数5.@Ri表示寄存器间接寻址只能是R0或者R16.@DPTR表示数据指针间接寻址,用于外部64k的RAM/ROM寻址7.bit表示位地址8.$表示当前地址寄存器寻址MOV A,R1将R1中的数值赋予A直接寻址MOV A,3AH将地址3AH中的数值赋予A立即寻址MOV A,#3AH将3AH数值赋予Amov dptr,#1828h寄存器间址MOV A,@Ri将Ri中地址的数值赋予A,Ri或是R0或是R1MOV A,@DPTR变址寻址MOVC A,@A+DPTR以A中的数值为地址偏移量进行查表;变址寻址区是程序存储器ROM,而不是数据存储器RAM相对寻址AJMP MAIN跳转到行号为MAIN处位寻址MOV C,7FH将位地址7FH的数值赋予CMOV C,2FH.7;MOV C,ACC.7MOV A,#3AH数据传输、赋值命令PUSH direct将direct为地址的数值压入堆栈中POP direct将direct为地址的数值弹出堆栈XCH A,direct将direct中的数值与A进行交换ADD A,direct将direct中的数值与A中的数值相加INC direct将direct中的数值加1SUBB A,direct将A中的数值减去direct中的数值和Cy值,并保存在A中,如果想使用不带Cy减法,可以在运算前对Cy清零CLR CDEC direct将direct中的数值减1DA A用于对BCD码加减法后进行10进制调整MUL AB将A和B相乘,并把高八位放在B中,低八位放在A中DIV AB将A和B相除,并把商的整数部分放在A中,余数放在B中ANL A,direct将A与direct中的数值进行与运算,结果保留在A中(与运算规律:有0出0,全1出1)ORL A,direct将A与direct中的数值进行或运算,结果保留在A中(或运算规律:有1出1,全0出0)XRL A,direct将A与direct中的数值进行异或运算,结果保留在A中(异或运算规律:全0出0,全1出0,01、10出1)CLR A对A清零CPL A对A取反RL A对A中数左移RR A对A中数右移RLC A对A中数带Cy左移RRC A对A中数带Cy右移SWAP A对A中的数高4位低4位互相交换LJMP长跳转指令,64K地址范围AJMP短跳转指令,2K地址范围JZ rel如果A为0就跳转到rel行号处JNZ rel如果A不为0就跳转到rel行号处CJNE A,#data,rel如果A不等于data就跳转到rel行号处DJNZ R1,rel如果R1减1后不为0就跳转到rel行号处ACALL rel调用rel子程序,2K地址以内LCALL rel调用rel子程序,64K地址以内RET子程序返回指令RETI中断程序返回指令NOP空操作指令MOV C,bit将位地址bit中的值赋予CCLR bit将bit位地址清0SETB bit将bit位地址置1CPL bit将bit位地址取反ANL C,bit将地址bit中的值和C做与运算,结果存放在C中ORL C,bit将地址bit中的值和C做或运算,结果存放在C中JC rel如果Cy为1,就跳转到rel行号处JNC rel如果Cy为0,就跳转到rel行号处JB bit,rel;若BIT=1则转移JNB bit,rel;若BIT=0则转移JBC bit,reL;若BIT=1则转移,且BIT置11加法指令:ADD A,Rn;ADD A,direct;ADD A,@Ri;ADD A,#DATA2带CY的加法指令:ADDC A,Rn;ADDC A,direct;ADDC A,@Ri;ADDC A,#DATA3加一指令:INC A;INC Rn;INC direct;INC@Ri;INC DPTR4减法指令:SUBB A,Rn;SUBB A,direct;SUBB A,@Ri;SUBB A,#data5减一指令:DEC A;DEC Rn;DEC direct;DEC@Ri6十进制调整指令:DA A7乘法和除法指令:MUL AB;乘积高八位放在B中,低八位放在A中DIV AB;商的整数放在A中,余数放在B中8逻辑异或:XRL A,Rn。
汇编语言常用指令大全解释汇编语言常用指令大全解释常用汇编指令:MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令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中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。
练习题1、8086CPU向0052H单元写入一个字,写入过程中BHE和A0的逻辑电平是()。
A、0和0B、0和1C、1和0D、1和12、8086CPU用()信号的下降沿在T1结束时将地址信息锁存在地址锁存器中。
A、M/IOB、BHEC、ALED、READY3、下列8086CPU标志寄存器FR的标志位中,不属于状态标志位的是( )A、OFB、IFC、AFD、PF4、8086CPU在进行读内存操作时,控制信号M/IO 和DT/R的状态是( )A、00B、01C、10D、115、当8086CPU采样到READY=0,则CPU将( )A、执行停机指令B、插入等待周期C、执行空操作指令 D、重新发送地址码6、在8086CPU的标志寄存器中,控制标志位占()A、3位B、9位C、4位D、16位7、8086 CPU内有指示下条指令有效地址的指示器是()A、IPB、SPC、BPD、SI8、现行数据段位于存储器B0000H到B0FFFH字节单元,则段寄存器DS的内容及该段长度(字节数)分别为()A、B000H,1000HB、0000H,0FFFHC、B000H,0FFFHD、B000H,00FFH9、指令MOV BX,[BP]中,约定的段寄存器是( )A、ESB、SSC、DSD、CS10、下列指令有语法错误的是()A、MOV [SI],[DI]B、IN AL,DXC、MOV AX,[0100H+BX+SI]D、PUSH BX11、堆栈操作时,段内偏移量由()寄存器指出。
A、SPB、BPC、SID、DI12、地址总线的“宽度”决定了计算机系统内存的最大容量,8086有20根地址线,可寻址()字节的存储单元。
A、512KB、1MC、2MD、4M13、条件转移指令JZ的测试条件()A、CF=0B、CF=1C、ZF=0D、ZF=114、INC指令不影响()标志A、OFB、CFC、ZFD、SF15、寄存器间接寻址方式中,操作数在()中。
A、通用寄存器B、堆栈C、存储单元D、段寄存器16、假设(SS)=2000H,(SP)=0012H,(AX)=1234H,执行PUSH AX后,()=12HA、20014HB、20011HC、20010HD、2000FH17、若要检查BX寄存器中的D12位是否为1,应该用()指令。
A、OR BX,1000HB、TEST BX,1000HC、XOR BX,1000HD、AND BX,1000H18、8086CPU的40根引脚中,有()个是分时复用的。
A、21B、1C、2D、2419、8086CPU复位后,CPU执行的第一条指令的起始地址应是()。
A、FFFF0HB、FFFF1HC、FFFF2HD、FFFFFH20、8086CPU对内存读/写操作,需两个总线周期的读/写操作是()21、用BP作基址变址寻址时,操作数所在的段是当前( )。
A、数据段B、代码段C、堆栈段D、附加段22、当RESET信号进入高电平状态后,将使8086/8088微处理器的()寄存器为0FFFFH。
A、CSB、ESC、IPD、BP23、8086CPU中的SI是一个多少位的寄存器( )A、8位B、16位C、24位D、32位24、若AL中的内容为04H,CL中的内容为04H,执行指令SHL AL,CL指令后,AL中的内容为()A、08HB、10HC、16HD、40H25、某寄存器与它自己相异或,结果为()A、0FFFFHB、0000HC、00FFHD、不能确定26、当两个无符号数作减法运算时,CF=0说明()A、被减数小B、被减数大C、被减数与减数相等D、不能确定27、在LOOP指令执行时,隐含着对某寄存器减1的操作,该寄存器是( )A、AXB、BXC、CXD、DX28、下列关于8086传送类指令说法错误的是()。
A、立即数只能做源操作数;B、不能在存储器之间直接传送C、不能给CS和IP置新值;D、堆栈操作指令必须以字节为操作数29、若寄存器AX,BX,CX,DX的内容分别为14,13,12,11时,依次执行PUSH AX,PUSH BX,POP CX,POP DX,PUSH CX,PUSH DX,POP AX,POP BX后,则寄存器AX和BX的内容分别为:()A、14,13B、13,12C、12,11D、14,1130、INC指令不影响()标志A、OFB、CFC、ZFD、SF31、若BL=20H,BH=32H,则BX=()。
A、20HB、32HC、2032HD、3220H32、8086CPU与慢速设备之间进行数据传输,为了使传送速度匹配,有时需要在()状态之间插入若干等待周期TW。
A、T1和T2B、T2和T3C、T3和T4D、随机33、()指向的内存单元的值被CPU做为指令执行。
A、DS:SIB、CS:IPC、SS:SPD、ES:DI34、堆栈段寄存器是()。
A、DSB、SSC、ESD、CS35、8086CPU地址线与数据线分别为多少条? ( )A. 8条,16条B. 8条,20条C.20条,16条D.16条,20条A、从偶地址读/写一个字节B、从奇地址读/写一个字节C、从偶地址读/写一个字D、从奇地址读/写一个字1、指出8086CPU和8088CPU的区别?2、8086CPU为什么要用地址锁存器?3、简述8086CPU最小模式下的总线组成?4、8086系统中的8286是什么器件?起什么作用?5、要想完成[2000H]送[1000H],用指令MOV [1000H], [2000H]是否正确,说明原因?6、8086CPU读/写总线周期各包含多少个时钟周期?什么情况下需要插入TW等待状态?应插入多少个TW,取决于什么因素?什么情况下会出现空闲状态TI?7、说明在debug中A、E、D、T、R、G命令的功能?第一讲第三章 指令系统--寻址方式回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过程。
重点和纲要:指令系统--寻址方式。
有关寻址的概念;6种基本的寻址方式及有效地址的计算。
讲授内容:3.1 8086/8088寻址方式首先,简单讲述一下指令的一般格式:计算机中的指令由操作码字段和操作数字段组成。
操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的过程中所需要的操作数。
该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。
寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。
8086/8088的基本寻址方式有六种。
1.立即寻址所提供的操作数直接包含在指令中。
它紧跟在操作码的后面,与操作码一起放在代码段区域中。
如图所示。
例如:MOV AX,3000H立即数可以是8位的,也可以是16位的。
若是16位的,则存储时低位在前,高位在后。
立即寻址主要用来给寄存器或存储器赋初值。
2.直接寻址操作数地址的16位偏移量直接包含在指令中。
它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。
如图2-2所示。
例如:MOV AX,DS:[2000H];图2-2(对DS来讲可以省略成MOV AX,[2000H],系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。
8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。
此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。
MOV AX,[2000H] ;数据段MOV BX,ES:[3000H] ;段超越,操作数在附加段即绝对地址=(ES)*16+3000H3.寄存器寻址操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。
例如:MOV DS,AXMOV AL,BH4.寄存器间接寻址操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。
可以分成两种情况:(1)以SI、DI、BX间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器(DS)*16加上SI、DI、BX中的16位偏移量,为操作数的地址,例如:MOV AX,[SI] 操作数地址是:(DS)*16+(SI)(2)以寄存器BP间接寻址,则操作数在堆栈段区域中。
即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址,例如:MOV AX,[BP] 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。
例如:MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)5.变址寻址由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个段寄存器作为地址基准)作为操作数的偏移地址。
(操作数在存贮器中)可以作为寄存器变址寻址的四个寄存器是SI、DI、BX、BP。
⑴若用SI、DI和BX作为变址,则与数据段寄存器相加,形成操作数的地址即默认在数据段;⑵若用BP变址,则与堆栈段寄存器相加,形成操作数的地址即默认在堆栈段例如:MOV AX,COUNT[SI];操作数地址是:(DS)*16+(SI)+COUNT但是,只要在指令中指定是段超越的,则可以用别的段寄存器作为地址基准。
6.基址加变址寻址把BX和BP看成是基址寄存器,把SI、DI看着是变址寄存器,把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,再加上指令中指定的8位或16位偏移量(当然要以一个段寄存器作为地址基准)作为操作数的偏移地址,如图所示。
操作数在存贮器中,其偏移地址由(基址寄存器)+(变址寄存器)+相对偏移量形成基址寄存器――BX:数据段、BP:堆栈段;变址寄存器――SI、DI。
例如:MOV AX,[BX][SI] 或MOV AX,[BX+SI]也可放置一个相对偏移量,如COUNT 、MASK等等,用于表示相对寻址。
MOV AX,MASK[BX][SI]MOV BH,COUNT[DI][BP];MOV BH,COUNT[BP+DI]✧若用BX作为基地址,则操作数在数据段区域✧若用BP作为基地址,则操作数在堆栈段区域但若在指令中规定段是超越的,则可用其它段寄存器作为地址基准。
P.28 表2-1 段寄存器使用的基本约定习题与思考:1.假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量V AL的偏移地址为0050H,请指出下列指令源操作数是什么寻址方式?其物理地址是多少?(1)MOV AX,0ABH (2)MOV AX,[100H](3)MOV AX,V AL (4)MOV BX,[SI](5)MOV AL,V AL[BX] (6)MOV CL,[BX][SI](7)MOV V AL[SI],BX (8)MOV [BP][SI],1002.已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。