[体系架构][x86]A20地址线的操作

CPU位宽与其寻址能力并不是挂钩的 1.认识计算机总线 冯诺伊曼计算机结构 总线是连接多个部件的信息传输线,是各部件共享的传输介质。输入输出设备可以和主存通信而不用影响CPU的工作,这样CPU的工作效率得到了很大的提升。 系统总线: 用于IO接口、主存、CPU之间的信息传输,IO和CPU之间只传输指令信息。 主存总线: 专门用于主存和CPU之间的信息传输 1.2 系统总线的分类 数据总线: 数据总线用来传输各功能部件之间的数据信息,它是双向传输总线,其位数就是数据总线的宽度。总之是用来传输数据的。 地址总线: 地址总线主. 阅读详情

使用 INT 15 中断

/*
 * 关闭A20
 * 返回结果:
 *    成功:CF=0
 *         AH=0
 *    失败:CF=1
 *         AH=01   键盘控制器处于secur模式
 *           =86H  功能不支持
 */
movw    $0x2400, %ax
int 0x15
/*
 * 打开A20
 * 返回结果:
 *    成功:CF=0
 *         AH=0
 *    失败:CF=1
 *         AH=01   键盘控制器处于secur模式
 *           =86H  功能不支持
 */
movw    $0x2401, %ax
int 0x15
/*
 * 获取A20状态
 * 返回结果:
 *    成功:CF=0
 *         AH=0
 *         AL=0    已关闭
 *           =1    已打开
 *    失败:CF=1
 *         AH=01   键盘控制器处于secur模式
 *           =86H  功能不支持
 */
movw    $0x2402, %ax
int 0x15

使用0x92端口

/*
 * 打开
 */
inb $0x92
andb    $(~0x03), %al
orb $0x02, %al
outb    $0x92
/*
 * 关闭
 */
inb $0x92
andb    $(~$0x02), %al
outb    $0x92

操作键盘控制器

    call    gate_a20_flush_keyboard_buffer

    movb    $0xd1, %al
    outb    $0x64
4:
    inb $0x64
    andb    $0x02, %al
    jnz 4b

    movb    $0xdd, %al
    testb   %dl, %dl
    jz  5f
    orb $0x02, %al
5:  outb    $0x60
    call    gate_a20_flush_keyboard_buffer

    /* output a dummy command (USB keyboard hack) */
    movb    $0xff, %al
    outb    $0x64
    call    gate_a20_flush_keyboard_buffer

gate_a20_flush_keyboard_buffer:
    inb $0x64
    andb    $0x02, %al
    jnz gate_a20_flush_keyboard_buffer
2:
    inb $0x64
    andb    $0x01, %al
    jz  3f
    inb $0x60
    jmp 2b
3:
    ret
基于ARM嵌入式系统的PC/104总线设计 当前已经进入嵌入式系统全面应用时代,基于ARM处理器和嵌入式Linux的嵌入式系统以其设计灵活、软硬件可裁剪、性能优越、成本低等特点和优势,倍受设计者和使用者青睐。其在低功耗、低成本应用领域确立了其市场领导地位;同时随着x86架构的不断成熟和x86处理器的应用范围越来越广,人们逐步开始认识到其本身架构的限制,在工业控制领域嵌入式ARM处理器将有望取代传统的X86处理器。  PCI04总 阅读详情

相关推荐

X86的A20开关与回绕

x86下面工作模式與A20有關的就是保護模式跟真實模式而引出的A20开关问题

关于A20

A20是什么 1981年8月,IBM 公司最初推出的个人计算机所使用的 CPU 是 Intel 8088。在该微机中地址线只有 20 根(A0~A19)。当时,计算机的 RAM 只有几百 KB 或不到 1MB 时,20 根地址线已足够用来寻址。其所能寻址的最高地址是0xffff:0xffff,即0x10ffef。对于超出 0x100000(1MB)的寻址地址, 将默认回卷到0x0ffef。 I...

车子(chezi) 3199

RC522完整程序

