第四章 微处理器结构和指令集

66
第第第 第第第第第第第第第第 4.1 第第第第第第第第第第第第 4.2 S12 第第第第第 4.3 第第第第第第第 4.4 第第第第第第第第第 4.5 第第第第第第第第第 Page 1

Upload: isabella-fulton

Post on 30-Dec-2015

121 views

Category:

Documents


0 download

DESCRIPTION

第四章 微处理器结构和指令集. 4.1 微处理器的内部寄存器结构 4.2 S12 汇编指令集 4.3 指令按功能分类 4.4 指令按寻址方式分类 4.5 用汇编语言编写程序. Page 1. 4.1 微处理器的内部寄存器结构 —— 典型的 16 位微处理器. Numbering and coding systems. 8-Bit 累加器 A and B. 8-Bit 累加器 A and B. 7. 7. 0. 0. 7. 7. B. B. 0. 0. A. A. or 16-Bit 寄存器 D. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章 微处理器结构和指令集

第四章 微处理器结构和指令集

• 4.1 微处理器的内部寄存器结构• 4.2 S12 汇编指令集• 4.3 指令按功能分类• 4.4 指令按寻址方式分类• 4.5 用汇编语言编写程序

Page 1

Page 2: 第四章 微处理器结构和指令集

Page 2

Numbering and coding systems 4.1 微处理器的内部寄存器结构 ——典型的 16 位微处理器

8-Bit 累加器 A and B

间址寄存器 X

间址寄存器 Y

Stack Pointer

Program Counter

Condition Codes Register CCR

or 16-Bit 寄存器 D

S X H I N Z V C

7 0

77

15

0 0

0

0

0

0

0

15

15

15

15 PC

SP

Y

X

D

BA

7 0EPAGE *

7 0RPAGE *

7 0PPAGE *

6 0GPAGE *

0 0 0 0 0 I P L

8-Bit 累加器 A and B

间址寄存器 X

间址寄存器 Y

Stack Pointer

Program Counter

Condition Codes Register CCR

or 16-Bit 寄存器 D

S X H I N Z V C

7 0

77

15

0 0

0

0

0

0

0

15

15

15

15 PC

SP

Y

X

D

BA

7 0EPAGE *

7 0RPAGE *

7 0PPAGE *

6 0GPAGE *

0 0 0 0 0 I P L

Page 3: 第四章 微处理器结构和指令集

Page 3

Numbering and coding systems

进位 / 借位标志 C溢出标志 V为零标志 Z为负标志 N

条件码计数器 CCRS X H I N Z V C

7 0

中断屏蔽位 IHalf Carry (For BCD)非屏蔽中断允许 XSTOP 运行模式禁止位

0 0 0 0 0 I P L

Interrupt priority level IPL ( 0~7 ) 0 :关中断

CCR 4.1 微处理器的内部寄存器结构 ——典型的 16 位微处理器

Page 4: 第四章 微处理器结构和指令集

1KB EEPROM

1KB EEPROM

Page 4MC9S12XS128

8KB RAM

16KB FLASH

16KB FLASH复位、中断

向量区

2KB I/O 空间$0000

$0800

$0C00

$4000

$FFFF

$FF00

4.1 微处理器的内部寄存器结构 ——基本内存空间分配

程序代码

变量、堆栈

外设寄存器

2KB EEPROM

12KB RAM

48KB FLASH

复位、中断向量区

2KB I/O 空间$0000

$0800

$1000

$4000

$FFFF

典型的 64KB 存储空间分配

4KB RAM$2000

$1000

16KB FLASH$8000

$C000

Page 5: 第四章 微处理器结构和指令集

Page 5

Numbering and coding systems 4.2 S12X 汇编指令集

汇编语言是机器码语言,与 CPU的硬件结构紧密相关,不同的 CPU其汇编语言是不同的,程序不能移植,使用不便。

高级语言:与计算机的硬件结构没多大关系。程序通用性好,便于移植。如: C 语言、 BASIC语言。

虽然应用程序可以主要用 C 语言来开发,但与时序相关的硬件操作必须用汇编语言编写,因为汇编语言程序可以准确地计算出某段程序的执行时间。

汇编语言使用助记符、符号和数字等来表示的程序语言。容易理解和记忆,它与机器语言一一对应。

