首页 > 其他分享 >101 - Lecture 8

101 - Lecture 8

时间:2024-10-20 21:21:27浏览次数:3  
标签:RAM EAX 指令 寄存器 Lecture 101 EBX CPU

汇编语言、指令执行、CPU寄存器和内存

Execution of instructions

  1. 指令执行

取指-执行循环(fetch-execution cycle):

CPU遵循“取指-执行”循环。取指阶段对于所有指令都是一致的,而执行阶段则取决于指令的类型。

指令类型:

• CPU使用不同类型的指令,这些指令可以组合起来完成复杂的计算。
• 指令还用于实现**高级语言(HLL)**的结构,如循环、条件语句等。

请添加图片描述

CPU与指令(instruction)

• 每个CPU都有一组独特的指令集,这些指令以二进制机器码的形式表示
• 虽然每种CPU的指令集可能不同,但指令执行的一般原理是相似的。
• 本讲座重点讨论 Pentium CPU 系列。(Pentium family of CPUS)

Assembly language and assembler

  • 汇编语言与汇编器

为了更深入地研究程序是如何被执行的,我们将为Pentium处理器编写一些简单的程序。我们将这些程序以Pentium机器代码的助记形式来编写。这种助记形式的代码被称为汇编语言

助记符形式(Mnemonic form):

• 与直接使用机器码不同,程序员可以使用助记符形式,即汇编语言,它是机器码的可读版本。

汇编器:

请添加图片描述

• 汇编器是一种将汇编语言转换为二进制机器码(binary machine-code)(也称为目标代码)的程序。
• 汇编器还会为内存地址生成标签(labels),使程序能够重定位。

Label
  1. 汇编语言中使用标签(Labels)来表示内存地址。
  2. 标签用于指示程序中的某些关键点,帮助程序在执行时能够准确跳转或引用特定内存地址。
  3. 通常,标签用于循环(loop)的开始,或内存块(a block of memory cells)的起点。
可重定位性(Relocatable Programs):
•	为了执行程序,必须将其加载到主存储器的某个位置。
•	程序必须具有可重定位性,这意味着程序可以在内存的不同位置执行,而不会因为内存地址的改变而出现错误。
对象文件(Object File):

1.汇编器将汇编语言翻译成二进制机器码,这种机器码保存在一个对象文件中。

2.对象文件包含:
• 二进制机器码。
• 编译后生成的中间代码,尚未形成完整的可执行程序。

链接器(Linker):
  1. 有时,多个对象文件需要通过链接器连接在一起,生成最终的可执行文件或库文件
  2. 链接器的作用是将多个对象文件组合起来,处理外部引用,使程序可以正常运行。

• Program must be relocatable
• Produces a binary machine object code program(object file)
(对象代码是编译过程中的一个中间产物,它包含了机器代码和一些未解决的引用,通常需要链接器(linker)来处理这些引用,并生成最终的可执行程序)

Main memory,RAM

  1. 主存储器与RAM

    内存 vs 外存:
    • 内存(主存储器):用于临时存储程序和数据,速度快,容量相对较小。例如:RAM。
    • 外存(辅存):用于长久存储数据,即使断电数据也不会丢失。外存包括硬盘驱动器(HDD)、固态硬盘(SSD)等。

    主存储器:

    • CPU只能执行存储在主存储器(RAM)中的指令。内存是用于存储当前正在执行的指令和数据的地方。主存储器提供了CPU执行程序的工作区

    RAM(随机存取存储器):

    Random Access Memory
    • RAM允许以随机方式存取存储的数据,这意味着CPU可以直接访问内存中的任何位置,而无需按顺序读取。
    • 与顺序访问存储器(Sequential Access Memory)不同,RAM允许快速访问存储在任意位置的数据,而不需要逐个遍历前面的数据块。
    • 举例:在顺序存储介质中(如磁带),访问末尾的数据需要经过所有前面的数据块,而在RAM中,无论数据存储在哪里,访问时间都是相同的。

RAM的结构与特性
1.	存储单元:
•	主存储器可以看作是一组编号的存储单元(numbered storage elements),每个存储单元被称为一个字(word)。每个“字”可以存储一些信息。
2.	地址编号:
•	每个存储单元都有一个唯一的地址,可以通过该地址访问存储在单元中的数据。
3.	随机访问:
•	RAM的特点是可以直接访问任何存储单元,而不必依赖前面的存储单元(without touching the preceding words)。这就是所谓的“随机访问”(Random Access),即访问内存的时间不受位置影响。
4.	访问时间相同:
•	不论访问的是哪个存储单元,访问时间对于所有存储单元都是相同的。这是RAM的重要特性之一。

Words,bytes and bits

  1. 字、字节和位

    字(Word):

    • 内存的基本存储单位(elementary storage elements/memory cells)是“字”。每个字由多个存储单元(称为位bit)组成,常见的字长为32位或64位。

    字节(Byte):

    • 字节是由8个位(bit)组成的基本存储单位。大多数计算机使用字节来表示和处理数据。