///////////////////////////////////////////////////////////////////// //功 能:寻卡 //参数说明: req_code[IN]:寻卡方式 // 0x52 = 寻感应区内所有符合14443A标准的卡 // 0x26 = 寻未进入休眠状态的卡 // pTagType[OUT]:卡片类型代码 // 0x4400 = Mifare_UltraLight // 0x0400 = Mifare_One(S50) // 0x0200 = Mifare_One(S70) // 0x0800 = Mifare_Pro(X) // 0x4403 = Mifare_DESFire //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// signed char PcdRequest(unsigned char req_code,unsigned char *pTagType) { signed char status; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x07); SetBitMask(TxControlReg,0x03); ucComMF522Buf[0] = req_code; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen;); if ((status == MI_OK) && (unLen == 0x10)) { *pTagType = ucComMF522Buf[0]; *(pTagType+1) = ucComMF522Buf[1]; } else { status = MI_ERR; } return status; } ///////////////////////////////////////////////////////////////////// //功 能:防冲撞 //参数说明: pSnr[OUT]:卡片序列号,4字节 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// signed char PcdAnticoll(unsigned char *pSnr) { signed char status; unsigned char i,snr_check=0; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x00); ClearBitMask(CollReg,0x80); ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x20; status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen;); if (status == MI_OK) { for (i=0; i<4; i++) { *(pSnr+i) = ucComMF522Buf[i]; snr_check ^= ucComMF522Buf[i]; } if (snr_check != ucComMF522Buf[i]) { status = MI_ERR; } } SetBitMask(CollReg,0x80); return status; } ///////////////////////////////////////////////////////////////////// //功 能:选定卡片 //参数说明: pSnr[IN]:卡片序列号,4字节 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// signed char PcdSelect(unsigned char *pSnr) { signed char status; unsigned char i; unsigned int unLen; unsigned char ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x70; ucComMF522Buf[6] = 0; for (i=0; i<4; i++) { ucComMF522Buf[i+2] = *(pSnr+i); ucComMF522Buf[6] ^= *(pSnr+i); } CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf;[7]); ClearBitMask(Status2Reg,0x08); status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen;); if ((status == MI_OK) && (unLen == 0x18)) { status = MI_OK; } else { status = MI_ERR; } return status; } ///////////////////////////////////////////////////////////////////// //功 能:验证卡片密码 //参数说明: auth_mode[IN]: 密码验证模式 // 0x60 = 验证A密钥 // 0x61 = 验证B密钥 // addr[IN]:块地址 // pKey[IN]:密码 // pSnr[IN]:卡片序列号,4字节 //返 回: 成功返回MI_OK ///////////////////////////////////////////////////////////////////// signed char PcdAuthState(unsigned char auth_mode,unsigned char addr,unsigned char *pKey,unsigned char *pSnr) { signed char status; unsigned int unLen; unsigned char i,ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0] = auth_mode; ucComMF522Buf[1] = addr; for (i=0; i<6; i++) { ucComMF522Buf[i+2] = *(pKey+i); } for (i=0; i<6; i++) { ucComMF522Buf[i+8] = *(pSnr+i); } // memcpy(&ucComMF522Buf;[2], pKey, 6); // memcpy(&ucComMF522Buf;[8], pSnr, 4); status = PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen;); if ((status != MI_OK) || (!(ReadRawRC(Status2Reg) & 0x08))) { status = MI_ERR; } return status; }

linux系统setup设置端口,Linux内核之setup.s

1.复位硬盘系统:BIOS的int 13中断,分两步完成;a.获取磁盘机的类型: AH=15H\DL=0x81;b.重置磁盘机系统(复位): AH= 00H\DL = 80;2.检查setup.S代码的末尾签名0xAA55和0x5A5A;0xAA55和0x5A5A是用来确保正确引导setup.s的两个标志!检查setup代码结尾处的标志是否为AA55或5A5A,!假如是,则跳到good_sig1处...

weixin_33166692的博客 359

基于4G cat.1的低功耗车牌识别摄像头模组介绍

