当前位置:文档之家› 汇编指令

汇编指令

汇编指令
汇编指令

EM78xxxxx指令系统

1. EM78xxxxxx指令概述

EM78 系列单片机共有的47 条(EM78P447和451、458有48条) 指令,其寬度为13 位.每一个指令码可分割成两部份,第一部分为标示指令功能的运算码( OPCODE ),第二部份則指出运算時所需之參数,亦即运算码( OPERAND ).而指令的类型大致可分为下列四种:

(1)控制型指令( control operation ): 如

INT...等等.

(2)面向寄存器(字节操作)型指令( register oriented ): 如

MOV A, Reg_B ; move Reg_B to A

ADD Reg_B, A ; add Reg_B with A, and

; save in Reg_B

... 等等.

(3)位操作型指令( bit oriented ): 如

BC,JBS...等等.

(4)常数型指令( constant operation ):如

MOV A, @0x55 ; move 0x55 to A

XOR @0xFF ;Xor A with 0xFF

一般而言,EM78 系列八位微控制器除了對PC (Program Counter)做“写” 的指令如(MOV PC, A),需二个指令周期外,其他的指令只需一个指令周期,.

2. EM78指令寻址方式

关于对寄存器的存取,必須要先说明寄存器的位址,说明暫存的位址的方式称做寻址方式,EM78的寻址方式有两种,一种为直接寻址,一种为間接寻址.

2.1. 立即数寻址

这种方式就是操作数为立即数,可直接从指令中获取.

例:MOV A,@0x16 ;将常数0x16送给寄存器A

2.2. 直接寻址

若是使用者要存取寄存器的内容,可以在运算码上直接描述.

例:將寄存器0X20的内容,COPY到寄存器0X21中.

MOV A, 0X20

MOV 0X21, A

2.3. 间接寻址

这种寻址方式是通过寄存器R4来实现的,R4的bit0-5是用来选择寄存器(地址:00-06,0F-3F) 若是使用者所需要存取的寄存器,有位址相邻的特性,使用間接寻址是很方便的.

例:写一个程序,將寄存器0X20 ~ 0X3F的值都填0.

MOV A, @0X20

MOV 0X04, A

AGAIN:

CLR 0

INC 0X04

MOV A, 0X04

XOR A, 0X3F

JBS 0X03, 2

JMP AGAIN

END:

2.4. 位寻址

这种位寻址是对寄存器中的任一位(bit)进行操作. 例:BS 0x12,2 ;将寄存器0x12的第2位置为“1”. 3. EM78指令说明

1. ADD 加

语法ADD A,R

编码0 0011 10rr rrrr

操作A+R?A

对标志位影响D,C,DC

说明无

举例实现A=R11+R12:

MOV A,0X11

ADD A,0X12

语法ADD R,A

编码0 0011 11rr rrrr

操作A+R?R

对标志位影响Z,C,DC

说明无

举例实现R10=R11+R12:

MOV A,0X11

MOV 0X10,A

MOV A,0X12

ADD 0X10,A

语法ADD A,K

编码1 1111 kkkk kkkk

操作A+K?A

对标志位影响Z,C,DC

说明无

举例实现A=0X01+0X01:

MOV A,@0X01

ADD A,@0X01

2. AND 与

语法AND A,R

编码0 0010 10rr rrrr

操作A&R?A

对标志位影响Z

说明无

举例P6口和R10寄存器相与,结果输出至P6口:

MOV A,0X6 ;P6口输入

AND A,0X10 ;相与

MOV 0X6,A ;P6口输出

语法AND R,A

编码0 0010 11rr rrrr

操作A&R?R

对标志位影响Z

说明无

举例实现R10=R11&R12:

MOV A,0X11

MOV 0X10,A

MOV A,0X12

AND 0X10,A

语法AND A,K

编码1 1010 kkkk kkkk

操作A&K?A

对标志位影响Z

说明无

举例无

3. BC 位清0

语法BC R,b

编码0 100b bbrr rrrr

操作0?R(b)

对标志位影响无

说明R寄存器第b位清0

举例MOV A,@0X0F

MOV 0X10,A ;R10=00001111

BC 0X10,3 ;R10=00000111

4. BS 位置1

语法BS R,b

编码0 101b bbrr rrrr

操作1?R(b)

对标志位影响无

说明R寄存器第b位置1

举例置C标志为1:

BS 0X3,0

5. CALL 子程序调用语法CALL K

编码1 00kk kkkk kkkk

操作PC+1?[栈顶],K?PC(9::0),

R3(7::5)?PC(12::10)

对标志位影响无

说明当调用子程序时,首先将返回地址入栈,由K指定的10位地址装入PC(9::0),页面选择位PS2,PS1,PS0装入PC(12::10)

举例HERE:

CALL SUBRTN

CONT:

MOV A,@10

指令执行前,PC为HERE地址,执行后,PC为SUBRTN地址,栈顶为CONT地址

6. CLRA 清累加器A

语法CLRA

编码0 0000 1000 0000

操作0?A

对标志位影响1?Z

说明无

举例CLRA

7. CLR 清寄存器

语法CLR R

编码0 0000 11rr rrrr

操作0?R

对标志位影响1?Z

说明无

举例CLR 0X10

8. COMA R寄存器取补,存于A

语法COMA R

编码0 0100 10rr rrrr

操作?A

对标志位影响Z

说明无

举例P6口输入,取补后再由P6口输出:

MOV A,0X6

MOV 0X10,A

COMA 0X10

MOV 0X6,A

9. COM R取补

语法COM R

编码0 0100 11rr rrrr

操作?R

对标志位影响Z

说明无

举例COM 0X10

