getopt()函数
在读nemu/src/monitor/monitor.c中遇到了这个函数,原文如下:
1 | static inline void parse_args(int argc, char *argv[]) { |
在读nemu/src/monitor/monitor.c中遇到了这个函数,原文如下:
1 | static inline void parse_args(int argc, char *argv[]) { |
从状态机视角理解程序运行
1 | // PC: instruction | // label: statement |
Q:画出这个程序的状态机
需要更新的状态只包括PC,r1和r0,所以用三元组表示程序的所有状态:
(0, x, x) -> (1, 0, x) -> (2, 0, 0) -> (3, 0, 1) -> (4, 1, 1) -> (2, 1, 1) -> (3, 1, 2) -> (4, 3, 2) -> … -> (2, 4851, 98) -> (3, 4851, 99) -> (4, 4950, 99) -> (2, 4950, 99) -> (3, 4950, 100) -> (4, 5050, 100) -> (5, 5050, 100)
(0, x, x) -> (1, 0, x) -> (2, 0, 0) -> .. , 以我的感觉我极有可能会写(0, 1, x) -> (1, 0, 0) -> .. 我的逻辑是在pc0的时候,r1赋值为0了, 但是在状态机中表示的是一个瞬间的状态所以在pc0的时候, r1还没有被赋值,所以上面的(0, x, x)是对的cd <directory>: 更改当前工作目录到指定的目录。pwd: 显示当前工作目录的完整路径。mkdir <directory>: 创建一个新目录。rmdir <directory>: 删除一个空目录。如果目录非空,使用rm -r <directory>。ls [options] [file]: 列出目录内容。-l: 长格式列出信息。-a: 列出所有文件,包括隐藏文件。-h: 与-l一起使用时,以易读的方式显示文件大小。cp [options] <source> <destination>: 复制文件或目录。-r 或 --recursive: 递归复制目录及其内容。-i 或 --interactive: 在覆盖文件之前提示用户确认。-v 或 --verbose: 显示详细信息。rm [options] <file>: 删除文件或目录。-r 或 --recursive: 递归地删除目录及其内容。-f 或 --force: 强制删除,不提示确认。mv [options] <source> <destination>: 移动或重命名文件或目录。tar [options] <filename> [files]: 用于归档文件,同时可对文件进行压缩或解压。-c: 创建归档。-x: 从归档中提取文件。-z: 通过gzip进行压缩或解压。-v: 显示被处理的文件名。-f: 指定归档文件的名称。