在消费类摄像头领域,4G低功耗相机已经非常普遍,在可视门锁,婴儿看护,户外监控等领域都获得了很好的应用.但是在工业领域,低功耗相机的应用还不是那么广泛.这里要介绍一款基于4G cat.1的低功耗车牌识别摄像头模组,在待机状态只有MCU和毫米波雷达以1Hz的频率工作,功耗低至500uA,并可以通过4G模块远程唤醒模组.

bindaz的专栏 1647

Spring Boot Admin 完整教程

SpringBootAdmin是一个用于管理和监控SpringBoot应用的Web工具,提供健康检查、性能指标、日志管理等核心功能。系统由AdminServer(管理服务器)和AdminClient(客户端)组成,通过Actuator端点收集数据。配置需添加Maven/Gradle依赖,通过@EnableAdminServer注解启动服务端,客户端需配置注册信息。支持UI自定义、安全认证(基本/OAuth2)、多种通知方式(邮件/Slack)及与Eureka/Consul等服务发现的集成。最佳实践包括分层监

weixin_51040479的博客 2553

A20总线

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34102807的博客 1034

从混乱到清晰:用QJsonObject重构你的Qt网络API数据解析层(避坑指南)

本文详细介绍了如何使用QJsonObject重构Qt网络API数据解析层,避免常见的JSON解析陷阱。通过安全解析模式、数据绑定和性能优化技巧,帮助开发者构建高效、健壮的解析逻辑,提升代码可维护性和可读性。特别适用于处理复杂嵌套的JSON响应数据场景。

weixin_29011667的博客 230

A20地址线科普【转载】

1981 年8 月,IBM 公司最初推出的个人计算机IBM PC 使用的CPU 是Intel 8088。在该微机中地址线只有20 根(A0 – A19)。在当时内存RAM 只有几百KB 或不到1MB 时,20 根地址线已足够用来寻址这些内存。其所能寻址的最高地址是0xffff:0xffff,也即0x10ffef。对于超出0x100000(1MB)的寻址地址将默认地环绕到0x0ffef。当IBM 公...

weixin_30390075的博客 388

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2209

Fluent 中多相流模型全面解析

3.颗粒或液滴在连续相中的运动:若关注颗粒或液滴在连续相中的运动轨迹、分布规律以及与连续相的相互作用,如喷雾干燥、气力输送等过程,Eulerian-Lagrangian 模型则是最佳选择。Eulerian-Eulerian 模型可以准确模拟气体在固体颗粒中的流动情况,包括颗粒的流化状态、气体与颗粒之间的传热传质过程,为气固流化床的优化设计和操作提供依据。通过该模型,可以了解混合器内不同位置的混合程度、颗粒的运动轨迹以及液固相间的相互作用,从而改进混合器的结构和操作条件,提高混合效率。

khhdp的博客 3085

2020-09-19

从实模式进入保护模式 历史原因: 因为A20地址线被关闭。 步骤:01 读入0X92端口 0X92端口,为了兼容老设备,存在。第7到2位不用,第0位是 init-now,当0到1时计算机重启。 第1位是控制A20,当为1时A20打开。 步骤:02 改写0x92中的内容。 步骤:03 CR0,将CR0,的第一位改为1,正式进入保护模式。 ...

qq_43597357的博客 163

PyCharm 2023最新版安装配置全攻略(附永久激活教程)

本文详细介绍了PyCharm 2023最新版的安装配置全流程,包括版本选择、初始配置、插件生态、工程模板、调试优化及团队协作等关键步骤。特别针对专业版和社区版的功能差异进行对比,帮助开发者高效搭建Python开发环境,提升编码效率与团队协作能力。

p4q5r6s7t的博客 865

学习linux内核

【2009-04-03】 linux-0.00的代码已经反复读过几遍,每一行都读的很明白了,感觉收获不小,虽然只有300多行代码,但是让我对X86体系架构有了更进一步的理解,像调度的基本原理、定时器的使用、A20地址线怎样开启、最底层的磁盘操作、最底层的显示控制、怎样从内核任务切到用户任务、GDTCPU的心跳是怎么来的等等技术细节,还有对GDT、LDT、TSS、IDT表结构...