Page 6: 第四章 微处理器结构和指令集

Page 6

Numbering and coding systems 汇编语言指令格式

[ 标号 :] 操作码 [ 第一操作数 ][,第二操作数 ] [,第三操

作数 ][,第四操作数 ][;注释 ]

操作码:指令代码,以符号形式给出该指令执行什么操 作。 由 2 ~ 5 个英文字母表示。 操作数:参与操作的数据或数据存放的地址。 [ ]表示可选。 要养成直接读操作助记符、直接记英语含义的习惯。

如 CLR 读作 clear LDAA 读作 load accumulator A

Page 7: 第四章 微处理器结构和指令集

Page 7

Numbering and coding systems 4.3 指令按寻址方式分类

17 17

4000

1.1. 隐含寻址隐含寻址 (inherent)(inherent) 隐含寻址指令中只有操作码,没有操作数。隐含寻址指令中只有操作码,没有操作数。 如 如 PSHA PSHA ;; (SP)-1→SP(SP)-1→SP ,, (A)(A)→(SP)→(SP)

执行前 执行后

3FFF

FF 17

A

SP

4000 3FFF

SP

A

Data memory

Page 8: 第四章 微处理器结构和指令集

Page 8

4.3 指令按寻址方式分类

2.立即数寻址( immediate) 操作码后有一个或两个字节的操作数,该操作

数表示一个 8 或 16位的数值。立即数由 # 后面跟数据表示。如:LDY #$3000 ;$表示后面是十六进制数字 0x

LDAA #10 ; 缺省为十进制 ORAA #%0001011 ; %表示后面是二进制数字

0b

Page 9: 第四章 微处理器结构和指令集

Page 9

4.3 指令按寻址方式分类

3.直接寻址( direct) 操作数为单字节地址,高位默认为 $00,只

能对 $00 ~ $FF 存储单元进行寻址。 $00~ $FF 是 I/O 口寄存器地址。 如:LDAA $40 ;

STAA <$40 ; (A)→ (0040)

在单字节地址前加< 就表示的是直接寻址。

Page 10: 第四章 微处理器结构和指令集

Page 10

4.3 指令按寻址方式分类

4.扩展寻址( Extended) 扩展寻址中操作数占 2 个字节,表示的是

存储单元的地址,故寻址范围是 64KB。如:STAA $2040 ; (A)→ (2040)

STAA $40 ; (A)→ (0040)

STAA $0040 ; (A)→ (0040)

因开发环境不同,汇编生成的机器代码会不同, codewarrior中上述两条指令相当于直接寻址。

Page 11: 第四章 微处理器结构和指令集

Page 11

4.3 指令按寻址方式分类

5.5. 变址寻址(变址寻址( IndexedIndexed ),寄存器间接寻),寄存器间接寻址址 操作数表示一个地址偏移量。有效地址由操作数表示一个地址偏移量。有效地址由变址寄存器变址寄存器 XX (或(或 YY ,, SP,PCSP,PC )的值加上)的值加上这个偏移量得到的。偏移量细分为无偏移量这个偏移量得到的。偏移量细分为无偏移量、、 55 位(位( ±16±16 )、)、 99 位(位( ±255±255 )或)或 1616 位位偏移量。如:偏移量。如:

STAA ,X STAA ,X ;无偏移量 ;无偏移量 STAA 10 ,X STAA 10 ,X ;; <=5<=5 位 位 STAA -200 ,X STAA -200 ,X ;; <=9<=9 位位

LDAA 2000 ,X LDAA 2000 ,X ;; 1616 位位LDAA [2000 ,X] LDAA [2000 ,X] ;;

X+2000X+2000 ,, X+2001X+2001

Page 12: 第四章 微处理器结构和指令集

Page 12

4.3 指令按寻址方式分类

6.6. 带自动加、减带自动加、减 55 位偏移量的间接变址位偏移量的间接变址寻址,如:寻址,如:

MOVW 2,X+,4,+YMOVW 2,X+,4,+Y

如如 X=$2000, Y=$3000, X=$2000, Y=$3000, 指令指令含义是将含义是将 $2000$2000 和和 $2001$2001 两单元的内两单元的内容传给容传给 $3004$3004 和和 $3005$3005 两单元。两单元。 与与 CC 语言相同,语言相同, X+X+ 为先用后加为先用后加 ,+Y,+Y为先加后用。为先加后用。