10. CONTR 读CONT寄存器

语法CONTR

编码0 0000 0001 0100

操作CONT?A

对标志位影响无

说明无

举例CONTR

11. CONTW 写CONT 寄存器

语法CONTW

编码0 0000 0000 0010

操作A寄存器值送入CONT寄存器

对标志位影响无

说明无

举例MOV A,@0X83

CONTW ;0X83为10000011

;分频系数1:16,预分频器分配给TCC

;TCC加1由TCC引脚低到高变化触

;发,TCC信号源为内部时钟,禁止

;中断,P7内部上拉禁止.

12. DAA 十进制调整

语法DAA

编码0 0000 0000 0001

操作若[A<3::0>>9]或[DC=1]

则A<3::0>+6-> A<3::0>

若[A<7::4>>9]或[C=1]

则A<7::4>+6-> A<7::4>

对标志位影响C

说明该指令对累加器中的8位数值进行调整(该值为两个组合BCD数之和)产生两位十进制数,每位由4位2进制数表示

举例执行6+9的十进制加法

MOV A,@0X6

MOV 0X10,A

MOV A,@0X9

ADD A,0X10 ;A=0XF

DAA ;A=15H(组合BCD数)

13. DECA R减1,存于A

语法DECA R

编码0 0001 10rr rrrr

操作R—1?A

对标志位影响Z

说明将R寄存器减1,结果存于累加器中

举例说明如何制作一个计数16次的循环:

STA TUS == 3 ;状态寄存器

Z_FLAG == 2

MOV A,@0X10

MOV 0X10,A

LOOP:

DECA 0X10

MOV 0X10,A

JBS STATUS,Z_FLAG

JMP LOOP

14. DEC R 减1

语法DEC R

编码0 0001 11rr rrrr

操作R—1?R

对标志位影响Z

说明无

举例说明如何制作一个计数16次的循环:

STA TUS == 3 ;状态寄存器

Z_FLAG == 2

MOV A,@0X10

MOV 0X10,A

LOOP:

DEC 0X10

JBS STATUS,Z_FLAG

JMP LOOP

15. DISI 禁止中断

语法DISI

编码0 0000 0001 0001

操作0?INT

对标志位影响无

说明清INT位为0,禁止全局中断

举例DISI ;禁止中断

16. DJZA

语法DJZA R

编码0 0101 10rr rrrr

操作R—1?A,为0则跳过下一指令

对标志位影响无

说明R寄存器减1,结果存入A,为0则跳过下一指令

DJZA 0X9

COUNT:

MOV A,0X10

SKIP:

ADD A,@10

DJZA指令执行前,PC为HERE地址,执行后,A=R9—1,若A=0,PC为SKIP地址,若A10,PC为COUNT 地址.

17. DJZ

语法DJZ R

编码0 0101 11rr rrrr

操作R—1?R,为0则跳过下一指令

对标志位影响无

说明无

举例实现LOOP段程序执行100次:

MOV A,@100

MOV 0X10,A

LOOP:

……

DJZ 0X10 ;未执行完100次,

JMP LOOP ;则跳回LOOPS

18. ENI 中断使能

语法ENI

编码0 0000 0001 0000

操作1?INT

对标志位影响无

说明置INT位为1,使能全局中断

举例ENI ;使能中断

19. IOR 读控制寄存器

语法IOR R

编码0 0000 0001 rrrr

操作IOCR?A

对标志位影响无

说明将控制寄存器内容读出至A寄存器,不可用MOV指令

举例IOR 0XF ;获得IOCF内容

MOV 0X10,A ;存入0X10寄存器

20. IOW 写控制寄存器

语法IOW R

编码0 0000 0000 rrrr

对标志位影响无

说明A寄存器值移入控制寄存器IOCR

举例将P6口奇数位置为内部上拉,P6口控制寄存器为0XD MOV A,@0XAA

IOW 0XD

21. INC R加1

语法INC R

编码0 0101 01rr rrrr

操作R+1?R

对标志位影响Z

说明无

举例INC 0X10

22. INCA R加1,存于A寄存器

语法INCA R

编码0 0101 00rr rrrr

操作R+1?A

对标志位影响Z

说明无

举例对外部中断计数,达到一百次,则设置一些标志:

STA TUS == 0X03 ;状态寄存器

ISR == 0X0F ;中断状态寄存器

FLAG == 0X10

COUNTER == 0X11

A_BUF == 0X12 ;A缓冲器

S_BUF == 0X13 ;状态缓冲器

TMO_FLG == 0 ;次数达到标志

TCIF == 0

EXIF == 3

Z_FLAG == 2

EXT_INT :

DISI ;禁止中断

BC ISR,EXIF ;EXIF标志清0

MOV A_BUF,A ;备份A

MOV A,STATUS

MOV S_BUF,A ;备份状态寄存器

INCA COUNTER ;次数加1

MOV COUNTER,A

XOR A,@100 ;到100次,则TMO_FLG

JBC STATUS,Z_FLAG ;标志置1

BS FLAG,TMO_FLG

MOV A,S_BUF

MOV STATUS,A ;恢复状态寄存器

MOV A,A_BUF ;恢复A,Z标志可能

BC STATUS,Z_FLAG ;会改变,故需

JBC S_BUF,Z_FLAG ;要恢复Z标志

BS STATUS,Z_FLAG

RETI

23. INT 软件中断指令

语法INT

编码1 1110 0000 0001

操作PC+1?[栈顶],001H?PC

对标志位影响无

说明执行软件中断时,返回地址(PC+1)入栈,PC为0X001

举例ORG 0X001

JMP SET_INT

?

SET_INT:

?

RETI

MAIN:

?

HERE:

INT

