FLAGS标志寄存器讲解

FLAGS标志寄存器讲解
FLAGS标志寄存器讲解

微机原理整理江苏大学

非计算机专业使用,本人私人资料;微机原理97

FLAGS标志寄存器:6个状态标志位和3个控制标志

CF:进位标志位。当进行加减法运算时,若最高位向前有进借位CF=1,无CF=0。

PF:奇偶标志位。当运算结果的低8位中1的个数为偶数时PF=1,为奇数时PF=0。

AF:辅助进位标志。D3向D4有借进位发生时AF=1,无借进位发生AF=0。

ZF:零位标志。当运算结果为零时ZF=1,运算结果不为零时ZF=0。

SF:符号标志位。当运算结果的最高位为1时SF=1,最高位为0时SF=0。

OP:溢出标志位。当运算结果超出了带符号数的范围,即溢出时OF=1,未溢出时OF=0。(D7为符号位,说明:D7,D6,D5,D4,D3,D2,D1,D0)

3.3.2算数运算指令

算数运算指令;加,减,乘,除

有符号数的溢出:OF

无符号数的溢出:CF

指令对操作数的要求:单操作数指令中的操作数不允许使用立即数

双操作数指令中,立即数只能作为源操作数,不允许源操作数和目的操作数都是存储器。

1,加法运算指令(不允许段寄存器作为操作数和两个都是存储器)

1)ADD普通加法指令(对全部6个状态标志位都会产生影响)

ADD OPRD1,OPRD2 ;OPRD1+OPRD2送到OPRD1中去

ADD [SI],[BX]是错误的;不允许两个操作数都是存储器操作数例:MOV AL,7EH

ADD AL,5BH

程序执行后,AL=D9H,即11011001B, D9H>7FH(8位带符号数的最大值) OF=1

D9H

2)ADC带进位(CF)位的加法指令(对全部6个状态标志位都会产生影响)ADC OPRD1,OPRD2 ;OPRD1+OPRD2+CF送到OPRD1中去

不允许两个操作数都是存储器操作数

例:设CF=1,写出以下指令执行后的结果

MOV AL,7EH

ADC AL,0ABH

指令执行后:AL=7EH+0ABH+1=2AH,且CF=1

3)INC加1指令(不影响CF,影响其它5个状态标志)

INC OPRD ;OPRD+1送到OPRD中去

OPRD不能是立即数

通常用于在循环程序中修改地址指针及循环次数

2,减法指令(不允许段寄存器作为操作数和两个都是存储器)

1)SUB不考虑借位的减法指令(对全部6个状态标志位都会产生影响)SUB OPRD1,OPRD2

不允许两个操作数都是存储器操作数

例:SUB AL,[BP+SI] ;将SS:[BP+SI]单元的内容送到AL中去

基址变址寻址:基址:BX或BP 变址:SI或DI

DS?[BX][变址]

SS ?[BP][变址]

2)SBB考虑借位的减法指令(对全部6个状态标志位都会产生影响)

SUB OPRD1,OPRD2 ;将OPRD1-OPRD2-CF送到OPRD1中

不允许两个操作数都是存储器操作数

3)DEC减1指令(不影响CF,影响其它5个状态标志)

DEC OPRD

OPRD不能是立即数

4)NEG求补指令(对全部6个状态标志位都会产生影响)

NEG OPRD (求负数的绝对值);用0-OPRD CF通常为1,除非OPRD为0

OF通常为0,除非OPRD为80H(-128)或8000H(-32768),执行后操作数不变,但是OF为1。

5)CMP比较指令(仅影响6个状态标志位)

CMP OPRD1,OPRD2 ;OPRD1-OPRD2,结果不送回OPRD1

不允许两个操作数都是存储器操作数

比较两个操作数的大小关系。

相等:ZF=1

不相等:无符号数,CMP AX,BX CF=0,AX>BX

CF=1,AX

有符号数,CMP AX,BX SF,OF相同,AX>BX

SF,OF不同,AX

例:3-24在内存数据段从DA TA开始的单元中存放了两个8位无符号数,试比较他们的大小,并将大的数送MAX单元、

LEA BX,DATA

MOVE AL,[BX]

INC BX

CMP AL,[BX]

JNC DONE

MOV AL,[BX]

DONE:MOV MAX,AL

HLT

3,乘法指令

MUL无符号乘法指令(影响CF和OF)

MUL OPRD隐含寻址方式,隐含目标操作数AX(DX),源操作数由指令给出。

字节乘法:OPRD*AL 送到AX中

字乘法:OPRD*AX 送到DX:AX中

这里,源操作数OPRD可以是8位或16位的寄存器或存储器。乘法指令要求两操作数字长相等,且不能为立即数。

MUL BX ;用AX*BX送到DX:AX中