Page 13: 第四章 微处理器结构和指令集

Page 13

4.3 指令按寻址方式分类

7.7. 相对寻址相对寻址如:如:

BNE LABLE BNE LABLE ;; CCRCCR 寄存器中寄存器中 ZZ 不为 不为 零零,就转到,就转到 LABLELABLE 处处。。

JMP [D,PC] JMP [D,PC] ;转到;转到 PC+DPC+D 所指向的所指向的存存 储储器中的值所指处。器中的值所指处。 偏移量偏移量是转移的目的值与当前地址值之差是转移的目的值与当前地址值之差,这是编译器自动计算出来的。根据偏移量的,这是编译器自动计算出来的。根据偏移量的大小分为相对短转移(大小分为相对短转移( -128~127-128~127 )和相对长转)和相对长转移(移( -32768~32767-32768~32767 )。)。

Page 14: 第四章 微处理器结构和指令集

Page 14

4.4 指令按功能分类

数据空间分为寄存器和存储器。寄存器: ,B,CCR,D,X,Y,SP,存储器:对 MC9S12XS128为 $2000~ $3FFF空间。

位数相等条件下完成数据传送

4.3.1 数据传送指令

Register Memory

Load

Store

Transfer Move

Exchange

Page 15: 第四章 微处理器结构和指令集

Load指令,读到寄存器中来。如 LDAA #$41 ;#立即数, $16进制

LDAA 读作 Load Accumulator A LDAB Load B (M) →B LDD Load D (M:M+1)→(A:B) LDS Load SP (M:M+1)→(SPH:SPL) LDX Load index register X 间址寄存器 LDY Load index register Y LEAS Load Effective Address into SP( P320) LEAX Load Effective Address into X LEAY Load Effective Address into Y 有效地址

Page 15

Page 16: 第四章 微处理器结构和指令集

Store指令,写到寄存器中去。如 STAA $2000 ;(A) → ( $2000) STAA Store A ( A )→ M

STAB Store B STD Store D STS Store SP STX Store X STY Store Y

Page 16

Page 17: 第四章 微处理器结构和指令集

Move指令,不经过寄存器的、直接存储器数据传送指令。如 MOVB $2000, $2008 ; ($2000) → ( $2008 ) MOVB Move Byte MOVW Move Word

Move指令

Page 17

Page 18: 第四章 微处理器结构和指令集

Transfer指令寄存器到寄存器的数据传送指令。 TAB Transfer A to B ( A )→ B

TBA Transfer B to A TAP Transfer A to CCR TPA Transfer CCR to A TFR Transfer register to register TSX Transfer SP to X TSY Transfer SP to Y TXS Transfer X to SP TYS Transfer Y to SP Page 18

Page 19: 第四章 微处理器结构和指令集

EXG Exchange register to register

XGDX Exchange D with Y XGDY Exchange D with Y

Exchange指令 寄存器间数据交换

Page 19

Page 20: 第四章 微处理器结构和指令集

PSHA Push A (SP)-1→SP,(A)→(SP)

PSHB Push B PSHD Push D

PSHC Push CCRPSHCW Push CCRH:CCR

PSHX Push X PSHY Push Y

堆栈操作指令

Page 20

Page 21: 第四章 微处理器结构和指令集

PULA Pull A (M(SP))→A,(SP)+1→SP

PULB Pull B PULD Pull D

PULC Pull CCRPULCW Pull CCRH:CCR

PULX Pull X PULY Pull Y

堆栈操作指令

Page 21

Page 22: 第四章 微处理器结构和指令集

SEX Sign Extend Byte to Word 把8 位数转成 16 位数的符号扩展指令

D7=0,THEN D8-D15=0X00

D7=1,THEN D8-D15=0XFF

LDAA #$84SEX A,DLDAA #$04SEX A,D

指令执行后,(A ) =——;(B ) =——

4.4.2 算术与逻辑运算指令

Page 23: 第四章 微处理器结构和指令集

ADDA ADD without carry to A (A)+(M)→AADDB ADD without carry to B (B)+(M)→BADDD ADD without carry to D (A:B)+

