搜档网
当前位置:搜档网 › STM32_NVIC寄存器详解

STM32_NVIC寄存器详解

STM32_NVIC寄存器详解
STM32_NVIC寄存器详解

在 MDK 内,与 NVIC 相关的寄存器,MDK 为其定义了如下的结构体: typedef struct { vu32 ISER[2]; //2 个 32 位中断使能寄存器分别对应到 60 个可屏蔽中断 u32 RESERVED0[30]; // vu32 ICER[2]; //2 个 32 位中断除能寄存器分别对应到 60 个可屏蔽中断 u32 RSERVED1[30]; vu32 ISPR[2]; //2 个 32 位中断挂起寄存器分别对应到 60 个可屏蔽中断, 可挂起正在执行的中断 u32 RESERVED2[30]; vu32 ICPR[2]; //2 个 32 位中断解挂寄存器分别对应到 60 个可屏蔽中断, 可解除被挂起的中断 u32 RESERVED3[30]; vu32 IABR[2]; //2 个 32 位中断激活标志寄存器, 可读取该寄存器判断当 前执行的中断是哪个,中断执行完硬件清零,只读 u32 RESERVED4[62]; vu32 IPR[15]; //15 个 32 位中断优先级分组寄存器,每个中断分配 8 个 bit,对应到 4*15=60 个中断 } NVIC_TypeDef;
ISER0:使能寄存器 0,写 1 使能
or
ICER1:使能寄存器 1,写 1 使能 ISPR1:挂起寄存器 1, 写 1 挂起
or
ICER1:除 ICPR1:解挂
ICER0:除能寄存器 0,写 1 除能 ISPR0:挂起寄存器 0,写 1 挂起
or
能寄存器 1,写 1 除能 or
寄存器 1,写 1 解挂
ICPR0:解挂寄存器 0,写 1 解挂 IABR0:中断激活标志寄存器 0
寄 存 器 位 0 1 对应可屏蔽中断 描述 寄 存 器 位 0 1
IABR1:中断激活标志寄存器 0
对应可屏蔽中断
描述
WWDG PVD
2 3 4 5
TAMPER RTC FLASH RCC
6
EXTI0
窗看门狗 连到 EXTI 的 电源电压检 测(PVD) 中 断 侵入检测中 断 实时时钟全 局中断 闪存全局中 断 Reset and Clock Control 中断 EXTI 线 0 中
IIC1_ER IIC2_EV
IIC1 错误中断 IIC2 事件中断
2 3 4 5
IIC2_ER SPI1 SPI2 USART1
IIC2 错误中断 SPI1 全局中断 SPI2 全局中断 USART1 全局中断
6
USART2
USART2 全局中断

7 8 9 10 11 12 13 14 15 16 17 18
EXTI1 EXTI2 EXTI3 EXTI4 DMA1_channel1 DMA1_channel2 DMA1_channel3 DMA1_channel4 DMA1_channel5 DMA1_channel6 DMA1_channel7 ADC1/2
19
USB_HIGH/CAN_TX
20
USB_LP/CAN_RX0
21 22 23 24 25 26 27 28
CAN_RX1 CAN_SCE EXTI[9:5] TIM1_Break TIM1_Update TIM1_Trg/Com TIM1_CC TIM2
断 EXTI 线 1 中 断 EXTI 线 2 中 断 EXTI 线 3 中 断 EXTI 线 4 中 断 DMA1 通道 1 全局中断 DMA1 通道 2 全局中断 DMA1 通道 3 全局中断 DMA1 通道 4 全局中断 DMA1 通道 5 全局中断 DMA1 通道 6 全局中断 DMA1 通道 7 全局中断 ADC1 和 ADC2 全局中 断 USB 高优先 级或 CAN 发 送中断 USB 低优先 级或 CAN 接 收 0 中断 CAN 接收 1 中断 CAN SCE 中 断 EXTI 线[9:5] 中断 TIM1 刹车中 断 TIM1 更新中 断 TIM1 触发和 通信中断 TIM1 捕获比 较中断 定时器 2 全局 中断
7 8 9 10 11 12 13 14 15 16 17 18
USART3 EXTI[10:15] RTC_Alarm USB_WakeUp Tim8_Break Tim8_Update Tim8_Trg/Com Tim8_CC Adc3 Fsmc Sdio Tim5
USART3 全局中断 EXTI[10:15]中断 连接到 EXTI 的闹钟中断 连接到 EXTI 的 USB 待机唤醒 中断 定时器 8 刹车中断 定时器 8 更新中断 定时器 8 触发和通信中断 定时器 8 捕获比较捉弄中断 ADC3 全局中断 FSMC 全局中断 SDIO 全局中断 定时器 5 全局中断
19
Spi3
SPI3 全局中断
20
Uart4
Uart4 全局中断
21 22 23 24 25 26 27 28
Uart5 Tim6 Tim7 Dma2_Channel1 Dma2_Channel2 Dma2_Channel3 Dma2_Channel4/5 /
Uart5 全局中断 定时器 6 全局中断 定时器 7 全局中断 DMA2 通道 1 全局中断 DMA2 通道 2 全局中断 DMA2 通道 3 全局中断 DMA2 通道和通道 5 全局中断 /

29 30 31
TIM3 TIM4 IIC1_EV
定时器 3 全局 中断 定时器 4 全局 中断 IIC1 事件中 断
29 30 31
/ / /
/ / /
IPR[15] 15 个 32 位中断优先级分组寄存器,每个中断分配 8 个 bit,对应到 4*15=60 个中断。但 是并不是 8 个 bit 都被使用了,而是仅仅只用到了高四位,这样就可以得到 5 组 16 级的中断 优先级。高位的 4 个 bit 又分为抢占优先级和子优先级,抢占优先级在前,子优先级在后。两 组别 0 1 2 3 4 SCB->AIRCR[1 0:8] 111 110 101 100 011 高四位分配情况 0:4 1:3 2:2 3:1 4:0 分配结果 0 位抢占优先级 4 位子优先级 1 位抢占优先级 3 位子优先级 2 位抢占优先级 2 位子优先级 3 位抢占优先级 1 位子优先级 4 位抢占优先级 0 位子优先级
种类型优先级占用的位数又可以通过 SCB->AIRCR 寄存器的 bit[10:8]来配置。 数字越小优先级越高,高优先级的中断可以中断低优先级的中断,但是抢占优先级相同 时子优先级高的无法中断子优先级低的中断。 结合实例说明一下:假定设置中断优先级组为 2,然后设置中断 28(Tim2 中断)的抢占优 先级为 3,响应优先级为 2。中断 6(外部中断 0)的抢占优先级为 4,响应优先级为 0。中断 7(外部中断 1)的抢占优先级为 3,响应优先级为 0。那么这 3 个中断的优先级顺序为:中 断 7>中断 28>中断 6。 上面例子中的中断 28 和中断 7 都可以打断中断 6 的中断。而中断 7 和中断 28 却不可以 相互打断!

数据寄存器(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:

附录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指令中;

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),

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位偏移量(当然要由一个

第一章机械传动性能测试综合实验台说明书 一、概述 “THM CD-1型机械传动性能测试综合实验台”是根据相关课程的教学大纲要求而研制的,它采用模块式结构,可快速组合多种机械传动实训,能测试各种机械传动的速比、转矩、效率等。配套专用的数据采集系统,实现计算机智能数据采集、分析、处理、曲线显示及打印输出等功能。适合各院校机械类专业《机械设计》、《机械原理》、《机械零件》等课程的教学实训需要。 二、主要实训仪器及设备 1.NJ型转矩转速传感器 NJ型转矩转速传感器的基本原理是:通过弹性轴、两组磁电信号发生器,把被测转矩、转速转换成具有相位差的两组交流电信号,这两组交流电信号的频率相同且与轴的转速成正比,而其相位差的变化部分又与被测转矩成正比。 NJ型转矩转速传感器的工作原理如图1。在弹性轴的两端安装有两只信号齿轮,在两齿轮 图1 NJ型转矩转速传感器工作原理图 的上方各装有一组信号线圈,在信号线圈内均装有磁钢,与信号齿轮组成磁电信号发生器。当信号齿轮随弹性轴转动时,由于信号齿轮的齿顶及齿谷交替周期性的扫过磁钢的底部,使气隙磁导产生周期性的变化,线圈内部的磁通量亦产生周期性变化,使线圈中感应出近似正弦波的交流电信号。这两组交流电信号的频率相同且与轴的转速成正比,因此可以用来测量转速。这两组交流电信号之间的相位与其安装的相对位置及弹性轴所传递扭矩的大小及方向有关。当弹性轴不受扭时,两组交流电信号之间的相位差只与信号线圈及齿轮的安装相对位置有关,这一相位差一般称为初始相位差,在设计制造时,使其相差半个齿距左右,即两组交流电信号之间的初始相位差在180度左右。在弹性轴受扭时,将产生扭转变形,使两组交流电信号之间的相位差发生变化,在弹性变形范围内,相位差变化的绝对值与转矩的大小成正比。把这两组交流电信号用专用屏蔽电缆线送入具有其功能的扭矩卡送入计算机,即可得到转矩、转速及功率的精确值。图2是NJ型转矩转速传感器机械结构图。其结构与图1的工作原理图的差别是,为了提高测量精度及信号幅值,两端的信号发生器是由安装在弹性轴上的外齿轮、安装在套筒内的内齿轮、固定在机座内的

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),它们主要用于存放存储单元在段内的偏移量, 用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

机械传动与液压传动练习试卷2及答案与解析 一、多项选择题 共10题,每题2分。每题的备选项中,有2个或2个以上符合题意,至少有l个错项。错选,本题不得分;少选,所选的每个选项得0.5分。 1 机械传动的主要作用有( )。 (A)传递动力 (B)改变运动方向 (C)改变运动效率 (D)改变运动速度 (E)改变运动形式 2 蜗杆传动的特点是( )。 (A)降速效果好 (B)能自锁 (C)效率不高 (D)传动平稳 (E)结构松散 3 下列几种机构中,曲柄作为主动件的机构有( )。 (A)破碎机的传动机构 (B)脚踏缝纫机的曲柄摇杆机构 (C)内燃机中的曲柄滑块机构

(D)曲柄压力机中的曲柄滑块机构 (E)牛头刨床机构中的曲柄摇杆机构 4 下列各传动机构中,( )传动机构为不可逆传动机构(即主动件与从动件不能交换)。 (A)蜗杆 (B)齿轮 (C)凸轮 (D)带 (E)曲柄滑块 5 下列表述中,不正确的有( )。 (A)当机器功率一定时,转速越大,转矩越小 (B)功率等于力在其作用点方向上的投影与速度乘积 (C)功率的单位是W (D)汽车功率一定时,它的牵引力的大小不变 (E)根据能量守恒定律,机器的输出功率应等于输入功率 6 链传动的主要优点有( )。 (A)和带传动相比,传动功率大 (B)能保持恒定的瞬时转速和瞬时传动化 (C)噪声低,适于传递高速运动

(D)与齿轮传动相比,中心间距可较大 (E)能在低速、重载和高温条件下工作 7 链传动的传动比与( )有关。 (A)主动轮的转速 (B)主动轮与从动轮转速之比 (C)主动轮的齿数 (D)主动轮与从动轮的中心距 (E)主动轮与从动轮齿数之比 8 下列各项表述中,正确的有( )。 (A)齿轮传动是用齿轮的轮齿相互啮合传递轴间的动力和运动的机械传动(B)链传动和带传动相比,链传动有准确的平均传动比 (C)螺旋传动,通常是将回转运动变换成直线运动 (D)带传动是通过传动带对从动轮的拉动来传递运动的 (E)在蜗轮蜗杆传动中,蜗杆是从动件,蜗轮是主动件 9 与机械传动方式相比,液压传动的主要缺点有( )。 (A)在同等体积和重量的条件下,输出功率较小 (B)不能保证严格的传动比 (C)对环境温度要求较高

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

0标志位 结果为0,ZF为1 结果不为0,ZF为0 所以传送指令(mov push pop... ),不会影响ZF 例: mov ax,1 sub ax,1 结果为0,ZF为1 mov ax,1 add ax,1 结果不为2,ZF不为0 2.PF标志 奇偶标志位 记录指令执行后,结果的二进制位中1的个数 为偶数,PF=1 为奇数,PF=0 例: mov ax,0001H add ax,001AH 结果00011011B 有4个1,PF=1 3.SF标志 符号标志位 结果为负,SF=1 结果为正,SF=0 有符号数与补码 有符号数 第一位为1表示负数 第一位为0表示正数 例00000001B 有符号数为+1 无符号数为1 10000001B 有符号数为-127 4.CF标志位 进位标志位 只相对无符号数而言 例: mov al,98H add al,al CF=1 add al,al cF=0

5.OF标志位 溢出标志位 运算结果超出了机器所能表达的范围,将产生溢出 只相对于有符号数而言 6.adc指令 带进位的加法 格式:adc 操作对象1,操作对象2 功能:操作对象1=操作对象1+操作对象2+CF 即adc ax,bx ax=ax+bx+CF 7.sbb指令 带借位的减法 sub ax,bx ax=ax-bx-CF 8.cmp指令 比较指令 cmp 操作对象1,操作对象2 计算操作对象1-操作对象2但不保存结果,仅仅根据计算结果对标志寄存器进行设置例cmp ax,ax 执行指令后 ZF=1 PF=1 SF=0 CF=0 OF=0 当比较2个无符号数时,考虑ZF sF标志位就可以 当比较2个有符号数时,要考察SF和OF(得知有没有溢出) 只要产生了溢出,结果就应该与SF所表现出来的正负相反 1.SF=1,OF=0 说明没有溢出,逻辑上真正结果的正负等于实际结果的正负 2.SF=1,OF=1 说明有溢出,逻辑上真正结果的正负不等于实际结果的正负 如果因为溢出而导致了实际结果为负,那么逻辑上真正的结果必为正 3.SF=0,OF=1 .... 9. 比较标志位(无符号) ZF=1 je ZF=0 jne

51单片机汇编语言教程:第7课--单片机的特殊功能寄存器 (基于HL-1、HJ-C52、HJ-3G实验板) (图片HL-1开发板) 通过前面的学习,我们已知单片机的内部有ROM、有RAM、有并行IO口,那么,除了这些东西之外,单片机内部究竟还有些什么,这些个零碎的东西怎么连在一起的,让我们来对单片机内部的寄存器作一个完整的功能分析吧! 下图中我们能看出,在51单片机内部有一个CPU用来运算、控制,有四个并行IO口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时计数器,串行IO口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。

单片机内部结构图 对上面的图进行进一步的分析,我们已知,对并行IO口的读写只要将数据送入到对应IO 口的锁存器就能了,那么对于定时计数器,串行IO口等怎么用呢?在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SFR)。事实上,我们已接触过P1这个特殊功能寄存器了,还有哪些呢?看下表1