weixin_34255055的博客 761

康耐视visionpro-CogBlobTool工具详细说明

康耐视visionpro-CogBlobTool工具详细说明

视觉人机器视觉的博客 1724

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

weixin_42412049的博客 2584

当我们谈论开机的时候我们都在谈论什么(二)——保护模式

本文所谈论到的cpu是Intel的x86体系架构的cpu,作者才疏学浅,其他体系的暂不讨论。读者可以未经作者允许随意转载,但请注明出处并且保证文章的完整性本文主要谈一下几个方面: 1、保护模式和实模式是个什么鬼 2、怎么由保护模式进入实模式 3、实模式跳转到保护模式的示例代码在讲之前照例讲几句闲话: 1、实模式是操作系统之源,没有它,操作系统就是无本之木、无水之源 2、现在操作系统的书很少

sium__的专栏 1095

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

32位系统与内存限制

转载自    http://wenku.baidu.com/view/ce7780eb6294dd88d0d26ba1.html 以下内容中,约定 直接寻址表示OS和应用程序不经额外转换而对物理地址的直接访问, 物理寻址(平面寻址)表示处理器通过全部地址线对物理地址

理性的幻想 2485

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

底层/汇编

IA-32:IA-32(Intel Architecture),英特尔体系架构,英特尔从486开始采用,也就叫X86-32架构,在同一时间内可以处理32位二进制数据。CPU的工作宽度是32位。

anewhuahua的专栏 437

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

关于X86架构的 Gate A20相关理解

关于X86架构的 Gate A20相关理解 由于8086在设计时没有考虑会成为一个开放的平台,后来因为虽然因为种种原因,成为了一个开放的平台。因为当时设计时的局限性,现在的之后的X86系列架构为了兼容之前的架构版本留下了 Gate A20这个历史问题。 关于X86的来源,我想就不用了多说了,8086在设计时,设置的地址总线为20根,于是显而易见,当时的8086能够访问的内存地址也就只有1M,由于段寄存器大小只有16位,也就是说只能存放地址为64k,所以8086使用“起始地址*16 + 偏移量”的方式来凑够2

zw的博客 2693

手写操作系统:二级引导程序

手写操作系统:二级引导程序

2301_80926085的博客 2717

x86兼容遗留的问题-A20 gate

的输入缓冲区为空,以确保对其的操作不会被中断。在两个循环中,代码首先通过读取端口 0x64 的值来检查 i8042 输入缓冲区是否为空,如果不为空,则会继续循环等待。这段代码的目的是启用 A20 线,使得系统可以访问超过 1MB 的内存地址。这段代码包含两个步骤。开启A20的常用的方法是通过键盘微控制器。,这个步骤的前面部分是相同的,用于确保。

m0_51139704的博客 561

打开A20地址线

操作系统由实模式进入保护模式之前要打开 A20 地址线。

bcbobo21cn的专栏 1326

A20 Gate--A20地址线简介

A20 Gate,A20地址线

zdd56789的博客 1454

x86汇编语言——进入32位保护模式

IA-32架构 Intel 32 位处理器架构简称 IA-32(Intel Architecture, 32-bit), 是以 1978 年的 8086 处理器为基础发展起来的。 在 16 位处理器内,有 8 个通用寄存器 AX、 BX、 CX、 DX、 SI、 DI、 BP 和 SP,其中,前 4 个还可以拆分成两个独立的 8 位寄存器来用,即 AH、 AL、 BH、 BL、 CH、 CL、 DH 和DL。 为了在汇编语言程序中使用经过扩展(Extend)的寄存器,需要给它们命名,它们的名字 分别是 E

zhaojiew的学习笔记 854
上一篇: [理论原理][数学]逻辑运算
下一篇: [编译环境][gcc]在函数中定义函数
cloudblaze
博客等级 码龄17年 81粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值