汇编语言指令系统.

汇编语言指令系统.
汇编语言指令系统.

汇编语言--指令系统整理总结--转贴

2007-05-1722:36

对于计算机软件专业的学生,适当的学习一些汇编语言知识,我认为很重要,有助于你对于计算机底层工作的了解,帮助你更好的理解计算机高级语言,汇编原理,也对于学习操作系统很有帮助...

近来自己在学汇编语言... 整理总结了常用的一些指令,认为对于学习汇编的龙友会有一些帮助以下内容均为个人整理...错误不当之处还望大家指出更正..谢谢..每条指令均按照

1、指令的汇编格式

2、指令的基本功能

3、指令的寻址方式

4、指令对标志位的影响

5、指令的特殊要求

这 5条内容的形式来对每条指令进行归纳总结....

[数据传送指令]

一、通用数据传送指令

1、传送指令 MOV (move

指令的汇编格式:MOVDST,SRC

指令的基本功能:(DST<-(SRC将原操作数(字节或字传送到目的地址。

指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式, 这个限制适用于所有指令。指令的执行对标志位的影响:不影响标志位。

指令的特殊要求:目的操作数 DST 和源操作数 SRC 不允许同时为段寄存器;

目的操作数 DST 不能是 CS,也不能用立即数方式。

2、进栈指令 PUSH (pushonto the stack

出栈指令 POP (popfrom the stack

指令的汇编格式:PUSHSRC ;POP DST

指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而 POP 指令又可将这些数据恢复。 PUSH SRC (SP<-(SP-2;(SP<-(SRC

POP DST (DST<-((SP;(SP<-(SP

指令支持的寻址方式:push和 pop 指令不能不能使用立即数寻址方式。

指令对标志位的影响:PUSH和 POP 指令都不影响标志位。

指令的特殊要求:PUSH 和 POP 指令只能是字操作, 因此, 存取字数据后, SP 的修改必须是+2或者 -2; POP 指令的 DST 不允许是 CS 寄存器;

3、交换指令 XCHG (exchange

指令的汇编格式:XCHGOPR1,OPR2

指令的基本功能:(OPR1<->(OPR2

指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。

指令对标志位的影戏:不影响标志位。

指令的特殊要求:不允许使用段寄存器。

二、累加器专用传送指令

4、输入指令 IN (input

输出指令 OUT (output

指令的汇编格式:INac,port port<=0FFH

IN ac,DX port>0FFH

OUT port,ac port<=0FFH

OUT DX,ac port>0FFH

指令的基本功能:对 8086及其后继机型的微处理机,所有 I/O端口与 CPU 之间的通信都由输入输出指令 IN 和 OUT 来完成。IN 指令将信息从 I/O输入到CPU,OUT 指令将信息从 CPU 输出到 I/O端口, 因此,IN 和 OUT 指令都要指出 I/O 端口地址。

IN ac,port port<=0FFH(AL<-(port传送字节或 (AX<-(port+1,port传送字

IN ac,DX port>0FFH(AL<-((DX传送字节或 (AX<-((DX+1,(DX传送字

OUT port,ac port<=0FFH(port<-(AL传送字节或 (port+1,port<-(AX传送字

OUT DX,ac port>0FFH(DX<-(AL传送字节或 ((DX+1,(DX<-(AX传送字

指令的特殊要求:只限于在 AL 或 AX 与 I/O端口之间传送信息。

传送 16位信息用 AX,传送 8位信息用 AL,这取决于外设端口的宽度。

5、换码指令 XLAT (translate

指令的汇编格式:XLATopr 或 XLAT

指令的基本功能:这条指令根据 AL 寄存器提供的位移量,将 BX 指使的字节表格中的代码换存在 AL 中。

(AL<-((DS*16+(BX+(AL

指令对标志位的影响:不影响标志位。

指令的特殊要求:所建字节表格的长度不能超过 256字节,因为存放位移量的是8位寄存器 AL。 opr 为表格的首地址,因为 opr 所表示的偏移地址已存入 BX 寄存器,所以 opr 在换码指令中可有可无,有则提高程序的可读性。

三、地址传送指令

6、有效地址传送器 LEA (loadeffective address

指令的汇编格式:LEAreg,src

指令的基本功能:LEA指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由 src 选定的一种存储器寻址方式确定的。

指令支持的寻址方式:各种存储器寻址方式。

指令对标志位的影响:不影响标志位。

指令的特出要求:指令中 reg 不能是段寄存器;

7、指针送寄存器和 DS LDS (loadDS with point

指针送寄存器和 ES LES (loadES with point

指令的汇编格式:LDSreg,src

LES reg,src

指令的基本功能:LDS和 LES 指令把确定内存单元位置的偏移地址送寄存器,段地址 DS 或 ES。这个偏移地址和段地址(也称地址指针是由 src 指定的两个相继字单元提供的。

LDS reg,src (reg<-(src(DS<-(src+2

LES reg,src (reg<-(src(ES<-(src+2

指令支持的寻址方式:src必须为存储器寻址方式

指令对标志位的影响:不影响标志位。

指令的特殊要求:指令中 REG 不能是段寄存器;

四、标志寄存器传送指令

8、标志寄存器的低字节送 AH LAHF (loadAH with FLAGS 指令的汇编格式:LAHF

指令的基本功能:(AH<-(FLAGS0-7

指令对标志位的影响:不影响标志位

9、AH 送标志寄存器低字节 SAHF(storeAH into FLAGS

指令的汇编格式:SAHF

指令的基本功能:(FLAGS0-7<-(AH

指令对标志位的影响:由装入值来确定标志位的值。

10、标志进栈 PUSHF (pushthe flags

指令的汇编格式:PUSHF

指令的基本功能:(SP<-(SP-2((SP+1,(SP<-(FLAGS0-15

11、标志出栈 POPF (popthe FLAGES

指令的汇编格式:POPF

指令的基本功能:(FLAGS0-15<-((SP+1,(SP(SP<-(SP+2

指令对标志位的影响:由装入值来确定标志位的值。

[算术指令]

一、加法指令 12、加法指令 ADD (addition

指令的汇编格式:adddst,src

指令的基本功能:(dst<-(src+(dst

指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 源操作数和目地操作数必须有一个寄存器寻址方式。

指令对标志位的影响:SF=1加法结果为负数(符号位为 1

SF=0加法结果为正数(符号位为 0

ZF=1加法结果为零

ZF=0加法结果不为零

CF=1最高有效位向高位有进位

CF=0最高有效位向高位无进位

OF=1两个同符号数相加(正数+正数或负数+负数,结果符号与其相反。

OF=0两个不同符号数相加,或同符号数相加,结果符号与其相同。

13、带进为加法指令 ADC (addwith carry

指令的汇编格式:ADDdst,src

指令的基本功能:(dst<-(src+(dst+CF

指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 源操作数和目地操作数必须有一个寄存器寻址方式。

指令对标志位的影响:SF=1加法结果为负数

SF=0加法结果为正数

ZF=1加法结果为零

ZF=0加法结果不为零

CF=1最高有效位向高位有进位

CF=0最低有效位相高位无进位

OF=1两个同符号数相加,结果符号与其相反,

OF=0两个同符号数相加,或同符号相加,结果符号与其相同14、加 1指令 INC (increament

指令的汇编格式:INCopr

指令的基本功能:(opr<-(opr

指令支持的寻址方式可以使用除立即数方式外的任何寻址方式指令对标志位的影响:SF=1加法结果为负数

SF=0加法结果为正数

ZF=1加法结果为零

ZF=0加法结果不为零

OF=1两个同符号数相加,结果符号与其相反,

OF=0两个同符号数相加,或同符号相加,结果符号与其相同。二、减法指令

15、减法指令 SUB (subtract

指令的汇编格式:SUBdst,src

指令的基本功能:(dst<-(dst-(src

指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 源操作数和目地操作数必须有一个寄存器寻址方式。

指令对标志位的影响:SF=1减法结果为负数(符号位为 1

ZF=1减法结果为零

ZF=0减法结果不为零

CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况

CF=0二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况

OF=1两数符号相反(正数-负数,或负数-正数,而结果符号与减数相同。

OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。

16、带借位减法指令 SBB (subtractwith borrow

指令的汇编格式:SBBdst,src

指令的基本功能:(dst<-(dst-(src-CF

指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 源操作数和目地操作数必须有一个寄存器寻址方式。

指令对标志位的影响:SF=1减法结果为负数(符号位为 1

SF=0减法结果为正数(符号位为 0

ZF=1减法结果为零

ZF=0减法结果不为零

CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况

CF=0二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况

OF=1两数符号相反(正数-负数,或负数-正数,而结果符号与减数相同。

OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。

17、减 1指令 DEC (decrement

指令的汇编格式:DECopr

指令的基本功能:(opr<-(opr-1

指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。

指令对标志位的影响:SF=1减法结果为负数(符号位为 1

SF=0减法结果为正数(符号位为 0

ZF=1减法结果为零

ZF=0减法结果不为零

OF=1两数符号相反(正数-负数,或负数-正数,而结果符号与减数相同。

OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。

18、比较指令 CMP (compare

指令的汇编格式:CMPopr1,opr2

指令的基本功能:(opr1-(opr2,根据相减结果设置条件码,但不回送结果。

指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 源操作数和目地操作数必须有一个寄存器寻址方式。

指令对标志位的影响:SF=1减法结果为负数(符号位为 1

SF=0减法结果为正数(符号位为 0

ZF=1减法结果为零

ZF=0减法结果不为零

CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况

CF=0二进制减法运算中最高有效为向高位无借位(被减数〉=减数,够减的情况

OF=1两数符号相反(正数-负数,或负数-正数,而结果符号与减数相同。

OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。

19、求补指令 NEG (negate

指令的汇编格式:NEGopr

指令的基本功能:(opr<--(opr

指令支持的寻址方式:可以使用除立即数方式外的任何寻址方式。

指令对标志位的影响:CF=1不为 0的操作数求补时

CF=0为 0的操作数求补时

OF=0当求补运算的操作数不为-128(字节或-32768(字时

三、乘法指令

20、无符号乘法指令 NUL (unsignedmultiple

有符号乘法指令 IMUL(signedmuliple

指令的汇编格式:NULsrc

IMUL src

指令的基本功能:(AX<-(AL*(src

(DX,AX<-(AX*(src

指令支持的寻址方式:src可以使用除立即数方式以外的任一种寻址方式。

指令对标志位的影响:乘法指令只影响标志位 CF 和 OF,其他条件码位无定义。

MUL 指令的条件码设置为:

CF OF=00乘积的高一半为 0(字节操作的(AH或字操作的(DX

CF OF=11乘积的高一半不为 0

IMUL 指令的条件码设置为:

CF OF=00乘积的高一半为低一半的符号扩展.

CF OF=11其他情况

指令的特殊要求:MUL和 IMUL 指令的区别仅在于操作数是无符号还是带符号数,它们的共同点是, 指令中只给出源操作数 src, 目的操作数是隐含的, 它只能是累加器 (字运算为 AX, 字节运算为 AL 。隐含的乘积寄存器是 AX 或 DX(高位和

AX(低位。

四、符号扩展指令

21、节扩展为字 CBW (convertbyte to word

指令的汇编格式:CBW

指令的基本功能:(AH=00H当(AL的最高有效位为 0时

(AH=FFH当(AL的最高有效位为 1时

指令对标志位的影响:不影响标志位

指令的特殊要求:这是条无操作数的指令, 进行符号扩展的操作数必须存放在AL 寄存器或 AX 寄存器中。

22、字扩展为双字 CWD (convertword to double word

指令的汇编格式:CWD

指令的基本功能:(DX=0000H当(AX的最高有效位为 0时

(DX=FFFFH当(AX的最高有效位为 1时

指令对标志位的影响:不影响标志位

指令的特殊要求:这是条无操作数的指令, 进行符号扩展的操作数必须存放在AL 寄存器或 AX 寄存器中。

五、除法指令

23、无符号数除法 DIV (unsigneddivide

带符号数除法 IDIV (singeddivide

指令的汇编格式:DIVsrc

IDIV src

指令的基本功能:字操作

(AL<-(AX/src的商

(AH<-(AX/src的余数

字节操作

(AX<-(DX,AX/src的商

(DX<-(DX,AX/src的余数

指令支持的寻址方式:src作为除数,可用除立即数以外的任一种寻址方式来取得。

指令对标志位的影响:不影响条件码。

指令的特殊要求:除法指令要求字操作时,被除数必须为 32位,除数是 16位,商和余数是 16位的;

六、十进制调整指令

[逻辑指令]

一、逻辑运算

24、逻辑与 AND (logicand

指令的汇编格式:ANDdst,src

指令的基本功能:(dst<-(dst与(src

指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 源操作数和目地操作数必须有一个寄存器寻址方式。

指令对标志位的影响:指令执行后 CF 和 OF 置零,AF 无定义。

SF=1指令执行后的结果为负数(符号位为 1

SF=0指令执行后的结果为正数(符号位为 0

ZF=1指令执行后的结果为零

ZF=0指令执行后的结果不为零

PF=1结果操作数中 1的个数为偶数时置 1

PF=0结果操作数中 1的个数为奇数时置 0

25、逻辑或 OR (logicor

指令的汇编格式:ORdst,src

指令的基本功能:(dst<-(dst或(src

指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 原操作数和目的操作数必须有一个寄存器寻址方式。

指令对标志位的影响:令执行后 CF 和 OF 置零,AF 无定义。

SF=1指令执行后的结果为负数(符号位为 1

SF=0指令执行后的结果为正数(符号位为 0

ZF=1指令执行后的结果为零

ZF=0指令执行后的结果不为零

PF=1结果操作数中 1的个数为偶数时置 1

PF=0结果操作数中 1的个数为奇数时置 0

26、逻辑非 NOT (logicnot

指令的汇编格式:NOTorc

指令的基本功能:(dst<-(opr

指令支持的寻址方式:除立即数寻址方式以外的其余寻址方式

指令对标志位的影响:对标志位无影响

27、异或 XOR (exclusiceor

指令的汇编格式:XORdst,src

指令的基本功能:(dst<-(dst异或(src

指令支持的寻址方式:两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外, 原操作数和目的操作数必须有一个寄存器寻址方式。

指令对标志位的影响:令执行后 CF 和 OF 置零,AF 无定义。

SF=1指令执行后的结果为负数(符号位为 1

SF=0指令执行后的结果为正数(符号位为 0

ZF=1指令执行后的结果为零

ZF=0指令执行后的结果不为零

PF=1结果操作数中 1的个数为偶数时置 1

PF=0结果操作数中 1的个数为奇数时置 0

28、测试指令 TEST

指令的汇编格式:TESTopr1,opr2

指令的基本功能:(opr1与(opr2

指令支持的寻址方式:两个操作数不能同时为存储器寻址, 即为除源操作数为立即数的情况外, 源操作数和目的操作数必须有一个寄存器寻址方式。

指令对标志位的影响:令执行后 CF 和 OF 置零,AF 无定义。

SF=1指令执行后的结果为负数(符号位为 1

SF=0指令执行后的结果为正数(符号位为 0

ZF=1指令执行后的结果为零

ZF=0指令执行后的结果不为零

PF=1结果操作数中 1的个数为偶数时置 1

PF=0结果操作数中 1的个数为奇数时置 0

二、移位指令

29、逻辑左移 SHL (shiftlogical left

指令的汇编格式:SHLdst,cnt

指令的基本功能:SHL指令向左逐位移动 cnt 次,每次逐位移动后,最低位用 0来补充,最高位移入 CF。

指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数 (或位数 cnt=1时,1可以直接写在指令中,cnt〉1时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值

OF=1当 cnt=1时,移动后最高位的值发生变化。

OF=0当 cnt=1时,移动时最高位的值未发生变化。

SF、ZF、PF 根据移动后的结果设置。

30、逻辑右移 SHR (shiftlogical right

指令的汇编格式:SHRdst,cnt

指令的基本功能:SHR指令向右逐位移动 cnt 次,每次逐位移动后,最高位用 0来补充,最低位移入 CF。

指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数 (或位数 cnt=1时,1可以直接写在指令中,cnt〉1时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值

OF=1当 cnt=1时,移动后最高位的值发生变化。

OF=0当 cnt=1时,移动时最高位的值未发生变化。

SF、ZF、PF 根据移动后的结果设置。

31、算术左移 SAL (shiftarithmetic left

指令的汇编格式:SALdst cnt

指令的基本功能:SAL指令向左逐位移动 cnt 次,每次逐位移动后,最低位用 0来补充,最高位移入 CF。

指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数 (或位数 cnt=1时,1可以直接写在指令中,cnt〉1时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值

OF=1当 cnt=1时,移动后最高位的值发生变化。

OF=0当 cnt=1时,移动时最高位的值未发生变化。

SF、ZF、PF 根据移动后的结果设置。

32、算术右移 SAR (shiftarithmetic right

指令的汇编格式:SARdst,cnt

指令的基本功能:SAR指令向右逐位移动 cnt 次,每次逐位移动后,最高位用符号位来补充,最低位移入 CF。

指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移位次数 (或位数 cnt=1时,1可以直接写在指令中,cnt〉1时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值

OF=1当 cnt=1时,移动后最高位的值发生变化。

OF=0当 cnt=1时,移动时最高位的值未发生变化。

SF、ZF、PF 根据移动后的结果设置。

33、循环左移 ROL (rotateleft

指令的汇编格式:ROLdst,cnt

指令的基本功能:ROL 对由 dst 指定的寄存器或存储器操作数左移循环移动 cnt 所指定的次数, 每左移一次,把最高位同时移入 CF 和操作数最低位。

指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数 (或位数 cnt=1时,1可以直接写在指令中,cnt〉1时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值

OF=1当 cnt=1时,移动后最高位的值发生变化。

OF=0当 cnt=1时,移动时最高位的值未发生变化。

SF、ZF、PF 根据移动后的结果设置。

34、循环右移 ROR (rotateright

指令的汇编格式:RORdst,cnt

指令的基本功能:ROR 对由 dst 指定的寄存器或存储器操作数右移循环移动 cnt 所指定的次数, 每右移一次,把最低位同时移入 CF 和操作数最高位。

指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数 (或位数 cnt=1时,1可以直接写在指令中,cnt>1时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值

OF=1当 cnt=1时,移动后最高位的值发生变化。

OF=0当 cnt=1时,移动时最高位的值未发生变化。

SF、ZF、PF 根据移动后的结果设置。

35、带进位的循环左移 RCL (rotateleft through carry

指令的汇编格式:RCLdst,cnt

指令的基本功能:RCL对由 dst 指定的寄存器或存储器操作数,连同进位标志 CF 左循环移动,m 所指定的次数,每左移一次,把操作数的最高位移入 CF,而 CF 中原有内容移入操作数的最低位。指定支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数 (或位数 cnt=1时,1可以直接写在指令中,cnt〉1

时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值。

OF=1当 cnt=1时,移动后最高位的值未发生变化。

OF=0当 cnt=1时,移动后最高位的值发生变化。

SF、ZF、PF 标志位不受影响。

36、带进位的循环右移 RCR (rotateright through carry

指令的汇编格式:RCRdst,cnt

指令的基本功能:RCR对由 dst 指定的寄存器或存储器操作数,连同进位标志 CF 右循环移动,m 所指定的次数,每右移一次,把操作数的最高低位移入 CF,而 CF 中原有内容移入操作数的最高位。指令支持的寻址方式:目的操作数 dst 可以是除立即数外的任何寻址方式。移动次数 (或位数 cnt=1时,1可以直接写入指令中,cnt〉1时,cnt 必须放入 CL 寄存器中。

指令对标志位的影响:CF=移入的数值。

OF=1当 cnt=1时,操作数最高位的值未发生变化。

OF=0当 cnt=1时,操作数最高位的值发生变化。

SF、ZF、PF 标志位不受影响。

[串处理指令]

一、设置方向标志指令

37、DF 置零 CLD (cleardirection flag

DF 置一 STD (setdirection flag

指令的汇编格式:CLD

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用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=Tmp 1.必须有一个操作数是在寄存器中 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_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

指令系统和汇编语言程序的设计实验

第二章指令系统和汇编语言程序设计实验 本章实验主要包括指令系统和汇编语言程序设计两部分。采用软件模拟调试的方法, 目的在于通过这些实验可以使学生巩固所学知识, 加深对 MCS-51单片机部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。 第一节指令系统实验 实验一熟悉键盘操作及数传指令编程设计 一、实验目的 1.熟悉软件模拟调试的环境及键盘操作。 2.掌握汇编语言程序设计的方法,加深对指令的理解。 3.学会软件模拟调试和察看修改观察项的方法。 二、实验容 印证数据传送指令的功能、寻址方式以及 PC 指针、 SP 指针、 DPTR 指针、Ri 指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤 1.进入调试软件环境,输入源程序; 2.汇编源程序; 3.用单步方式运行程序; 4.检查并记录各寄存器和存储单元容的变化。 四、程序清单

1. 部 RAM 数据传送 需要查看的数据有 30H,31H,A,R0等。 ORG 0000H MOV R0,#30H MOV 30H,#45H MOV 31H,#46H MOV R2,30H MOV 02H,31H MOV A,#87H MOV 0E0H,30H MOV 30H,A MOV 31H,R0 SJMP $ END 2. 外部数据传送 需要查看的数据有外部数据存储器单元 2000H ,外部程序存储器单元2001H 。 ORG 0000H MOV A,#89H MOV DPTR,#2000H

MOVX DPTR,A INC DPTR CLR A MOVC A,A+DPTR SJMP $ ORG 2000H DB 44H DB 78H DB 67H END 3. 堆栈操作 需要查看的数据有 50H 、 51H 、 A 及 SP 指针和堆栈区中数据随 PUSH 和POP 指令执行后的变化情况和数据的存放次序等。 1 可用于保护现场和恢复现场的程序 ORG 0000H MOV SP,#5FH MOV 50H,#3BH MOV 51H,#2FH MOV A,#12H

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

汇编语言指令表

汇编语言指令表文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

伪指令 1、定位伪指令 ORG m 2、定义字节伪指令 DB X1,X2,X3,…,Xn 3、字定义伪指令 DW Y1,Y2,Y3,…,Yn 4、汇编结束伪指令 END 寻址方式 MCS-51单片机有五种寻址方式: 1、寄存器寻址 2、寄存器间接寻址 3、直接寻址 4、立即数寻址 5、基寄存器加变址寄存器间接寻址 6、相对寻址 7、位寻址 数据传送指令 一、以累加器A为目的操作数的指令(4条) MOV A,Rn ;(Rn)→A n=0~7 MOV A,direct ;( direct )→A MOV A,@Ri ;((Ri))→A i=0~1 MOV A,#data ; data →A 二、以Rn为目的操作数的指令(3条) MOV Rn ,A;(A)→ Rn MOV Rn ,direct;( direct )→ Rn MOV Rn ,#data; data → Rn 三、以直接寻址的单元为目的操作数的指令(5条) MOV direct,A;(A)→direct MOV direct,Rn;(Rn)→direct MOV direct,direct ;(源direct)→目的direct MOV direct,@Ri;((Ri))→direct MOV direct,#data; data→direct 四、以寄存器间接寻址的单元为目的操作数的指令(3条) MOV @Ri,A;(A)→(Ri) MOV @Ri,direct;(direct)→(Ri) MOV @Ri,#data; data→(Ri) 五、十六位数据传送指令(1条) MOV DPTR,#data16;dataH→DPH,dataL →DPL

第3章-MCS-51系列单片机的指令系统和汇编语言程序范文

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

指令系统及汇编语言程序设计

第3章指令系统及汇编语言程序设计 一、简答题 1、80C51系列单片机的指令系统有何特点? 2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何? 3、访问特殊功能寄存器SFR可以采用哪些寻址方式? 4、访问内部RAM单元可以采用哪些寻址方式? 5、访问外部RAM单元可以采用哪些寻址方式? 6、访问外部程序存储器可以采用哪些寻址方式? 7、为什么说布尔处理功能是80C51单片机的重要特点? 8、对于80C52单片机内部RAM还存在高128字节,应采用何种方式访问? 9、试根据指令编码表写出下列指令的机器码。 (1)MOV A,#88H (2)MOV R3,50H (3)MOV P1.1,#55H (4)ADD A,@R1 (5)SETB 12H 10、完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指 令序列。 (1)将R0的内容传送到R1; (2)内部RAM单元60H的内容传送到寄存器R2; (3)外部RAM单元1000H的内容传送到内部RAM单元60H; (4)外部RAM单元1000H的内容传送到寄存器R2; (5)外部RAM单元1000H的内容传送到外部RAM单元2000H。 11、11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。试分析执行下列程序段 后上述各单元内容的变化。 MOV A,@R1 MOV @R1,40H MOV 40H,A MOV R1,#7FH 12、若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH, 试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指 出CY、AC、和OV的值。 (1)MOV A,@R0 (2)ANL 40H,#0FH (3)ADD A,R4 (4)SWAP A (5)DEC @R1 (6)XCHD A,@R1 13、若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的40H、41H、 42H单元中的内容各为多少? MOV A,50H MOV R0,A MOV A,#00H MOV @R0,A MOV A,3BH MOV 41H,A MOV 42H,41H 14、试用位操作指令实现下列逻辑操作。要求不得改变未涉及的位的内容。

汇编语言指令

汇编语言指令集 数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影响标志: C,P,Z,S,O ROR,ROL,RCR,RCL

指令系统及汇编语言程序设计

指令系统及汇编语言程序设计 2.4 伪指令 伪指令本身不会产生可执行的机器指令代码,它仅仅是告诉汇编程序有关源程序的某些信息,或者用来说明内存单元的用途。伪指令在汇编过程中由汇编程序进行处理。 2.4.1 数据定义伪指令 数据定义伪指令用于定义变量的类型、给存储器赋初值或给变量分配存储单元。常用的数据定义伪指令有DB、DW和DD等。 格式: [变量名] 伪指令助记符数据表项 功能:定义一个数据存储区,其类型由所定义的数据定义指令而指定。 操作说明:方括号中的变量名为任选项,变量名后面不跟冒号“:”。数据表项可以包含多个数据之间用逗号分隔开。数据定义伪指令助记符有以下三种: (1) DB定义变量类型为字节(BYTE),DB后面的每个数据占一个字节。 (2) DW 定义变量类型为字(WORD),DW后面的每个数据占一个字,即两个字节。在内存中,低字节在前,高字节在后。 (3) DD 定义变量类型为双字(DWORD),后面的每个数据占两个字。在内存中,低位字在前,高位字在后。 例如,有下列数据定义语句 D1 DB 1,-12 D2 DW 1,2010H D3 DD 1,10203040H 数据表项中除了常数、表达式和字符串外,还可以是问号“?”,它仅给变量保留相应的存储单元,而不给变量赋初值。相同的操作数重复出现时,可用重复符号“DUP”表示。 其格式为: n DUP(初值[,初值,……]);n表示重复的次数,圆括号中为重复的内容。 下面是用问号或DUP表示操作数的例子: ARRAY DB 1000 DUP(0) VAR DW ?,? 2.4.2 符号定义伪指令 1. 赋值伪指令 格式:变量名 EOU 表达式 功能:将右边表达式的值赋给左边的变量。 操作说明:表达式可以是一个常数、符号、数值表达式或地址表达式。 需要注意的是:EQU伪指令不允许对同一符号重复定义。 EQU伪指令具体应用举例如下: CR EQU ODH ;定义CR为常数(回车的ASCII代码) TAB EQU TABLE-ASCII ;定义变量 DIS EQU 1024*768 ;定义数值表达式 ADR EQU ES:[DI+3] ;定义地址表达式 M EQU MOV ;定义助记符 2.等号(=)伪指令 格式:变量名=表达式 功能:将右边表达式的值赋给左边的变量。 操作说明:等号(=)伪指令的功能与EQU伪指令相仿,它可以对同一个名字重复定义。

一些常用的汇编语言指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 MOV:寄存器之间传送注意,源和目的不能同时是段寄存器;代码段寄存器CS不能作为目的;指令指针IP不能作为源和目的。立即数不能直接传送段寄存器。源和目的操作数类型要一致;除了串操作指令外,源和目的不能同时是存储器操作数。 XCHG交换指令:操作数可以是通用寄存器和存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。 LEA 16位寄存器存储器操作数传送有效地址指令:必须是一个16位寄存器和存储器操作数。 LDS 16位寄存器存储器操作数传送存储器操作数32位地址,它的16位偏移地址送16位寄存器,16位段基值送入DS中。 LES :同上,只是16位段基址送ES中。 堆栈操作指令 PUSH 操作数,操作数不能使用立即数, POP 操作数,操作数不能是CS和立即数 标志操作指令 LAHF:把标志寄存器低8位,符号SF,零ZF,辅助进位AF,奇偶PF,进位CF传送到AH 指定的位。不影响标志位。 SAHF:与上相反,把AH中的标志位传送回标志寄存器。 PUSHF:把标志寄存器内容压入栈顶。 POPF:把栈顶的一个字节传送到标志寄存器中。 CLC:进位位清零。 STC:进位位为1。 CMC:进位位取反。 CLD:使方向标志DF为零,在执行串操作中,使地址按递增方式变化。 STD:DF为1。 CLI:清中断允许标志IF。Cpu不相应来自外部装置的可屏蔽中断。 STI:IF为1。 加减运算指令

注意:对于此类运算只有通用寄存器和存储单元可以存放运算结果。如果参与运算的操作数有两个,最多只能有一个存储器操作数并且它们的类型必须一致。 ADD。 ADC:把进位CF中的数值加上去。 INC:加1指令 SUB。 SBB:把进位CF中数值减去。 DEC:减1指令。 NEG 操作数:取补指令,即用0减去操作数再送回操作数。 CMP:比较指令,完成操作数1减去操作数2,结果不送操作数1,但影响标志位。可根据ZF(零)是否被置1判断相等;如果两者是无符号数,可根据CF判断大小;如果两者是有符号数,要根据SF和OF判断大小。 乘除运算指令 MUL 操作数:无符号数乘法指令。操作数不能是立即数。操作数是字节与AL中的无符号数相乘,16位结果送AX中。若字节,则与AX乘,结果高16送DX,低16送AX。如乘积高半部分不为零,则CF、OF为1,否则为0。所以CF和OF表示AH或DX中含有结果的有效数。IMUL 操作数:有符号数乘法指令。基本与MUL相同。 DIV 操作数:被除数是在AX(除数8位)或者DX和AX(除数16位),操作数不能是立即数。如果除数是0,或者在8(16)位除数时商超过8(16)位,则认为是溢出,引起0号中断。IDIV:有符号除法指令,当除数为0,活着商太大,太小(字节超过127,-127字超过32767,-32767)时,引起0号中断。 符号扩展指令 CBW,CWD:把AL中的符号扩展到寄存器AH中,不影响各标志位。CWD则把AX中的符号扩展到DX,同样不影响标志位。注意:在无符号数除之前,不宜用这两条指令,一般采用XOR 清高8位或高16位。 逻辑运算指令与位移指令 注意:只能有一个存储器操作数;只有通用寄存器或存储器操作数可作为目的操作数,用于存放结果;操作数的类型必须一致。 NOT:取反,不影响标志位。 AND 操作数1 操作数2:操作结果送错作数1,标志CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志) SF(符号)反映运算结果,AF(辅助进位)未定义。自己与自己AND值不变,她主要用于将操作数中与1相与的位保持不变,与0相与清0。(都为1时为1)OR 操作数1 操作数2:自己与自己OR值不变,CF(进位)、OF(溢出)清0,PF(奇偶)ZF(0标志)SF(符号)反映运算结果,AF(辅助进位)未定义。她使用于将若干位置1:

MIPS 指令系统和汇编语言

第四章MIPS指令系统和汇编语言 1.考研预测:出题特点总结 本章是对统考408内容来说,本章是新增的章节。此外北航961大纲中制定了要考MIPS 指令集,从15年961真题来看MIPS是重中之重。但是今年计组并没有指定具体的教材,但大纲明确要求掌握MIPS指令集,所以还是建议考生将《计算机组成与设计:硬件/软件接口》中文版(原版第三版或第四版)作为本章的参考书籍。 本章大致内容是MIPS的基础知识,难度并不大。考生应该将重点放在MIPS指令集的基础上,考察C语言中的语句转换为对应的MIPS指令,所以需要熟练掌握C语言中一些语句对应的MIPS指令实现。本章出题很大可能就是C语言和MIPS汇编语言之间的转换,也可能涉及到第五章CPU指令流水线等内容。 2.考研知识点系统整理:梳理考点,各个击破 3.1 指令系统概述 机器指令要素 操作码:指明进行的何种操作 源操作数地址:参加操作的操作数的地址,可能有多个。 目的操作数地址:保存操作结果的地址。 下条指令的地址:指明下一条要运行的指令的位置,一般指令是按顺序依次执行的,所以绝大多数指令中并不显式的指明下一条指令的地址,也就是说,指令格式中并不包含这部分信息。只有少数指令需要显示指明下一条指令的地址。

指令执行周期 3.2 指令格式 一台计算机指令格式的选择和确定要涉及多方面的因素,如指令长度、地址码结构以及操

作码结构等,是一个很复杂的问题,它与计算机系统结构、数据表示方法、指令功能设计等都密切相关。 指令的基本格式 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如下: ( 其中A1为第一操作数地址,A2为第二操作数地址,A3为操作结果存放地址。 这条指令的含义:(A1)OP(A2)→A3 式中OP表示双操作数运算指令的运算符号,如“+”或“–”等。 (2)二地址指令

PIC8位单片机汇编语言常用指令的识读

PIC8位单片机汇编语言常用指令的识读(上) 各大类单片机的指令系统是没有通用性的,它是由单片机生产厂家规定的,所以用户必须遵循厂家规定的标准,才能达到应用单片机的目的。 PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC 系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 在这里笔者介绍PIC 8位单片机汇编语言指令的组成及指令中符号的功能,以供初学者阅读相关书籍和资料时快速入门。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号操作码助记符操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1 标号与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋以指令存储器地址的具体数值。汇编语言中采用符号地址(即标号)是便于查看、修改,尤其是便于指令转移地址的表示。标号是指令格式中的可选项,只有在被其它语句引用时才需派上标号。在无标号的情况下,指令助记符前面必须保留一个或一个以上的空格再写指令助记符。指令助记符不能占用标号的位置,否则该助记符会被汇编程序作标号误处理。 书写标号时,规定第一字符必须是字母或半角下划线“—”,它后面可以跟英文和数字字符、冒号(:)制符表等,并可任意组合。再有标号不能用操作码助记符和寄存器的代号表示。标号也可以单独占一行。 2 操作码助记符该字段是指令的必选项。该项可以是指令助记符,也可以由伪指令及宏命令组成,其作用是在交叉汇编时,“指令操作码助记符”与“操作码表”进行逐一比较,找出其相应的机器码一一代之。 3 操作数由操作数的数据值或以符号表示的数据或地址值组成。若操作数有两个,则两个操作数之间用逗号(,)分开。当操作数是常数时,常数可以是二进制、八进制、十进制或十六进制数。还可以是被定义过的标号、字符串和ASCⅡ码等。具体表示时,规定在二进制数前冠以字母“B”,例如B10011100;八进制数前冠以字母“O”,例如O257;十进制数前冠以字母“D”,例如D122;十六进制数前冠以“H”,例如H2F。在这里PIC 8位单片机默认进制是十六进制,在十六进制数之前加上Ox,如H2F可以写成Ox2F。 指令的操作数项也是可选项。 PIC系列与MCS-51系列8位单片机一样,存在寻址方法,即操作数的来源或去向问题。因PIC系列微控制器采用了精简指令集(RISC)结构体系,其寻址方式和指令都既少而又简单。其寻址方式根据操作数来源的不同,可分为立即数寻址、直接寻址、寄存器间接寻址和位寻址四种。所以PIC系列单片机指令中的操作数常常出现有关寄存器符号。有关的寻址实例,均可在本文的后面找到。 4 注释用来对程序作些说明,便于人们阅读程序。注释开始之前用分号(;)与其它部分相隔。当汇编程序检测到分号时,其后面的字符不再处理。值得注意:在用到子程序时应说明程序的入口条件、出口条件以及该程序应完成的功能和作用。 二、清零指令(共4条) 1 寄存器清零指令 实例:CLRW;寄存器W被清零 说明:该条指令很简单,其中W为PIC单片机的工作寄存器,相当于MCS-51系列单片机中的累加器A,CLR是英语Clear的缩写字母。 2 看门狗定时器清零指令。 实例:CLRWDT;看门狗定时器清零(若已赋值,同时清预分频器)

微机原理与接口技术汇编语言指令详解吐血版

第一讲 第三章 指令系统--寻址方式 回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过 程。 重点和纲要:指令系统--寻址方式。有关寻址的概念;6种基本的寻址方式及 有效地址的计算。 教学方法、实施步骤 时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等 讲 授 40” ×2 提 问 3” ×2 小 结 2” ×2 讲授内容: 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+3000H 3.寄存器寻址 操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。 例如:MOV DS,AX MOV AL,BH 4.寄存器间接寻址 操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄

高级语言、汇编语言及机器语言的区别

计算机语言具有高级语言和低级语言之分。而高级语言又主要是相对于汇编语言而言的,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。 低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,如目前流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言,中文版的C语言习语言等等,这些语言的语法、命令格式都不相同。 高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。但高级语言编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。所以汇编语言适合编写一些对速度和代码长度要求高的程序和直接控制硬件的程序。高级语言、汇编语言和机器语言都是用于编写计算机程序的语言。 高级语言程序“看不见”机器的硬件结构,不能用于编写直接访问机器硬件资源的系统软件或设备控制软件。为此,一些高级语言提供了与汇编语言之间的调用接口。用汇编语言编写的程序,可作为高级语言的一个外部过程或函数,利用堆栈来传递参数或参数的地址。 机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指指令系统 它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。 一条指令就是机器语言的一个语句,它是一组有意义的二进制代码,指令的基本格式如,操作码字段和地址码字段,其中操作码指明了指令的操作性质及功能,地址码则给出了操作数或操作数的地址。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。 汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编.

汇编语言手册

寄存器与存储器 1. 寄存器功能 . 寄存器的一般用途和专用用途 . CS:IP 控制程序执行流程 . SS:SP 提供堆栈栈顶单元地址 . DS:BX(SI,DI) 提供数据段内单元地址 . SS:BP 提供堆栈内单元地址 . ES:BX(SI,DI) 提供附加段内单元地址 . AX,CX,BX和CX寄存器多用于运算和暂存中间计算结果,但又专用于某些指令(查阅指令表)。. PSW程序状态字寄存器只能通过专用指令(LAHF, SAHF)和堆栈(PUSHF,POPF)进行存取。 2. 存储器分段管理 . 解决了16位寄存器构成20位地址的问题 . 便于程序重定位 . 20位物理地址=段地址* 16 + 偏移地址 . 程序分段组织: 一般由代码段,堆栈段,数据段和附加段组成,不设置堆栈段时则使用系统内部的堆栈。 3. 堆栈 . 堆栈是一种先进后出的数据结构, 数据的存取在栈顶进行, 数据入栈使堆栈向地址减小的方向扩展。 . 堆栈常用于保存子程序调用和中断响应时的断点以及暂存数据或中间计算结果。 .堆栈总是以字为单位存取 指令系统与寻址方式 1. 指令系统 . 计算机提供给用户使用的机器指令集称为指令系统,大多数指令为双操作数指令。执行指令后,一般源操作数不变,目的操作数被计算结果替代。 . 机器指令由CPU执行,完成某种运算或操作,8086/8088指令系统中的指令分为6类: 数据传送,算术运算,逻辑运算,串操作,控制转移和处理机控制。 2. 寻址方式 . 寻址方式确定执行指令时获得操作数地址的方法 . 分为与数据有关的寻址方式(7种)和与转移地址有关的寻址方式(4)种。 . 与数据有关的寻址方式的一般用途: (1) 立即数寻址方式--将常量赋给寄存器或存储单元 (2) 直接寻址方式--存取单个变量 (3) 寄存器寻址方式--访问寄存器的速度快于访问存储单元的速度 (4) 寄存器间接寻址方式--访问数组元素 (5) 变址寻址方式 (6) 基址变址寻址方式 (7) 相对基址变址寻址方式(5),(6),(7)都便于处理数组元素 . 与数据有关的寻址方式中,提供地址的寄存器只能是BX,SI,DI或BP . 与转移地址有关的寻址方式的一般用途: (1) 段内直接寻址--段内直接转移或子程序调用 (2) 段内间接寻址--段内间接转移或子程序调用

汇编语言的各条指令

常用命令 数据传送指令 一通用数据传送指令 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.不能与段寄存器交换数据 存储器与存储器之间不能交换数据。 二累加器专用传送指令 IN输入指令 长格式为:IN AL,PORT(字节) IN AX,PORT(字) 执行的操作:(AL)<-(PORT)(字节)

常见汇编语言指令解释:

PC是一个16位的程序计数器。用于存放和指示下一条要执行的指令的地址。寻址范围达64KB。PC有自动加1功能,以实现程序的顺序执行。PC没有地址,是不可寻址的,无法用指令对它进行读写。但在执行转移、调用、返回等指令时能自动改变其内容,以改变程序的执行顺序。 参数代表的意义: 1、Rn 表示R0~R7中的一个 2、#data 表示8位的数值 00H~FFH 3、direct 表示8位的地址 00H~FFH(指的是内部RAM或SFR的地址) 4、@Ri 表示寄存器间接寻址只能是R0或者R1 5、@DPTR 表示数据指针间接寻址 6、bit 表示位地址 7、$ 表示当前地址 常见汇编语言指令解释: 寄存器寻址 MOV A,R1将R1中的数值赋予A 直接寻址 MOV A,3AH将地址3AH中的数值赋予A 立即寻址 MOV A,#3AH将3AH数值赋予A

寄存器间址 MOV A,@R0 将 R0中地址的数值赋予A 变址寻址 MOVC A,@A+DPTR以A中的数值为地址偏移量进行查表 相对寻址 AJMP MATN跳转到行号为MATN处 位寻址 MOV C,7FH 将位地址7FH的数值赋予C MOV A,#3AH数据传输、赋值命令 PUSH direct将direct为地址的数值压入堆栈中 POP direct将direct为地址的数值弹出堆栈 XCH A,direct将direct中的数值与A进行交换 ADD A,direct将direct中的数值与 INC direct将direct中的数值加1 SUBB A,direct将A中的数值减去direct中的数值和Cy值,并保存在A中,如果想使用不带Cy减法,可以在运算前对Cy清零:CLR C DEC direct将direct中的数值减1 DA A 用于对BCD码加减法后进行10进制调整 MUL A B将A和B相乘,并把高八位放在B中,低八位放在A中 DIV A B将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)

相关文档
最新文档