CONT:

CLRA

INT指令执行前,PC为HERE地址,执行后PC=001H,[栈顶]为CONT地址

24. JBC 位检测,为0则跳过下一指令

语法JBC R,b

编码0 110b bbrr rrrr

操作若R(b)=0,则跳过下一指令

对标志位影响无

说明无

举例检测R10.0的内容,若为0,则P5.0输出0,否则输出1:

JBC 0X10,0

BS 0X5,0

JBS 0X10,0

BC 0X5,0

25. JBS 位检测,为1则跳过下一指令

语法JBS R,b

编码0 111b bbrr rrrr

操作若R(b)=1,跳过下一指令

对标志位影响无

说明无

举例HERE:

JBS 0X9,3

COUNT:

MOV A,0X10

SKIP:

ADD A,@10

JBS指令执行前,PC为HERE地址,执行后,若R9(3)=0,PC为COUNT地址,若R9(3)10,PC为SKIP 地址.

26. JMP 无条件跳转

语法JMP K

编码1 01kk kkkk kkkk

操作K?PC(9::0),R3(7::5)?PC(12::10)

对标志位影响无

说明执行无条件跳转时,由K指定的10位地址装入PC(9::0), 页面选择位PS2,PS1,PS0装入PC(12::10)

举例HERE:

JMP BRANCH

指令执行前,PC为HERE地址,执行后为BRANCH地址

27. JZ

语法JZ R

编码0 0111 11rr rrrr

操作R+1?R,结果为0则跳过下一指令

对标志位影响无

说明无

举例HERE:

JZ 0X9

COUNT:

MOV A,0X10

SKIP:

ADD A,@10

JZ指令执行前,PC为HERE地址,执行后,R9=R9—1,若R9=0,PC为SKIP地址,若R910,PC为COUNT 地址.

28. JZA

语法JZA R

编码0 0111 10rr rrrr

操作R+1?A,结果为0则跳过下一指令

对标志位影响无

说明无

举例实现P6口输出递增的二进制数:

MOV A,@0

LOOP:

MOV 0X6,A

MOV 0X10,A

JZA 0X10

JMP LOOP

29. MOV 数据转移

语法MOV R,A

编码0 0000 01rr rrrr

操作A?R

对标志位影响无

说明无

举例MOV 0X10,A

语法MOV A,R

编码0 0100 00rr rrrr

操作R?A

对标志位影响Z

说明R寄存器内容移至A中,结果为0则Z标志置1

举例MOV A,0X10

语法MOV R,R

编码0 0100 01rr rrrr

操作R?R

对标志位影响Z

说明源寄存器与目的寄存器应为同一寄存器,主要用于获得Z标志举例MOV 0X10,0X10

语法MOV A,K

编码1 1000 kkkk kkkk

操作K?A

对标志位影响无

说明将立即数(8位)送入A

举例MOV A,@0X11

30. NOP 空指令

语法NOP

编码0 0000 0000 0000

操作空操作

对标志位影响无

说明空操作,用于延时

举例P50输出3μs的脉冲(系统时钟2MHz)

BS 0X5,0X0 ;P50输出为高

NOP ;延迟两个指令周期NOP

BC 0X5,0X0 ; P50输出为低

31. OR 或

语法OR A,R

编码0 0010 00rr rrrr

操作A∨R?A

对标志位影响Z

说明无

举例无

语法OR R,A

编码0 0010 01rr rrrr

操作A∨R?R

对标志位影响Z

说明无

举例无

语法OR A,K

编码1 1001 kkkk kkkk

操作A∨K?A

对标志位影响Z

说明无

举例无

32. RET 子程序返回

语法RET

编码0 0000 0001 0010

操作[栈顶]?PC

对标志位影响无

说明从子程序返回,栈顶值弹入PC

举例TEST:

……

RET

……

CALL TEST

HERE:ADD A,@0X2

……

;RET执行前,栈顶为HERE地址

;执行后,HERE地址装入PC

33. RETI 中断返回

语法RETI

编码0 0000 0001 0011

操作[栈顶]?PC,1?INT

对标志位影响无

说明由中断程序返回,栈顶弹入PC,使能全局中断

举例INTRTN: ;中断子程

……

RETI

MAIN:

…… ;中断发生

HERE: ……

;指令执行前,栈顶为HERE地址

;执行后,HERE地址移入PC,INT置1

34. RETL 查表指令

语法RETL K

编码1 1100 kkkk kkkk

操作K?A,[栈顶]?PC

对标志位影响无

说明由子程返回,立即数K载入A,栈顶弹入PC.该指令多用于查表. 举例

构造7段LED译码表,7段LED连在P6口

;寄存器定义

PC == 2

TRANS:

ADD PC,A

RETL @0B11111100

RETL @0B01100000

RETL @0B11011010

RETL @0B11110010

RETL @0B01100110

RETL @0B10110110

RETL @0B10111110

RETL @0B11100000

RETL @0B11111110

RETL @0B11110110

MAIN:

……

MOV A,0X10

CALL TRANS

MOV 0X6,A ;输出至7段LED

……

35. RLC R寄存器带C 标志循环左移

语法RLC R

编码0 0110 11rr rrrr

操作R(n)?R(n+1),R(7)?C,C?R(0)

对标志位影响C

说明无

举例无

36. RLCA R寄存器带C标志循环左移,存于A 语法RLCA R

编码0 0110 10rr rrrr

操作R(n)?A(n+1),R(7)?C,C?A(0)

对标志位影响C

说明R寄存器内容及C标志循环左移,结果存于累加器

举例实现16位数(R10,R11)的左移:

RLCA 0X11;将0X11最高位移入C标志

