8086/8088CPU
运用上一部分学到的器件使用的学习方法研究8086 CPU 8086功能了解 1978年,8086第一代16位微处理器。 第一次将流水线思想引进微处理器:指令级流水。 存储器分段管理机制引入处理器,扩大寻址能力。 只有整数运算指令。可配套数值协处理器8087、 输入/输出协处理器8089,具备较强大计算能力和I/O处理能力。 1979年推出8088,8位外部数据总线,兼容丰富的8位配套器件, 8088内部结构与8086基本相同。 基于8088微处理器的IBM PC-XT以及兼容系统。 8086引脚特性分析 8086引脚基本功能 1.电源引脚 GND、VCC,工作电压为5V 2.时钟、复位 CLK =5MHZ 复位信号(高电平有效) 复位信号有效时。处理器所有寄存器恢复到复位状态默认值,程序重新开始执行。复位信号无效时,系统程序正常运行 3.最小模式/最大模式 最小模式为单处理机模式,控制信号少,一般不必外接总线 最大模式为多处理机模式,控制信号多,CPU必须通过总线控制器与总线相连 4.地址、数据线 8086可寻址范围为1MB=220...
学习器件使用的方法
学习器件使用的方法 器件功能了解 器件引脚特性分析 引脚的功能 引脚信号的定义、作用; 通常采用英文单词或其缩写表示 信号的方向 信号从芯片向外输出,还是从外部输入芯片或者是双向的 有效电平 起作用的逻辑电平 高电平 低电平 上升沿 下降沿 三态能力 除却正常的高低电平,还可以输出高阻的第三态 内部结构/工作原理分析 当我们了解引脚特性后,我们需要对器件的内部结构或者工作原理进行分析,比如CPU如何实现了存储器的读写操作,读写的时序是什么 硬件电路设计 将这个器件与外围器件进行具体硬件电路的连接,跟前面的引脚特性就密切相关了。 哪个是数据总线,哪个是地址总线,哪些是读写控制线,如何进行连接,都需要分析清楚。 软件编程设计 (a)根据电路原理图中器件引脚连接关系 (b)器件控制时序 (c)题目的功能要求 习题 1.器件引脚的有效电平 解答:高电平、低电平、上升沿、下降沿 2.在器件引脚分析中,需要关注引脚的哪些方面 解答:引脚的功能、信号的方向、有效电平、三态能力 3.软件编程设计需要根据哪些方面进行编程设计 解答:更具电路原理图器件引脚连接关系、器件...
统计能整除数字的位数
问题描述(来源于LeetCode) 给定一个整数 num,返回 num 中能整除 num 的数位的数目。 如果满足 num % val == 0,则认为整数 val 可以整除 num。 解题思路分析 问题本质 遍历整数的每一位数字,检查该数字是否能整除原数。 核心挑战 如何提取整数的每一位数字 如何处理数字0(不能作为除数) 如何高效遍历所有数位 代码实现 12345678910class Solution: def countDigits(self, num: int) -> int: x=0 nums=num while num: val = num %10 if nums % val ==0 and val!=0: x+=1 num=num//10 return x 算法详解 步骤分解 初始化计数器:x=0 用于统计满足条件的位数 保存原数字:nums=num 保存原始数字用于后续除法检查 循...
拆分数位后四位数字的最小和
问题描述(来源于LeetCode) 给定一个四位正整数 num,使用所有数位拆成两个新的整数 new1 和 new2(可以有前导0),返回可以得到的最小和。 解题思路分析 问题本质 这是一个组合优化问题,需要找到将四个数字分成两组的最佳方式,使得两个两位数的和最小。 核心洞察 要使两个两位数的和最小: 将最小的两个数字放在十位 将较大的两个数字放在个位 这样能确保两个数都尽可能小 数学证明 对于四个排序后的数字 a ≤ b ≤ c ≤ d: 最优分配:10a + d 和 10b + c 总和:10(a + b) + (c + d) 代码实现 12345678910111213141516class Solution: def minimumSum(self, num: int) -> int: 分解四位数字 a = num % 10 # 个位 b = (num // 10) % 10 # 十位 c = (num // 100) % 10 # 百...
最小偶倍数
问题描述(来源于LeetCode) 给定一个正整数 n,返回 2 和 n 的最小公倍数(正整数)。 解题思路分析 问题本质 求两个数的最小公倍数(LCM)问题,但其中一个数是固定的2。 数学原理 两个数的最小公倍数 = (a × b) ÷ 最大公约数(GCD) 对于数字2和任意整数n: 如果n是偶数,2和n的最大公约数是2,最小公倍数是n 如果n是奇数,2和n的最大公约数是1,最小公倍数是2 × n 代码实现 方法一:条件判断法 123456class Solution: def smallestEvenMultiple(self, n: int) -> int: if n % 2 == 0: return n else: return 2 * n 算法详解 通过判断n的奇偶性来决定结果: 偶数情况:n能被2整除,2和n的最小公倍数就是n本身 奇数情况:n不能被2整除,2和n的最小公倍数是2 × n 复杂度分析 时间复杂度: O(1) - 一...
两整数相加
问题描述(来源于LeetCode) 给定两个整数 num1 和 num2,返回这两个整数的和。 解题思路分析 问题本质 这是一个基础的算术运算问题,考察对编程语言基本运算符的掌握程度。 核心思路 直接使用加法运算符 + 计算两个整数的和。 代码实现 123class Solution: def sum(self, num1: int, num2: int) -> int: return num1 + num2 算法详解 实现步骤 接收参数:获取两个整数 num1 和 num2 计算和:使用加法运算符直接计算 返回结果:返回计算结果 关键点 直接使用语言内置的加法运算符 不需要任何额外的数据处理或转换 复杂度分析 时间复杂度:O(1) 只进行一次加法运算 空间复杂度:O(1) 不使用额外的存储空间 边界情况考虑 正常情况 12输入:num1 = 12, num2 = 5输出:17 特殊情况 包含零的情况 12输入:num1 = 0, num2 = 5输出:5 负数情况 12...
11.13 日常 | 直觉的陷阱与品牌的力量
今天继续阅读《思考,快与慢》的第三部分,深入了解了几个影响我们判断的重要概念: 大数定律:样本量越大,结果越接近理论预期 小数定理:人们倾向于从小样本中过度推断结论 锚定效应:初始值会像“锚”一样制约后续判断 这些原理揭示了系统1(快思考)如何在无意识中主导我们的决策。书中提醒我们:无论直觉准确与否,都需要保持警惕。通过大量专注的练习和在合适环境下的应用,我们能够提升直觉的可靠性,但这需要持续的自我觉察。 今天还读到一篇关于苹果公司新款手机袋的短文。这款与三宅一生合作设计的布质手机袋起价150美元,引发了广泛争议。有人批评其定价过高,也有人赞赏其设计理念。这让我深刻感受到品牌效应的力量——当品牌积累足够的影响力时,即使看似简单的产品也能获得市场关注。 今日学习进展: 上午完成了离散数学作业 中午刷了4道LeetCode算法题(包括两数相加、最小偶倍数等基础题型) 晚上学习了微机原理第三章,计划明天整理笔记 从认知偏见到商业策略,从数学证明到系统编程,今天依然是在多重思维维度间穿梭的一天。保持理性的思考,同时理解感性的选择,或许就是我们这个时代需要...
11.12 日常 | 思考的顺序与善意的本能
今天继续阅读《思考,快与慢》。在第一部分中,我了解到人类思维运作的两种基本模式——系统1(快思考)与系统2(慢思考)。它们并无绝对的高下之分,而是各有所长:系统1依赖直觉与经验,是我们日常决策的主力;系统2则更理性、审慎,在复杂情境下被唤醒。 书中提到一个经典心理学实验,让我印象深刻: “所罗门·阿希曾描述两个人——艾伦与本,请受试者评价他们的性格: 艾伦:聪明—勤奋—冲动—爱挑剔—固执—忌妒心强 本:忌妒心强—固执—爱挑剔—冲动—勤奋—聪明 尽管两人特质完全相同,仅顺序相反,大多数人却更喜欢艾伦。前几条特质会改变我们对后续特质的理解——我们愿原谅聪明人的固执,却会因忌妒者的聪明而警觉。” 原来,顺序本身就在无声地塑造我们的认知。这也让我联想到,“白月光之所以无可替代”,或许不仅因为那个人本身,也因ta出现在我们生命序列中最恰当的位置。 晚上读了一篇关于“潜在英雄”的短文。研究指出,人在危急时刻并非如电影中那样恐慌逃散,反而常会展现出自然的利他倾向。“旁观者冷漠”实为误解,团结互助才是人性底色。这令人感到温暖,也提醒我们:善意本就埋藏在每个人的本能之中。 今天,...
温度转换
问题描述(来源于leetcode) 给定一个四舍五入到两位小数的非负浮点数 celsius 表示摄氏度,需要将其转换为开氏度和华氏度,并以数组 [kelvin, fahrenheit] 的形式返回结果。 转换公式 开氏度 = 摄氏度 + 273.15 华氏度 = 摄氏度 × 1.80 + 32.00 注意: 与实际答案误差不超过 10⁻⁵ 的结果被视为正确。 解法分析 这是一个基础的数学计算问题,直接应用给定的转换公式即可解决。 代码实现 12345class Solution: def convertTemperature(self, celsius: float) -> List[float]: Kelvin = celsius + 273.15 Fahrenheit = celsius * 1.80 + 32.00 return [Kelvin, Fahrenheit] 算法详解 步骤分解 接收输入:获取表示摄氏度的浮点数 celsius 计算开氏度:使用公式 Kelvin = celsius + 27...
两数之和
问题描述(问题来源于LeetCode) 给定一个整数数组 nums 和一个整数目标值 target,在数组中找出和为目标值的那两个整数,并返回它们的数组下标。 假设每种输入只会对应一个答案,并且不能使用两次相同的元素。 示例: 12345text输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:nums[0] + nums[1] = 2 + 7 = 9 解法:暴力枚举 思路分析 通过两层循环遍历所有可能的数字组合,检查它们的和是否等于目标值。 代码实现 12345678pythonclass Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i in range(len(nums)): for j in range(i + 1, len(nums)): if nums[i] + nums[j] == target: ret...














