汇编语言寄存器和指令操作的整理

合集下载

汇编语言基本指令详解

汇编语言基本指令详解

汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。

它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。

汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。

下面将详细介绍汇编语言中常用的基本指令。

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中。

汇编语言指令集合 吐血整理

汇编语言指令集合 吐血整理

RET(return)
5.中断
INT(interrupt)指令
IRET(interrupt return)
INTO(interrupt if overflow)
六、处理机控制指令
1.标志处理指令
CLC(Clear carry)
CMC(Complement carry)
STC(Set carry)
CLD(Clear direction)
串比较指令
SCASB(Scan string of byte)
串搜索指令
SCASW(Scan string of word)
串搜索指令
STOSB(Store string of byte)
存串指令
STOSW(Store string of word)
存串指令
LODSB(Load string of byte)
ES(Extra Segment):附加段寄存器。
第一部分:指令助记符: 一、数据传送指令
1.通用数据传送指令 MOV(Move) PUSH(Push onto the stack) POP(Pop from the stack) XCHG(Exchange)
2.累加器专用传送指令 IN(Input) OUT(Output) XLAT(Translate)
REPE(Repeat when empty) 若(CX)=0,则退出,否则 CX=CX+1;
REPZ(Repeat when flag )
若 ZF=0,则退出,否则 CX=CX+1;
REPC(Repeat when carry flag)
REPNE(Repeat when not empty)
REPNZ(Repeat when not zero flag)

汇编语言考试复习资料

汇编语言考试复习资料

汇编语⾔考试复习资料汇编语⾔期末复习资料整理第⼆章1、寄存器组(1)通⽤寄存器数据寄存器EAX(32位) AX(16位) AH(8位)(⾼位) AL(8位)(低位)累加器EBX(32位) BX(16位) BH(8位)(⾼位) BL(8位)(低位)基址变址ECX(32位) CX(16位) CH(8位)(⾼位)CL(8位)(低位)计数器EDX(32位) DX(16位) DH(8位)(⾼位) DL(8位)(低位)数据指针或变址寄存器ESP(32位) SP(16位)堆栈指针寄存器EBP(32位) BP(16位)基址指针寄存器EDI(32位) DI(16位)⽬的变址寄存器ESI(32位) SI(16位)源变址寄存器(2)专⽤寄存器EIP(32位) IP(16位)指令指针寄存器EFLAGS(32位) FLAGS(16位)标志寄存器ESP (32位) SP(16位)堆栈指针寄存器2、标志位的符号表⽰、3、段寄存器CS(16位)代码段 DS(16位)数据段SS(16位)堆栈段 ES(16位)附加段4、段寄存器和相应存放偏移地址的寄存器之间的默认组合第三章1、七种寻址⽅式(举例)⽴即寻 MOV AX,3069H寄存器寻 MOV AL,BH在内存中的五种寻址直接寻 MOV AX,[2000H]寄存器间接寻 MOV AX,[BX]寄存器相对寻 MOV AX,COUNT[SI] 或者 MOV AX,[SI+COUNT](不推荐) 基址变址寻址 MOV AX,[BP][DI]相对基址变址寻址 MOV AX,MASK[BX][SI]2、指令系统I.数据传送指令(1)通⽤数据传送指令MOV 传送MOVSX 带符号扩展传送⽤源操作数的符号位来填充⽬的操作数的⾼位数据位。

例:MOVSX EAX,CL把CL寄存器中的8位数,符号扩展为32位数,送到EAX寄存器中。

MOVZX 带零扩展传送恒⽤0来填充⽬的操作数的⾼位数据位例:MOVZX DX,AL把AL寄存器中的8位数,零扩展成16位数,送到DX寄存器中。

汇编语言指令集合吐血整理

汇编语言指令集合吐血整理

汇编语言指令集合吐血整理汇编语言是一种低级程序设计语言,用于直接控制计算机硬件。

在汇编语言中,指令是程序的基本单位,它告诉计算机执行的操作。

本文将汇编语言常用指令进行吐血整理,帮助读者更好地理解和运用这些指令。

一、数据传送指令数据传送指令用于将数据从一个地方传送到另一个地方,完成数据的读取和存储操作。

