这是在做笨办法学C 中文版 | 《笨办法学C 中文版》时,ex17碰到的问题同时附上gdb pdf:gdb cheatsheetchar *s2 = "str2";char s2[] = "str2";发现,使用char *声明的变量被放在内存里,并且权限是r--,而char []声明的变量被放在栈上,权限是rw-使用gdb调试,让我发现了很多有意思的的事情。What is segmentation fault?这是我大一学C语言时就经常碰到的一个问题,当时只在网络上随便搜了一下,发现经常是由于数组越界导致的,经过这学期的微机原理学习后我知道了段的概念,同时经过这个例子我明白了,错误的段访问(此例为写一个只读的段)会导致Segmentation FaultWay of how computer works is "simple"(?)在跟踪strncpy()工作的流程时,我发现他的工作方式其实很原始和暴力(brute force),他列举了所有操作数的大小的可能,并且写好对应的寄存器/内存处理方法,并逐一比较(使用2分的方法),找到对应的长度后(
写在前面首先很感谢各位西电的学长在互联网上开源了自己的计组课设,实验的第一个下午我对着手册看了三四个小时还没看明白,后来看了一些学长写的文章以及和班上同学讨论了才大致理清了思路,其中包括但不限于以下文章:西安电子科技大学 计算机组织与体系结构课程设计 教程西电计组课设过程本文主要讲解实验原理思路,具体微操作设计建议阅读上述两篇文章。实验原理本次实验主要是让用户建立从上层软件到底层硬件的全局宏观认识。首先,我们需要对程序执行方式有基本理解:我们平时写的C语言会首先被编译为汇编语言(ASM), 然后汇编语言再被解析为一系列的微操作($\mu$op)随着时钟脉冲执行。 显然,高级语言/汇编是面向用户的,微操作是面向系统设计者的。用户无需关心指令是怎么在机器上微操作随着时钟脉冲执行的,仅需知道指令的操作码、操作数、以及返回值即可;系统设计者无需关心用户的实际使用中调用了几次指令,仅需设计好指令对应的微操作流水即可。而我们在这个实验中就是承担系统设计者的角色,所以,我们需要根据一些实际需求(用户实际编程需要)提供解决方案(指令),并设计微操作完成指令的执行。问题来了,最直接的我们要做的,很简单,
Genghong Hu
Hi