RLC 0X10

RLC 0X11

37. RRC R寄存器带C标志循环右移

语法RRC R

编码0 0110 01rr rrrr

操作R(n)?R(n—1),R(0)?C,C?R(7)

对标志位影响C

说明R寄存器带C标志右移

举例MOV A,@0X0F

BC 0X3,0

MOV 0X10,A

RRC 0X10

38. RRCA R带C 标志循环右移,存于A

语法RRCA R

编码0 0110 00rr rrrr

操作R(n)?A(n—1),R(0)?C,C?A(7)

对标志位影响C

说明R寄存器内容及C标志循环右移,结果存于累加器

举例用该指令实现不带C标志的右移,结果输出至P5口: BIT_BUF == 10

COUNTER == 11

MOV A,@8

MOV COUNTER,A

LOOP:

RRCA BIT_BUF ;将最低位移入C标志

RRCA BIT_BUF

MOV 0X5,A

MOV BIT_BUF,A

DJZ COUNTER

JMP LOOP

39. SLEP 休眠

语法SLEP

编码0 0000 0000 0011

操作00H?WDT,0?预分频器(若分配给WDT),0?P,1?T 对标志位影响P,T

说明休眠模式下,晶振停振

举例SLEP ;单片机进入休眠模式

40. SUB 减

语法SUB A,R

编码0 0001 00rr rrrr

操作R—A?A

对标志位影响Z,C,DC

说明无

举例SUB A,0X10

语法SUB R,A

编码0 0001 01rr rrrr

操作R—A?R

对标志位影响Z,C,DC

说明无

举例SUB 0X10,A

语法SUB A,K

编码1 1101 kkkk kkkk

操作K—A?A

对标志位影响Z,C,DC

说明无

举例计算式A=0X99-0X55的完成:

MOV A,@0X99

MOV 0X10,A

MOV A,@0X55

SUB A,0X10

计算式A=0X02-A的完成:

MOV A,@0X01 ;A=0X01

SUB A,@0X02 ;A=0X02-0X01=0X01

;C标志为1,结果为

;正值

41. SW AP R寄存器高低4位交换

语法SWAP R

编码0 0111 01rr rrrr

操作R(3::0)?R(7::4)

对标志位影响无

说明无

举例MOV A,@0X43

MOV 0X10,A ; R10=0X43

SWAP 0X10 ;R10=0X34

42. SW APA R寄存器高低4位交换,结果存入A

语法SWAPA R

编码0 0111 00rr rrrr

操作R(3::0)?A(7::4)

R(7::4)?A(3::0)

对标志位影响无

43. WDTC 清WDT

语法WDTC

编码0 0000 0000 0100

操作00H?WDT,0?预分频器(若分配给WDT),1?P,1?T

对标志位影响P,T

说明无

举例WDTC ;WDTC清0

44. XOR 异或

语法XOR A,R

编码0 0011 00rr rrrr

操作A?R?A

对标志位影响Z

说明无

举例测试0X10寄存器的内容是否为0X55,若不是则跳转到ERROR子程序: STA TUS == 3

Z_FLAG == 2

MOV A,@0X55

XOR A,0X10

JBS STATUS,Z_FLAG

JMP ERROR

语法XOR R,A

编码0 0011 01rr rrrr

操作A?R?R

对标志位影响Z

说明无

举例实现R10=R11?R12:

MOV A,0X11

MOV 0X10,A

MOV A,0X12

XOR 0X10,A

语法XOR A,K

编码1 1011 kkkk kkkk

操作A?K?A

对标志位影响Z

说明无

举例实现A=A?0XF0:

MOV A,@0X00

XOR A,@0XF0

4. 指令速查表

二进制指令十六进制符号操作影响标志

0 0000 0000 0000 0000 NOP 无操作无

0 0000 0000 0001 0001 DAA 十进制调整A C

0 0000 0000 0010 0002 CONTW A CONT 无

0 0000 0000 0011 0003 SLEP 0 WDT,停振荡器T,P

0 0000 0000 0100 0004 WDTC 0 WDT T,P

0 0000 0000 Rrrr 000r IOW R A IOCR 无<注1>

0 0000 0001 0000 0010 ENI 允许中断无

0 0000 0001 0001 0011 DISI 禁止中断无

0 0000 0001 0010 0012 RET [堆栈顶] PC中断返回无0 0000 0001 0011 0013 RETI [堆栈顶] PC, 中断返回无0 0000 0001 0100 0014 CONTR CONT A无

0 0000 0001 Rrrr 001r IOR R IOCR A 无<注1>

0 0000 01rr Rrrr 00rr MOV R,A A R 无

0 0000 1000 0000 0080 CLRA 0 A Z

0 0000 11rr Rrrr 00rr CLR R 0 R Z

0 0001 00rr Rrrr 01rr SUB A, R R-A A Z,C,DC

0 0001 01rr Rrrr 01rr SUB R,A R-A R Z,C,DC

0 0001 10rr Rrrr 01rr DECA R R-1 A Z

0 0001 11rr Rrrr 01rr DEC R R-1 R Z

0 0010 00rr Rrrr 02rr OR A,R A VR A Z

0 0010 01rr Rrrr 02rr OR R,A A VR R Z

0 0010 10rr rrrr 02rr AND A,R A & R A Z

0 0010 11rr rrrr 02rr AND R,A A & R R Z

0 0011 00rr rrrr 03rr XOR A,R A R A Z

0 0011 01rr rrrr 03rr XOR R,A A R R Z

0 0011 10rr rrrr 03rr ADD A,R A + R A Z,C,DC

0 0011 11rr rrrr 03rr ADD R,A A + R R Z,C,DC