常见的数据传送指令包括:1. MOV:将数据从一个位置复制到另一个位置。

语法形式为MOV 目的操作数, 源操作数。

例如:MOV AX, BX 表示将寄存器BX中的数据复制到寄存器AX中。

2. PUSH:将数据压入堆栈。

语法形式为PUSH 操作数。

例如:PUSH AX 表示将AX寄存器中的数据压入堆栈。

二、算术运算指令算术运算指令用于对数据进行基本的算术运算,包括加法、减法、乘法和除法。

常见的算术运算指令包括:1. ADD:将两个操作数相加,并将结果存储到目的操作数中。

语法形式为ADD 目的操作数, 源操作数。

例如:ADD AX, BX 表示将寄存器AX和BX中的数据相加,并将结果存储到AX中。

2. SUB:将源操作数的值从目的操作数中减去,并将结果存储到目的操作数中。

语法形式为SUB 目的操作数, 源操作数。

例如:SUB AX, BX 表示将寄存器BX中的值从AX中减去,并将结果存储到AX中。

三、逻辑运算指令逻辑运算指令用于对数据进行与、或、非等逻辑运算。

常见的逻辑运算指令包括:1. AND:对两个操作数进行逻辑与运算,并将结果存储到目的操作数中。

语法形式为AND 目的操作数, 源操作数。

例如:AND AX, BX表示将寄存器AX和BX中的数据进行逻辑与运算,并将结果存储到AX中。

2. OR:对两个操作数进行逻辑或运算,并将结果存储到目的操作数中。

语法形式为OR 目的操作数, 源操作数。

例如:OR AX, BX 表示将寄存器AX和BX中的数据进行逻辑或运算,并将结果存储到AX中。

四、流程控制指令流程控制指令用于控制程序的执行流程,包括条件分支和循环等。

汇编语言指令汇总

汇编语言指令汇总

汇编语言指令汇总汇编语言是一种底层编程语言,用于编写计算机程序。

在汇编语言中,指令是执行特定操作的基本单元。

以下是一些常见的汇编语言指令的汇总: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:当计数器不为零时,循环执行指定的代码块。

汇编语言重点知识总结

汇编语言重点知识总结

汇编语言重点知识总结汇编语言是一种低级程序设计语言,它直接操作计算机硬件资源,具有较高的执行效率和灵活性。

本文将重点总结汇编语言的相关知识,涵盖指令集、寻址模式、数据传送和运算、控制流等方面。

一、指令集1. 数据传送指令:包括MOV、LEA等指令,用于在寄存器和内存之间传输数据。

2. 算术运算指令:包括ADD、SUB、MUL、DIV等指令,用于进行加减乘除等数值运算。

3. 逻辑运算指令:包括AND、OR、NOT等指令,用于进行逻辑与、逻辑或、逻辑非等操作。

4. 跳转指令:包括JMP、JZ、JE等指令,用于实现程序的跳转和条件判断。

5. 栈操作指令:包括PUSH、POP等指令,用于实现数据的入栈和出栈操作。

6. 串操作指令:包括MOVSB、CMPSB等指令,用于字符串的复制、比较等操作。

二、寻址模式1. 直接寻址:使用给定的地址访问内存中的数据,如MOV AX, [1234H]。

2. 寄存器间接寻址:使用寄存器中存储的地址访问内存中的数据,如MOV BX, [SI]。

3. 寄存器相对寻址:使用寄存器和偏移量的组合访问内存中的数据,如MOV CX, [BX+DI]。

4. 基址变址寻址:使用基址寄存器和变址寄存器的组合访问内存中的数据,如MOV AX, [BX+SI+10H]。

5. 相对基址变址寻址:使用基址寄存器、变址寄存器和偏移量的组合访问内存中的数据,如MOV AX, [BX+SI+10H+DI]。

三、数据传送和运算1. 数据传送:使用MOV指令将数据从一个位置传送到另一个位置,如MOV AX, BX。

2. 位操作:使用AND、OR、XOR等指令进行位与、位或、位异或等操作。

3. 算术运算:使用ADD、SUB、MUL、DIV等指令进行加减乘除等运算。

4. 位移操作:使用SHL、SHR、ROL、ROR等指令进行位左移、位右移、循环左移、循环右移等操作。

四、控制流1. 无条件跳转:使用JMP指令无条件跳转到指定的地址。

汇编语言指令详解大全

汇编语言指令详解大全

汇编语言指令详解大全助记符指令说明字节数周期数(数据传递类指令)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$ 指本条指令的起始位置。

汇编语言指令大全

汇编语言指令大全
功能: 字符串传送指令
语法: MOVSB MOVSW MOVSD
标志位: 无
CMPSB,CMPSW,CMPSD
功能: 字符串比较指令
语法: CMPSB CMPSW CMPSD
标志位: C,P,Z,S,O
SCASB,SCASW
功能: 字符串搜索指令
语法: SCASB SCASW
LES(Load ES with pointer) 指针送寄存器和ES指令P35
LAHF(Load AH with Flags) 标志位送AH指令P36
SAHF(Store AH into Flgs) AH送标志寄存器指令P36
PUSHF(PUSH the Flags) 标志进栈指令P36
SEGMENT,ENDS 段定义指令P95
ASSUME 段地址分配指令P95
ORG 起始偏移地址设置指令P96
$ 地址计数器的当前值P97
PROC,ENDP 过程定义语句P97
NAME,TITLE,END 程序开始结束语句P98
MACRO,ENDM 宏定义指令P99
8086/8088汇编语言指令集
标志位: C,P,Z,S,O
LODSB,LODSW,STOSB,STOSW
功能: 字符串载入或存贮指令
语法: LODSB LODSW STOSB STOSW
标志位: 无
REP,REPE,REPNE
功能: 重复前缀指令集
语法: REP 指令S REPE 指令S REPNE 指令S
AAA 非压缩的BCD码加法十进制调整指令P54
AAS 非压缩的BCD码加法十进制调整指令P54
AND 逻辑与指令P54

汇编语言指令大全

汇编语言指令大全

一、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个**作数为寄存器,段寄存器不可作为**作数) CMPXCHG 比较并交换**作数.( 第二个**作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个**作数里 )XLAT 字节查表转换.── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP 比较.(两**作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两**作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用**作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04SHL AX,CL四、串指令───────────────────────────────────────DS:SI 源串段寄存器 :源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表示重复**作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较**作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令───────────────────────────────────────1>无条件转移指令 (长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z). JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续. WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器.LOCK 封锁总线.NOP 空**作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令───────────────────────────────────────DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.。

汇编语言常用指令大全

汇编语言常用指令大全

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.操作数传送指令:-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:将两个位置中的字节或字进行比较。

除了以上提到的指令外,不同的汇编语言还有其它特定的指令,用于特定的硬件操作或功能实现。

这些指令的语法与使用方法可能略有不同,具体请参考所使用的汇编语言的文档或手册。

总之,汇编语言指令是汇编语言的基础,熟练掌握和理解这些指令对于编写高效和可靠的汇编程序至关重要。

x86汇编 语法

x86汇编 语法

x86汇编语法
x86汇编语言是一种低级语言,用于编写在x86架构上运行的程序的机器代码。

它使用助记符表示指令,这些助记符通常与对应的机器代码指令相对应。

以下是一些x86汇编语言的语法要点:
1. 指令格式:x86汇编语言中的指令通常由操作码和操作数组成。

操作码指定要执行的操作,而操作数指定要操作的数据或寄存器。

例如,MOV指令将一个值从一个位置移动到另一个位置,其格式为“MOV destination, source”。

2. 寄存器:x86架构包含多个寄存器,用于存储数据和地址。

在汇编语言中,可以使用寄存器名来引用寄存器中的值。

例如,EAX寄存器可以表示为“EAX”。

3. 立即数:立即数是直接包含在指令中的数字值。

例如,MOV AX, 1000H指令将1000H(十进制为4096)移动到AX寄存器中。

4. 内存操作数:当需要从内存中读取或写入数据时,可以在指令中使用内存操作数。

内存操作数由一个基址和一个变址量组成,它们可以是寄存器或立即数。

例如,MOV AX, [BX+SI]指令将BX和SI寄存器的值相加,并将结果作为基址,从该基址处读取一个字(16位)到AX寄存器中。

5. 标志寄存器:x86架构包含一个标志寄存器,用于存储各种状态标志。

这些标志用于指示算术操作的结果、零标志、符号标志等。

在汇编语言中,可以使
用条件码指令来测试标志寄存器的值。

以上是x86汇编语言的一些基本语法要点。

学习x86汇编语言需要熟悉指令集、寄存器、内存操作数、标志寄存器等概念,并能够编写简单的程序来执行基本操作。

汇编语言指令mov、add、sub、jmp详解

汇编语言指令mov、add、sub、jmp详解

汇编语⾔指令mov、add、sub、jmp详解
指令(instruction)是⼀种语句,它在程序汇编编译时变得可执⾏。

汇编器将指令翻译为机器语⾔字节,并且在运⾏时由 CPU 加载和执⾏。

⼀条指令有四个组成部分:
标号(可选)
指令助记符(必需)
操作数(通常是必需的)
注释(可选)
不同部分的位置安排如下所⽰:
[label: ] mnemonic [operands] [;comment]
现在分别了解每个部分,先从标号字段开始。

mov传送指令mov a,b 将b数据放进a
mov:寄存器,数据
mov:寄存器,寄存器
mov:寄存器,内存单元
mov:段寄存器,内存单元
mov:内存单元,寄存器
mov:内存单元,段寄存器
mov:段寄存器,寄存器
mov:寄存器,段寄存器
add求和指令 add a,b a=a+b
add:寄存器,数据
add:寄存器,寄存器
add:内存单元,寄存器
add:寄存器,内存单元
sub减法指令 sub a,b a=a-b
sub:寄存器,数据
sub:寄存器,寄存器
sub:内存单元,寄存器
sub:寄存器,内存单元
jmp转移指令,修改CS、IP寄存器
jmp:段地址:偏移地址⽤段地址修改CS ⽤偏移地址修改IP
jmp:寄存器,只⽤寄存器的内容修改IP
总结
以上所述是⼩编给⼤家介绍的汇编语⾔指令mov、add、sub、jmp详解,希望对⼤家有所帮助!。

汇编语言指令集

汇编语言指令集

汇编语言指令集包括多种不同类型的指令,以下是一些常见的指令类型:
1. 数据传送指令:用于在寄存器之间、寄存器与内存之间、寄存器与输入/输出设备之间传输数据。

常见的指令包括MOV、POP、PUSH 等。

2. 算数运算指令:用于对数据执行算术操作,如加法、减法、乘法、除法等。

常见的指令包括ADD、SUB、MUL、DIV等。

3. 逻辑运算指令:用于对数据进行逻辑操作,如与、或、非等。

常见的指令包括AND、OR、NOT等。

4. 移位指令:用于将数据向左或向右移动指定位数。

常见的指令包括SHL、SAL、SHR等。

5. 串处理指令:用于处理存储器中的数据串。

常见的指令包括MOVS、CMPS、SCAS等。

6. 控制转移指令:用于控制程序的执行流程,如跳转、分支等。

常见的指令包括JMP、JZ(跳转)、CMP(比较)等。

7. 堆栈指令群:用于在堆栈中压入或取出数据,如PUSH、POP等。

8. 取地址至寄存器指令:用于将地址存储在寄存器中,如LEA等。

9. 查表指令:用于通过查表获取数据,如XLAT等。

以上只是汇编语言指令集的一部分,实际上汇编语言还包含许多其他类型的指令,具体取决于不同的处理器架构和操作系统。

汇编语言基础手册

汇编语言基础手册

汇编语言基础手册第一章概述汇编语言是一种低级语言,用于直接操作计算机硬件。

本手册将介绍汇编语言的基础知识和常用指令,帮助读者快速入门汇编语言编程。

第二章寄存器寄存器是汇编语言中最基本的数据存储单元,用于存储和处理数据。

本章将介绍汇编语言中常用的通用寄存器、段寄存器和特殊寄存器,并讲解它们的用途和操作方法。

第三章指令汇编语言的指令是用于完成各种操作的命令,例如数据传送、运算和控制等。

本章将详细介绍常用的数据传送指令、算术指令和逻辑指令,并提供相关的示例代码,帮助读者理解和应用。

第四章内存操作汇编语言中,内存是用于存储数据和指令的重要部分。

本章将介绍如何使用汇编语言进行内存的读取、写入和操作,并提供实际案例来演示内存操作的应用。

第五章程序控制程序控制是汇编语言中的核心内容,用于控制程序的流程和执行顺序。

本章将详细介绍条件转移、循环和子程序等程序控制结构,并提供实例代码以及相应的调试技巧。

第六章 I/O操作汇编语言可以通过输入和输出操作与外部设备进行通信。

本章将介绍如何使用汇编语言进行键盘输入和屏幕输出,并提供相应的示例代码和调试方法,使读者能够灵活运用I/O操作。

第七章常见问题与调试技巧本章将列举一些常见的汇编语言编程问题,并给出相应的解决方案和调试技巧。

读者可以通过学习这些问题和技巧,提高自己的编程能力和问题排除能力。

第八章汇编语言应用本章将介绍汇编语言在实际应用中的一些常见场景,包括操作系统开发、驱动程序编写和嵌入式系统设计等。

读者可以了解到汇编语言的实际用途,并借鉴相关案例来进行实际项目开发。

结语汇编语言是一门重要而底层的编程语言,对于理解计算机系统和进行系统级编程具有重要意义。

通过学习本手册,读者可以掌握汇编语言的基础知识和编程技巧,为进一步深入学习和应用打下坚实基础。

注:本手册基于x86架构进行讲解,部分指令和操作可能在其他架构中有所不同。

读者在实际应用中应结合具体环境和需求进行相应调整和学习。

汇编语言寄存器和指令操作的整理

汇编语言寄存器和指令操作的整理

汇编语言寄存器和指令操作的整理汇编语言是一种与机器语言紧密相关的低级语言。

它使用寄存器和特定的指令操作来进行数据的加载、存储、运算和控制。

寄存器是位于CPU内部的高速存储器。

它们可以暂时存储数据,供CPU进行运算和操作。

汇编语言使用多个寄存器进行数据的临时存储和处理。

在x86架构的计算机系统中,常见的寄存器包括:1.通用寄存器:程序员可以随意使用的寄存器,用于存储临时数据和地址。

在32位模式下,共有8个32位通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP),在64位模式下,有16个64位通用寄存器(RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8~R15)。

2.段寄存器:用于存储段地址,分别包括代码段寄存器(CS)、数据段寄存器(DS)、附加段寄存器(ES)、栈段寄存器(SS)和指令指针寄存器(IP)。

3.标志寄存器:用于存储程序运行状态和执行结果的标志位,包括进位标志(CF)、零标志(ZF)、符号标志(SF)、溢出标志(OF)等。

除了寄存器,汇编语言还使用一些特定的指令操作来完成各种功能。

常见的指令操作包括:1.数据传输指令:用于将数据从一个位置(如寄存器、内存)传送到另一个位置。

常见的数据传输指令有MOV(将数据从源操作数传送到目标操作数)、LEA(加载有效地址)等。

2.算术运算指令:用于对数据进行加、减、乘、除等数学运算。

常见的算术运算指令有ADD(加法)、SUB(减法)、MUL(乘法)、IDIV(整数除法)等。

3.逻辑运算指令:用于对数据进行逻辑上的与、或、非、异或等运算。

常见的逻辑运算指令有AND(与运算)、OR(或运算)、NOT(取反运算)、XOR(异或运算)等。

4.控制指令:用于控制程序的流程和状态。

常见的控制指令有JMP(无条件跳转)、JZ(零标志跳转)、LOOP(循环执行)、CALL(调用子程序)等。

5.输入输出指令:用于与外部设备进行数据的输入和输出。

汇编语言—寄存器

