序段前缀的字段含义

PSP信息区的字段分布如下表10.1所列。

表10.1 PSP信息区的字段分布表

偏移量内容含义偏移量内容含义
00~01H程序结束指令中断20H2E~31H保留
02~03H分配给该程序的最后段的段地址32~33H文件句柄表的长度
04~09H保留34~37H指向文件句柄表的远指针
0A~0DH中断22H的地址(处理终止程序)38~4FH保留
0E~11H中断23H的地址(处理^Break)50~51H中断21H的功能调用
12~15H中断24H的地址(处理严重错误)52~5BH保留
16~17H保留5C~6BH参数区1
18~2BH缺省的文件句柄表6C~7FH参数区2
2C~2DH程序环境块的段地址80~FFH存储缺省DTA的缓冲区

http://www.changsha.cn/bj/yl/xywy/2014/0416/563788.html
http://zx.zynews.com/hyzx/yskt/5398098762.html
http://www.yltvb.com/xwbk/redianxinwen/5389545718.html
http://zx.zynews.com/hyzx/yskt/5398102537.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563789.html
http://zx.zynews.com/hyzx/yskt/5398105715.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563790.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563791.html
http://zx.zynews.com/hyzx/yskt/5398108045.html
http://zx.zynews.com/hyzx/yskt/5398111150.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563792.html
http://zx.zynews.com/hyzx/yskt/5398113539.html
http://www.changsha.cn/bj/yl/xywy/2014/0416/563793.html
http://zx.zynews.com/hyzx/yskt/5398117977.html
http://zx.zynews.com/hyzx/yskt/5398161349.html
http://www.zznews.cn/hyzx/jkxx/5406327705.html
http://www.lfxww.com/2014/shichangshangxun/2014/0416/804574.html
http://zx.zynews.com/hyzx/yskt/5390123823.html



PSP信息区的字段说明:

◆18~2BH字段:

该字段内共有20个字节,每个字节存储一个文件句柄,所以,系统允许应用程序在某一时刻最多只能打开20个文件。

前5个字节存储系统标准设备的句柄,可参阅8.3.6节——系统标准设备的句柄。

若某文件需要同时打开更多的文件,则需要调整文件句柄数。即:先用中断21H之功能4AH释放内存,再用其功能67H来设置新的文件句柄数。

MOV BX, NewNum ;新的文件句柄最大数(20~65535)
MOV AH, 67H
INT 21H

◆ 2C~2DH字段:该字段存放程序运行环境的段地址,程序的缺省运行环境有160个字节,最多可达32K。该环境含有系统命令,如:COMSPEC、PATH、PROMPT和SET。
◆  5C~6BH字段:该字段存放命令行的第一个参数。假设要执行下列命令:

Masm D:test.asm

这时,04H(驱动器D)、8个字符的文件名和3个字符的后缀存放在该区域,没有存放字符的单元用空格(20H)来填充。若省缺驱动器和文件名,则第一个字节为00H,其它单元为20H。

◆ 6C~7FH字段:

该字段存放命令行的第二个参数。假设要执行下列命令:

Masm D:test.asm,test.obj

这时,test.obj作为第二参数存入该字段,存储方式如上字段。

