计算机基础

逻辑设计和硬件控制语言HCL

将很多的逻辑门组合成一个网,就能够构建计算块,称为组合电路。构建这些网有两条限制: - 两个或多个逻辑门的输出不能连在一起。否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障。 - 这个网必须是无环的。也就是在网中不能有路经过一系列的门而形成一个回路,这样的回路会导致该网络计算的函数有歧义。

理解指针

每个指针都对应一个类型,这个类型表明指针指向哪一类对象。特殊的void*类型代表通用指针。比如,malloc函数返回一个通用指针,然后通过显示强制类型转换或者复制操作那样的隐式强制类型转换,将他转成一个有类型的指针。

异质的数据结构

C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。结构中各个组成部分用名字来引用。类似于数组,结构的所有组成部分都存放在一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段(field)的字节偏移。它以这些偏移作为存储器引用指令中的位移,从而产生 对结构元素的引用。

程序的机器级表示-过程

一个过程调用包括将数据(以过程参数和返回追的形式)和控制从代码的一部分转移到另一部分。 A32程序用程序栈来支持过程调用。机器用栈来传递过程参数、返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。

程序的机器级表示-控制

除了整数寄存器,CPU还维护着一组单个位的条件码(condition code)寄存器。常用的条件码有: - CF: 进位标志。最近的操作使最高位产生了进位。可以用来检查无符号操作数的溢出。 - ZF: 零标志。最近的操作得出的结果为0; - SF: 符号标志。最近的操作得到的结果为负数。 - OF: 溢出标志。最近的操作导致一个补码溢出(正溢出或负溢出)

算术和逻辑操作

加载有效地址(load effective address)指令leal实际上是movl指令的变形。 整数算术操作,加载有效地址(leal)指令通常用来执行简单的算术操作。

程序的及机器级表示-访问信息

大多数指令有一个或多个操作数,不同的操作数分为三种类型:- 立即数(immediate): 在AT&T格式汇编代码中,立即数书写是$后面跟一个整数,如:$-577或者$0x1F;

浮点数

二进制小数,二进制小数点左移一位相当于这个数被2除,小数点向右移一位相当于将该数乘2.

信息的表示

十六进制表示法 每台计算机都有一个字长(word size),指明整数和指针数据的标称大小。

汇编笔记

.data段 包含了已经初始化的数据项的数据定义,已经初始化的数据在程序开始运行前就拥有了自己的值。这些值是可执行文件的一部分

leetcode题目-罗马数字转整数

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。 数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。 同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

leetcode题目-求两相加

给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。

leetcode题目-求两数之和

给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

关于作者

程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm