当前位置: 首页 > 原理解释

微机原理复习题-微机原理复习真题

微机原理复习指南:别背死规定,搞懂底层逻辑 看完这篇,你可能认定还是有点枯燥,但没关系,咱们不整那些虚头巴脑的“回归本质”,也不整那些教科书味儿浓重的“”。
这书里写东西,咱就按咱们如何干活的那种思路来收拾。 大局部同学一看到微机原理,脑子里蹦出来的就是寄存器、指令、汇编语言。
好家伙,直接让他们死磕这些,那简直是自杀。咱这不就图个啥?明知道后面得考原理,但还得知道原理到底管不着啥。
说白了,内存寻址模型搞不明白,CPU 如何算加法你懂的,CPU 如何算乘法你懂的,寄存器映射搞不清楚,那真是白搭。 起初说说寄存器,这玩意儿别当摆设。机器里的数据流动,全赖寄存器这个舞台。
比如主存寻址模型,那个主存地址是啥样?咱直接怼它:你不懂它,那你连门都不进。
这玩意儿和指令集结构没啥关系,跟总线速度扯淡,纯属同床异梦。
要是你连这个都搞不懂,你指望啥?指望人家给你整出一锅“复杂的寄存器映射表”?那你也别做梦了。 看看寄存器。CPU 里分好几十个寄存器,一般搞个 80 个吧,分 32 位和 64 位,有的就连更多。
这名字长啥样?没啥讲究。但咱得知道,它们不是随意分配的。每个寄存器有名字,有的叫 AX,有的叫 BX,有的叫 SP,有的叫 DS。名字是固定的,也是地址。
比如叫 SP 的那个,它代表的就是堆栈指针,这名字得记死,出于它是栈底,它是栈顶。
要是是 8086 这种老机器,AX 和 BX 是 AX 和 BX 的简写。AX 是通用寄存器,AX 是 AX,没区别。但 80386 启动,AX 就专门指数据寄存器,BX 指位移寄存器,又变味了。
故此啊,别死记硬背名字,要搞懂它代表啥功能。 再来看看 CPU 内部如何工作。CPU 里有寄存器组,每组能与此同时做几件事。
比如 8086 的 8 个寄存器就分成了 4 组,每组 2 个。AX、BX、CX、DX 是累加器组,专门干加法减法的。CH、DH、EAX、EBX 是累加位移组,专门干位移运算。AX 和 BX 能够一起用,它们加起来就是 2 的 10 次幂,也就是 1024。
这数字听着大,但就是 2 的 10 次方。
这玩意儿在汇编里特好用。 比如你要算个累加位移,比如把 100 加 200。你就把 AX 里的 100 加到 BX 里,再累加到 CX 里。BX 里是 200,CX 里是 100。最终结局是 300。AX 和 BX 是累加器组,但这时候它们一起用,就是累加位移。
这种用法叫累加位移。 再比如你想做乘运算。AX 和 BX 是累加位移组,这时候它们能一起用。
比如 10 乘以 12。AX 里是 10,BX 里是 12。AX 和 BX 一起用,结局就是 120。
这也叫寄存器的累加位移。 除此之外,还有位移组 CH、DH、EAX、EBX。CH 和 DH 是 16 位寄存器的堆栈指针。你弄懂这个,赶明儿看栈的时候,就知道如何找底了。EAX 和 EBX 是 32 位寄存器的堆栈指针。同样是搞懂名字背后的含义,别光看名字,要看它指哪份内存。EAX 是全局数据段,EBX 是局部数据段。搞错了,你的程序就挂了。 再聊聊内存寻址模型。
这玩意儿别看名字听着像,实际上是硬件机制。主存地址、CPU 地址、内存单元地址,这三者搞混了,后面全翻车。主存地址是内存里该有的那个地址。CPU 的地址是 CPU 能访问的地址。内存单元地址就是数据单元里存放的具体地址。 举个例子。假设你在主存里放了个变量,名字叫 X。
那它的主存地址是 00000030H。
那 CPU 的地址是多少?也是 00000030H。
那内存单元地址是多少?也是 00000030H。三者一样。 再举个例子。有个 100 字节的数据块。
那主存地址是 1000H。CPU 能访问的地址范围是 1000H 到 100FH。内存单元地址是 1000H、1001H、1002H……一直到 100FH,一共 100 个地址。 再举个例子。有个 32 字节的数据块。
那主存地址是 1000H。CPU 能访问的是 1000H 到 100AH。内存单元地址是 1000H、1001H……100AH,一共 32 个地址。 这几个例子说明啥?说明主存地址是指内存里的地址,CPU 地址是指 CPU 能找到的地址,内存单元地址是指数据实际存有的位置。 再说说指令集结构。
这玩意儿在汇编和原理里是常被混淆的。指令集结构是哪位的?是硬件的设计。
比如 8086 指令集里,有哪些指令?MOV、ADD、SUB、BCH、BCHD、BCHP、JMP、JNE 这些。
这些指令是 CPU 能执行的。 而汇编语言指令结构是哪位设计的?是程序员。汇编语言指令结构里,有哪些指令?MOV、ADD、SUB、BCH、BCHD、BCHP、JMP、JNE。
什么的,你发现没?指令集结构和汇编语言指令结构里,这些指令是一样的。 为啥会有区别?出于硬件设计是固定的,程序员设计汇编语言结构时,就得看着硬件来定。
故此,硬件指令集结构是硬件设计的产物。 而汇编语言指令结构是程序员设计的产物。 明白了这个区别了吗?这能帮你在面试里区分啥是“硬件规定”,啥是“程序员规定”。硬件规定你只能干这些,程序员规定你干这些。 还有指令字节数的难题。指令字节数是指在一条指令里,有多少个字节。
比如一条 MOV 指令,是 1 个字节。一条 ADD 指令,是 2 个字节。一条 BCD 加指令,是 2 个字节。 指令数是指在 CPU 中有多少条指令。
比如 8086 指令集里,有 128 条指令。 指令字数是指在 CPU 中,几 Byte 的指令。
比如 MOV、ADD 是 1 字,BCH 是 2 字。 这几个概念,在原理考试里时常考。别弄混了。 最终聊聊堆栈。堆栈是 PUSH 指令。PUSH 指令把数据推入内存。
那 PUSH 指令到底推到哪?推进堆栈。堆栈是线性内存。 那 PUSH 指令指向哪儿?指向栈顶。堆栈有栈顶和栈底,堆栈是栈顶指向的方向。 再比如 POP 指令。POP 指令把数据从内存中取出。
那 POP 指令指向哪儿?指向栈顶。 堆栈顶和堆栈底,这个概念要搞准。堆栈也是线性内存。 PUSH 指令把数据推入内存。
那 PUSH 指令指向哪儿?指向栈顶。 PUSH 指令把数据推进堆栈。
那 PUSH 指令指向哪儿?指向栈顶。 明白了吗? 还有寄存器。CPU 里分好几十个寄存器,一般搞个 80 个吧,分 32 位和 64 位,有的就连更多。
这名字长啥样?没啥讲究。但咱得知道,它们不是随意分配的。每个寄存器有名字,有的叫 AX,有的叫 BX,有的叫 SP,有的叫 DS。名字是固定的,也是地址。
比如叫 SP 的那个,它代表的就是堆栈指针,这名字得记死,出于它是栈底,它是栈顶。
要是是 80386 启动,AX 就专门指数据寄存器,BX 指位移寄存器,又变味了。
故此啊,别死记硬背名字,要搞懂它代表啥功能。 再来看看 CPU 内部如何工作。CPU 里有寄存器组,每组能与此同时做几件事。
比如 8086 的 8 个寄存器就分成了 4 组,每组 2 个。AX、BX、CX、DX 是累加器组,专门干加法减法的。CH、DH、EAX、EBX 是累加位移组,专门干位移运算。AX 和 BX 能够一起用,它们加起来就是 2 的 10 次幂,也就是 1024。
这数字听着大,但就是 2 的 10 次方。
这玩意儿在汇编里特好用。 比如你要算个累加位移,比如把 100 加 200。你就把 AX 里的 100 加到 BX 里,再累加到 CX 里。BX 里是 200,CX 里是 100。最终结局是 300。AX 和 BX 是累加器组,但这时候它们一起用,就是累加位移。
这种用法叫累加位移。 再比如你想做乘运算。AX 和 BX 是累加位移组,这时候它们能一起用。
比如 10 乘以 12。AX 里是 10,BX 里是 12。AX 和 BX 一起用,结局就是 120。
这也叫寄存器的累加位移。 除此之外,还有位移组 CH、DH、EAX、EBX。CH 和 DH 是 16 位寄存器的堆栈指针。你弄懂这个,赶明儿看栈的时候,就知道如何找底了。EAX 和 EBX 是 32 位寄存器的堆栈指针。同样是搞懂名字背后的含义,别光看名字,要看它指哪份内存。EAX 是全局数据段,EBX 是局部数据段。搞错了,你的程序就挂了。 再聊聊内存寻址模型。
这玩意儿别看名字听着像,实际上是硬件机制。主存地址、CPU 地址、内存单元地址,这三者搞混了,后面全翻车。主存地址是内存里该有的那个地址。CPU 的地址是 CPU 能访问的地址。内存单元地址就是数据单元里存放的具体地址。 举个例子。假设你在主存里放了个变量,名字叫 X。
那它的主存地址是 00000030H。
那 CPU 的地址是多少?也是 00000030H。
那内存单元地址是多少?也是 00000030H。三者一样。 再举个例子。有个 100 字节的数据块。
那主存地址是 1000H。CPU 能访问的地址范围是 1000H 到 100FH。内存单元地址是 1000H、1001H、1002H……一直到 100FH,一共 100 个地址。 再举个例子。有个 32 字节的数据块。
那主存地址是 1000H。CPU 能访问的是 1000H 到 100AH。内存单元地址是 1000H、1001H……100AH,一共 32 个地址。 这几个例子说明啥?说明主存地址是指内存里的地址,CPU 地址是指 CPU 能找到的地址,内存单元地址是指数据实际存有的位置。 再说说指令集结构。
这玩意儿在汇编和原理里是常被混淆的。指令集结构是哪位的?是硬件的设计。
比如 8086 指令集里,有哪些指令?MOV、ADD、SUB、BCH、BCHD、BCHP、JMP、JNE 这些。
这些指令是 CPU 能执行的。 而汇编语言指令结构是哪位设计的?是程序员。汇编语言指令结构里,有哪些指令?MOV、ADD、SUB、BCH、BCHD、BCHP、JMP、JNE。
什么的,你发现没?指令集结构和汇编语言指令结构里,这些指令是一样的。 为啥会有区别?出于硬件设计是固定的,程序员设计汇编语言结构时,就得看着硬件来定。
故此,硬件指令集结构是硬件设计的产物。 而汇编语言指令结构是程序员设计的产物。 明白了这个区别了吗?这能帮你在面试里区分啥是“硬件规定”,啥是“程序员规定”。硬件规定你只能干这些,程序员规定你干这些。 还有指令字节数的难题。指令字节数是指在一条指令里,有多少个字节。
比如一条 MOV 指令,是 1 个字节。一条 ADD 指令,是 2 个字节。一条 BCD 加指令,是 2 个字节。 指令数是指在 CPU 中有多少条指令。
比如 8086 指令集里,有 128 条指令。 指令字数是指在 CPU 中,几 Byte 的指令。
比如 MOV、ADD 是 1 字,BCH 是 2 字。 这几个概念,在原理考试里时常考。别弄混了。 最终聊聊堆栈。堆栈是 PUSH 指令。PUSH 指令把数据推入内存。
那 PUSH 指令到底推到哪?推进堆栈。堆栈是线性内存。 那 PUSH 指令指向哪儿?指向栈顶。堆栈是栈顶指向的方向。 再比如 POP 指令。POP 指令把数据从内存中取出。
那 POP 指令指向哪儿?指向栈顶。 堆栈顶和堆栈底,这个概念要搞准。堆栈也是线性内存。 PUSH 指令把数据推入内存。
那 PUSH 指令指向哪儿?指向栈顶。 PUSH 指令把数据推进堆栈。
那 PUSH 指令指向哪儿?指向栈顶。 明白了吗?
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站