(M:M+1)→A:BADDX ADD without carry to X (X)+(M:M+1)→XADDY ADD without carry to Y (Y)+(M:M+1)→YABA Add A to B (B)+(A)→AABX Add B to X (B)+(X)→XABY Add B to Y (B)+(Y)→Y

加、减法指令(无进位)

Page 24: 第四章 微处理器结构和指令集

ADCA ADD with carry to A (A)+(M)+C→AADCB ADD with carry to B (B)+(M)+C →BADED ADD with carry to D (A:B)+

(M:M+1)+C →A:BADEX ADD with carry to X (X)+(M:M+1)+C

→XADEY ADD with carry to Y (Y)+(M:M+1)+C

→Y

加、减法指令(有进位)

Page 25: 第四章 微处理器结构和指令集

SUCA Subtract with borrow from A(A)-(M)-C→ASUCB Subtract with borrow from B(B)-(M)-C→BSUED Subtract with borrow from D(A:B)-

(M:M+1)+C →A:BSUEX Subtract with borrow from X(X)-(M:M+1)+C

→XSUEY Subtract with borrow from Y(Y)-(M:M+1)+C

→Y

加、减法指令(有进位)

Page 26: 第四章 微处理器结构和指令集

SUBA Subtract memory from A (A)-(M)→ASUBB Subtract memory from B (B)-(M)→BSUBD Subtract memory from D (A:B)-

(M:M+1)→A:BSUBX Subtract memory from X (X)-(M:M+1)→XSUBY Subtract memory from Y (Y)-(M:M+1)→YSBA Subtract B from A (A)-(B)→A

加、减法指令(无借位减法)

Page 27: 第四章 微处理器结构和指令集

EMUL Multiply(unsigned) 16 by 16 (D)×(Y)→Y:DEMULS Multiply(signed) 16 by 16 (D)×(Y)→Y:DMUL Multiply(unsigned) 8 by 8 (A)×(B)→A:B

乘除法指令

Page 28: 第四章 微处理器结构和指令集

EDIV Divide(unsigned) 32 by 16 (Y:D)÷(X)→Y,Remained→DEDIVS Divide(signed) 32 by 16 (Y:D)÷(X)→Y,Remained→DFDIV Fractional Divide(unsigned) 16 by 16 (D)÷(X)→X,Remained→DIDIV Integer Divide(unsigned) 16 by 16 (D)÷(X)→X,Remained→DIDIVS Integer Divide(signed) 16 by 16 (D)÷(X)→X,Remained→D

乘除法指令

Page 29: 第四章 微处理器结构和指令集

EMACS Multiply and Accumulate(signed) ((M(X): M(X+1))×(M(Y):M(Y+1)))+(M~

M+3) → M~ M+3

查表、插值指令TBL Table Lookup and interpolate

8-bit (M)+[(B)×((M+1)-(M))]→AETBL Table Lookup and interpolate 16-bit (M:M+1)+[(B)×((M+2:M+3)-(M:M+1))]→D

乘加除法指令

Page 30: 第四章 微处理器结构和指令集

DAA Decimal

Adjust (A)10

调整规则:加法结果大于 9 ,或产

生 H 进位,结果+6

减法结果有借位,结果 -6

十进制调整的 BCD指令• (A)=37H, (B)=46H, 即十进数 37 和 46 的

BCD 码 执行 ADDA B 后: 3 7 H | 0011 | 0111

4 6 H + | 0100 | 0110

进位 0| 0000 | 1100

------------------------- | 0111 | 1101

结果 : 低 4 位已非 BCD 码。 DA A 调整 | 0111 | 1101

+ | 0000 | 0110 ------------------------- 83 H | 1000 | 0011

Page 31: 第四章 微处理器结构和指令集

INC Increment memory (M)+$01 →MINCA Increment A (A)+$01 →MINCB Increment B (B)+$01 →MINCW Increment memory (M:M+1)+$0001→M:M+1INS Increment SP (SP)+$0001→SPINX Increment X (X)+$01 →XINY Increment Y (Y)+$01 →Y

加一减一指令

Page 32: 第四章 微处理器结构和指令集

