摘要:
3.6.5 循环 据说大多数汇编器会根据do-while循环来产生代码, 所以其他循环可能会先转化为do-while形式再编译成机器代码, 所以我们首先介绍do-while循环... 1. do-while 循环 do-while的通用形式如图所示 : 这里给出一个实际的例子 : 2. while循 阅读全文
摘要:
3.5 算术和逻辑操作 其实除了第一个leadl, 这些指令都有带操作数的变种, 只是这里省略了, 例如add可以是addb, addw 和 addl. 3.5.1 加载有效地址 指令leal(load effective address)实际上是movl的变种, 但是有一个很明显的特征, 他实际并 阅读全文
摘要:
最近试着写操作系统真是狠狠地感受了一下汇编的重要性... 所以特地再回来加强学习一下自己的汇编水平, 好了, 不多说, 这几天就要开始继续看书了... 3.1 历史观点 接下来要书里要讲的是汇编语言, 这里会先讲IA32(从Intel早期的16位处理器发展起来的), 接着讲x86-64(最初是由AM 阅读全文
摘要:
2.4 浮点数 浮点数对于设计非常大的数字以及非常接近0数字有很大的意义, 但最早的浮点数并没有一个统一的标准, 之后IEEE 754的标准出现了, 该标准直到现在还在使用, 我们接下来要将的就是IEEE标准中的浮点格式... 因为这一部分我大一上学期的时候学过一些, 所以可能会比较简略... 2. 阅读全文
摘要:
2.3 整数运算 2.31 无符号加法 无符号数的加法, 总的来说有一下规则 : 对于两个w位的无符号数x, y相加, 如果 x + y < 2w (这个值之上包括这个值都是w位无符号数无法表示的), 那么他们的值得x + y, 如果x + y超出了这个范围, 那么就造成了溢出, 此时x + y 的 阅读全文
摘要:
2.1.10 C语言中的移位运算 对于x = [x3, x2, x1, x0], x << 2 得到的结果是 [x1, x0, 0, 0]. 右移位运算分为两种, 逻辑右移和算术右移, 逻辑右移是指右移K位, 左端补上K个0, 而算术右移是指左端补上K的x3(最高有效位). 实际上, C语言标准并没 阅读全文
摘要:
curses是一个提供终端屏幕打印和键盘处理的库, 我个人的理解就是终端里的gui(当然它是基于文本的)... 写2048的时候用到了这个库, 所以现在过来好好研究一下这个库... 下面是文档内容 : 首先在你做任何事之前, 你必须先调用 initscr() 初始化curses, 这个函数主要的作用 阅读全文
摘要:
2048这个游戏应该是没几个人不知道吧... 今天去实验楼学了一下这个游戏的终端版本, 大概讲一下我对这个游戏的开发思路的理解. 实现为了实现2048, 我们需要用到3个模块, 分别是curses(用于终端界面交互程序开发的库, 可以解决屏幕打印以及按键处理等方面的问题), random, 以及co 阅读全文
摘要:
看这个之前我准备先看一下random模块的官方文档... 在整个随机模块中, 最基础的就是random, 它产生一个 [0.0, 1.0)的浮点数. 这个模块下所有的函数实际上是绑定在一个叫做random.Ramdom的类的隐藏实例下的, 当然你可以自己实例化这个类从而得到新的随机数生成器, 同时r 阅读全文
摘要:
首先要明确思路, 图片是由像素组成的, 不同的像素有不同的颜色(rgb), 那么既然我们要转化为字符画, 最直接的办法就是利用字符串来替代像素, 也就是用不同的字符串来代表不同的像素. 另外图片一般来讲是彩色的, 而acsii(一般打印在终端上吧) 都是黑白的, 此时就要介绍另外一个概念了 : 灰度 阅读全文