汇编语言—寄存器
作指令1进位cf操作指令5标志位堆栈操作指令4取标志位操作指令3中断允许位if操作指令2方向位df操作指令清进位指令clcclearcarryflag
1.1、传送指令
指令的语法 MOV reg,reg MOV mem,reg MOV reg,mem MOV mem,immed MOV reg,immed MOV mem,accum MOV accum,mem MOV segreg,reg16 MOV segreg,mem16 MOV reg16,segreg MOV mem16,segreg MOV reg32,controlreg MOV controlreg,reg32 MOV reg32,debugreg MOV debugreg,reg32 举例 mov bp,sp mov array[di],bx mov bx,pointer mov [bx],15 mov cx,256 mov total,ax mov al,string mov ds,ax mov es,psp mov ax,ds mov stack_save,ss mov eax,cr0 mov eax,cr2 mov eax,cr3 mov eax,cr4 mov cr0,eax mov edx,dr0 mov dr0,ecx 周期数 1 1 1 1 1 1 1 2, 3 2, 3 1 1 22 12 21, 46 14 4 DR0-DR3, DR6,DR7=11 DR4,DR5=12 DR0-DR3, DR4,DR5=12 DR6,DR7=11
1.6、出栈指令
POP reg POP mem POP segreg POPA POPAD POPF POPFD pop cx pop param pop es popa popad popf popfd 1 3 3 5 5 6, pm=4 6, pm=4

汇编部分整理

汇编部分整理

汇编部分整理第一章概述1.在计算机内部能够直接执行的是机器语言。

2.指令指针寄存器IP 始终存放的是下一条待执行指令在代码段中的偏移地址。

3.4.基本运算:5.16位机器的最大寻址空间为00000H~FFFFFH(或者1MB)第二章处理器结构及存储器组成1.CPU主要存储器的介绍(页码:27)一个寄存器16位可以容纳1个字(两个字节)大小,比如16位的AX可以容纳1个字,则8位的AH和AL则分别能容纳1个字节。

2.指令指针寄存器(IP):程序以指令方式存放于内存里,IP初始化指向程序第一条指令,CPU每取一条指令则IP自动指向下一条指令,可以这么说:IP始终指向待执行的下一条指令的偏移地址。

4.段寄存器(CS、DS、SS、ES):CS 代码段是一个存储器区,用来存放正在运行程序的代码。

在程序设计中用来存放代码段的首地址。

DS 数据段用来存放正在运行程序所用数据的存储器区。

在程序设计中用来存放数据段的首地址。

SS 堆栈段结构比较特殊,采用堆栈的数据结构,访问采用后进先出的方式,若定义堆栈段,SS存放堆栈段的首地址。

ES 附加段通常用于串操作指令中,用来存放目的串数据,也可以作为辅助的数据存储区。

5.存储单元地址和内容:一次存入,多次取出,原存储内容不变,直到再次存入新数据后才将旧数据覆盖。

对于独立的被存储单元,存放方式是按由低字节到高字节顺序依次存放。

对于独立的被存储单元内部(讨论的被存储单元大于字节)高地址放高字节,低地址放低字节。

一般地址指向的是其低字节,需向下取出高字节拼接。

