当前位置:文档之家› 汇编语言知识点

汇编语言知识点

第一章十进制与二进制之间的转换(P2)降幂法除法十进制与六进制之间的转换(P5)降幂法除法补码表示:正数:采用符号—绝对值法负数:先写出对应的正数的补码表示,然后再将其按位数求反,最后末尾加1,就可以得到负数的补码表示补吗运算:二进制数按位求反后在末尾加1第二章一、存储容量1K = 1024 =210 (Kilo)1M =1024K = 220 (Mega)1G = 1024M = 230 (Giga)1个二进制位:bit (比特)8个二进制位:Byte(字节)1Byte = 8bit2个字节:1 Word (字)1Word = 2Byte = 16bit二、存储单元地址和内容1.存储器以字节(8 bit)为编程单位2.每个字节单元都有唯一的地址编码3.地址用无符号整数来表示(编程用十六进制表示)4.一个字要占用相继的两个字节5.低位字节存入低地址,高位字节存入高地址6.字单元地址用它的低地址来表示7.机器以偶地址访问(读/ 写)存储器三、物理地址= 16 段地址+ 偏移地址四、存储器的分段:20 根地址线:地址范围00000H ~ FFFFFH (1MB)机器字长16位:仅能表示地址范围0000H ~ FFFFH (64KB)小段:每16个字节为一小段,共有64K个小段段起始地址:小段首地址段的大小:64K 范围内的任意字节五、存储器的逻辑分段优点:允许程序在存储器内重定位;允许实模式程序在保护模式下运行;有利于程序和数据的分离。

六、中央处理器8086/8088寄存器组:通用寄存器数据寄存器:AX,BX,CX,DX变址寄存器:SI、DI指针寄存器:SP、BP控制寄存器:IP、FLAGS段寄存器:CS、DS、SS、ES七、标志寄存器( FLAGS / PSW )条件标志位:OF 溢出标志SF符号标志ZF 零标志CF 进位标志AF 辅助进位标志PF奇偶标志控制标志位:DF 方向标志IF中断标志TF 陷阱标志八、寄存器与存储器的比较:寄存器:在CPU内部;访问速度快;容量小,成本高;用名字表示;没用地址存储器:在CPU外部;访问速度慢;容量大,成本低;用地址表示;地址可用各种方式形成第三章九、数据传送指令传送指令MOV CPU内部寄存器之间的数据传送指令格式:MOV DST, SRC 执行操作:(DST) ←(SRC)注意: *DST、SRC 不能同时为段寄存器MOV DS, ES ⨯* DST、SRC 不能同时为存储单元*立即数不能直接送段寄存器MOV DS, 2000H ⨯* DST 不能是立即数和CS*不影响标志位交换指令XCHG指令格式:XCHG OPR1, OPR2 执行操作:(OPR1) ↔(OPR2)例:XCHG BX, [ BP+SI ] XCHG AL, BH注意: * 两个操作数字长一致* 两个操作数都不能是段寄存器* 两个操作数都不能是立即数* 两个操作数不能同时是存储单元* 可以采用除立即寻址方式外的任何一种寻址方式。

* 不影响标志位地址传送指令LEA、LDS、LES1.有效地址送寄存器指令:LEA REG, SRC 执行操作:(REG) ← SRC2.指针送寄存器和DS指令:LDS REG, SRC 执行操作:(REG) ←(SRC)(DS) ← (SRC+2) 相继二字→寄存器、DS3.指针送寄存器和ES指令:LES REG, SRC 执行操作:(REG) ←(SRC)(ES) ←(SRC+2) 相继二字→寄存器、ES注意:* 源操作数必须为存储器操作数* 目的操作数必须是一个16位通用寄存器,不能是段寄存器* 源操作数可以是除立即寻址和寄存器寻址以外的任意一种寻址方式* 不影响标志位堆栈操作指令PUSH、POP1.进栈指令:PUSH SRC执行操作:(SP) ←(SP) – 2 ( (SP)+1, (SP) ) ←(SRC)出栈指令:POP DST执行操作:(DST) ←( (SP)+1, (SP) ) (SP) ←(SP) + 2堆栈:‘先进后出’的存储区,段地址存放在SS中,SP在任何时候都指向栈顶,进出栈后自动修改SP。

注意:* 堆栈操作必须以字为单位。

* 不影响标志位* 不能用立即寻址方式PUSH 1234H ⨯* DST不能是CS POP CS ⨯标志操作指令LAHF、SAHF、PUSHF、POPF 、CLC、STC、CMC、CLD、STD、LI、STI标志传送指令:1.标志送AH指令:LAHF 执行操作:(AH) ← (FLAGS的低字节)2.AH送标志寄存器指令:SAHF 执行操作:(FLAGS的低字节) ←(AH)注意: * LAHF不影响标志位* SAHF影响CF、PF、AF、ZF、SF标志进栈指令:PUSHF执行操作:(SP) ←(SP) - 2 ( (SP)+1, (SP) ) ←(FLAGS)标志出栈指令:POPF执行操作:(FLAGS) ← ( (SP)+1, (SP) ) (SP) ←(SP) + 2注意:PUSHF和POPF经常一起联用,完成保护、维护标志寄存器的内容或改变标志位的值。