CPU Register in Pentium

  1. Pentium CPU寄存器

    CPU寄存器:

    • CPU包含多个寄存器,用于处理数据和存储内存地址。寄存器是CPU内部的高速存储器,能够非常快速地存取数据。

    常见的寄存器包括:

    • EAX(累加器accumulator):用于算术和逻辑操作。某些指令默认使用累加器。
    • EBX(基址寄存器base register):用于存储数据结构(如数组)的基址。
    • ECX(计数寄存器count register):通常用于循环中的计数操作。
    • EIP(指令指针instructioin pointer):存储下一条要执行指令的内存地址。
    • ESI(源索引寄存器)和EDI(目标索引寄存器):用于字符串或数组的操作,分别指向源和目标地址。

EAX registerer, Accumulator

隐式使用:在某些指令(如MUL和DIV)中,EAX寄存器被默认使用为累加器,程序员不需要显式(explicitly)地写出使用它。
• 分块访问:EAX寄存器可以被按不同大小的块(bit chunk)访问:
• AL:最低8位。
• AH:次低8位。
• AX:16位。
• EAX:32位(全寄存器)。
这使得EAX寄存器非常灵活,可以处理从小到大的数据量。

Examples of instructions using EAX

在汇编指令中使用EAX寄存器。

• MOV EAX, 1234H:
将常量值1234H(十六进制值,等于十进制的4660)加载到EAX寄存器中。这是一条数据传输指令,表示将数据移动到累加器中。

• INC EAX:
将EAX寄存器中的值加1。这是一条加法指令,用于对EAX寄存器中的值进行自增操作

• MOV maxval, EAX:
将EAX寄存器中的值存储到内存变量maxval中。这里展示了如何将寄存器中的数据移动到内存中。

• DIV CX:
使用16位寄存器CX中的值对累加器EAX中的值进行除法运算。这是一条算术指令,展示了如何对累加器中的数据进行数学操作。

1. EBX: Base Register

• EBX 是一个基址寄存器,通常用来存储数据结构(如数组)在内存中的基地址

• 指令示例:
• LEA EBX, marks: 将变量 marks 的地址加载到 EBX 中。
• MOV AL, [EBX]: 使用 EBX 作为内存指针(pointer),获取 1 字节的值并存储到 AL 寄存器中。

2. ECX: Count Register

• ECX 是用于循环计数的寄存器。通常用于循环中,自动递减。

• 指令示例:
• MOV ECX, 100: 初始化 ECX 为 100,用于 for 循环的计数器。
• LOOP for1: 每次循环递减 ECX,测试是否为零,如果不为零则跳转回 for1。

3. EIP: Instruction Pointer

• EIP(指令指针)保存着下一条要执行的指令的地址。它通常也被称为程序计数器(Program Counter)。

• 指令示例:
• JMP mylabel: 将新的地址加载到 EIP 中,程序将跳转到指定的地址 mylabel。

4. Further Registers: ESI, EDI
•	ESI: 源索引寄存器,常用于字符串或数组操作中的源地址。

•	指令示例:
•	MOV AX, [EBX + ESI]: 使用 EBX 作为基地址,ESI 作为索引,获取 16 位的数据并存储到 AX 寄存器中。

•	EDI: 目的索引寄存器,常用于字符串或数组操作中的目标地址。
•	指令示例:
•	MOV EAX, [ESI]: 将 ESI 寄存器中的 32 位值移动到 EAX 寄存器中。
•	MOV [EDI], EAX: 将 EAX 中的值存储到 EDI 指定的内存位置。
5. Further Registers: ESP, EBP
•	ESP: 栈指针(Stack Pointer),指向栈顶。
•	EBP: 栈基址指针(Stack Base Pointer),通常用于访问栈中的局部变量。

这些寄存器在汇编语言中非常重要,用于执行各种运算、内存操作和控制流程。

Q&A

  1. execute 阶段是否对所有指令类型都相同?

• 解释:在CPU执行指令时,不同类型的指令(如算术运算、跳转指令等)的执行阶段可能不同。例如,加法指令与跳转指令所执行的操作本质上不同,因此这句话是False。

  1. 汇编器将汇编语言翻译成哪种形式?

• 解释:汇编器会将汇编语言转换为机器代码(Machine Code),这是一种CPU可以直接理解和执行的二进制指令。

  1. 汇编器将标签与什么关联?Assembler associates labels with

• 解释:汇编器将标签与内存地址关联。标签通常用于表示跳转或循环的目标位置,帮助程序找到相应的内存位置

  1. CPU只能执行加载到主存储器(RAM)中的指令(True or False)?

• 解释:这是True。CPU只能执行那些已经被加载到RAM中的指令,因为CPU无法直接从磁盘等辅助存储器中读取和执行指令。

  1. RAM的所有存储单元的访问时间是否相同(True or False)?