MUL BYTE PTR[SI] ;AL*[SI]送到AX中

MUL DL ;用AL*DL送到AX中

例:设AL=0FEH,CL=11H,两数均为无符号数,求AL与CL的乘积。

MUL CL

指令执行后:AX=10DEH,因AH中的结果不为零,故CF=OF=1。

乘积的高半部分不为0,则CF=OF=1,代表AH或DX中包含乘积的有效数字

高半部分为0,则CF=OF=0

4,除法指令

DIV无符号数除法指令(对6个标志位均无影响)

DIV OPRD隐含寻址方式,隐含了被除数,除数OPRD不能为立即数

除数OPRD 8位,则被除数AX 16位字位拓展指令CBW

AX/OPRD放入AL,AX%OPRD放入AH

除数OPRD 16位,则被除数DX(高):AX(低)32位字位拓展指令CWD DX:AX/OPRD 放入AX,DX:AX%OPRD放入DX

例:用除法指令计算7FA2H/03DDH

MOV AX,7FA2H

MOV BX,03DDH

CWD ;AX扩展为DX=0000H,AX=7FA2H

DIV BX ;商=AX=0021H,余数=DX=0025H

3.3.3 逻辑运算与移位指令

1,逻辑运算指令

除NOT指令外,其余4条指令对操作数的要求与MOV指令相同,且使OF=CF=0,其余值不定

1)AND逻辑“与”指令

AND OPRD1,OPRD2 ;按位相与,仅1与1=1

作用之一:使目标操作数的某些位保持不变,把其他位清0

AND AL,0FH ;将AL中的高4位清0,低4位保持不变

作用之二;使操作数不变,但影响6个状态标志位,OF=CF=0

AND AX,AX

2)OR逻辑“或”指令

OR OPRD1,OPRD2 ;

作用之一:使目标操作数的某些位保持不变,将另外一些位置1

OR AL,20H ;将AL中的D5位置1,其余不变

作用之二:使操作数不变,但影响6个状态标志位,OF=CF=0

OR AX,AX

3)NOT逻辑“非”指令(对6个标志位均无影响)

NOT OPRD ;OPRD按位取反

CC中常用的寄存器

CC2530中常用的控制寄存器 (P1SEL 相同):各个I/O 口的功能选择,0为普通I/O 功能,1为外设功能 :(D0到D2位) 端口2 功能选择和端口1 外设优先级控制 什么是外设优先级:当PERCFG 分配两个外设到相同的引脚时,需要设置这两个外设的优先级,确定哪一个外 设先被响应 :设置部分外设的I/O 位置,0为默认I 位置1,1为默认位置2

(P1DIR相同):设置各个I/O的方向,0为输入,1为输出 :D0~D4设置P2_0到P2_4的方向 D7 、D6位作为端口0外设优先级的控制

(P1INP意义相似) :设置各个I/O口的输入模式,0为上拉/下拉,1为三态模式 需要注意的是:P1INP中,只有D7~D2分别设置对应I/O口的输入模式。D1D0两位无作用。: D0~D4控制P2_0~P2_4的输入模式,0为上拉/下拉,1为三态; D5~D7设置对P0、P1和P2的上拉或下拉的选择。0为上拉,1为下拉; 8. P0IFG(P1IFG相同):终端状态标志寄存器,当输入端口有中断请求时,相应的标志位将置1。

9.P0IEN(P1IEN相同):各个控制口的中断使能,0为中断禁止,1为中断使能。 10. P2IFG:D0~D4为P2_0~P2_4的中断标志位 D5为USD D+中断状态标志,当D+线有一个中断请求未决时设置该标志,用于检测USB 挂起状态下的USB恢复事件。当USB控制器没有挂起时不设置该标志。 11. P2IEN:D0~D4控制P2_0~P2_4的中断使能 D5控制USB D+的中断使能 :D0~D3设置各个端口的中断触发方式,0为上升沿触发,1为下降沿触发。 D7控制I/O引脚在输出模式下的驱动能力。选择输出驱动能力增强来补偿引脚DVDD的低I/O 电压,确保在较 低的电压下的驱动能力和较高电压下相同。0为最小驱动能力增强。1为最大驱动能力增强。

单片机原理及应用习题答案第三版(供参考)