表1

特殊功能寄存器地址映象表(一) 特殊功能寄存器地址映象表(二) 特殊功能寄存器地址映象表(三) 下面,我们介绍一下几个常用的SFR,看图2。 ACC:累加器,常常用A表示。这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。它的名字特殊,身份也特殊,稍后我们将学到指令,能发

现,所有的运算类指令都离不开它。 2、B:一个寄存器。在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。 3、PSW:程序状态字。这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们能了解CPU的当前状态,并作出对应的处理。它的各位功能请看表2 表2 PSW也称为标志寄存器,了解这个对于了解单片机原理非常的重要,存放各有关标志。其结构和定义如下: 下面我们逐一介绍sfr各位的用途 (1)CY:进位标志。用于表示Acc.7有否向更高位进位。8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。这样就没事了。例:78H+97H(01111000+10010111) (2)AC:辅助进位标志也叫半进位标志。用于表示Acc.3有否向Acc.4进位 例:57H+3AH(01010111+00111010) (3)F0:用户标志位,由我们(编程人员)决定什么时候用,什么时候不用。 (4)RS1、RS0:工作寄存器组选择位。这个我们已知了。 RS1、RS0=00——0区(00H~07H) RS1、RS0=01——1区(08H~0FH) RS1、RS0=10——2区(10H~17H) RS1、RS0=11——3区(18H~1FH) (5)0V:溢出标志位。表示Acc在有符号数算术运算中的溢出,什么是溢出我们稍后再谈吧。 (6)P:奇偶校验位:它用来表示ALU运算结果中二进制数位“1”的个数的奇偶性。若为奇数,则P=1,不然为0。 例:某运算结果是78H(01111000),显然1的个数为偶数,所以P=0。 4、DPTR(DPH、DPL):数据指针,能用它来访问外部数据存储器中的任一单元,如果不用,也能作为通用寄存器来用,由我们自已决定如何使用。16位,由两个8位寄存器DPH、DPL 组成。主要用于存放一个16位地址,作为访问外部存储器(外RAM和ROM)的地址指针。 5、P0、P1、P2、P3:这个我们已经知道,是四个并行输入输出口的寄存器。它里面的内容对应着管脚的输出。 6、SP:堆栈指针。(专用于指出堆栈顶部数据的地址。) 堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,