第三章寻址方式及指令系统第四章汇编语言程序结构第五章基本结构程序设计第六章子程序设计及应用第七章简单程序设计应用第八章高级汇编语言技术。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
l DI 目的变址寄存器
与DS联用, 指示数据段中某操作数的偏移量, 或与某一位移量共同构成操作数的偏移量. 串处理操作时, DI指示附加段中目的地址, 并有自动增量或减量的功能
段寄存器l CS 代码段
存放当前程序的指令代码
l DS 数据段
存放程序所涉及的源数据或结果
l SS 堆栈段
当运算结果的最高位为1时, SF为1, 否则为0. 最高位表示符号数的正和负
6. TF 跟踪标志位
用于调试程序时进入单步方式工作. TF=1时, 每条指令执行完后产生一个内部中断, 让用户检查指令运行后寄存器, 存储器和各标志位的内容. TF=0时, CPU工作正常, 不产生内部中断
7. IF 中断允许标志位
l POP DST ;出栈指令: 弹出栈顶元素, 后将栈顶指针向栈底方向移动一个字
l XCHG OPR1, OPR2 ;交换指令: 将这两个操作数交换
地址传送指令:
l LEA DST, SRC ;装载有效地址指令: 该指令将源操作数的偏移量OA装载到目的操作数中
算术运算指令加法指令:
l ADD DST, SRC ;DST+SRC的和存放到DST中去
l ADC DST, SRC ;带进位加法指令, DST+SRC+CF
l INC DST ;增1指令
减法指令:
l LOOPZ/LOOPE, LOOPNZ/LOOPNE ;前者用于找到第一个不为0的事件, 后者用于找到第一个为0的事件
子程序调用指令:
l imme: 立即数
l DST: 目的操作数
l SRC: 源操作数
l mem: 存储器操作数
l OPR: 操作数
l reg: 通用寄存器
l EA: 偏移地址(偏移量)
l Sreg: 段寄存器
l Port: 端口地址
l Label: 标号
汇编指令一共可以分为6组:
计算机内部寄存器阵列l 数据寄存器
l 指针及变址寄存器
l 段寄存器
l 控制寄存器
数据寄存器包括4个16位的寄存器(AX, BX, CX, DX)或者8个8位寄存器( AH, AL, BH, BL, CH, CL, DH, DL)
这些寄存器都可以用来暂时存放操作数, 运算结果以及其他信息, 但同时又具有某些专用用途
l BP 基址指针寄存器
系统默认其指向堆栈中某一单元, 即提供栈中该单元的偏移量. 加段前缀后, BP可作非堆栈段的地址指针
l SI 源变址寄存器
与DS联用, 指示数据段中某操作的偏移量. 在做串处理时, SI指示源操作数地址, 并有自动增量或自动减量的功能. 变址寻址时, SI与某一位移量共同构成操作数的偏移量
l ROL DST, CNT ;循环左移
l ROR DST, CNT ;循环右移
l RCL DST, CNT ;带进位循环左移
l RCR DST, CNT ;带进位循环右移
关于汇编语言寄存器和指令操作的整理
最近汇编学到后面的内容, 越来越觉得前面的基础没有掌握好, 弄得最后编写汇编程序的时候, 寄存器瞎用, 没有一点的规矩, 中断操作也不知道是对哪个寄存器里的数进行操作, 每次做一个小程序, 都得翻书后面的INT中断查询表, 感觉很不爽, 今天花了大半天把几本关于汇编的书前面的内容又翻了一遍, 结合自己做的笔记, 做了一个简单的整理, 关于寄存器和指令的, 以作复习汇编之用. 关于存哪个数据用哪个寄存器, 我觉得首先要弄清楚各个寄存器的用途, 以及指令是如何操作数据, 操作的哪个寄存器里的数据, 又是将操作完后的结果数据存放到那个寄存器中去的.
1. 数据传送指令
2. 算术运算指令
3. 逻辑运算与移位指令
4. 串操作指令
5. 程序控制指令
6. 处理器控制指令
数据传送指令通用数据传送指令:
l MOV DST, SRC ;传送指令: 把源操作数的内容送入目的操作数
2. PF 奇偶标志位
操作结果中二进制位1的个数为偶数是, PF为1, 某则为0
3. AF 辅助进位标志位
运算时半字节产生进位或借位时, AF为1, 某则为0. 主要用于BCD码的调整
4. ZF 零标志位
运算结果为0时, ZF为1, 否则为0
5. SF 符号标志位
关于汇编代码中的指令 汇编指令语句的格式: [标号:] 指令助记符 [[目的操作数][, 源操作数]] [; 注释]
l 指令助记符
如MOV, SUB这些词分别表示传送, 减法. 汇编源程序时, 系统使用内部对照表将每条指令的助记符翻译成对应的机器码
l 目的操作数
目的操作数一共有两个作用
l POPF ;标志出栈指令, 标志寄存器出栈
累加器专用传送指令:
l IN AL, Port ;从端口读入数据, 存放在AL中
l OUT Port, AL ;传送AL中的数据到端口
l XLAT OPR或XLAT ;用于将AL中当前的内容转换为一种代码
l JX ;条件转移指令(JC/JNC, JZ/JNZ, JE/JNE, JS/JNS, JO/JNO, JP/JNP…)
循环指令:
l LOOP 标号 ;该指令执行时, 技术寄存器CXX首先减1, 然后判断CX, 若为0, 跳出循环
条件循环指令:
l AX 数据累加器
算术运算中的主要寄存器, 在乘除运算中用来指定被除数和被除数, 也是乘, 除,运算后积和商的默认存储单元. 另外I/O指令均使用该寄存器与I/O设备传送信息
l BX 基址寄存器
指令寻址时常用做基址寄存器. 存入偏移量或偏移量的构成成分
l CX 计算寄存器
在循环指令操作或串处理指令中隐含计数
l LDS DST, SRC ;装载数据段指针指令: 将当前数据段中的一个双字数据装入到一个通用寄存器SI(双字数据的低字)和数据段寄存器DS(双字数据的高字)中
l LES DST, SRC指针(附加段指针)送到DI(低字)和ES(高字)寄存器中
标志传送指令: (专用于标志寄存器保护和更新的指令, 共四条)
l LAHF ;标志寄存器送AH指令, 将标志寄存器的低字节送入AH中
l SAHF ;AH送标志寄存器指令, 将AH寄存器内容送标志寄存器FR的低字节
l PUSHF ;标志进栈指令, 标志寄存器进栈
逻辑运算与移位指令逻辑运算指令:
l NOT OPR ;逻辑非指令
l AND OPR ;逻辑与指令
l OR OPR ;逻辑或指令
l XOR OPR ;逻辑异或指令
移位指令:
串操作指令 l MOVS ;串传送指令
l CMPS ;串比较指令
l SCAS ;串扫描指令
l LODS ;装入串指令
l STOS ;存储串指令
控制转移指令转移指令:
l JMP ;无条件转移指令
除法指令:
l DIV SRC ;无符号数除指令, AX/SRC, 商放入AL中, 余数放在AH中
l IDIV SRC ;符号数除指令, AX/SRC, 上放入AL中, 余数放在AH中
l CBW, CWD ;都是符号扩展指令. 将AL的符号扩到AX中; 将AX的符号扩到DX中
l DX 数据寄存器
在双字节长运算是, 与AX构成32位操作数, DX为高16位. 在某些I/O指令中, DX被用来存放端口地址
指针及变址寄存器这些寄存器都是16位的寄存器, 用来存放16位的操作数或中间结果, 但更经常的用途是存放偏移量, 或位移量
l SP 堆栈指针寄存器
始终只是栈顶的位置, 与SS寄存器一起组成栈顶数据的物理地址
以”先入后出”为原则的数据区
l ES 附加段
辅助数据区, 存放串或其他数据
控制寄存器l IP 指令指针寄存器
它始终指向当前将要执行指令在代码段中存放的偏移量
l FR 控制标志位
1. CF 进位标识位
进行加减运算时, 如果最高二进制位产生进位或错位, CF则为1, 否则为0. 程序设计中, 常用条件转移指令JC, JNC指令据此标志位实现转移
4. 立即数不能作为目的操作数
5. 不能将一个段寄存器的内容直接送到另一个段寄存器中, 可借助通用寄存器或PUSH, POP指令实现这一要求
l PUSH SRC ;压栈指令: 将一个字数据压入当前栈顶, 位移量disp=-2的地址单元. 数据进栈时, 栈指针SP首先向低地址方向移动两个字节位置, 接着 数据进栈, 形成新的栈顶
l SUB DST, RSC ;DST-SRC, 存放到DST中
l SBB DST, SRC ;带借位减法指令, DST-SRC-CF
l DEC DST ;减1指令
IF=1同时中断屏蔽寄存器的相应位为0, 允许系统响应可屏蔽中断, 反之, 不接收外部发出的中断请求
8. DF 方向位标志位
用于控制串操作时地址指针位移方向. 当DF=1时, 指针向高地址方向移动
9. OF 溢出标志位
算术运算时结果超出系统所能表示的数的范围. 溢出时, OF=1
l SHL DST, CNT ;逻辑左移
l SHR DST, CNT ;逻辑右移
l SAL DST, CNT ;算术左移
l SAR DST, CNT ;算术右移
循环移位指令:
l NEG DST ;求补指令, 求补码
l CMP OPR1, OPR2 ;比较指令
乘法指令:
l MUL SRC ;无符号数乘指令, AL*SRC, 结果放入AX中
相关文档
最新文档