DEC Decrement memory (M)-$01 →MDECA Decrement A (A)-$01 →MDECB Decrement B (B)-$01 →MDECW Decrement memory (M:M+1)-$0001→M:M+1DES Decrement SP (SP)-$0001→SPDEX Decrement X (X)-$01 →XDEY Decrement Y (Y)-$01 →Y

加一减一指令

Page 33: 第四章 微处理器结构和指令集

CLC Clear C bit in CCR 0 →CCLI Clear I bit in CCR 0 →ICLV Clear V bit in CCR 0 →VCLR Clear memory $0 →MCLRA Clear A $0 →MCLRB Clear B $0 →MCLRW Clear memory 2bytes $00

→M:M+1CLRX Clear X 2bytes $00 →XCLRY Clear Y 2bytes $00 →Y

清零指令

Page 34: 第四章 微处理器结构和指令集

COM Complement memory , 1byte $FF-(M)→M or (/M) →M

COMA Complement A , 1byte $FF-(A)→A or (/A) →A

COMB Complement B , 1byte $FF-(B)→B or (/B) →B

COMW Complement memory , 2bytes $FFFF-(M:M+1)→ M:M+1

COMX Complement X , 2bytes $FFFF-(X)→XCOMY Complement Y , 2bytes $FFFF-(Y)→Y

求反指令

Page 35: 第四章 微处理器结构和指令集

NEG Complement memory , 1byte $00-(M)→M or (/M)+1 →M

NEGA Complement A $00-(A)→A or (/A)+1→A

NEGB Complement B $00-(B)→B or (/B)+1→BNEGW Complement memory , 2bytes

$0000-(M:M+1)→ M:M+1NEGX Complement X , 2bytes $0000-(X)→XNEGY Complement Y , 2bytes $0000-(Y)→Y

取负数指令

Page 36: 第四章 微处理器结构和指令集

CBA Compare A to B (A)-(B) 影响 CCR寄存器

CMPA Compare A to memory (A)-(M) CMPB Compare B to memory (A)-(M) CPD Compare D to memory (A:B)-(M:M+1)CPS Compare SP to memory (SP)-

(M:M+1) CPX Compare X to memory (X)-

(M:M+1)CPY Compare Y to memory (Y)-

(M:M+1)

比较指令

Page 37: 第四章 微处理器结构和指令集

CPED Compare D to memory with borrow (A:B)-(M:M+1)-C

CPES Compare SP to memory with borrow (SP)-(M:M+1)-C

CPEX Compare X to memory with borrow (X)-(M:M+1)-C

CPEY Compare Y to memory with borrow (Y)-(M:M+1)-C

比较指令

Page 38: 第四章 微处理器结构和指令集

TST Test memory for zero or minus (M)-$00

TSTA Test A for zero or minus (A)-$00

TSTB Test B for zero or minus (B)-$00

TSTW Test memory for zero or minus (M:M+1)-$00

TSTX Test X for zero or minus (X)-$00

TSTY Test Y for zero or minus (Y)-$00

测试字节是否为零指令

Page 39: 第四章 微处理器结构和指令集

BCLR Clear bits in memory (M) ·(mm) → M

BITA Bit test A (A) ·(M)

BITB Bit test B (B) ·(M)BITX Bit test X (X)

·(M:M+1)BITY Bit test Y (Y)

·(M:M+1)BSET Set bits in memory (M) +(mm) → M

测试位与位操作指令

Page 40: 第四章 微处理器结构和指令集

BTAS Bit test And Set

If (M) ·(Mast)=0,then set Z,else clear Z

位测试与置位指令(用于信号量置位):

Page 41: 第四章 微处理器结构和指令集

ANDA AND A with memory (A)·(M) →A

ANDB AND B with memory (B)·(M) →A

ANDCC AND CCR with memory (CCR)·(M)→CCRANDX AND X with memory (X)·(M:M+1)→XANDY AND Y with memory (Y)·(M:M+1)→YEORA Exlusive OR A with memory (A)⊕(M)→AEORB Exlusive OR B with memory (B)⊕(M)→BEORX Exlusive OR X with memory

(X)⊕(M:M+1)→XEORY Exlusive OR Y with memory

(Y)⊕(M:M+1)→Y

逻辑运算操作指令

Page 42: 第四章 微处理器结构和指令集

ORAA OR A with memory (A)|(M) →A

ORAB OR B with memory (B)|(M) →A