标志位操作指令:清进位标志指令CLC CF ←0置进位标志指令STC CF ← 1进位标志取反指令CMC CF ←CF清方向标志指令CLD DF ←0置方向标志指令STD DF ← 1清中断允许标志指令CLI IF ←0置中断允许标志指令STI IF ← 1注意: * 只影响本指令指定的标志十、加减法指令:加法指令:ADD DST, SRC 执行操作:(DST) ←(SRC) + (DST)带进位加法指令:ADC DST, SRC 执行操作:(DST) ←(SRC) + (DST) + CF加1指令:INC OPR 执行操作:(OPR) ←(OPR) + 1注意: * 除INC指令不影响CF标志外,均对状态标志位有影响。

各加法指令对条件标志位的影响:SF=1,结果为负ZF=1,结果为0 CF=1,和的最高有效位有向高位的进位OF=1,两个操作数符号相同,而结果符号与之相反CF 位表示无符号数相加的溢出。

OF 位表示带符号数相加的溢出。

减法指令:SUB DST, SRC 执行操作:(DST) ←(DST) - (SRC)带借位减法指令:SBB DST, SRC 执行操作:(DST) ←(DST) - (SRC) - CF减1指令:DEC OPR 执行操作:(OPR) ← (OPR) - 1求补指令:NEG OPR 执行操作:(OPR) ←- (OPR)比较指令:CMP OPR1, OPR2 执行操作:(OPR1) - (OPR2)各减法指令对条件标志位(CF/OF/ZF/SF)的影响:CF=1,被减数的最高有效位有向高位的借位或CF=1减数转换为加法运算时无进位OF=1 两个操作数符号相反,而结果的符号与减数相同CF 位表示无符号数减法的溢出。

OF 位表示带符号数减法的溢出。