第一章习题参考答案 1-1:何谓单片机?与通用微机相比,两者在结构上有何异同? 答:将构成计算机的基本单元电路如微处理器(CPU)、存储器、I/O接口电路和相应实时控制器件等电路集成在一块芯片上,称其为单片微型计算机,简称单片机。 单片机与通用微机相比在结构上的异同: (1)两者都有CPU,但通用微机的CPU主要面向数据处理,其发展主要围绕数据处理功能、计算速度和精度的进一步提高。例如,现今微机的CPU都支持浮点运算,采用流水线作业,并行处理、多级高速缓冲(Cache)技术等。CPU的主频达到数百兆赫兹(MHz),字长普遍达到32位。单片机主要面向控制,控制中的数据类型及数据处理相对简单,所以单片机的数据处理功能比通用微机相对要弱一些,计算速度和精度也相对要低一些。例如,现在的单片机产品的CPU大多不支持浮点运算,CPU还采用串行工作方式,其振荡频率大多在百兆赫兹范围内;在一些简单应用系统中采用4位字长的CPU,在中、小规模应用场合广泛采用8位字长单片机,在一些复杂的中、大规模的应用系统中才采用16位字长单片机,32位单片机产品目前应用得还不多。 (2) 两者都有存储器,但通用微机中存储器组织结构主要针对增大存储容量和CPU对数据的存取速度。现今微机的内存容量达到了数百兆字节(MB),存储体系采用多体、并读技术和段、页等多种管理模式。单片机中存储器的组织结构比较简单,存储器芯片直接挂接在单片机的总线上,CPU对存储器的读写按直接物理地址来寻址存储器单元,存储器的寻址空间一般都为64 KB。 (3) 两者都有I/O接口,但通用微机中I/O接口主要考虑标准外设(如CRT、标准键盘、鼠标、打印机、硬盘、光盘等)。用户通过标准总线连接外设,能达到即插即用。单片机应用系统的外设都是非标准的,且千差万别,种类很多。单片机的I/O接口实际上是向用户提供的与外设连接的物理界面。用户对外设的连接要设计具体的接口电路,需有熟练的接口电路设计技术。 另外,单片机的微处理器(CPU)、存储器、I/O接口电路集成在一块芯片上,而通用微机的微处理器(CPU)、存储器、I/O接口电路一般都是独立的芯片 1-4 IAP、ISP的含义是什么? ISP:In System Programable,即在系统编程。用户可以通过下载线以特定的硬件时序在线编程(到单片机内部集成的FLASH上),但用户程序自身不可以对内部存储器做修改。 IAP:In Application Programable,即在应用编程。用户可以通过下载线对单片机进行在线编程,用户程序也可以自己对内部存储器重新修改。 1-6 51单片机与通用微机相比,结构上有哪些主要特点? (1)单片机的程序存储器和数据存储器是严格区分的,前者为ROM,后者为RAM; (2)采用面向控制的指令系统,位处理能力强; (3)I/O引脚通常是多功能的; (4)产品系列齐全,功能扩展性强; (5)功能是通用的,像一般微处理机那样可广泛地应用在各个方面。 1-7 51单片机有哪些主要系列产品? (1)Intel公司的MCS-51系列单片机:功能比较强、价格比较低、较早应用的单片机。此系列三种基本产品是:8031/8051/8751; (2)ATMEL公司的89系列单片机:内含Flash存储器,开发过程中可以容易地进行程序修改。有8位Flash子系列、ISP_Flash子系列、I2C_Flash子系列; (3)SST公司的SST89系列单片机:具有独特的超级Flash技术和小扇区结构设计,采用IAP和ISP技术;

关于标志寄存器的各个标志

运算结果标志位 1、进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。 2、奇偶标志PF(Parity Flag) 奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。 利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。 3、辅助进位标志AF(Auxiliary Carry Flag) 在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0: (1)、在字操作时,发生低字节向高字节进位或借位时; (2)、在字节操作时,发生低4位向高4位进位或借位时。 对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。 4、零标志ZF(Zero Flag) 零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。 5、符号标志SF(Sign Flag) 符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。 6、溢出标志OF(Overflow Flag) 溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。 “溢出”和“进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。 二、状态控制标志位

河北工大单片机试题参考

