zoukankan      html  css  js  c++  java
  • 《汇编语言》-王爽 阅读笔记 一个让你快速了解每一节在讲什么的笔记(3~4章)

    第三章

    3.1 内存中字的存储

    8086CPU中用16位寄存器来存储一个字。采用小端法,例如:

    数据 20000(4E20H) 4E是高位 20是低位
    0	20H
    1	4EH
    

    3.2 DS和[address]

    还记得2.9节的段地址寄存器CS吗?这一节讲述了8086CPU有一个DS寄存器,通常用来存放要访问数据的段地址。

    (CS用于指示下一条指令的地址,而DS用来存放要访问数据的段地址?)

    mov bx,1000H
    mov ds,bx	#不能直接把数据放入寄存器,需要先送入一个一般的寄存器,再将一般寄存器的内容送入DS
    mov al,[0]
    

    [...]表示偏移地址,段地址直接从DS中读取。将DS:0送入AL

    3.7 CPU提供的栈机制

    8086CPU中也是栈的顶部地址最小。

    考虑两个问题:1. CPU是如何知道哪段内存是当作栈来使用的?2. CPU是怎么知道哪个内存单元是栈顶的?

    对于第一个,我们设想CPU中应该有记录栈顶上限和栈底的寄存器,这样在栈满入栈和栈空出栈时,可以判断行为是否合法。但是对于8086CPU,它并没有这样的寄存器,也就是说它需要我们在编程的时候自己操心栈顶吵界的情况。

    对于第二个问题,回答是:8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址放在SS中,偏移地址放在SP中。任意时刻SS:SP指向栈顶元素。

    因此,PUSH和POP都是先移动SP,再传送值。

    3.10 栈段

    是一个小总结,到此为止,我们经历了存放数据、指令(代码)、栈的内存,如果一个段用于存放数据、指令(代码)、段,那么它们分别被定义为”数据段”、“代码段“和”栈段“。

    对于数据段,段地址在DS中,使用mov, add, sub等指令时,CPU就将数据段中的内容当作数据来访问;

    对于代码段,段地址在CS中,将段中第一条指令的偏移地址放在IP中,CPU会将CS:IP内存中的数据当成指令来处理;

    对于栈段,段地址在SS中,将栈顶单元的偏移地址放在SP中,在执行push, pop指令时,CPU将栈段当作栈空间使用。

    因此CPU是如何看待内存中的数据,是根据段地址和偏移地址决定的。

    实验2

    第四章

    章节基本介绍

    本章准备编写完整的汇编语言程序,用编译器将它们编译成可执行文件。

    4.1 源程序从写出到执行的过程

    1. 文本编辑器编写汇编语言
    2. 对源程序进行编译连接:使用汇编语言编译程序对源程序进行编译->目标文件;再用连接程序对目标文件进行连接->可执行文件
      • 可执行文件中的程序和数据,指的是汇编程序翻译过来的机器码和源程序中定义的数据
      • 可执行文件中的描述信息,例如程序有多大、要占用多少内存空间等
    3. 执行

    4.2 源程序

    4.2.1 伪指令

    1.3中提到汇编语言的组成:汇编指令、伪指令、其他符号。现在介绍一下它们。

    汇编指令,可以被编译为机器指令,最终被CPU执行;伪指令,没有对应的机器指令,也不就不会被CPU执行。伪指令的作用是指导编译器来进行相关的编译工作。

    先介绍3种伪指令:

    1. segment和ends是一对,它们定义了一个段,分别表示段的开始和结束,XXX表示的是段名。
    XXX segment
    	...
    	...
    	...
    XXX ends
    2. end 表示汇编程序的结束,编译器遇到end就结束对源程序的编译。
    3. assume 它假设某一个 段寄存器 与程序中某一个 段XXX 相关联。
    

    4.2.2 程序和源程序

  • 相关阅读:
    File 类
    RocketMQ4.X 集群
    Java 的基本网络支持
    SpringBoot2.X 整合 RocketMQ4.X
    RocketMQ系列:rocketmq运维控制台使用详解(全网独家)
    RocketMQ系列:docker搭建rocketmq单机环境
    RocketMQ系列:rocketmq运维控制台搭建
    RocketMQ系列:单机快速搭建单broker环境
    Jenkins:Git拉取代码版本不对
    pip3:no acceptable C compiler found in $PATH
  • 原文地址:https://www.cnblogs.com/peekapoooo/p/14203337.html
Copyright © 2011-2022 走看看