2023-2024-1 20231404高伟光《计算机基础与程序设计》第5周学习总结
作业信息
属于课程 | 2023-2024-1-计算机基础与程序设计 |
---|---|
作业要求 | 要求 |
作业目标 | Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白盒 |
作业正文 | 此博客 |
教材学习内容总结
计算机概论:
- 明白了pep9的一些基本逻辑
- 知道了汇编语言与机器语言的区别
- 会写简单的伪代码
c语言程序设计
- 知道了printf和scanf的用法,记住了不可直接输出的特殊字符
- 明白了scanf编写时的格式一致性
- 牢记%c在读入地址时会读空格,回车,制表符。要前加空格
教材学习中的问题和解决过程
问题一:getchar()为何可以解决%c的读入问题?
- 在C语言中,%c是用来读取一个字符的格式控制符。但是%c只会读取一个字符,而不会读取换行符或空格等字符。这就会导致问题,当我们使用%c读取一个字符后,输入缓冲区中可能还有其他字符残留,导致下一次读取时出现错误。而getchar()函数可以解决这个问题。getchar()函数会读取输入缓冲区中的下一个字符,并将其返回。如果输入缓冲区中没有字符可读,则getchar()函数会阻塞程序,直到有字符可读为止。使用getchar()函数可以很方便地解决%c的读入问题。我们可以使用getchar()读取一个字符后,再使用%c读取下一个字符。这样就可以确保每次读取%c时,输入缓冲区中只有一个字符,避免了残留字符的干扰。
问题二:立即寻址和直接寻址的区别?
- 立即寻址(Immediate Addressing):立即寻址是指将操作数直接包含在指令中。在执行指令时,操作数的值可以直接从指令中获取,而不需要额外的内存访问。这种寻址方式适用于操作数是常数或小的立即数的情况。例如,MOV AX, 5是一条使用立即寻址的指令,将立即数5直接存储到寄存器AX中。
- 直接寻址(Direct Addressing):直接寻址是指使用一个内存地址作为操作数的值。在执行指令时,需要从内存中读取操作数的值。这种寻址方式适用于操作数存储在内存中的情况。例如,MOV AX, [BX]是一条使用直接寻址的指令,将内存地址BX中的值读取到寄存器AX中。
区别:
立即寻址直接从指令中获取操作数的值,不需要额外的内存访问,因此执行速度较快。而直接寻址需要从内存中读取操作数的值,需要额外的内存访问,因此执行速度较慢。
立即寻址适用于操作数是常数或小的立即数的情况,而直接寻址适用于操作数存储在内存中的情况。
立即寻址的指令长度较短,因为操作数直接包含在指令中。而直接寻址的指令长度较长,因为需要包含内存地址。
立即寻址可以减少对内存的访问,节省内存带宽。而直接寻址需要频繁地访问内存,可能会对内存带宽造成压力。
需要根据具体的应用场景和需求来选择适合的寻址方式。