0 0100 00rr rrrr 04rr MOV A,R R A Z

0 0100 01rr rrrr 04rr MOV R,R R R Z

0 0100 10rr rrrr 04rr COMA R /R A Z

0 0100 11rr rrrr 04rr COM R /R R Z

0 0101 00rr rrrr 05rr INCA R R+1 A Z

0 0101 01rr rrrr 05rr INC R R+1 R Z

0 0101 10rr rrrr 05rr DJZA R R-1 A, 如果为“0”跳过无

0 0101 11rr rrrr 05rr DJZ R R-1 R, 如果为“0”跳过无

0 0110 00rr rrrr 06rr RRCA R R(n) A(n-1)

R(0) C, C A(7) C

0 0110 01rr rrrr 06rr RRC R R(n) R(n-1)

R(0) C, C R(7) C

0 0110 10rr rrrr 06rr RLCA R R(n) A(n+1)

R(7) C, C A(0) C

0 0110 11rr rrrr 06rr RLC R R(n) R(n+1)

R(7) C, C R(0) C

0 0111 00rr rrrr 07rr SWAPA R R(0-3) A(4-7)

R(4-7) A(0-3) 无

0 0111 01rr rrrr 07rr SWAP R R(0-3) R(4-7) 无

0 0111 10rr rrrr 07rr JZA R R+1 A, 如果为“0”跳过无

0 0111 11rr rrrr 07rr JZ R R+1 R, 如果为“0”跳过无

二进制指令十六进制符号操作影响标志

0 100B BBRR RRRR 0XXX BC R,B 0 R(B) 无<注2>

0 101b bbrr rrrr 0xxx BS R,b 1 R(b) 无<注3>

0 110b bbrr rrrr 0xxx JBC R,b 如果R(b)=0, 跳过无

0 111b bbrr rrrr 0xxx JBS R,b 如果R(b)=1, 跳过无

1 00kk kkkk kkkk 1kkk CALL k PC+1 [SP], (页, k) PC 无

1 01kk kkkk kkkk 1kkk JMP k (页, k) PC 无

1 1000 kkkk kkkk 18kk MOV A,k k A 无

1 1001 kkkk kkkk 19kk OR A,k A k A Z

1 1010 kkkk kkkk 1Akk AND A,k A & k A Z

1 1011 kkkk kkkk 1Bkk XOR A,k A k A Z

1 1100 kkkk kkkk 1Ckk RETL k k A, [堆栈顶] PC 无

1 1101 kkkk kkkk 1Dkk SUB A,k k-A A Z,C,DC 1 1110 0000 0001 1E01 INT PC+1 [SP], 001H PC 无

1 1111 kkkk kkkk 1Fkk ADD A,k k+A A Z,C,DC

0 0000 0010 0000 0020 TBL R2+ R2

R2 的8~9位不改变Z,C,DC

<注4>

<注1> 该指令仅能操作于IOC6, IOCB~IOCF .

<注2> 该指令不建议用于RF操作.

<注3> 该指令不能用于RF操作.

<注4> 该指令只有EM78P447、451、458/459这几个芯片才有.

符号“R” 代表寄存器(包括操作寄存器和通用寄存器),符号“b”表示位号,符号“k” 代表8位或10位

(完整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段寄存器中。

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

(完整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

DSP汇编指令总结

DSP汇编指令总结 一、寻址方式: 1、立即寻址: 短立即寻址(单指令字) 长立即数寻址(双指令字) 第一指令字 第二指令字 16位常数=16384=4000h 2、直接寻址 ARU 辅助寄存器更新代码,决定当前辅助寄存器是否和如何进行增或减。N规定是否改变ARP值,(N=0,不变)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); 4.3.1.2、减法指令(5条); 4.3.1.3、乘法指令(2条); 4.3.1.4、乘加与乘减指令(6条); 4.3.1.5、其它算数指令(3条); 4.3.1.6、移位和循环移位指令(4条); 4.3.1.7、逻辑运算指令(4条); 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条) 4.3.2.2、临时寄存器指令(5条) 4.3.2.3、乘积寄存器指令(6条) 4.3.2.4、辅助寄存器指令(5条) 4.3.2.5、状态寄存器指令(9条) 4.3.2.6、堆栈操作指令(4条) 4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条) 4.3.3.2、程序存储器读写指令(2条) 4.3.3.3、I/O操作指令(2条) 4.3.4、程序控制指令(15条) 4.3.4.1、程序分支或调用指令(7条) 4.3.4.2、中断指令(3条) 4.3.4.3、返回指令(2条) 4.3.4.4、其它控制指令(3条)

4.3.1、算术逻辑指令(28条) 4.3.1.1、加法指令(4条); ▲ADD ▲ADDC(带进位加法指令) ▲ADDS(抑制符号扩展加法指令) ▲ADDT(移位次数由TREG指定的加法指令) 4.3.1.2、减法指令(5条); ★SUB(带移位的减法指令) ★SUBB(带借位的减法指令) ★SUBC(条件减法指令) ★SUBS(减法指令) ★SUBT(带移位的减法指令,TREG决定移位次数)4.3.1.3、乘法指令(2条); ★MPY(带符号乘法指令) ★MPYU(无符号乘法指令) 4.3.1.4、乘加与乘减指令(6条); ★MAC(累加前次积并乘)(字数2,周期3) ★MAC(累加前次积并乘) ★MPYA(累加-乘指令) ★MPYS(减-乘指令) ★SQRA(累加平方值指令) ★SQRS(累减并平方指令) 4.3.1.5、其它算数指令(3条); ★ABS(累加器取绝对值指令) ★NEG(累加器取补码指令) ★NORM(累加器规格化指令) 返回 4.3.1.6、移位和循环移位指令(4条); ▲ SFL(累加器内容左移指令) ▲ SFR(累加器内容右移指令) ▲ROL(累加器内容循环左移指令) ▲ROR(累加器内容循环右移指令) 返回 4.3.1.7、逻辑运算指令(4条); ▲ AND(逻辑与指令) ▲ OR(逻辑或指令) ▲ XOR(逻辑异或指令) ▲ CMPL(累加器取反指令) 返回 4.3.2、寄存器操作指令(35条) 4.3.2.1、累加器操作指令(6条)

