FS寄存器

合集下载

汇编语言中各寄存器的作用

汇编语言中各寄存器的作用

汇编语言中各寄存器的作用汇编语言中各寄存器的作用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),每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种”可分可合”的特性,灵活地处理字/字节的信息。

寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;寄存器CX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器DX称为数据寄存器(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。

stm32寄存器

stm32寄存器

stm32寄存器(一种算法,用以确认发送过程中是否出错)数据寄存器:CRC_DR可读写,复位值:0xFFFF FFFF;独立数据寄存器:CRC_IDR临时存放任何8位数据;控制寄存器:CRC_CR只零位可用,用于复位CRC,对其写1复位,由硬件清零;PWR电源控制(控制和管理电源)电源控制寄存器:PWR_CR控制选择系统的电源电源控制/状态寄存器:PWR_CSR睡眠或待机模式电源控制BKP备份寄存器(用以控制和管理备份数据)备份数据寄存器x:BKP_DRx (x = 1 … 10) 10个16位数据寄存器用以存储用户数据RTC时钟校准寄存器:BKP_RTCCR控制实时时钟的运行备份控制寄存器:BKP_CR控制选择清除备份数据的类型备份控制/状态寄存器:BKP_CSR对侵入事件的控制(时钟的选择、复位、分频)时钟控制寄存器(RCC_CR)各时钟状态显示时钟配置寄存器(RCC_CFGR)时钟分频时钟中断寄存器(RCC_CIR)控制就绪中断使能与否APB2外设复位寄存器(RCC_APB2RSTR) APB1外设复位寄存器(RCC_APB1RSTR) 复位APB各功能寄存器AHB外设时钟使能寄存器(RCC_AHBENR) AHB时钟使能控制APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设时钟使能寄存器(RCC_APB1ENR) APB1时钟使能控制备份域控制寄存器(RCC_BDCR)备份域时钟控制控制/状态寄存器(RCC_CSR)复位标志寄存器AHB外设时钟复位寄存器(RCC_AHBRSTR) 复位以太网MAC模块时钟配置寄存器2(RCC_CFGR2)时钟选择与分频(设置端口的功能)端口配置低寄存器(GPIOx_CRL) (x=A..E)端口配置高寄存器(GPIOx_CRH) (x=A..E)端口输入数据寄存器(GPIOx_IDR) (x=A..E)只读数据,读出IO口的状态端口输出数据寄存器(GPIOx_ODR) (x=A..E) 可读可写端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)端口位清除寄存器(GPIOx_BRR) (x=A..E)将某一端口清零端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 用于保护端口配值AFIO寄存器(将端口重映射到其它端口用以端口的第二功能)事件控制寄存器(AFIO_EVCR)选择时间输出端口与引脚复用重映射和调试I/O配置寄存器(AFIO_MAPR) 各寄存器功能引脚重映射选择外部中断配置寄存器1(AFIO_EXTICR1)外部中断配置寄存器2(AFIO_EXTICR2)外部中断配置寄存器3(AFIO_EXTICR3)外部中断配置寄存器4(AFIO_EXTICR4)外部中断引脚重映射选择EXTI 寄存器(外部中断控制器)中断屏蔽寄存器(EXTI_IMR)用于屏蔽或开放某一引脚的中断请求事件屏蔽寄存器(EXTI_EMR)用于屏蔽或开放某一引脚的事件上升沿触发选择寄存器(EXTI_RTSR)禁止或允许某一引脚的上升沿触发下降沿触发选择寄存器(EXTI_FTSR)禁止或允许某一引脚的下降沿触发软件中断事件寄存器(EXTI_SWIER)控制某引脚的软件中断挂起寄存器(EXTI_PR)显示某线的引脚有无触发请求DMA寄存器(脱离cpu的传输模式)DMA中断状态寄存器(DMA_ISR)中断情况标志器DMA中断标志清除寄存器(DMA_IFCR)手动清除标志位DMA通道x配置寄存器(DMA_CCRx)(x = 1…7)传输控制寄存器DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)数据传输剩余数量存储器DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7)设置数据传输外设源或目标地址DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7)设置存储器地址ADC寄存器(模数转换器)ADC状态寄存器(ADC_SR)AD转换标志寄存器ADC控制寄存器1(ADC_CR1)ADC控制寄存器2(ADC_CR2)设置AD转换的各种功能ADC采样时间寄存器1(ADC_SMPR1)ADC采样时间寄存器2(ADC_SMPR2)某通道选择固定的采样时间ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) 设置数据偏移量ADC看门狗高阀值寄存器(ADC_HTR)设置模拟看门狗的阀值高限ADC看门狗低阀值寄存器(ADC_LRT)设置模拟看门狗的阀值低限ADC规则序列寄存器1(ADC_SQR1)ADC规则序列寄存器2(ADC_SQR2)ADC规则序列寄存器3(ADC_SQR3)设置ADC顺序ADC注入序列寄存器(ADC_JSQR)ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4)ADC数据结果寄存器ADC规则数据寄存器(ADC_DR)DAC寄存器(数模转换器)DAC控制寄存器(DAC_CR)DAC软件触发寄存器(DAC_SWTRIGR)DAC通道1的12位右对齐数据保持寄存器(DAC_DHR12R1) DAC 通道1的12位左对齐数据保持寄存器(DAC_DHR12L1) DAC通道1的8位右对齐数据保持寄存器(DAC_DHR8R1) DAC通道2的12位右对齐数据保持寄存器(DAC_DHR12R2) DAC通道2的12位左对齐数据保持寄存器(DAC_DHR12L2) DAC通道2的8位右对齐数据保持寄存器(DAC_DHR8R2)双DAC的12位右对齐数据保持寄存器(DAC_DHR12RD)双DAC的12位左对齐数据保持寄存器(DAC_DHR12LD)双DAC的8位右对齐数据保持寄存器(DAC_DHR8RD) DAC通道1数据输出寄存器(DAC_DOR1)DAC通道2数据输出寄存器(DAC_DOR2)TIM1和TIM8寄存器(高级的定时计数寄存器)TIM1和TIM8控制寄存器1(TIMx_CR1)TIM1和TIM8控制寄存器2(TIMx_CR2)TIM1和TIM8从模式控制寄存器(TIMx_SMCR)TIM1和TIM8 DMA/中断使能寄存器(TIMx_DIER) TIM1和TIM8状态寄存器(TIMx_SR)TIM1和TIM8事件产生寄存器(TIMx_EGR)TIM1和TIM8捕获/比较模式寄存器1(TIMx_CCMR1) TIM1和TIM8捕获/比较模式寄存器2(TIMx_CCMR2) TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER) TIM1和TIM8计数器(TIMx_CNT) TIM1和TIM8预分频器(TIMx_PSC)TIM1和TIM8自动重装载寄存器(TIMx_ARR)TIM1和TIM8重复计数寄存器(TIMx_RCR)TIM1和TIM8捕获/比较寄存器1(TIMx_CCR1)TIM1和TIM8捕获/比较寄存器2(TIMx_CCR2)TIM1和TIM8捕获/比较寄存器3(TIMx_CCR3)TIM1和TIM8捕获/比较寄存器(TIMx_CCR4)TIM1和TIM8刹车和死区寄存器(TIMx_BDTR)TIM1和TIM8 DMA控制寄存器(TIMx_DCR)TIM1和TIM8连续模式的DMA地址(TIMx_DMAR)TIMx寄存器(控制定时器)控制寄存器1(TIMx_CR1)控制寄存器2(TIMx_CR2)从模式控制寄存器(TIMx_SMCR)DMA/中断使能寄存器(TIMx_DIER)状态寄存器(TIMx_SR)事件产生寄存器(TIMx_EGR)捕获/比较模式寄存器1(TIMx_CCMR1) 捕获/比较模式寄存器2(TIMx_CCMR2) 捕获/比较使能寄存器(TIMx_CCER)计数器(TIMx_CNT)预分频器(TIMx_PSC)自动重装载寄存器(TIMx_ARR)捕获/比较寄存器1(TIMx_CCR1)捕获/比较寄存器2(TIMx_CCR2)捕获/比较寄存器3(TIMx_CCR3)捕获/比较寄存器4(TIMx_CCR4)DMA控制寄存器(TIMx_DCR)连续模式的DMA地址(TIMx_DMAR)TIM6和TIM7寄存器(基本定时计数器)TIM6和TIM7控制寄存器1(TIMx_CR1)TIM6和TIM7控制寄存器2(TIMx_CR2)TIM6和TIM7 DMA/中断使能寄存器(TIMx_DIER)TIM6和TIM7状态寄存器(TIMx_SR)TIM6和TIM7事件产生寄存器(TIMx_EGR)TIM6和TIM7计数器(TIMx_CNT)TIM6和TIM7预分频器(TIMx_PSC)TIM6和TIM7自动重装载寄存器(TIMx_ARR)RTC寄存器(实时时钟)RTC控制寄存器高位(RTC_CRH)RTC控制寄存器低位(RTC_CRL)16.4.3 RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL) 16.4.4 RTC 预分频器余数寄存器(RTC_DIVH / RTC_DIVL) RTC计数器寄存器(RTC_CNTH / RTC_CNTL)16.4.6 RTC闹钟寄存器(RTC_ALRH/RTC_ALRL)IWDG寄存器(独立看门狗,用以监督系统硬件的正常运行)键寄存器(IWDG_KR)预分频寄存器(IWDG_PR)重装载寄存器(IWDG_RLR)状态寄存器(IWDG_SR)窗口看门狗(WWDG)寄存器(用以监督软件的正常运行)控制寄存器(WWDG_CR)配置寄存器(WWDG_CFR)状态寄存器(WWDG_SR)FSMC寄存器(可变静态存储控制器)NOR闪存和PSRAM控制器寄存器SRAM/NOR闪存片选控制寄存器1…4 (FSMC_BCR1…4)SRAM/NOR闪存片选时序寄存器1…4 (FSMC_BTR1…4)SRAM/NOR闪存写时序寄存器1…4 (FSMC_BWTR1…4) NAND 闪存和PC卡控制器寄存器PC卡/NAND闪存控制寄存器2..4 (FSMC_PCR2..4)FIFO状态和中断寄存器2..4 (FSMC_SR2..4)通用存储空间时序寄存器 2..4 (FSMC_PMEM2..4)属性存储空间时序寄存器 2..4 (FSMC_PATT2..4)I/O空间时序寄存器4 (FSMC_PIO4)ECC结果寄存器2/3 (FSMC_ECCR2/3)SDIO寄存器(数据传输控制器)SDIO电源控制寄存器(SDIO_POWER) SDIO时钟控制寄存器(SDIO_CLKCR) SDIO参数寄存器(SDIO_ARG)SDIO命令寄存器(SDIO_CMD)SDIO命令响应寄存器(SDIO_RESPCMD) SDIO响应1..4寄存器(SDIO_RESPx)SDIO数据定时器寄存器(SDIO_DTIMER) SDIO数据长度寄存器(SDIO_DLEN)SDIO数据控制寄存器(SDIO_DCTRL SDIO数据计数器寄存器(SDIO_DCOUNT) SDIO状态寄存器(SDIO_STA)SDIO清除中断寄存器(SDIO_ICR)SDIO中断屏蔽寄存器(SDIO_MASK)SDIO FIFO计数器寄存器(SDIO_FIFOCNT) SDIO数据FIFO寄存器(SDIO_FIFO)USB寄存器(usb传输控制器)通用寄存器USB控制寄存器(USB_CNTR)USB中断状态寄存器(USB_ISTR)USB帧编号寄存器(USB_FNR)USB设备地址寄存器(USB_DADDR)USB分组缓冲区描述表地址寄存器(USB_BTABLE)端点寄存器USB 端点n寄存器(USB_EPnR), n=[0..7]缓冲区寄存器发送缓冲区地址寄存器n(USB_ADDRn_TX)发送数据字节数寄存器n(USB_COUNTn_TX)接收缓冲区地址寄存器n(USB_ADDRn_RX)接收数据字节数寄存器n(USB_COUNTn_RX)CAN 寄存器(邮箱控制寄存器)CAN控制和状态寄存器CAN主控制寄存器(CAN_MCR)CAN主状态寄存器(CAN_MSR)CAN发送状态寄存器(CAN_TSR)CAN接收FIFO 0寄存器(CAN_RF0R)CAN接收FIFO 1寄存器(CAN_RF1R)CAN中断使能寄存器(CAN_IER)CAN错误状态寄存器(CAN_ESR)CAN位时序寄存器(CAN_BTR)CAN邮箱寄存器发送邮箱标识符寄存器(CAN_TIxR) (x=0..2)发送邮箱数据长度和时间戳寄存器(CAN_TDTxR) (x=0..2)发送邮箱低字节数据寄存器(CAN_TDLxR) (x=0..2)发送邮箱高字节数据寄存器(CAN_TDHxR) (x=0..2)接收FIFO邮箱标识符寄存器(CAN_RIxR) (x=0..1)接收FIFO邮箱数据长度和时间戳寄存器(CAN_RDTxR) (x=0..1) 接收FIFO邮箱低字节数据寄存器(CAN_RDLxR) (x=0..1)接收FIFO邮箱高字节数据寄存器(CAN_RDHxR) (x=0..1)CAN过滤器寄存器CAN 过滤器主控寄存器(CAN_FMR)CAN 过滤器模式寄存器(CAN_FM1R)CAN 过滤器位宽寄存器(CAN_FS1R)CAN 过滤器FIFO关联寄存器(CAN_FFA1R)CAN 过滤器激活寄存器(CAN_FA1R)CAN 过滤器组i的寄存器x (CAN_FiRx) (互联产品中i=0..27,其它产品中i=0..13;x=1..2)SPI和I2S寄存器(串行外设接口控制器)SPI控制寄存器1(SPI_CR1)SPI控制寄存器2(SPI_CR2)SPI 状态寄存器(SPI_SR)SPI 数据寄存器(SPI_DR)SPI CRC多项式寄存器(SPI_CRCPR) SPI Rx CRC寄存器(SPI_RXCRCR)SPI Tx CRC寄存器(SPI_TXCRCR)SPI_I2S配置寄存器(SPI_I2S_CFGR) SPI_I2S预分频寄存器(SPI_I2SPR)I2C寄存器(数据传输寄存器)控制寄存器1(I2C_CR1)控制寄存器2(I2C_CR2)自身地址寄存器1(I2C_OAR1)自身地址寄存器2(I2C_OAR2)数据寄存器(I2C_DR)状态寄存器1(I2C_SR1)状态寄存器2 (I2C_SR2)时钟控制寄存器(I2C_CCR)TRISE寄存器(I2C_TRISE)USART寄存器(通用同步异步收发器)状态寄存器(USART_SR)数据寄存器(USART_DR)波特比率寄存器(USART_BRR)控制寄存器1(USART_CR1)控制寄存器2(USART_CR2)控制寄存器3(USART_CR3)保护时间和预分频寄存器(USART_GTPR) OTG_FS控制和状态寄存器(数据传输控制器)OTG_FS全局寄存器OTG_FS控制和状态寄存器(OTG_FS_GOTGCTL)OTG_FS中断寄存器(OTG_FS_GOTGINT)OTG_FS AHB配置寄存器(OTG_FS_GAHBCFG)OTG_FS_USB配置寄存器(OTG_FS_GUSBCFG)OTG_FS复位寄存器(OTG_FS_GRSTCTL)OTG_FS控制器中断寄存器(OTG_FS_GINTSTS)OTG_FS中断屏蔽寄存器(OTG_FS_GINTMSK)OTG_FS接收状态调试读/OTG状态读和POP寄存器(OTG_FS_GRXSTSR / OTG_FS_GRXSTSP)OTG_FS接收FIFO长度寄存器(OTG_FS_GRXFSIZ)OTG_FS非周期性TX FIFO长度寄存器(OTG_FS_GNPTXFSIZ)OTG_FS非周期性TX FIFO/请求队列状态寄存器(OTG_FS_GNPTXSTS)OTG_FS通用控制器配置寄存器(OTG_FS_GCCFG)OTG_FS控制器ID寄存器(OTG_FS_CID)OTG_FS主机周期性发送FIFO长度寄存器(OTG_FS_HPTXFSIZ) OTG_FS设备IN端点发送FIFO长度寄存器(OTG_FS_DIEPTXFx)(其中x是FIFO的编号,x=1…4)主机模式下的寄存器OTG_FS主机模式配置寄存器(OTG_FS_HCFG)OTG_FS主机帧间隔寄存器(OTG_FS_HFIR)OTG_FS主机帧号/帧时间剩余寄存器(OTG_FS_HFNUM)OTG_FS主机周期性发送FIFO/请求队列寄存器(OTG_FS_HPTXSTS)OTG_FS主机所有通道中断寄存器(OTG_FS_HAINT)OTG_FS主机所有通道中断屏蔽寄存器(OTG_FS_HAINTMSK)OTG_FS主机端口控制和状态寄存器(OTG_FS_HPRT)OTG_FS主机通道x特性寄存器(OTG_FS_HCCHARx)(此处x代码通道号,x = 0...7)OTG_FS主机通道x中断寄存器(OTG_FS_HCINTx)(其中x代表通道号,x=0...7,)OTG_FS主机通道x中断屏蔽寄存器(OTG_FS_HCINTMSKx)(其中x为通道号,x=0...7) OTG_FS主机通道x传输长度寄存器(OTG_FS_HCTSIZx)(其中x为通道号,x=0...7)设备模式下的寄存器OTG_FS设备配置寄存器(OTG_FS_DCFG)OTG_FS设备控制寄存器(OTG_FS_DCTL)OTG_FS设备状态寄存器(OTG_FS_DSTS)OTG_FS设备IN端点通用中断屏蔽寄存器(OTG_FS_DIEPMSK)OTG_FS设备OUT端点通用中断屏蔽寄存器(OTG_FS_DOEPMSK) OTG_FS设备所有端点中断寄存器(OTG_FS_DAINT)OTG_FS所有端点中断屏蔽寄存器(OTG_FS_DAINTMSK)OTG_FS设备V BUS放电时间寄存器(OTG_FS_DVBUSDIS)OTG_FS设备V BUS脉冲时间寄存器(OTG_FS_DVBUSPULSE)OTG_FS设备IN端点FIFO空中断屏蔽寄存器(OTG_FS_DIEPEMPMSK)OTG_FS设备控制IN端点0控制寄存器(OTG_FS_DIEPCTL0)OTG设备端点x控制寄存器(OTG_FS_DIEPCTLx)(其中x为端点号,x=1…3)OTG_FS设备控制OUT端点0控制寄存器(OTG_FS_DOEPCTL0) OTG_FS设备OUT端点x控制寄存器(OTG_FS_DOEPCTLx)(其中x为端点号,x=1…3) OTG_FS设备端点x中断寄存器(OTG_FS_DIEPINTx)(其中x为端点号,x=0…3)OTG_FS设备端点x中断寄存器(OTG_FS_DOEPINTx)(其中x为端点号,x=0…3)OTG_FS设备IN端点0传输长度寄存器(OTG_FS_DIEPTSIZ0)OTG_FS设备OUT端点0传输长度寄存器(OTG_FS_DOEPTSIZ0) OTG_FS设备端点x传输长度寄存器(OTG_FS_DIEPTSIZx)(其中x 为端点号,x=1…3) OTG_FS设备IN端点传输FIFO状态寄存器(OTG-FS_DTXFSTSx)(其中x为端点号,x=0…3)OTG_FS设备端点x传输长度寄存器(OTG_FS_DOEPTSIZx)(其中x 为端点号,x=1…3) OTG_FS电源和时钟门控寄存器(OTG_FS_PCGCCTL)以太网寄存器(通信传输控制器)MAC寄存器以太网MAC设置寄存器(ETH_MACCR)以太网MAC帧过滤器寄存器(ETH_MACFFR)以太网MAC Hash列表高寄存器(ETH_MACHTHR)以太网MAC Hash列表低寄存器(ETH_MACHTLR)以太网MAC MII地址寄存器(ETH_MACMIIAR)以太网MAC MII数据寄存器(ETH_MACMIIDR)以太网MAC流控寄存器(ETH_MACFCR)以太网MAC VLAN标签寄存器(ETH_MACVLANTR)以太网MAC远程唤醒帧过滤器寄存器(ETH_MACRWUFFR)以太网MAC PMT控制和状态寄存器(ETH_MACPMTCSR)以太网MAC中断状态寄存器(ETH_MACSR)以太网MAC中断屏蔽寄存器(ETH_MAIMR)以太网MAC地址0高寄存器(ETH_MACA0HR)以太网MAC地址0低寄存器(ETH_MACA0LR)以太网MAC地址1高寄存器(ETH_MACA1HR)以太网MAC地址1低寄存器(ETH_MACA1LR)以太网MAC地址2高寄存器(ETH_MACA2HR)以太网MAC地址2低寄存器(ETH_MACA2LR)以太网MAC地址3高寄存器(ETH_MACA3HR)以太网MAC地址3低寄存器(ETH_MACA3LR)MMC寄存器以太网MMC控制寄存器(ETH_MMCCR)以太网MMC接收中断寄存器(ETH_MMCRIR)以太网MMC发送中断寄存器(ETH_MMCTIR)以太网MMC接收中断屏蔽寄存器(ETH_MMCRIMR)以太网MMC发送中断屏蔽寄存器(ETH_MMCTIMR)以太网MMC1次冲突后发送”好”帧的计数器寄存器(ETH_MMCTGFSCCR)以太网MMC1次以上冲突后发送”好”帧的计数器寄存器(ETH_MMCTGFMSCCR)以太网MMC发送”好”帧的计数器寄存器(ETH_MMCTGFCR)以太网MMC CRC错误接收帧计数器寄存器(ETH_ MMCRFCECR) 以太网MMC对齐错误接收帧计数器寄存器(ETH_ MMCRFAECR) 以太网MMC接收帧”好”单播帧计数器寄存器(ETH_ MMCRGUFCR)27.8.3。

Windows 中 FS 段寄存器

Windows 中 FS 段寄存器

代码运行在RING0(系统地址空间)和RING3(用户地址空间)时,FS 段寄存器分别指向GDT(全局描述符表)中不同段:在RING3下,FS段值是0x3B(这是WindowsXP下值;在Windows2000下值为0x38。

差别就是在XP下RPL=3);运行在RING0下时,FS段寄存器值是0x30。

下面以XP为例说说。

一. RING3下的FS当代码运行在Ring3下时,FS值为指向的段是GDT中的0x38段(RPL为3)。

该段的长度为4K,基地址为当前线程的线程环境块(TEB),所以该段也被称为“TEB段”。

WINXPSP1及以前的Windows2000等系统中,进程环境块(PEB)的地址固定为0X7FFDF000,该进程的第一个线程的TEB地址为0X7FFDE000,第二个TEB的地址为0X7FFDD000…..但是自从WindowsXP SP2开始PEB和TEB的地址都是随机映射的(详见博文:MiCreatePebOrTeb函数注释)。

下图是WindowsXP SP3下的TEB结构(大小为0XFB8):nt!_TEB+0x000 NtTib : _NT_TIB+0x000 ExceptionList : Ptr32+0x004 StackBase : Ptr32+0x008 StackLimit : Ptr32+0x00c SubSystemTib : Ptr32+0x010 FiberData : Ptr32+0x010 Version : Uint4B+0x014 ArbitraryUserPointer : Ptr32+0x018 Self : Ptr32 <——+0x01c EnvironmentPointer : Ptr32+0x020 ClientId : _CLIENT_ID+0x000 UniqueProcess : Ptr32+0x004 UniqueThread : Ptr32+0x028 ActiveRpcHandle : Ptr32+0x02c ThreadLocalStoragePointer : Ptr32+0x030 ProcessEnvironmentBlock : Ptr32 <—— +0x034 LastErrorValue : Uint4B+0x038 CountOfOwnedCriticalSections : Uint4B +0x03c CsrClientThread : Ptr32+0x040 Win32ThreadInfo : Ptr32……FS:[0X18]就是TEB所在的地址;FS:[0X30]就是PEB所在的地址。

新型FSK电力线收发器ST7540及其应用_王作东

新型FSK电力线收发器ST7540及其应用_王作东

新型FSK 电力线收发器ST7540及其应用王作东(辽河石油勘探局通信公司 辽宁盘锦 124010)摘 要:介绍了新型单片式FSK 电力线收发器ST 7540的特点及工作原理,并给出基于S T 7540的应用电路。

ST 7540采用半双工同步/异步FSK 通信方式,专为低压电力线数据传输而设计,较好地克服了低压电力线载波传输中的技术问题,可广泛应用于空间限制,成本敏感的家庭和建筑物自动化以及遥控监视系统。

关键词:电力线;数据传输;F SK ;ST 7540中图分类号:T M 73 文献标识码:B 文章编号:1004373X (2006)1305602FSK Power Line Transceiver ST7540and Its ApplicationW A NG Zuodong(Co mm unic a tions Co mpany ,Liaohe Pe tro leum Exploratio n Bureau ,Panjin ,124010,China )Abstract :T his paper intro duces the cha racteristics a nd principle o f FSK po wer line transceiver ST 7540,and gives an applied electric cir cuit of ST 7540.T he ST 7540is a half duplex sy nchr onous /asynchronous F SK modem de signed for pow er line co mmunication netw or k applica tions ,specifica lly fo r lo w vo ltag e po we r lines and da ta transmission desig n better o verco me the lo w v oltag e electricity transmission line car rie r technolog y ,w hich can be wide ly used in space co nst raints and co st sensitiveho me ,building automa tion and r emo te monito ring sy stems.Keywords :po we r line ;da ta transmission ;FSK ;S T 7540收稿日期:20060310 由意法半导体(ST )设计生产的新型电力线收发芯片ST 7540,支持多种独有或开放的FSK 调制技术通信协议,其中包括EHS 和KO NN EX (EN50090),可广泛应用于家庭和工业领域电力线通信,如供电公司的集中式抄表(AM R )业务。

浅谈一下FS段寄存器在用户层和内核层的使用

浅谈一下FS段寄存器在用户层和内核层的使用

菜鸟一枚,有一段时间不搞内核了,分享一下以前学习的结果,有不对的地方请各位指点,大牛飘过~~在R0和R3时,FS段寄存器分别指向GDT中的不同段:在R3下,FS段寄存器的值是0x3B,在R0下,FS段寄存器的值是0x30。

分别用OD和Windbg在R3和R0下查看寄存器(XP3),下图:FS寄存器的改变是从R3进入R0后和从R0退回到R3前完成的,也就是说:都是在R0下给FS赋不同值的。

(FS在R0和R3中是不同的值,在 KiFastCallEntry / KiSystemService中FS值由0x3B变成0x30在 KiSystemCallExit / KiSystemCallExitBranch / KiSystemCallExit2 中再将R3的FS恢复)一.R3与R0之间的互相转换代码:6nt!KiSystemService:808696a1 6a00 push 0808696a3 55 push ebp808696a4 53 push ebx808696a5 56 push esi808696a6 57 push edi808696a7 0fa0 push fs //旧的R3 下的FS 保存入栈808696a9 bb30000000 mov ebx,30h808696ae 668ee3 mov fs,bx //FS=0X30 FS 值变成了0X30.808696b1 64ff3500000000 push dword ptr fs:[0]808696b8 64c70500000000ffffffff mov dword ptr fs:[0],0FFFFFFFFh808696c3 648b3524010000 mov esi,dword ptr fs:[124h] //ESI=_ETHEAD808696ca ffb640010000 push dword ptr [esi+140h] //PreviousMode808696d0 83ec48 sub esp,48h808696d3 8b5c246c mov ebx,dword ptr [esp+6Ch]KiSystemCallExit部分代码代码:80869945 8d6550 lea esp,[ebp+50h]80869948 0fa1 pop fs // 恢复 FS 值8086994a 8d6554 lea esp,[ebp+54h]8086994d 5f pop edi8086994e 5e pop esi8086994f 5b pop ebx80869950 5d pop ebp80869951 66817c24088000 cmp word ptr [esp+8],80h二.R3下的FS当线程运行在R3下时,FS指向的段是GDT中的0x3B段。

深入研究 Win32 SEH

深入研究 Win32 SEH

深入研究 Win32 结构化异常处理本文关键字:SEH, Windows, VisualC摘要就像人们常说的那样,Win32 结构化异常处理(SEH)是一个操作系统提供的服务。

你能找到的所有关于 SEH 的文档讲的都是针对某个特定编译器的、建立在操作系统层之上的封装库。

我将从SEH 的最基本概念讲起。

Matt Pietrek 著董岩 译Victor 转载自 Xfocus 并整理在所有 Win32 操作系统提供的机制中,使用最广泛的未公开的机制恐怕就要数结构化异常处理(structured exceptionhandling,SEH)了。

一提到结构化异常处理,可能就会令人想起 _try、_finally 和 _except 之类的词儿。

在任何一本不错的 Win32 书中都会有对SEH 详细的介绍。

甚至连Win32 SDK 里都对使用 _try、_finally 和 _except 进行结构化异常处理作了完整的介绍。

既然有这么多地放都提到了 SEH,那我为什么还要说它是未公开的呢?本质上讲,Win32 结构化异常处理是操作系统提供的一种服务。

编译器的运行时库对这种服务操作系统实现进行了封装,而所有能找到的介绍SEH 的文档讲的都是针对某一特定编译器的运行时库。

关键字 _try、_finally 和 _except 并没有什么神秘的。

微软的 OS 和编译器定义了这些关键字以及它们的行为。

其它的 C++ 编译器厂商也只需要尊从它们定好的语义就行了。

在编译器的 SEH 层减少了直接使用纯操作系统的 SEH 所带来的危害的同时,也将纯操作系统的 SEH 从大家的面前隐藏了起来。

我收到过大量的电子邮件说他们都需要实现编译器级的 SEH 但却找不到公开的文档。

本来,我可以指着Visual C++ 和 Borlang C++ 的运行时库的源代码说看一下它们就行了。

但是,不知道是什么原因,编译器级的 SEH 仍是个天大的秘密。

EMSA5-FS产品手册说明书

EMSA5-FS产品手册说明书

产品手册EMSA5-FS产品手册简要描述32位,5流水线级,单发射,为功能安全设计的嵌入式处理器核。

概述EMSA5-FS是一个为功能安全而设计的处理器核。

容错处理器使用EMSA5的双实例或三实例,EMSA5是一种实现RISC-V指令集体系结构(ISA)的高效32位嵌入式处理器IP核。

哈佛体系结构EMSA5处理器按顺序实现单发射,顺序执行的5级流水线,支持RISC-V 32位base integer指令集(RV32I)或32位base embedded指令集(RV32E)。

EMSA5可以支持机器和用户特权模式,也可以选择标准乘法(M)、压缩(C)、控制和状态寄存器(Zicsr)和指令围栏(Zifencei)RISC-V扩展。

处理器核通过两个32位AHB lite总线(一个用于数据,一个用于指令)及其中断线与系统通信。

为满足最严格的功能安全要求而设计,EMSA5-FS实现了一个内存保护单元,采用模块冗余,使用纠错码(ECC),并提供了样本重置和安全管理器模块。

特权操作模式提供了一种机制,可以将应用程序用户模式进程彼此隔离,并将其与以计算机模式运行的受信任代码隔离。

高度可配置的内存保护单元支持内存分区,它通过限制对内存和内存映射模块(例如外围设备)的访问或特定类型的访问来提供保护。

ECC保护存储器和总线,模块冗余保护内部处理器模块。

最后,safety manager提供逻辑和时序监控,可以定制以满足最终应用程序的需求。

作为CAST处理器内核系列的一部分,EMSA5-FS处理器内核的设计易于重用,经过严格验证,并附带ISO 26262 ASIL-D Ready证书。

主要特点功能安全设计•ISO 26262 ASIL-D Ready设计•完整的认证包,包括FMEDA和SAM文件•故障安全功能:模块冗余、总线ECC保护、复位和安全管理器模块•内存保护单元,具有多达16个可配置大小的区域•版本:o EMSA5-FS-T(TMR),o EMSA5-FS-D(DMR)和o EMSA5-FS-L(DMR处于锁定状态)。

反调试技术总结(一)

反调试技术总结(一)

反调试技术总结(⼀)1.IsDebuggerPresent()这个函数读取进程的PEB结构的BeingDebugged标志,每个进程都有⾃⼰的PEB(Process Environment Block,进程环境块),这个结构的0x02偏移处是BeingDebugged标志。

Windows在调⼊进程,创建线程时,操作系统都会为每个线程创建TEB,⽽且FS段寄存器总是被设置成FS:0指向线程的TEB数据,TEB结构的0x30偏移处是PEB。

mov eax, fs:[30]movzx eax,byte ptr [eax+2]就可以得到BeingDebugged的值了。

由于这个检查很简单,很容易识别,壳⼀般都会加上⼀些垃圾代码进⾏混淆。

破除这样的反调试,第⼀,可以⽤OD插件,第⼆,在OD加载程序后,可以在数据窗⼝ctrl+G查找fs:[30]+2,把第⼀个字节由01改为00,IsDebuggerPresent就检测不出了。

2.PEB.NtGlobalFlagPEB另⼀个成员被称作NtGlobalFlag(偏移0x68),壳也通过它来检测程序是否⽤调试器加载。

通常程序没有被调试时,NtGlobalFlag成员值为0,如果进程被调试这个成员通常值为0x70。

mov ebx, [fs:0x30]cmp dword [ebx+0x68], 0jne .debugger_found破解⽅法:a.可以将 PEB.NtGlobalFlag设为进程未被调试时的相应值。

var pebvar patch_addrmov peb,[7ffde000+30]lea patch_addr,[peb+68]mov [patch_addr],0b.OD的插件。

3.PEB.ProcessHeap.Flagspeb的另⼀个成员PEB.ProcessHeap.Flags也可以作为检测的标志,正常情况下,该标志应该为2,被调试时⼀般会被设为0x50000062.mov eax, fs:[30h]mov eax, [eax+18h] ;PEB.ProcessHeapmov eax, [eax+0ch] ;PEB.ProcessHeap.Flagscmp eax, 2jne .debugger_found4.PEB.ProcessHeap.ForceFlags进程堆⾥另外⼀个标志,ForceFlags,它也由⼀组标志组成,正常情况下,该值应为0,被调试时⼀般会被设为0x40000060。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用的寄存器FS段寄存器因为Win32中的地址为平坦模式,ds,ss,cs等各段的段基地址都指向同一个地方,所以平常用的逻辑地址都是默认以这些段为基址的,不管是数据段还是代码段,只要他们的偏移相等,那么他们就是寻址一样的物理内存,所以我们就只需指明偏移就能得到统一的寻址目标,不管这个目标是在代码段还是数据段或者堆栈段之中。

WriteProcessMemory用的就是这样的“逻辑地址”,像"0xXXXXXXXX",其实,这样的逻辑地址实际上是这样的形式:ds:XXXXXXXXX,只因为ds=ss=cs,所以可以用ds:XXXXXXXXX来寻址cs:XXXXXXXX或者ss:XXXXXXXX,也就是只需要指定偏移就足够寻址代码段或者数据段了。

但是在win32中,fs却和各个段寄存器的值不一样,所以要想用ds来寻址fs指向的内存,那就得转换偏移了,因为fs:XXXXXXXX和ds:XXXXXXXX指的并不是同样的内存;而如果用WriteProcessMemory寻址某个地址如 0xXXXXXXXX的话,它默认的寻址却是ds:XXXXXXXX。

一个程序本质上都是由 bss段、data段、text段三个组成的。

这样的概念,不知道最初来源于哪里的规定,但在当前的计算机程序设计中是很重要的一个基本概念。

而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。

在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。

bss段属于静态内存分配,即程序一开始就将其清零了。

在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。

在《Programming ground up》里对.bss的解释为:There is another section called the .bss. This section is like the data section, except that it doesn’t take up space in the executable.text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。

寄存器一般分为以下几类4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)①数据寄存器AX称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;BX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;CX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;DX称为数据寄存器(Data Register)。