1.外部中断1采用负边沿的中断触发方式,请把程序补完整 ORG 0000H LJMP ST ORG (1) (1) AO013H (2) B SETB EA 2.下面是一段软件延时程序,请把程序补完整 Delay r7,#100 ;lus Dell mov r6,#123 ; lus 程序延时时间约为3ms (1)A mov(2) BDell(3) C 25 3.下面是一段多个单字节数求累加和程序,实现了从50H开始的连续5个字节求和,结果存放在R3R4中 (1) A #0 (2) D inc (3)A addc (4) C djnz (5)C Loop 4.求函数Y=X!(X=0,1,。。。。7)的值。设自变量存放在ABC单元。Y值为双字节存于R2R3中,R3存放Y值低字节,查表程序如下 (1)A ABC (2) D #08H (3) C A+PC (4) B XCH (5) C R2 5.当程序执行到完X语句处时累加器A的值为(1);当程序执行完Y语句时累加器A的值为(2) (1) B 12 (2) B 01H 6.子程序名:ZERO 功能:对内部数据区清零功能:对内部数据区清零入口参数:70内部数据区地址 71h内部数据区长度出口参数:无占用资源:R0,R7,70h,71h 上述程序为主程序调用子程序,参数传递方式为(5) (1) A 07H (2) A 00H (3) A DPL (4) B DPH (5) B 堆栈 7.在P1.0输出周期2ms的方波。(CPU采用12MHz时钟,T0产生1ms中断,T0采用方式1)(1) B #01H (2) C #24H (3) C #OFCH (4) D TFO (5) C CPL 8.把内部RAM中起始地址为BLK1的数据块传送到外部RAM以BLK2为起始地址的区域,直到遇到“#”字符的ASCII码为止。参考程序如下 (1) D @ R0 (2) B SUBB (3) C STOP (4) B POP (5) B MOVX (6) A INC 9.在6位LED动态显示电路图中,8155的PA口作(1),PB口作(2),PA和PB口都工作为(3),要使N1块显示数字3,其字形码为(4),字位码为(5),要使N1,N3,N5块同时显示数字6,其字形码为(6),字位码为(7),要使6位LED显示器全灭,字位码位(8)或字形码为(9),要使其中一位显示y,其字形码位(10) (1) A 字位码口 (2) D 字形码口(3)A 输出口(4)C BOH (5) B 01H (6) C 82H (7) B 15H (8) 00H (9) OFFH (10) C 91H 10.DJNZ R0,rel这条指令含有两个操作数,第一个操作数R0属于(1)寻址方式,第二个操作数rel属于(2)寻址方式

汇编寄存器功能详解

数据寄存器(AX、BX、CX、DX) 1.寄存器AX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、 除、输入/输出等操作,它们的使用频率很高; 2.寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 3.寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位 操作中,当移多位时,要用CL来指明移位的位数; 4.寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算, 也可用于存放I/O的端口地址; 变址寄存器(SI、DI) 寄存器SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便 指针寄存器(BP、SP) 寄存器BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们主要用于访问堆栈内的存储单元,并且规定: BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据; SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶 段寄存器(CS、DS、ES、SS、FS、GS) 段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址 CS 代码段寄存器(Code Segment Register),其值为代码段的段值 DS 数据段寄存器(Data Segment Register),其值为数据段的段值; ES 附加段寄存器(Extra Segment Register),其值为附加数据段的段值 SS 堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值; FS 附加段寄存器(Extra Segment Register),其值为附加数据段的段值 GS 附加段寄存器(Extra Segment Register),其值为附加数据段的段值 在16位CPU系统中,它只有4个段寄存器,所以,在此环境下开发的程序最多可同时访问4个段; 在32位CPU系统中,它共有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段. 指令指针寄存器 指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。 16位标志寄存器 9个标志位,它们主要用来反映CPU的状态和运算结果的特征。 1.进位标志CF(Carry Flag) 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的 最高位产生了一个进位或借位,那么,其值为1,否则其值为0。 2.奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为 偶数,则PF的值为1,否则其值为0 3.辅助进位标志AF(Auxiliary Carry Flag) 在发生下列情况时,辅助进位标志AF的值被置为1,否 则其值为0:

单片机原理及应用与C51程序设计(第三版)第2章作业

习题 1.MCS-51单片机由哪几个部分组成? 答:MCS-51单片机主要由以下部分组成的:时钟电路、中央处理器(CPU)、存储器系统(RAM和ROM)、定时/计数器、并行接口、串行接口、中断系统及一些特殊功能寄存器(SFR)。 2.MCS-51的标志寄存器有多少位,各位的含义是什么? 答:MCS-51的标志寄存器PSW有8位; 6 5 D 4 D 3 2 1 0 C 0 R S1 R S0 V 含义如下: C(PSW.7):进位或借位标志位。 AC(PSW.6):辅助进位或借位可标志位。 F0(PSW.5):用户标志位。是系统预留给用户自己定义的标志位。 RS1、RS0(PSW.4、PSW.3):寄存器组选择位。可用软件置位或清零,用于从四组工作寄存器中选定当前的工作寄存器组。 OV(PSW.2):溢出标志位。在加法或减法运算时,如运算的结果超出8位二进制数的范围,则OV置1,标志溢出,否则OV清零。 P(PSW.0):奇偶标志位。用于记录指令执行后累加器A中1的个数的奇偶性。若累加器A中1的个数为奇数,则P置位,若累加器A中1的个数为偶数,则P 清零。 其中PSW.1未定义,可供用户使用。 3.在8051的存储器结构中,内部数据存储器可分为几个区域?各有什么特点? 答:片内数据存储器按功能可以分成以下几个部分:工作寄存器组区、位寻址区、一般RAM区和特殊功能寄存器区,其中还包含堆栈区。工作寄存器组区,00H~1FH单元,可用R0~R7等8个寄存器访问;位寻址区,20H~2FH单元,可按位方式访问;一般RAM区,30H~7FH单元;堆栈区,可从08到7F单元;特殊功能寄存器区位于80H~FFH单元。 4.什么是堆栈?说明MCS-51单片机的堆栈处理过程。 答:堆栈是按先入后出、后入先出的原则进行管理的一段存储区域。CS-51单片机的堆栈是向上生长型的,存入数据是从地址低端向高端延伸,取出数据是从地址高端向低端延伸。入栈和出栈数据是以字节为单位的。入栈时,SP指针的内容先自动加1,然后再把数据存入到SP指针指向的单元;出栈时,先把SP指针指向单元的数据取出,然后再把SP指针的内容自动减1。 5.简述内部ROM的工作寄存器组情况,系统默认是第几组?

飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表 直接页面寄存器总结

高页面寄存器总结

非易失寄存器总结 注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。第2列中寄存器名用粗体显示以区别右边的位名。有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。

附录II 指令接与寻址方式 HCS08指令集概括 运算符 () = 括号种表示寄存器或存储器位置的内容 ← = 用……加载(读: “得到”) & = 布尔与 | = 布尔或 ⊕= 布尔异或 ×= 乘 ÷ = 除 : = 串联 + = 加 - = 求反(二进制补码) CPU registers A =>累加器 CCR =>条件代码寄存器 H =>索引寄存器,高8位 X => 索引寄存器,低8位 PC =>程序计数器 PCH =>程序计数器,高8位 PCL =>程序计数器,低8位 SP =>堆栈指针 存储器和寻址 M =>一个存储区位置或者绝对值数据,视寻址模式而定 M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址. 条件代码寄存器(CCR)位 V => 二进制补码溢出指示,第7位 H => 半进位,第4位 I => 中断屏蔽,第 3位 N => 求反指示器, 第2位 Z => 置零指示器, 第1位 C => 进/借, 第0位 (进位第 7位 ) CCR工作性符号 – => 位不受影响 0 = > 位强制为0 1 = > 位强制为1

= >根据运算结果设置或清除位 U = > 运算后没有定义 机器编码符号 dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00) ee => 16位偏移量的高8位 ff => 16位偏移量的低8位 ii => 立即数的一个字节 jj => 16位立即数值的高位字节 kk => 16位立即数值的低位字节 hh => 16位扩展寻址的高位字节 ll => 16位扩展寻址的低位字节 rr => 相对偏移量 n —任何表达范围在0–7之间的一个有符号数的标号或表达式 opr8i —任何一个表达8位立即值的标号或表达式 opr16 —任何一个表达16位立即值的标号或表达式 opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位. opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间. oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址. oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值. rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式 隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。(INH) 立即寻址 (Immediate)如LDA #$0A,“$”表示16进制,此时操作数位于FLASH空间,与程序一起存放。(IMM) 直接寻址 (Direct)如 LDA $88,只能访问$0000-$00FF的存储器空间,指令短速度快; (DIR) 扩展寻址 (Extended)如果操作数地址超出了$00FF,自动为扩展寻址;(EXT) 相对寻址(Relative)如BRA LOOP,指令中一般给出8位有符号数表示的偏移量。(REL) 变址寻址 (Indexed) 采用[H:X]或SP作为指针的间接寻址方式。( IX )( IX1 )( IX2 ) 变址寻址 (Indexed) 1〉无偏移量:CLR ,X 简写(IX) 2〉无偏移量,指令完成后指针加1(H:X = H:X + 0x0001) ,简写(IX+)只用于指令MOV和CBEQ指令中;

指令对标志寄存器的影响总结

指令类型助记符对标志寄存器的影响备注 ZF CF PF SF OF AF DF IF TF 数据传送类通用MOV 不影响标志位 交换XCHG 堆栈 操作 PUSH POP 地址 传送 LEA LDS LES 累加器 专用IN OUT XALT 标志 寄存器 LAHF SAHF 标志寄存器低八位的内容由AH的值决定CF,AF,ZF,SF,PF的值会被影响 PUSHF 不影响标志位 POPF 标志寄存器的内容由装入的具体值决定可能影响所有标志位 算术运算类加法 指令 ADD √√√√√√ ADC √√√√√√ INC √√√√√INC指令不影响CF AAA ?√???√?表示不确定或者未定义 DAA √√√√?√ 减法 指令 SUB √√√√√√ SBB √√√√√√ DEC √√√√√DEC指令不影响CF AAS ?√???√ DAS √√√√?√DAA指令不影响OF 乘法 指令 MUL ?√??√? IMUL ?√??√? AAM √?√√?? 除法 指令 DIV ??????√√此指令可能会产生中断,故影响IF,TF IDIV ??????√√同上 AAD √?√√?? 符号位 扩展 CBW 不影响标志位 CWD 不影响标志位 比较指令CMP 由计算结果确定标志位的值不会影响到DF,IF,TF 逻辑运算类单 操 作 数 逻 辑 指 求反NOT 不影响标志位 移位 SAL √√√√见 备 注 ?OF标志位只在移位次数是1时 有效,AF未定义SHL √√√√? SAR √√√√? SHR √√√√? 循环 移位 ROL √√? 循环移位指令影响OF和CF,ROR √√?