80C51单片机引脚图及引脚功能介绍 首先我们来介绍一下单片机的引脚图及引脚功能(如下图所示),引脚的具体功能将在下面详细介绍 单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 ⒈ 电源: ⑴ VCC - 芯片电源,接+5V; ⑵ VSS - 接地端; ⒉ 时钟: XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 ⒊ 控制线:控制线共有4根, ⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ① ALE功能:用来锁存P0口送出的低8位地址 ② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

⑵ PSEN:外ROM读选通信号。 ⑶ RST/VPD:复位/备用电源。 ① RST(Reset)功能:复位信号输入端。 ② VPD功能:在Vcc掉电情况下,接备用电源。 ⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。 ① EA功能:内外ROM选择端。 ② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 ⒋ I/O线 80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。 P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。 拿到一块单片机,想要使用它,首先必须要知道怎样去连线,我们用的一块89C51的芯片为例,我们就看一下如何给它连线。 1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40管脚,负极(地)接20管脚。 2、振蒎电路:单片机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶体震荡器,电容,连上就能了,按图1接上即可。 3、复位管脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。 4、 EA管脚:EA管脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个管脚相连,不然单片机就没法控制它了,那么和哪个管脚相连呢?单片机上除了刚才用掉的5个管脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1管脚按要求变为高或低电平。即然我们要控制