在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

②变址和指针寄存器(ESI和EDI)寄存器ESI、EDI、SI和DI统称为变址寄存器(Index Register),主要用于存放存储单元在段内的偏移量,通过它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们可作一般的存储器指针使用。

在字符串操作指令的执行过程中,对它们有特定的要求,且具有特殊的功能③指针寄存器(ESP和EBP)32位CPU有2个32位通用寄存器EBP和ESP。

其低16位对应先前CPU中的BP 和SP,低16位数据的存取不影响高16位的数据。

寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。

④段寄存器(ES、CS、SS、DS、FS和GS)CS——代码段寄存器(Code Segment Register),其值为代码段的段值;DS——数据段寄存器(Data Segment Register),其值为数据段的段值;SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。

在16位CPU系统中,它只有4个段寄存器.在32位微机系统中,它有6个段寄存器.32位CPU有两个不同的工作方式:实模式和保护模式。

在每种方式下,段寄存器的作用是不同的。

有关规定简单描述如下:实模式:前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为“段值:偏移量”的形式。

为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。

保护模式:在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。

注:这里特别提供FS寄存器的偏移说明FS寄存器指向当前活动线程的TEB结构(线程结构)偏移说明000 指向SEH链指针004 线程堆栈顶部008 线程堆栈底部00C SubSystemTib010 FiberData014 ArbitraryUserPointer018 FS段寄存器在内存中的镜像地址020 进程PID024 线程ID02C 指向线程局部存储指针030 PEB结构地址(进程结构)034 上个错误号举例:POP DWORD PTR FS:[004]这个句指令的意思就是将堆栈顶部的4个字节的字符弹栈出去!⑤指令指针寄存器(EIP)32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。

指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。

在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。

所以,在理解它们的功能时,不考虑存在指令队列的情况。

在实模式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位的IP来反映程序中指令的执行次序。

6、标志寄存器一、运算结果标志位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。

“溢出”和“进位”是两个不同含义的概念,不要混淆。

如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。

二、状态控制标志位状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。

1、追踪标志TF(Trap Flag)当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。

这种方式主要用于程序的调试。

指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。

2、中断允许标志IF(Interrupt-enable Flag)中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。

但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。

具体规定如下:(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。

CPU的指令系统中也有专门的指令来改变标志位IF的值。

3、方向标志DF(Direction Flag)方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

具体规定在第5.2.11节——字符串操作指令——中给出。

相关文档
最新文档