ASCII码表&部分汇编标志寄存器操作指令

ASCII值控制字 符 ASCII 值 控制字 符 ASCII 值 控制字 符 ASCII 值 控制字 符 0 NUT 32 (space) 64 @ 96 、 1 SOH 33 !65 A 97 a 2 STX 34 ”66 B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL 39 , 71 G 103 g 8 BS 40 ( 72 H 104 h 9 HT 41 ) 73 I 105 i 10 LF 42 * 74 J 106 j 11 VT 43 + 75 K 107 k 12 FF 44 , 76 L 108 l 13 CR 45 - 77 M 109 m 14 SO 46 . 78 N 110 n 15 SI 47 / 79 O 111 o 16 DLE 48 0 80 P 112 p 17 DCI 49 1 81 Q 113 q 18 DC2 50 2 82 R 114 r 19 DC3 51 3 83 X 115 s 20 DC4 52 4 84 T 116 t 21 NAK 53 5 85 U 117 u 22 SYN 54 6 86 V 118 v 23 TB 55 7 87 W 119 w 24 CAN 56 8 88 X 120 x 25 EM 57 9 89 Y 121 y 26 SUB 58 : 90 Z 122 z 27 ESC 59 ; 91 [ 123 { 28 FS 60 < 92 / 124 | 29 GS 61 = 93 ] 125 } 30 RS 62 > 94 ^ 126 ~ 31 US 63 ? 95 —127 DEL

汇编语言学习笔记之通用寄存器

汇编语言学习笔记之通用寄存器 从昨天开始,正式拉开了学习汇编语言的序幕,对于汇编语言的一些特点以及数据的表示及类型做了一番了解,由于这些东西每一种语言里都要介绍,而且一时半会也真弄不太明白它们的具体使用,也就粗略的看了一下,留待在今后的学习中结合实例加以体会吧。 而通用寄存器应该说是CPU内部重要的数据存储资源,学习汇编语言必须要掌握清它们的功能。因此汇编语言学习的第一篇学习笔记就从通用寄存器开始了。以下内容摘自汇编教程中。 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。 另外,由于寄存器的个数和容量都有限,不可能把所有中间结果都存储在寄存器中,所以,要对寄存器进行适当的调度。根据指令的要求,如何安排适当的寄存器,避免操作数过多的传送操作是一项细致而又周密的工作。有关“寄存器的分配策略”在后续课程《编译原理》中会有详细的介绍。 由于16位/32位CPU是微机CPU的两个重要代表,所以,在此只介绍它们内部寄存器的名称及其主要功能。 1、16位寄存器组 16位CPU所含有的寄存器有: 4个数据寄存器(AX、BX、CX和DX), 2个变址和指针寄存器(SI和DI), 2个指针寄存器(SP和BP) 4个段寄存器(ES、CS、SS和DS), 1个指令指针寄存器(IP), 1个标志寄存器(Flags) 2、32位寄存器组 32位CPU除了包含了先前CPU的所有寄存器,并把通用寄存器、指令指针和标志寄存器从16位扩充成32位之外,还增加了2个16位的段寄存器:FS 和GS。 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX), 2个变址和指针寄存器(ESI和EDI), 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS),

微机原理与接口技术重点归纳

一、1、总线是连接CPU和内存、缓存、外部控制芯片之间的数据通道。系统总线主要包括地址总线、数据总线、控制总线。 二、1、从功能上来看,8086CPU可分为两部分,即总线接口部件BIU和执行部件EU (1)总线接口部件(BIU) 组成:①段寄存器(DS、CS、ES、SS); ②16位指令指针寄存器IP(指向下一条要取出的指令代码); ③20位地址加法器(用来产生20位地址); ④6字节(8088为4字节)指令队列缓冲器; ⑤总线控制逻辑。 功能:负责从内存中取指令,送入指令队列,实现CPU与存储器和I/O接口之间的数据传送。 (2)执行部件(EU)组成:①ALU(算术逻辑单元) ②通用寄存器(AX、BX、CX、DX) ③专用寄存器(BP、SP、SI、DI); ④标志寄存器(PSW); ⑤EU控制系统。 功能:负责分析指令和执行指令。 2、BIU和EU的动作协调原则: 将8086/8088 CPU分成二个独立的功能部件使二者能够并行工作,把取指令工作和分析指令、执行指令工作重叠进行,从而提高CPU的工作效力,加快指令的执行速度。指令队列可以被看成是一个特殊的RAM,它的工作原理是"先进先出",写入的指令只能存放在队列尾,读出的指令是队列头存放的指令。EU和BIU之间就是通过指令队列联系起来,多数情况下,BIU在不停地向队列写入指令,而EU每执行完一条指令后,就向队列读取下一条指令。二者的动作既独立,又协调。 3、通用寄存器8086/8088有4个16位的通用寄存器(AX、BX、CX、DX),可以存放16位的操作数,也可分为8个8位的寄存器(AL、AH;BL、BH;CL、CH;DL、DH)来使用。其中AX称为累加器,BX称为基址寄存器,CX称为计数寄存器,DX称为数据寄存器,这些寄存器在具体使用上有一定的差别。 4、指针寄存器系统中有两个16位的指针寄存器SP和BP,其中SP是堆栈指针寄存器,由它和堆栈段寄存器SS一起来确定堆栈在内存中的位置;BP是基数指针寄存器,通常用于存放基地址。 5、变址寄存器系统中有两个16位的变址寄存器SI和DI,其中SI是源变址寄存器,DI是目的变址寄存器,都用于指令的变址寻址方式。 6、控制寄存器IP、标志寄存器是系统中的两个16位控制寄存器,其中IP是指令指针寄存器,用来控制CPU的指令执行顺序,它和代码段寄存器CS一起可以确定当前所要取的指令的内存地址。顺序执行程序时,CPU每取一个指令字节,IP自动加1,指向下一个要读取的字节;当IP单独改变时,会发生段内的程序转移;当CS和IP同时改变时,会产生段间的程序转移。标志寄存器的内容被称为处理器状态字PSW,用来存放8086 CPU在工作过程中的状态。 7、段寄存器系统中共有4个16位段寄存器,即代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES。这些段寄存器的内容与有效的地址偏移量一起,可确定内存的物理地址。通常CS划定并控制程序区,DS和ES控制数据区,SS控制堆栈区。

DEBUG里标志寄存器状态位英文全称

DEBUG里标志寄存器状态位英文全称 想知道 DEBUG 里显示状态位的英文全称,便于记忆。 ======================================= 标志寄存器是一个( 16 )位的寄存器,由( 状态 )标志和( 控制 )标志两部分组成。 ------------------------------------ OF(OV/NV):Over 溢出标志位 DF(DN/UP):Direction 方向标志位 IF(EI/DI):Enable 中断允许标志位 SF(NG/PL):Symbol 符号标志位 ZF(ZR/NZ):Zero 零标志位 AF(AC/NA):Auxiliary 辅助进位标志位 PF(PE/PO):Parity 奇偶标志位 CF(CY/NC):Carry 进位标志位 ------------------------------------ 溢出 OV(溢出) NV(未溢出) 方向 DN(减少) UP(增加) 中断 EI(许可) DI(禁止) 符号 NG(负) PL(正) 零位 ZR(零) NZ(非零) 辅助进位 AC(进位) NA(无进位) 奇偶 PE(偶) PO(奇) 进位 CY(进位) NC(无进位) ------------------------------------ 标志英文中文 DEBUG缩写(1/0) OF Over flow flag 溢出标志 OV / NV DF Direction flag 方向控制 DN / UP IF Interrupt flag 中断允许 EI / DI SF Sign flag 符号标志 NG / PL ZF Zero flag 零标志 ZR / NZ AF Auxiliary carry flag 辅助 AC / NA PF Parity flag 奇偶标志 PE / PO CF Carry flag 进位标志 CY / NC ------------------------------------ 溢出标志OF(Over flow flag) OV(1) NV(0) 方向标志DF(Direction flag) DN(1) UP(0) 中断标志IF(Interrupt flag) EI(1) DI(0) 符号标志SF(Sign flag) NG(1) PL(0) 零标志ZF (Zero flag) ZR(1) NZ(0) 辅助标志AF(Auxiliary carry flag) AC(1) NA(0) 奇偶标志PF(Parity flag) PE(1) PO(0) 进位标志CF(Carry flag) CY(1) NC(0) ======================================= TF跟踪标志:TF=1,机器进入单步工作方式,每条机器指令执行后,显示结果及寄存器状态,若TF=0,则机器处在连续工作方式。此标志为调试机器或调试程序发现故障而设置。

FLAGS标志寄存器