单片机汇编指令大全

单片机汇编指令一览表 作者:乡下人 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD 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

AVRmega8汇编指令汇总.

指令集概述 指令操作数说明操作标志 # 时钟数 算数和逻辑指令 ADD Rd, Rr 无进位加法Rd ← Rd + Rr Z,C,N,V,H 1 ADC Rd, Rr 带进位加法Rd ← Rd + Rr + C Z,C,N,V,H 1 ADIW Rdl,K 立即数与字相加Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2 SUB Rd, Rr 无进位减法Rd ← Rd - Rr Z,C,N,V,H 1 SUBI Rd, K 减立即数Rd ← Rd - K Z,C,N,V,H 1 SBC Rd, Rr 带进位减法Rd ← Rd - Rr - C Z,C,N,V,H 1 SBCI Rd, K 带进位减立即数Rd ← Rd - K - C Z,C,N,V,H 1 SBIW Rdl,K 从字中减立即数Rdh:Rdl ← Rdh:Rdl - K Z,C,N,V,S 2 AND Rd, Rr 逻辑与Rd ← Rd ? Rr Z,N,V 1 ANDI Rd, K 与立即数的逻辑与操作Rd ← Rd ? K Z,N,V 1 OR Rd, Rr 逻辑或Rd ← Rd v Rr Z,N,V 1 ORI Rd, K 与立即数的逻辑或操作Rd ← Rd v K Z,N,V 1 EOR Rd, Rr 异或Rd ← Rd ⊕ Rr Z,N,V 1 COM Rd 1 的补码Rd ← 0xFF ? Rd Z,C,N,V 1 NEG Rd 2 的补码Rd ← 0x00 ? Rd Z,C,N,V,H 1 SBR Rd,K 设置寄存器的位Rd ← Rd v K Z,N,V 1