• 解释:这是True。RAM中的所有单元都是随机访问的,意味着访问任意单元的时间是相同的,而不像顺序访问存储器(如磁带)那样依赖于数据的位置。

6.MOV EBX, [EBX] 指令的含义是什么?

•	解释:这条指令将EBX寄存器的值作为地址,从该地址处取出值并存入EBX寄存器中。因此,EBX首先表示一个内存地址,然后将该内存地址中的值赋给自己。这种操作类似于“解引用”指针。
•	副作用:该指令会覆盖掉EBX中的原始值,EBX不再保存原本的地址,而是变成该地址处的内容。

7.JNZ L2是什么意思?

•	解释:JNZ是汇编中的“跳转如果不为零”(Jump if Not Zero)指令。它表示如果零标志(ZF)位没有被设置(即结果不为零),程序就会跳转到标签L2所指示的内存地址处。
•	编译错误:如果L2没有在代码中定义,编译器会报错,因为它找不到需要跳转的位置。

8.MOV maxval, loc1是否为有效的汇编代码?

•	解释:这取决于loc1和maxval是否已被**定义为有效的内存地址或寄存器**。如果它们没有被正确定义,那么这条指令可能会报错,无法编译通过。

标签:RAM,EAX,指令,寄存器,Lecture,101,EBX,CPU
From: https://blog.csdn.net/gyh101010/article/details/143090302

相关文章

  • 111 - Lecture 5
    Decomposition,AbstractionandFunctions1.编程中的基础语言机制(basiclanguagemechanisms):回顾我们已经学习的Java基本语法,包括:•Primitives原始数据类型(byte,short,int,long,float,double,boolean,char)•complexexpressions复杂表达式•branching......
  • 二维数组1019
    publicclassPlaceDemo{publicstaticvoidmain(String[]args){//班级学生座位(二维数组)place();pace();}publicstaticvoidplace(){//静态初始化数组-----数据类型[][]数组名=new数据类型[]{元素1,元素2,元素3,··......
  • 数组练习1018
    假设班级有8名学生,录入8名学生的java成绩,成绩类型是小数,并输出平均分,最高分,最低分publicclassClassDemo2{publicstaticvoidmain(String[]args){//假设班级有8名学生,录入8名学生的java成绩,成绩类型是小数,并输出平均分,最高分,最低分studentSc......
  • [20241018]21c x$mutex_sleep_history记录的变化.txt
    [20241018]21cx$mutex_sleep_history记录的变化.txt--//mutex很少会成为主要等待事件,如果遇到多数情况非常特别,比如bug。mutex本身和保护对象是一体的,不像latch一样有单独的--//latch,而且mutex本身占内存也更小,mutex没有等待和持有队列,所以没有排队机制,mutex具有共享和排它......
  • 20241019
    这两天的题和今天的考试题。都是城外的今天考试爆蛋了。【探险队】题意:思路:发现这是个基环树森林,考虑怎么做。发现如果是一条链的话很好做,直接一选一不选就行了,那就可以先这样把基环树都搞成一个个环。然后想到对于一个环可能它之前连着个链,然后最后一个被选了,这就导致环上这......
  • Leecode热题100-101.对称二叉树
    给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围 [1,1000] 内-100<=Node.val<=100进阶:你可以运用递归和迭代两种方法解决这个问......
  • SS241019B. 染色(color)
    SS241019B.染色(color)思路首先观察结果序列长什么样子,且思考如何去重。结果序列是若干段长度若干的颜色拼成的,满足颜色序列是原序列的一个子序列,如111555334可以是123453345的一个合法结果,对应的颜色序列是1534。为了去重,要求颜色序列不存在两个相邻的颜色。发现可以转换......
  • 20241019CSAD架构
    两种不同模态的MR图像(即T2和ADC)被发送到双流编码器子网络中。在训练期间,注意力图生成块(AMGB)生成的注意力图用于实现CSAD,而输入图像和相应的掩码用于优化编码器-解码器网络以完成分割任务。在编码器子网络的每个中间层,添加一组注意力图生成块(AMGB)来实现跨模态自注意......
  • Java面向对象学习1019-1
    Java面向对象基础1:  面向对象编程是什么,和面向过程有什么区别?  面向对象编程OOP(ObjectOrientedPrograming)是一种程序设计方法,其本质是模仿人的思维来解决问题,把客观世界的实体抽象为对象。不同于面向过程编程POP(ProcedureOrientedPrograming)以过程为中心,关注......
  • 20241019知识蒸馏
    在神经网络的知识蒸馏中,教师模型(Teachermodel)和学生模型(Studentmodel)是核心组件,它们共同实现了知识的转移和模型的优化。这里是这两个概念的详细解释:教师模型(TeacherModel)教师模型通常是一个预先训练好的、性能较高的深度神经网络。这个模型在特定任务上已经达到了较高的精确......