
深入理解计算机系统
NEKGod
NEK 耐克
是个全栈web开发工程师
想找我吹牛逼的 可以评论一下哈
展开
-
深入理解计算机 - 第三章 程序的机器级表示 练习题3.10
寄存器用法寄存器变量初值%esixx%ebxyy%ecxnnmovl 8(%ebp), %esi // get xmovl 12(%ebp), %ebx// get ymovl 16(%ebp), %ecx // get n.L6: imuli %ecx, %ebx // y * x -> y addl %ecx, %esi // x + n -> x decl %ecx // n - 1 -> n testl ...原创 2022-01-09 12:45:38 · 353 阅读 · 0 评论 -
深入理解计算机 - 第三章 程序的机器级表示 练习题3.9
movl 8(%ebp), %edx // get amovl 12(%ebp), %eax // get *ptestl %eax, %eax // 比较%eax & %eax 两个值相等 按位与& 结果一定是 逻辑值本身je .L3 // ZF 等于 0跳转 一个指针地址加入if判断没有任何意义 这行永远都不会执行testl %edx, %edx // 比较 %edx & %edxjle .L3 // 小于或者等于跳转addl %edx, (%eax) // 相加.原创 2022-01-09 12:33:58 · 363 阅读 · 0 评论 -
gcc 编译和反编译
c语言编译成汇编gcc -O2 -c code.c汇编反编译二进制指令objdump -d code.o原创 2022-01-08 00:13:43 · 964 阅读 · 0 评论 -
深入理解计算机 - 第三章 程序的机器级表示 练习题3.7
char t1 = a __ b;movl 8(%ebp), %ecx // get amovl 12(%ebp), %esi // get bcmpl %esi, %ecx // 比较 a和bsetl %al // 小于 将最近 cmpl %ecx, %esi // 比较原创 2021-12-30 11:30:00 · 566 阅读 · 0 评论 -
深入理解计算机 - 第三章 程序的机器级表示 练习题3.4-3.5
addl %ecx, (%eax)%ecx = 0x1%eax = 0x100(%eax) = 0xFF0x1 + 0xFF = 0x100第二个操作数的寄存器存储的地址就是其的 (目的地)目的:0x100值:0x100subl %edx,4(%eax)%edx = 0x3%eax = 0x1004(%eax) = 0x100 + 0x4 = 0x104M[0x104] = 0xAB结果计算0xAB - 0x3 = 0xA8目的:0x104值:0xA8imull $16..原创 2021-12-27 21:57:23 · 671 阅读 · 0 评论 -
深入理解计算机 - 第三章 程序的机器级表示 练习题3.3 加载有效地址 leal 指令
leal 6(%eax), %edx%eax 值为 x6(%eax)符合基址 + 偏移量寻址 M[Imm + R[Eb]]那么就是 6 + xleal (%eax, %ecx), %edxx = %eax;y = %ecx;那么 符合 变址x + yleal (%eax, %ecx, 4), %edxx + 4yleal 7(%eax, %eax, 8), %edx7 + x * 97 + 9xleal 0xA(,%eax,4), %edx0xA + x * 410 + 4.原创 2021-12-26 23:09:30 · 657 阅读 · 0 评论 -
深入理解计算机 - 第三章 程序的机器级表示 练习题3.2 数据值传递实例
假设调用的C语言代码是int a = 100;int b = 200;int c = 300;decode1(&a, &b, &c);1-3行1到3行其实是对 变量进行赋值也就是 &a, &b, &c 的基址都存储在 %ebp寄存器中movl 8(%ebp), %edi # int *xp 大概意思 不是实际上的汇编代码movl 12(%ebp), %ebx # int *ypmovl 16(%ebp), %esi # int *zp原创 2021-12-26 22:37:41 · 274 阅读 · 0 评论 -
深入理解计算机 - 第三章 程序的机器级表示 操作数指示符
%eax 寄存器寻址 格式Ea R[Ea]先找到寄存器集合带入寄存器 %eax 找到其的值 0x1000x104 绝对寻址 格式 Imm M[Imm]先找到存储器集合带入存储器 0x104 找到其值 0xAB$0x108 立即数寻址 格式 $Imm Imm他就是 0x108(%eax) 间接寻址 格式 (Ea) M[R[Ea]]我们需要先找 R[Ea] 那么就是去找寄存器%eax 的值是 0x100 M[0x100]那么需要去找 存储器找到 0x100的地址 拿到 0xFF..原创 2021-12-26 16:44:12 · 1411 阅读 · 0 评论 -
深入理解计算机 - 第二章 练习题2.5 2.6 信息的表示和处理
首先我们需要知道明确清楚什么是小端法和大端法。书中描述最低有效字符在最前面被称之为小端法。最高有效字符在最前面被称之为大端法。0x01234567 = 0000 0001 0010 0011 0100 0101 0110 0111(B)8个bit(位)为一组byte(字节) 转换Hex(十六进制)那么大端法就是0x100 = 010x101 = 23。。。。小端法就是0x100 = 670x101 = 45。。。。这一题我认为主要是让学者清楚自己的环境是 大端法还是小端法。原创 2021-12-26 01:51:37 · 307 阅读 · 0 评论