<think> 我们正在讨论HID报告描述符中的条目类型。用户询问0x26前缀含义。 根据HID规范,每个条目由一个字节的前缀(prefix)和可选的数据字节组成。前缀字节的高4位(bTag)表示条目的标签,中间2位(bType)表示条目的类型(主条目、全局条目、局部条目),低2位(bSize)表示数据部分的字节数(0、1、2、4字节)。 0x26的二进制表示是:00100110 分解: - 高4位(bTag):0010 -> 十进制2 - 中间2位(bType):01 -> 表示全局条目(Global Item) - 低2位(bSize):10 -> 表示数据部分有2个字节(因为10二进制为2,但注意实际数据字节数由bSize决定:00表示0字节,01表示1字节,10表示2字节,11表示4字节) 因此,0x26是全局条目(Global Item)中的一种。具体是哪个标签呢?根据规范,全局条目的标签(bTag)定义如下: 0x00: Usage Page 0x01: Logical Minimum (0x15) 0x02: Logical Maximum (0x25) 0x03: Physical Minimum (0x35) 0x04: Physical Maximum (0x45) 0x05: Unit Exponent (0x55) 0x06: Unit (0x65) 0x07: Report Size (0x75) 0x08: Report ID (0x85) 0x09: Report Count (0x95) 0x0A: Push (0xA5) 0x0B: Pop (0xB5) 0x0C: Reserved ... 一直到0x0F 但是,请注意,前缀字节的bTag部分只占4位,所以范围是0到15(0x0到0xF)。而我们这里的bTag是0010,即十进制2,对应的是Logical Maximum(逻辑最大值)?不对,因为Logical Maximum的bTag是0x02,对应的前缀应该是0x2?,其中低2位是bSize。 实际上,我们之前遇到的Logical Maximum是0x25,我们来分解0x25: 0x25 = 00100101 bTag: 0010 -> 2(即Logical Maximum的标签) bType: 01 -> 全局条目 bSize: 01 -> 1字节数据 而0x26: bTag: 0010 -> 2(同样表示Logical Maximum的标签) bType: 01 -> 全局条目 bSize: 10 -> 2字节数据 所以,0x26和0x25都是Logical Maximum条目,区别在于它们后面的数据部分字节数不同: - 0x25:后面跟1个字节的数据(8位) - 0x26:后面跟2个字节的数据(16位) 因此,0x26的含义是:设置一个16位的有符号整数作为逻辑最大值。 举例: 如果报告描述符中出现:0x26, 0xFF, 0x00 这表示逻辑最大值是0x00FF(小端?注意:HID中的多字节数据是低位字节在前,高位字节在后)?实际上,HID规范规定数据按小端方式存储(如果数据超过1字节)。但是,在报告描述符中,数据部分直接按顺存储,不需要转换,因为主机在解析时会按照给定的字节数读取并组合。 0x26, 0xFF, 0x00 表示逻辑最大值是0x00FF(即255)?注意:0x00FF是256-1=255,但这里我们有两个字节,第一个字节是0xFF,第二个字节是0x00,组合起来(小端)就是0x00FF(即255)。 但是,注意:Logical Maximum可以是有符号整数,也可以是无符号整数,这取决于Logical Minimum(0x15)的设置。如果Logical Minimum是非负数,那么Logical Maximum就是无符号整数;如果Logical Minimum是负数,那么Logical Maximum就是有符号整数(并且必须大于等于Logical Minimum)。 所以,0x26的作用和0x25一样,都是设置逻辑最大值,只是数据长度不同。 同样的,在HID描述符中,我们还会看到: 0x35: Physical Minimum (1字节数据) 0x36: Physical Minimum (2字节数据) 0x45: Physical Maximum (1字节数据) 0x46: Physical Maximum (2字节数据) 等等。 总结: 0x26是全局条目,表示逻辑最大值(Logical Maximum),后面跟2个字节的数据(16位)。 引用说明: [^1] 提到了HID描述符工具,我们可以用它来验证。 [^4] 中提供了HID协议详解,其中关于全局条目的部分可以参考。 现在,我们按照要求生成相关问题。 </think> ### HID协议中0x26前缀含义解析 在HID报告描述符中,**`0x26`是全局条目(Global Item)**,具体表示**16位数据宽度的逻辑最大值(Logical Maximum with 16-bit data)**。以下是详细解析: #### 1. 二进制结构分析 `0x26`的二进制表示为`00100110`: - **高4位(bTag)**:`0010`(十进制2)→ **逻辑最大值**标识 - **中间2位(bType)**:`01` → **全局条目** - **低2位(bSize)**:`10`(二进制2)→ **数据部分占2字节** ```plaintext 0x26 = 00100110 ││││└┴─ bSize (10=2字节) │└┴─── bType (01=Global) └──── bTag (0010=Logical Maximum) ``` #### 2. 核心功能 - **定义数据上限**:与`0x25`(8位逻辑最大值)功能相同,但支持更大数值范围 - **数据格式**:后跟**2字节的有符号整数**(小端) - **作用范围**:限定数据字段的逻辑值上限,与`0x15`(逻辑最小值)配合使用 - **典型应用**:需表示较大数值的场景(如高精度传感器、游戏摇杆等) #### 3. 技术特性 1. **数值范围扩展**: - `0x25`(1字节)最大范围:-128~127 或 0~255 - `0x26`(2字节)最大范围:**-32,768~32,767** 或 **0~65,535** ```c // 摇杆精度提升示例 0x15, 0x00, // Logical Minimum (0) 0x26, 0xFF, 0x1F, // Logical Maximum (8191) = 0x1FFF 0x75, 0x10, // Report Size (16 bits) ``` 2. **数据存储规则**: - 采用**小端(Little-Endian)**:低位字节在前 - 示例:`0x26, 0xFF, 0x7F` 表示最大值32,767(0x7FFF) 3. **与物理值关系**: - 逻辑值通过`0x65`(单位)和`0x55`(指数)转换为物理值 - 例如:逻辑值0~65,535 可映射为0~5V电压[^4] #### 4. 错误处理 - **范围冲突**:若逻辑最小值(`0x15`)> 逻辑最大值(`0x26`),HID解析器会拒绝描述符 - **位宽不匹配**:报告大小(`0x75`)必须 ≥ 逻辑值所需位宽(如16位值需`0x75, 0x10`) - **符号冲突**:逻辑最小/最大值必须同为有符号或无符号 > 📌 **实用建议**:使用[HID Descriptor Tool](http://www.usb.org/developers/hidpage#HID Descriptor Tool)[^3]验证描述符时,工具会自动检测`0x26`的数值范围是否合法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值