微机原理整理江苏大学 非计算机专业使用,本人私人资料;微机原理97 FLAGS标志寄存器:6个状态标志位和3个控制标志 CF:进位标志位。当进行加减法运算时,若最高位向前有进借位CF=1,无CF=0。 PF:奇偶标志位。当运算结果的低8位中1的个数为偶数时PF=1,为奇数时PF=0。 AF:辅助进位标志。D3向D4有借进位发生时AF=1,无借进位发生AF=0。 ZF:零位标志。当运算结果为零时ZF=1,运算结果不为零时ZF=0。 SF:符号标志位。当运算结果的最高位为1时SF=1,最高位为0时SF=0。 OP:溢出标志位。当运算结果超出了带符号数的范围,即溢出时OF=1,未溢出时OF=0。(D7为符号位,说明:D7,D6,D5,D4,D3,D2,D1,D0) 3.3.2算数运算指令 算数运算指令;加,减,乘,除 有符号数的溢出:OF 无符号数的溢出:CF 指令对操作数的要求:单操作数指令中的操作数不允许使用立即数 双操作数指令中,立即数只能作为源操作数,不允许源操作数和目的操作数都是存储器。 1,加法运算指令(不允许段寄存器作为操作数和两个都是存储器) 1)ADD普通加法指令(对全部6个状态标志位都会产生影响) ADD OPRD1,OPRD2 ;OPRD1+OPRD2送到OPRD1中去 ADD [SI],[BX]是错误的;不允许两个操作数都是存储器操作数例:MOV AL,7EH ADD AL,5BH 程序执行后,AL=D9H,即11011001B, D9H>7FH(8位带符号数的最大值) OF=1 D9H

汇编语言指令分类详解

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位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。可以 分成两种情况: (1)以SI、DI、BX间接寻址,则 通常操作数在现行数据段区域 中,即数据段寄存器(DS)*16 加上SI、DI、BX中的16位偏移 量,为操作数的地址, 例如:MOV AX,[SI] 操作数地址是:(DS)*16+(SI) (2)以寄存器BP间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)*16与BP的内容相加作为操作数的地址, 例如:MOV AX,[BP] 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。 例如:MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)5.变址寻址 由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个

寄存器是什么

EAX是什么意思? 将数据33221100H传送到EAX寄存器的指令模拟图 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。

OD使用须知常识,CPU寄存器和汇编指令

OD使用须知常识,CPU寄存器和汇编指令 用OD和CE,不断找汇编资料,解读指令,实在是累。总算找到篇比较完整的资料与大家分享。 32位CPU所含有的寄存器有: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。 对低16位数据的存取,不会影响高16位的数据。 这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。 程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。 寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果, 而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器 32位CPU有2个32位通用寄存器ESI和EDI。 其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。 寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量, 用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

经典的51单片机汇编指令详解

MCS-51系列单片机指令以A开头的指令有18条,分别: ACALL addr11 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data AJMP addr11 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data 以X开头的指令有10条,分别为: XCH A,Rn XCH A,direct XCH A,@Ri XCHD A,@Ri XRL A,Rn XRL A,direct XRL A,@Ri XRL A,#data XRL direct,A XRL direct,#data 1、XCH A,Rn 指令名称:寄存器寻址字节交换指令 指令代码:C8H~CFH 指令功能:寄存器寻址字节 操作内容:(A)交换(Rn);n=0~7 字节数: 1 机器周期:1 2、XCH A,direct 指令名称:直接寻址字节交换指令 指令代码:C5H 指令功能:累加器内容与内部RAM低128单元或专用寄存器内容交换操作内容:(A)交换(direct) 字节数: 2

3、XCH A,@Ri 指令名称:间接寻址字节交换指令 指令代码:C6H~C7H 指令功能:累加器内容与内部RAM低128单元内容交换 操作内容:(A)交换((Ri)); i=0,1 字节数: 1 机器周期:1 4、XCHD A,@Ri 指令名称:半字节交换指令 指令代码:D6H~D7H 指令功能:累加器内容低4位与内部RAM低128单元低4位交换 操作内容:(A)3~0交换((Ri))3~0;i=0,1 字节数: 1 机器周期:1 5、XRL A,Rn 指令名称;逻辑异或操作指令 指令代码:68H~6FH 指令功能:累加器内容与寄存器内容进行逻辑异或操作 操作内容:A<-(A)异或(Rn); n=0~7 字节数: 1 机器周期:1 6、XRL A,direct 指令名称:逻辑异或操作指令 指令代码:65H 指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(direct) 字节数: 2 机器周期:1 7、XRL A,@Ri 指令名称:逻辑异或指令 指令代码:66H~67H 指令功能:累加器与内部RAM低128单元内容进行逻辑异或操作 操作内容:A<-(A)异或((Ri)); i=0,1

相关文档
最新文档