MCS-51系列单片机指令 目录: 1、A 2、X 3、R 4、S 5、N 6、O 7、P 8、M 9、J 10、L 11、D 12、I 13、C 一、以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 ANL C,bit

ANL C,/bit 1、ACALL addr11 指令名称:绝对调用指令 指令代码:{A10,A9,A8,10001},A[7:0] 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。操作内容: PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addrl0~0 字节数: 2 机器周期:2 使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令 指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn), n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令 指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri 指令名称:间接寻址加法指令

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

汇编-32位寄存器的功能及其使用 2011-06-10 12:16 汇编-32位寄存器的功能及其使用 总体上来讲32位寄存器可以分为一下几种: 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 首先介绍一下易失性 一些寄存器在函数中常常是变化的,而另外一些却是不变的。这是编译器所决定的。因为寄存器是不会自动保存的(虽然有些汇编语言会自动保存,但是x86 是不会的),所以编码时要自己保存。这句话的意思是:当一个函数被调用,是不保证在函数返回时,易失寄存器上的值不变的;但是函数必须负责保存非易失寄存器中的值。 微软编译器的寄存器使用习惯如下: 1) 易失寄存器: ecx, edx 2) 非易失寄存器 : ebx, esi, edi, ebp 3) 其他特殊寄存器 : eax, esp (discussed later) eax Eax 是一个32 为通用寄存器,一般的用途有两个:保存函数的返回值或者作为计算用的专用寄存器。在技术上来说,eax 是一个易失寄存器,因为他的值是不能保存的,eax 的值会在函数返回前设置为函数的返回值。除了ESP 寄存器,EAX 的这个功能(即保存返回值)可能是最重要的值得被记住的。eax 还会在数据计算时要用,比如乘法和除法。这种用法我们会在指令使用一文讲解。 下面是C 语言中函数返回的例子: return 3; // 返回3 对应的汇编语言:

mov eax, 3 ; 置EAX=3 ret ; 返回 ebx Ebx 是一个非易失通用寄存器。它没有特定的用途,但是常被置为一个函数中常用的值(如0 ),以此来加快计算速度。 ecx Ecx 是一个易失通用寄存器。常被用作函数的参数或者是循环的计数器。 __fastcall 的函数会将第一和第二个参数放置在ecx 和edx 寄存器中。另外,当调用一个类中的成员函数时,不管调用习惯是什么,指向类的指针常常是放在ecx 中。 另外,ecx 常被用作循环计算器。For 循环一般(尽管不是总是)会将循环计数放在ecx 中。Rep 指令也会将ecx 作为计数器,自动减少直到为0. 这类功能将在后面讨论。 edx Edx 是一个易失通用寄存器,偶尔会被用作函数的参数。就像ecx ,edx 常用在__fastcall 调用的函数中。 除了fastcall 调用中存放参数,编译器通常会将局部(短期)变量储存在edx 中。 esi Esi 是一个非易失通用寄存器,常被用作指针。特别的,在rep 一类的指令中,esi 通常指向“源”。因为esi 中数据是不会改变的,所以esi 通常会存储不会变的数据。 edi Esi 是一个非易失通用寄存器,常被用作指针。它和esi 差不多,只不过一般是作为“目标”指针。 ebp Ebp 是一个非易失通用寄存器,根据编译器的设置,它有两个截然不同的用途:要么作为框架指针,要么作为一般寄存器。 若没有优化编译或者代码是手工写的,ebp 会在函数开头就保存着堆栈的位置

C++与汇编语言(寄存器) 1 寄存器 32位cpu寄存器有:eax、ebx、ecx、edx、esp、ebp、edi、esi,eip和eflages。 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) ●4个数据寄存器(EAX、EBX、ECX和EDX): 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用来保存所有API函数的返回值。 寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、除、输入/输出等操作,它们的使用频率很 高; 寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。 由于存储的数据大小关系,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,32位寄存器EAX、EBX、ECX和EDX不仅可传 送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以, 这些32位寄存器更具有通用性。 ●2个变址和指针寄存器(ESI和EDI) 32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。 寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。 变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。 Si(source index)源变址寄存器 di(destination index)目的变址寄存器 ●2个重要的指针寄存器(ESP和EBP) 这两个指针寄存器都和“栈”有关。

相关主题