CBR Rd,K 寄存器位清零Rd ← Rd ? (0xFF - K Z,N,V 1 INC Rd 加一操作Rd ← Rd + 1 Z,N,V 1 DEC Rd 减一操作Rd ← Rd ? 1 Z,N,V 1 TST Rd 测试是否为零或负Rd ← Rd ? Rd Z,N,V 1 CLR Rd 寄存器清零Rd ← Rd ⊕ Rd Z,N,V 1 SER Rd 寄存器置位Rd ← 0xFF None 1 MUL Rd, Rr 无符号数乘法R1:R0 ← Rd x Rr Z,C 2 MULS Rd, Rr 有符号数乘法R1:R0 ← Rd x Rr Z,C 2 MULSU Rd, Rr 有符号数与无符号数乘法 R1:R0 ← Rd x Rr Z,C 2 FMUL Rd, Rr 无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2 FMULS Rd, Rr 有符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2 FMULSU Rd, Rr 有符号小数与无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2跳转指令 RJMP k 相对跳转PC ← PC + k + 1 无 2 IJMP 间接跳转到(Z PC ← Z 无 2 RCALL k 相对子程序调用PC ← PC + k + 1 无 3 ICALL 间接调用(Z PC ← Z 无 3 RET 子程序返回PC ← STACK 无 4 RETI 中断返回PC ← STACK I 4

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 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

8086汇编指令大全.

标志寄存器:9个有效位,分 6个状态寄存器和 3个控制寄存器 CF 当执行一个加法(减法使最高位产生进位(借位时 CF=1 否则 CF=0 PF 指令执行的结果低 8位有偶数个一时, CF=1 否则 CF=0 AF 当执行一个加法(减法使运算结果低 4位向高 4位有进位(借位时 AF=1 否则 AF+0 ZF 当前运算结果为零, ZF=1 否则 ZF=0 SF 符号标志位 OF 溢出标志位 DF 方向标志位 IF 中断允许位 IF=1时响应外部中断

TF 跟踪标志位 操作数:[目的操作数(OPD ,源操作数(OPS ] ;立即操作数,寄存器操作数,存储器操作数。寻址方式: 1 寄存器寻址例:INC AX ; MOV AX , BX 2 寄存器间接寻址 (寄存器只能是 BX , DI , SI , BP ; [PA=(BX 、 DI 、 SI +DS》 4 或 BP+SS》4] 3 寄存器相对寻址 4 基址变址寻址 5 相对基址变址寻址 6 直接寻址 7 立即数寻址 i. 立即数寻址立即数寻址不能用在单操作数指令中 ii. 在双操作数中,立即数寻址方式不能用于目的操作数字段 指令系统: 1 数据传送指令 mov 注意: 不允许在两个存储单元之间直接传送数据

不允许在两个段寄存器之间传送数据 不允许用立即数直接为段寄存器赋值 不影响标志位 不允许寄存器或存储单元到除 CS 外的段寄存器 2 入栈(出栈指令 PUSH (POP 注意: PUSH 操作数不能是“立即数” POP 操作数不能是段寄存器 CS 不影响标志位 先进后出 单操作符 3 交换指令 XCHG 注意:

汇编指令大全

ORG 0000H NOP ;空操作指令 AJMP L0003 ;绝对转移指令 L0003: LJMP L0006 ;长调用指令 L0006: RR A ;累加器A内容右移(先置A为88H) INC A ; 累加器A 内容加1 INC 01H ;直接地址(字节01H)内容加1 INC @R0 ; R0的内容(为地址) 的内容即间接RAM加1 ;(设R0=02H,02H=03H,单步执行后02H=04H) INC @R1 ; R1的内容(为地址) 的内容即间接RAM加1 ;(设R1=02H,02H=03H,单步执行后02H=04H) INC R0 ; R0的内容加1 (设R0为00H,单步执行后查R0内容为多少) INC R1 ; R1的内容加1(设R1为01H,单步执行后查R1内容为多少) INC R2 ; R2的内容加1 (设R2为02H,单步执行后查R2内容为多少) INC R3 ; R3的内容加1(设R3为03H,单步执行后查R3内容为多少) INC R4 ; R4的内容加1(设R4为04H,单步执行后查R4内容为多少) INC R5 ; R5的内容加1(设R5为05H,单步执行后查R5内容为多少) INC R6 ; R6的内容加1(设R6为06H,单步执行后查R6内容为多少) INC R7 ; R7的内容加1(设R7为07H,单步执行后查R7内容为多少) JBC 20H,L0017; 如果位(如20H,即24H的0位)为1,则转移并清0该位L0017: ACALL S0019 ;绝对调用 S0019: LCALL S001C ;长调用 S001C: RRC A ;累加器A的内容带进位位右移(设A=11H,C=0 ;单步执行后查A和C内容为多少) DEC A ;A的内容减1 DEC 01H ;直接地址(01H)内容减1 DEC @R0 ;R0间址减1,即R0的内容为地址,该地址的内容减1 DEC @R1 ; R1间址减1 DEC R0 ; R0内容减1 DEC R1 ; R1内容减1 DEC R2 ; R2内容减1 DEC R3 ; R3内容减1 DEC R4 ; R4内容减1 DEC R5 ; R5内容减1 DEC R6 ; R6内容减1 DEC R7 ; R7内容减1 JB 20H,L002D;如果位(20H,即24H的0位)为1则转移 L002D: AJMP L0017 ;绝对转移 RET ;子程序返回指令 RL A ;A左移 ADD A,#01H ;A的内容与立即数(01H)相加 ADD A,01H ; A的内容与直接地址(01H内容)相加 ADD A,@R0 ; A的内容与寄存器R0的间址内容相加 ADD A,@R1 ; A的内容与寄存器R1的间址内容相加

一些常用的汇编语言指令

汇编语言常用指令 大家在做免杀或者破解软件的时候经常要用到汇编指令,本人整理出了常用的 希望对大家有帮助! 数据传送指令 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:

汇编符号大全

80X86 汇编指令符号大全 +、-、*、/∶算术运算符。 &∶宏处理操作符。宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个& 记号,宏汇编程序就能够用实在参数代替这个形式参数了。 $∶地址计数器的值——记录正在被汇编程序翻译的语句地址。每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。 ?∶操作数。在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。 =∶等号伪指令——符号定义。对符号进行定义和赋值,功能与EQU相似,但允许(重复)再定义。 :∶修改属性运算符(操作符)——段操作符。用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。注意,段寄存器CS和ES不能被跨越,堆栈操作时也不能跨越SS。 ;∶注释符号。 %∶特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII码嵌入到宏扩展中。 ( )∶1.运算符——用来改变运算符的优先级别。2.教材符号,表示括号内存储单元(或寄存器)的内容。 < >∶宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。[ ]∶1.运算符。方括号括起来的数是数组变量的下标或地址表达式。带方括号的地址表达式必须遵循下列原则,①只有BX、BP、SI、DI这四个寄存器可在方括号内出现;②BX或BP可单独出现在各方括号中,也可以与常数、SI或DI一起出现在方括号内,但不允许BX 和BP出现在同一个方括号内;③SI和DI可以单独出现在各方括号内,也可以与常数、BP 或BX一起出现在方括号内,但不允许SI和DI出现在同一个方括号内;④一个方括号内包含多个寄存器时,它们只能作加法运算;⑤若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS提供段基址,否则均隐含使用数据段寄存器DS提供段基址。2.教材符号,表示其中的内容可省略。 .LIST∶伪指令。用于打开列表文件输出。 .RADIX∶伪指令。把缺省的基数改为2-16范围内的任意基数。.RADIX不影响DD、DQ、DT伪指令,在这些伪指令中,输入的数值只要没有加上数据类型就认为是十进制数。 .XLIST∶伪指令。用于关闭列表文件输出。 %OUT∶伪指令。在汇编时显示其后的信息。 AAA∶指令助记符——加法运算后的ASCII调整(非压缩的BCD码)。无操作数,调整的加法结果在AL中。AF和CF的状态改变说明结果大于9。检查AL的低四位是否为合法的BCD码(0-9),如果合法就清除AL的高四位以及AF和CF标志。当AL的低四位表示的数大于9或AF=1时,将AL加6,AH加1 ,并使AF和CF置位,清除AL中的高四位。任何一个A—F之间的数加上6 以后,都会使AL低4位产生0-9之间的数,从而达到调整的目的。 AAD∶指令助记符——除法的ASCII调整(非压缩的BCD码)。在执行除法操作前,必须利用AAD指令将非压缩型BCD码表示的数转换成二进制数送AL。步骤是,先将被除数的高位数(AH中的内容)乘以10,然后加到AL的低位数中,接着将AH清零。 AAM∶指令助记符——乘法的ASCII调整(非压缩的BCD码)。用于将字节乘法的积转换成两个合法的十进制非压缩码。AAM不带操作数,假定成绩在AH和AL中,并将调整后的非压缩码送回AH和AL。为了保证AAM得到正确的结果,原乘数和被乘数必须是合法

汇编语言的各条指令

常用命令 数据传送指令 一通用数据传送指令 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)(字节)

8088汇编语言指令

8088指令系统总结 预备知识:符号含意、数据传送原则 符号含意 符号含意 opr 操作数 src 源操作数 dst 目的操作数 mem 存储器 im 立即数 seg 段寄存器 reg 通用寄存器 EA 偏移地址 PA 物理地址 nn直接地址DISP8:8位偏移地址DISP16:16位偏移地址 数据传送原则 口诀数据传送原则 寄段储间互传数,seg、reg、mem之间的数据可以相互传送。 立即只入寄和储。im可入reg、mem 只有寄间互换数,reg之间的数据可以传送。Mem间、seg间不可自传CS立即不可目,CS和立即数不可入,不能当目的操作数 8088指令系统 8088指令系统分六大类 一、数据传送指令 二、算术运算指令 三、逻辑运算与位移指令 四、串操作指令 五、控制与转移指令 六、CPU控制指令 一、数据传送指令 1.通用传送指令 (1)传送指令MOV dst, src功能:dst←src (2)堆栈操作指令人W PUSH src作用:SP←SP-2 ((SP+1)+SP)←src src(reg seg mem) POP dst 作用:dst←((SP+1)+SP)SP←SP-2 dst(reg seg mem)

(3)交换指令XCHG OPR1,OPR2 OPR1←→OPR2 2.累加器传送指令 (1)输入输出指令 256B短格式:直接寻址,64K长格式:直接、间接寻址,PORT为8位口地址输入指令:直接寻址IN AX,PORT IN AL,PORT 间接寻址IN AX,DX IN AL,DX 输出指令:直接寻址OUT AX,PORT OUT AL,PORT 间接寻址OUT AX,DX OUT AL,DX (2)换码指令XLAT AL←(BX+AL)(BX)为mem地址 3.地址传送指令 (1)有效地址传送寄存器 LEA reg16, mem作用:mem的EA→reg16 (2)指针送寄存器和DS指令 LDS reg16, mem32 作用:reg16←mem32的低字高字→DS (3)指针送寄存器和有ES指令 LES reg16, mem32 作用:reg16←mem32的低字高字→ES 4.标志寄存器传送指令 (1)取标志指令:LAHF F的低字节→AH (2)置标志指令:SAHF AH→flag的低字节 (3)标志入栈指令:PUSHF SP-2→SP F→(SP+1):SP (4)标志出栈指令:POPF (SP+1):SP→F SP+2→SP 二、算术运算指令 1.加法类指令(Add)opr-reg mem B/W (1)不带进位加法ADD dst, src dst←dst+src 影响OSZAPC (2)带进位加法ADC dst, src dst←dst+src+CF影响OSZAPC (3)加1指令INC opr opr←opr+1影响OSZP (4)组合十进制调整DAA放在ADD后 (5)非组合十进制调整AAA放在ADC后 原理:2个十进制数相加,可能出现非法数(A到F),需用调整指令,进行加6调整变成合法十进制数。十进制=BCD组合=压缩组合BCD占4位非组合BCD占8位 2 . 减法类指令(substract) (1)减法指令SUB dst, src;dst←dst-src影响标志位OSZAPC (2)带借位减法指令SBB dst, src;dst←dst-src-CF影响标志位

常见汇编语言指令解释:

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)

汇编语言常用指令大全解释

常用汇编指令: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段寄存器中。 LES (Load ES with pointer) 指针送寄存器和ES指令 LES REG , SRC //常指定DI寄存器 执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已. LAHF( Load AH with Flags ) 标志位送AH指令

51汇编指令大全

51汇编指令大全 Rn: 表示当前寄存器区的8个工作寄存器R0~R7 Ri: 表示当前寄存器区的R0或R1,可作地址指针即间接寻址寄存器(i=0或1) @: 为间接寄存器或基址寄存器的前缀. Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址 0~127. 特殊功能寄存器SFR的地址(128~255)或名称, A: 累加器ACC. B: 特殊功能寄存器B,用于MUL和DIV指令中. C: 进位位Cy. #data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间. #data16: 表示包含在指令中的双字节(16位)立即数. Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间. Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页. Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值. DPTR: 为数据指针,可用作16位的地址寄存器. /: 加在位操作的前面,表示对该位进行非运算. bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位. (x): 寄存器或地址单元中的内容. ((x)): 用x间接寻址的单元中的内容.

<-: 表示将箭头右边的内容传送至箭头的左边. $: 当前指令的地址. 单片机指令系统 (一) 内部数据传送指令 (1) 以累加器A为目的的传送指令: MOV A, #data ;(A)<-data MOV A, direct ;(A)<-(direct) MOV A, Rn ;(A)<-(Rn) MOV A, @Ri ;(A)<- ((Ri)) (2) 以通用寄存器Rn为目的的传送指令: MOV Rn, A ;(Rn)<-(A) MOV Rn, direct ;(Rn)<(direct) MOV Rn, #data: ;(Rn)<-data (3) 以直接地址为目的的传送指令: MOV direct, A ;(direct)<-(A) MOV direct, Rn ;(direct)<-(Rn) MOV direct, direct2 ;(direct)<-(direct2) MOV direct, @Ri ;(direct)<-((Rn)) MOV direct, #data ;(direct)<-data (4) 以寄存器间接地址为目的的传送指令: MOV @Ri, A ;((Ri))<-(A) MOV @Ri, direct ;((Ri))<-(direct)

相关主题
文本预览
相关文档 最新文档