NEG 指令对CF/OF的影响CF=0,操作数为0 OF=1,操作数为-128(字节运算)或-32727(字运算十一、乘除运算指令无符号数乘法指令:MUL SRC 带符号数乘法指令:IMUL SRC执行操作:字节操作数(AX) ←(AL) * (SRC)字操作数(DX, AX) ←(AX) * (SRC)注意: * 目的操作数必须是累加器* AL (AX) 为隐含的乘数寄存器。

* AX (DX,AX) 为隐含的乘积寄存器。

* SRC不能为立即数。

* 除CF和OF外,对条件标志位无乘法指令对CF/OF 的影响:MUL指令: CF,OF =00乘积的高一半为零11否则IMUL指令: CF,OF =00乘积的高一半是低一半的符号扩展11否则例:(AX) = 16A5H,(BX) = 0611H(1) MUL BX ; (DX, AX) ←(AX) * (BX); 16A5*0611=0089 5EF5; (DX)=0089H (AX)=5EF5H CF=OF=1(2) IMUL BL ; (AX) ←(AL) * (BL); A5*11 ⇒ 5B*11=060B ⇒ F9F5; (AX) = 0F9F5H CF=OF=1无符号数除法指令:DIV SRC带符号数除法指令:IDIV SRC执行操作:字节操作(AL) ← (AX) / (SRC) 的商(AH) ← (AX) / (SRC) 的余数字操作(AX) ← (DX, AX) / (SRC) 的商(DX) ← (DX, AX) / (SRC) 的余数注意: * AX (DX,AX) 为隐含的被除数寄存器。

* AL (AX) 为隐含的商寄存器。

* AH (DX) 为隐含的余数寄存器。

* SRC不能为立即数。

* 对所有条件标志位均无定义。

十二、类型转换指令CBW AL → AX执行操作:若(AL)的最高有效位为0,则(AH)= 00H,若(AL)的最高有效位为1,则(AH)= FFH CWD AX → (DX,AX)执行操作:若(AX)的最高有效位为0,则(DX)= 0000H,若(AX)的最高有效位为1,则(DX)= FFFFH例:(AX) = 0BA45HCBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H注意: * 无操作数指令* 隐含对AL 或AX 进行符号扩展* 不影响条件标志位十三、逻辑运算指令逻辑非指令:NOT OPR * OPR不能为立即数执行操作:(OPR) ←(OPR) * 不影响标志位逻辑与指令:AND DST, SRC 执行操作:(DST) ←(DST) ∧ (SRC)逻辑或指令:OR DST, SRC 执行操作:(DST) ←(DST) ∨ (SRC)异或指令:XOR DST, SRC 执行操作:(DST) ←(DST) ∀ (SRC)测试指令:TEST OPR1, OPR2 执行操作:(OPR1) ∧ (OPR2)十四、移位指令逻辑左移SHL OPR, CNT逻辑右移SHR OPR, CNT算术左移SAL OPR, CNT(同逻辑左移)算术右移SAR OPR, CNT循环左移ROL OPR, CNT循环右移ROR OPR, CNT带进位循环左移RCL OPR, CNT带进位循环右移RCR OPR, CNT注意: * OPR可用除立即数以外的任何寻址方式* CNT=1,SHL OPR, 1CNT>1,MOV CL, CNT SHL OPR, CL ; 以SHL为例* 条件标志位:CF = 移入的数值 1 CNT=1时,最高有效位的值发生变化0 CNT=1时,最高有效位的值不变移位指令:SF、ZF、PF 根据移位结果设置,AF无定义循环移位指令:不影响SF、ZF、PF、AF十五、控制转移指令:∙无条件转移指令JMP∙条件转移指令JZ / JNZ 、JE / JNE、JS / JNS、JO / JNO、JP / JNP、JB / JNB、JL / JNL、JBE / JNBE、JLE / JNLE、JCXZ∙循环指令LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE∙子程序调用和返回指令CALL、RET∙中断与中断返回指令INT、INTO、IRET十六、与转移地址有关的寻址方式:用来确定转移指令及转子指令的转向地址段内寻址段内直接寻址JMP NEAR PTR NEXT段内间接寻址JMP TABLE [ BX ]段间寻址段间直接寻址JMP FAR PTR NEXT段间间接寻址JMP DWORD PTR [ BX ]无条件转移指令:段内直接短转移:JMP SHORT OPR执行操作:(IP) ←(IP) + 8位位移量段内直接近转移:JMP NEAR PTR OPR执行操作:(IP) ←(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)注意:* 不影响标志位十七、条件转移指令注意:* 只能使用段内直接寻址的8 位位移量* 不影响标志位(1) 根据单个条件标志的设置情况转移格式测试条件JZ(JE) OPR ZF = 1JNZ(JNE) OPR ZF = 0JS OPR SF = 1JNS OPR SF = 0JO OPR OF = 1JNO OPR OF = 0JP OPR PF = 1JNP OPR PF = 0JC OPR CF = 1JNC OPR CF = 0(2) 比较两个无符号数,并根据比较结果转移格式测试条件<JB (JNAE,JC) OPR CF = 1≥JNB (JAE,JNC) OPR CF = 0≤JBE (JNA) OPR CF∨ZF = 1>JNBE (JA) OPR CF∨ZF = 0* 适用于地址或双精度数低位字的比较(3) 比较两个带符号数,并根据比较结果转移* 适用于带符号数的比较格式测试条件<JL (JNGE) OPR SF∀OF = 1≥JNL (JGE) OPR SF∀OF = 0≤JLE (JNG) OPR (SF∀OF)∨ZF = 1>JNLE (JG) OPR (SF∀OF)∨ZF = 0(4) 测试CX 的值为0 则转移格式测试条件JCXZ OPR (CX)=0十八、循环指令注意:* CX 中存放循环次数* 只能使用段内直接寻址的8 位位移量* 不影响标志位LOOPLOOPZ / LOOPELOOPNZ / LOOPNE执行步骤:(1) (CX) ←(CX) – 1(2)检查是否满足测试条件,如满足则(IP) ←(IP) + 8位位移量,实行循环;不满足则IP 不变,退出循环循环指令:LOOP OPR测试条件:(CX) ≠ 0为零或相等时循环指令:LOOPZ(LOOPE) OPR测试条件:ZF=1 且(CX) ≠ 0不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR测试条件:ZF=0 且(CX) ≠ 0十九、例:求首地址为ARRA Y 的M 个字之和,结果存入TOTAL MOV CX, MMOV AX, 0MOV SI, AXAGAIN:ADD AX, ARRAY[SI]ADD SI, 2LOOP AGAINMOV TOTAL, AX二十、串处理指令∙串处理指令∙串重复前缀LODSB / LODSW REPSTOSB / STOSW REPE / REPZMOVSB / MOVSW REPNE / REPNZSCASB / SCASWCMPSB / CMPSWLODS 从串取指令:LODS SRCLODSB (字节)LODSW (字)执行操作:字节操作:(AL)←((SI)), (SI)←(SI)±1字操作:(AX)←((SI)), (SI)←(SI)±2注意: * LODS 指令一般不与REP 联用* 源串一般在数据段中(允许使用段跨越前缀来修改),目的串必须在附加段中* 不影响条件标志位STOS 存入串指令:STOS DSTSTOSB (字节)STOSW (字)执行操作:字节操作:((DI))←(AL), (DI)←(DI)±1字操作:((DI))←(AX), (DI)←(DI)±2MOVS 串传送指令:MOVS DST, SRCMOVSB (字节)MOVSW (字)例:MOVS ES: BYTE PTR [DI], DS: [SI]执行操作:(1) ((DI)) ←((SI))(2) 字节操作:(SI)←(SI)±1, (DI)←(DI)±1字操作:(SI)←(SI)±2, (DI)←(DI)±2方向标志DF=0 时用+ ,DF=1 时用- 。

相关主题