ORCC OR CCR with memory (CCR)|(M)→CCR

ORX OR X with memory (X)|(M:M+1)→X

ORY OR Y with memory (Y)|(M:M+1)→Y

逻辑运算操作指令

Page 43: 第四章 微处理器结构和指令集

LSL Logic Shift Left memory, High bit to C, Low bit fill with 0LSLW Logic Shift Left M:M+1,2 bytes High bit to C, Low bit fill with 0LSLA Logic Shift Left A, High bit to C, Low bit fill with 0LSLB Logic Shift Left B, High bit to C, Low bit fill with 0同样有D 、 X 和 Y

逻辑移位与循环移位指令

Page 44: 第四章 微处理器结构和指令集

LSR Logic Shift Right memory, Low bit to C, High bit fill with 0LSRW Logic Shift Right M:M+1,2 bytes Low bit to C, High bit fill with 0LSRA Logic Shift Right A, Low bit to C, High bit fill with 0LSRB Logic Shift Right B, Low bit to C, High bit fill with 0同样有D 、 X 和 Y

逻辑移位与循环移位指令

Page 45: 第四章 微处理器结构和指令集

ROL ROtate Left memory through carry ROLW ROtate Left memory 2 bytes through

carry ROLA ROtate Left A through carry ROLB ROtate Left B through carryROLX ROtate Left X through carryROLY ROtate Left Y through carryROR ROtate Right memory through carry RORW ROtate Right memory 2 bytes through

carry RORA ROtate Right A through carry RORB ROtate Right B through carryRORX ROtate Right X through carryRORY ROtate Right Y through carry

逻辑移位与循环移位指令

Page 46: 第四章 微处理器结构和指令集

ASL Arithmetic Shift Left memory, Same as LSLASLA Arithmetic Shift Left A, Same as LSLA ASLB Arithmetic Shift Left B, Same as LSLB ASLD Arithmetic Shift Left D, Same as LSLDASLX Arithmetic Shift Left X, Same as LSLX ASLY Arithmetic Shift Left Y, Same as LSLY

算术移位指令

Page 47: 第四章 微处理器结构和指令集

ASR Arithmetic Shift Right memory, High bit dose not change, Low bit to C

ASRA Arithmetic Shift Right A, High bit dose not change, Low bit to CASRB Arithmetic Shift Right B, High bit dose not change, Low bit to CASRW Logic Shift Right M:M+1, High bit dose not change, Low bit to CASRX Arithmetic Shift Right X, High bit dose not change, Low bit to CASRY Arithmetic Shift Right Y, High bit dose not change, Low bit to C

算术移位指令(右移:符号位保持不变)

Page 48: 第四章 微处理器结构和指令集

EMIND MIN of 2 unsigned 16-bit value to D MIN((D),(M:M+1)) →D

EMINM MIN of 2 unsigned 16-bit value to mem MIN((D),(M:M+1)) → M:M+1

MINA MIN of 2 unsigned 8-bit value to A MIN((A),(M)) →A

MINM MIN of 2 unsigned 8-bit value to memory MIN((A),(M)) → M

取极小值指令

Page 49: 第四章 微处理器结构和指令集

EMAXD MAX of 2 unsigned 16-bit value to D MAX((D),(M:M+1)) →D

EMAXM MAX of 2 unsigned 16-bit value to memory MAX((D),(M:M+1)) → M:M+1

MAXA MAX of 2 unsigned 8-bit value to A MAX((A),(M)) →A

MAXM MAX of 2 unsigned 8-bit value to memory MAX((A),(M)) → M

取极大值指令

Page 50: 第四章 微处理器结构和指令集

1. 转移指令

无条件转移指令BRA Branch AlwaysBRN Branch NeverLBRA Long Branch AlwaysLBRN Long Branch NeverJMP Jamp to absolute address

4.4.3 程序控制指令

Page 51: 第四章 微处理器结构和指令集

CCR 条件码寄存器中标志的意义 (1)

• C 标志 在运算时,发生最高的 D7位向前进位或借位的情况它将置位。对于无符号数加来说,说明和超过了255 。 对于无符号数减来说,说明被减数小于减数,这在比较二无符号数大小时很有意义

