CS
文章平均质量分 62
计算机系统
月夜留香
这个作者很懒,什么都没留下…
展开
-
CS学习(七)——程序的机器级表达
在Linux中,.c文件是如何一步一步转换为可执行文件的?何为反汇编?汇编:将汇编文件转化为可执行文件(里面都是机器码00010100……)。那么反汇编就是可执行文件转化为汇编文件。objdump -d/-D code.o/code (-d:反汇编要执行指令的节;-D:反汇编出所有节)gdb pdisassemble sum(一个函数)x/11xb sum(Src:源操作数,Dest:目的操作数)以下均用AT&T格式。立即数:$num寄存器:八个整数寄存器之一。原创 2024-04-03 19:16:39 · 1313 阅读 · 1 评论 -
CS学习(六)——浮点数plus
将原来阶码小的数的尾数右移|△E|位,其阶码值加上|△E|,即每右移一次尾数要使阶码加1,则该浮点数的值不变(但精度变差了)。1.2350000 ——> 1.24(刚好为一半即5,舍入到偶数位)10.11100 ——> 11.00 (=中间数,舍入到偶数位)10.10100 ——> 10.10 (=中间数,舍入到偶数位)1.2450000 ——> 1.24(一半,舍入到偶数位)10.00101 ——> 10.01(>中间数)若M >= 2,右移一位,并E = E + 1。数字不会溢出,但可能会舍入。原创 2024-03-27 19:46:30 · 332 阅读 · 0 评论 -
CS学习(八)——控制
cmpl Src, Dest:等价计算Dest - Src,但只会影响标志位,并不影响二者的值。testl Src, Dest:等价计算Dest & Src,但只会影响标志位,不影响二者的值。作用:根据eflag寄存器中的标志位,设置目的操作数为1或0,通常为8位寄存器。这个就是如果ecx中的值 < edx中的值,那么eax中的值 = ebx中的值。%eax %ebx %ecx %edx %edi %esi存储临时数据。ZF set:如果t == 0。SF:符号标志(结果的符号位)eflag寄存器存储。原创 2024-04-03 20:25:29 · 221 阅读 · 0 评论 -
CS学习(三)——信息的位与表示
以十进制的-18为例,其补码为1110 1110,算术右移1位为1111 0111(数据以补码形式保存在机器中),转为原码是1000 1001为-9,刚好是除以2。逻辑位移适用于无符号数,算术位移适用于有符号数(最高位是符号位)。左移x位是乘2^x(若无溢出),右移是除以2^x(但会有误差)因此连续存放的两个字之间相隔4(32位)/8(64位)个地址。(1)计算机是由仅具有“开”“关”两个状态的逻辑电路组成的。(返回值非1即0,就是说不用管多大,只要不是0就当作1来看)所以,补上符号位实现了除以2的操作。原创 2024-03-13 21:08:07 · 362 阅读 · 0 评论 -
CS学习(二)初识指令&stack
而ALU计算的话,加法需要1~3个时钟周期,乘法一般需要>10个时间周期,除法需要几十甚至上百个时间周期。有这样一个汇编语言文件,第八行有jmp指令,预期不会执行第九行的movl而是直接跳转到11行。18行:pushw读取value的后十六位,高位到低位依次入栈。22行:32位数据出栈,并将其写入ebx寄存器中。23行:32位数据出栈,并将其写入eax寄存器中。24行:16位数据出栈,并将其写入cx寄存器中。10行:将32位的0x88888888入栈。17行:bx(ebx的低十六位)入栈。原创 2024-03-11 15:08:15 · 430 阅读 · 0 评论 -
CS学习(九)—— 分支实现
汇编代码出现了jle类似的跳转指令。对于使用了流水线的CPU,这样的跳转是存在隐患的,分支预测失败就会刷新掉所有流水线中取到而未执行的指令,影响运行性能。18:若y原创 2024-04-10 20:05:16 · 403 阅读 · 0 评论 -
CS学习(五)——浮点数
E = 1 - Bias,即-126,刚好实现与规范化值的平滑过度,这就是为啥Bias=127的原因之一。0 ,表示NAN(Not a Number),用来表示一些无法表示的数。1,即移码上的位数字不全为0或1。(1)frac = 000…0 ,表示无穷大和溢出结果,至于正负由s决定。(i个1)的数表示刚好小于1.0的数,可以用。在浮点数表示中,偏移量Bias=2^(k-1) - 1。s确定是正还是负,数值0的符号位特殊判断,故称为…,范围在[1.0,2.0)之间,用。E表示2的幂,是一个二进制整数,用?原创 2024-03-25 16:40:19 · 325 阅读 · 0 评论 -
CS学习(四)——整数的编码
对于和=2^(w-1)的称为正溢出,这时由于符号位因为进位的原因变为1所以结果为负数。相差:2^(w+k)-|x|-(2^w-|x|)=2^w(2^k-1)两个w位的无符号数u,v相乘,得到2w位的结果,舍弃前w位。正数自不必说,原先的w位不变,w+1~w+k位为0即可。要使扩展后的值不变,|x|要加上上述相差的值。法一:写出原码,除符号位外均变反,再+1。扩展k位之后的补码:2^(w+k)-|x|原创 2024-03-20 19:51:36 · 313 阅读 · 1 评论