• H 标志 在运算时,发生 D3位向 D4的进位或借位的情况它将置位。这种进位或借位对于 BCD 数运算的 +6/-6 调整才有意义

• V 标志 最高位向进位位的进位和次高位向最高位的进位如果相同,未发生溢出;否则,产生溢出,此时虽结果已经错误,但其符号仍可按相反解释代表结果的正负!该标志的含义因参与运算的数或编码不同而不同!对于无符号数的运算来说,无任何特殊意义。不必关心。

对于有符号数补码的运算来说,表示已经发生了溢出,即超 出了编码长度所能表达的数值范围。因此,补码运算时必须关注 V 标志的情况

• N 标志 反映运算结果是否为负数( D7)• Z 标志 反映运算结果是否为 0

Page 52: 第四章 微处理器结构和指令集

标志位受算术运算影响的情况

• (A)=C3H, (2500)=AAH• ( X ) =2500 执行 ADDA , x 后

: 位 7654

3210 C 3H | 1100 | 0011 AAH + | 1010 | 1010 -------------------------和 : | 0110 | 1101

进位: 1| 0000 | 0100结果: (A)=6D 标志

C=1,OV=1,H=0 , N=0 , z=0

• (A)=4BH, (2500)=AA• ( X ) =2500 ( C ) =1 执行 ADCA ,X 后 位 7

654 3210 4 BH | 0100 | 1011 AAH | 1010 | 1010 + 1 -------------------------结果 : | 1111 | 0110

进位 0| 0001 | 0111 和 (A)=F6

标志 C=0,OV=0,H=1, N=1 , Z=0

Page 53: 第四章 微处理器结构和指令集

标志位受算术运算影响的情况

• (A)=C9H, (2500)=54H, ( X ) =2500 ( C ) =

1 执行 SBCA , X 后: 位 7654

3210 C 9H | 1100 | 1001 5 4 H | 0101 | 0100 - 1 -------------------------运算结果 | 0111 | 0100 借位 0| 1110 |

1001 (A)=74 标志

C=0,V=1,H=0 , N=0 , Z=0

• (A)=DDH, ( 2500 ) =E8• ( X ) =2500 执行 SUBA , X 后 位 7654

3210 DDH | 1101 | 1101 E 8H - | 1110 | 1000 借位 1| 1100 |

0000 -------------------------运算结果 | 1111 | 0101

和 (A)=F5 标志 C=1,V=0,H=0 , N=1

, Z=0 ;

Page 54: 第四章 微处理器结构和指令集

算术运算过程中标志的意义 (2)

• 同一个标志 , 其含义也因参与运算的数或编码的不同而不同!

• 不管参与运算的是什么数或什么编码 , 在计算机看来都是一些“二进数” ! 所有的指令功能都是针对“二进数”而言的 ; 所得到的运算结果 , 在计算机看来也是“二进数”!

• 究竟参与运算的这些“二进数”是什么数或什么编码 , 得到的运算“结果”是什么数或什么编码 , 这是在程序设计阶段 , 由程序员事先安排好了的 , 不能随便解释。

比如刚才例子中的数 “ 0xE8”, 如果当初程序员按着补码编码制度用来表示 “ -24” 的 ; 以后任何人都只能这样“理解”和“解释” ; 绝对不可以再解释为无符号的数值“ 232”!

相反 , 如果当初程序员是用它来表示无符号的数值“ 232”, 那么以后也绝对不可以再解释为“ -24”!

Page 55: 第四章 微处理器结构和指令集

算术运算过程中标志的意义 (3)

• 比较二无符号数大小时应看 C 标志。• BCD 数运算后不必直接关心 H 标志 , 只要执行正确的调整指令即可。

• 补码运算后必须检查 OV 标志 , 以免发生溢出还不知道。

• 补码运算溢出后虽结果已经错误,但其符号仍可按相反解释代表结果的正负!

Page 56: 第四章 微处理器结构和指令集

BCC Branch if Carry Clear C = 0BCS Branch if Carry Set C = 1BEQ Branch if Equal Z = 1BMI Branch if Minus N = 1BNE Branch if Not Equal Z = 0BPL Branch if Plus N = 0BVC Branch if V Clear V = 0BVS Branch if V Set V = 1

短条件转移指令

Page 57: 第四章 微处理器结构和指令集

BHI Branch if Higher (Result > M C+Z = 0)BHS Branch if Higher or Same (Result ≥ M C = 0) BLO Branch if lower ( Result < M C = 1)BLS Branch if lower or Same ( Result ≤ M C+Z = 0)

BGE Branch if Greater than or Equal(Result ≥ M N⊕V = 0)BGT Branch if Greater than( Result > M Z+( N⊕V ) = 0

)BLE Branch if Less than or Equal(Result≤M Z+( N⊕V )= 1)BLT Branch if Less than ( Result < M N⊕V = 1 )

BRCLR Branch if selected bits Clear M·(mm)=0BRSET Branch if selected bits Set M·(mm)!=0

Page 58: 第四章 微处理器结构和指令集

LBCC Long Branch if Carry Clear C = 0LBCS Long Branch if Carry Set C = 1LBEQ Long Branch if Equal Z = 1LBMI Long Branch if Minus N = 1LBNE Long Branch if Not Equal Z = 0LBPL Long Branch if Plus N = 0LBVC Long Branch if V Clear V =

0LBVS Long Branch if V Set V = 1LBHI Long Branch if Higher

Result = M C+Z = 0LBHS Long Branch if Higher or Same

Result ≥ M C = 0

长条件转移指令

Page 59: 第四章 微处理器结构和指令集

LBLO Long Branch if lower Result < M C = 1LBLS Long Branch if lower or Same

Result ≤ M C +Z = 0LBGE Long Branch if Greater than or Equal

Result ≥ M N⊕V = 0LBGT Long Branch if Greater than

Result > M Z+( N⊕V ) = 0LBLE Long Branch if Less than or Equal

Result ≤ M Z+( N⊕V ) = 1LBLT Long Branch if Less than

Result < M N⊕V = 1

长条件转移指令

Page 60: 第四章 微处理器结构和指令集

DBEQ Decrement (counter), if (counter) Equal 0, than Branch ;DBNE Decrement (counter), if (counter) Not Equal 0, than Branch ;IBEQ Increment (counter), if (counter) Equal 0, than Branch ;IBNE Increment (counter), if (counter) Not Equal 0, than Branch ;TBEQ Test (counter), if (counter) Equal 0,

than Branch ;TBNE Test (counter), if (counter) Not Equal 0, than Branch ;

2. 循环控制指令

Page 61: 第四章 微处理器结构和指令集

JSR Jump to Subroutine ;绝对BSR Branch to Subroutine ;相对RTS Return from Subroutine RTI Return from Interrupt

3. 跳转与子程序调用指令

Page 62: 第四章 微处理器结构和指令集

STOP STOP Process 进入停止模式WAI Wait for Interrupt 进入等待模式TRAP Trap 非法指令陷进,中断非法指令SWI Software Interrupt 软件中断SYS Systems Call 系统调用中断,类似 WAIBGND Back Ground Mode 进入 BDM模式

4. 其他指令

Page 63: 第四章 微处理器结构和指令集

Page 63

Numbering and coding systems 4.5 用汇编语言编写程序

汇编管理指令(伪指令): 汇编管理指令将编译需要的信息传递给编译器,不生成可执行代码。常用指令如下: EOT EQU $04 ; define EOT 0x04

ORG $4000

GLOBLE RMB 2 ;int a

STRING FCC ‘hello world’ ;const string “hello world”

FCB EOT

FDB GLOBLE

XDEF GET_CHAR ;PUBLIC

XREF MAIN ;EXTERN

Page 64: 第四章 微处理器结构和指令集

Page 64

Numbering and coding systems 4.5 用汇编语言编写程序

模块化的编程方法:流程图语言编程调试修改试运行修改运行

举例:已知年和月份,通过判断这个月是大月、小月、平月还是闰月,给出该月份的天数。

流程图:输入:

年份

月份

输出

天数思想 算法

语言:

数据类型

程序结构

Page 65: 第四章 微处理器结构和指令集

Page 65

Numbering and coding systems 4.5 用汇编语言编写程序

汇编程序:(汇编程序讲解 .doc)

Page 66: 第四章 微处理器结构和指令集

Page 66

Numbering and coding systems 4.5 用汇编语言编写程序

C 程序:( C 语言程序讲解 .doc)