【汇编语言】——第三章课后总结

第三章 的书本上主要有以下几个内容:

1.内存中字的存储

字单元:即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。

小端法:高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的地位字节。

任何两个地址连续的内存单元,N号单元和N+1号单元,可以将他看成两个内存单元,也可看成一个地址为N的字单元的高位字节单元和地位字节单元。

2.DS和[address]

8086有一个DS寄存器,通常用来存放要访问的数据的段地址

比如读取10000H单元的内容:

mov bx,1000H

mov ds,bx

mov al,[0]

[...]:代表一个内存单元,其中的数字代表内存单元的偏移地址 

mov al ,[0]所使用的段地址来自ds,但ds不能直接写入数据(8086不支持将数据直接送入段寄存器的操作),所以借助其他的一般性寄存器。

8086CPU自动取ds中的数据为内存单元的段地址

 

3.字的传送

我们用mov指令在寄存器和内存之间进行字节数据的传送。因为8086CPU是16位结构,有16根数据线,所以,可以一次性传送16位数据,也就是说可以一次性传送一个字。

只要mov指令中给出16位的寄存器就可以进行16位的数据的传送了。比如:

mov bx,1000h

mov ds,ax

mov ax,[0]

mov [0],cx

4. mov add sub 指令

汇编指令   (1)操作码

                  (2)操作数   (常数,寄存器操作数,内存单元操作数)

用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS存储器中。

mov  寄存器,寄存器

mov  寄存器,内存单元

mov  内存单元,寄存器

mov  段寄存器,寄存器

mov  寄存器,段寄存器

mov 内存单元 段寄存器

mov 段寄存器,内存单元

 

add 寄存器,数据

add 寄存器 ,寄存器

add 寄存器,内存单元

add  内存单元,寄存器

 

sub 寄存器,数据

sub 寄存器,寄存器

sub 寄存器,内存单元

sub 内存单元,寄存器

5.数据段

可以将一组长度为N(N<=64KB)、地址连续,起始地址为16的倍数的内存单元当作专门存储数据的内存空间——定义数据段

用ds存放数据段的段地址,

访问时可以用ds存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元

6.栈

后进先出(LIFO):最后进入这个空间的数据,最先出去

栈顶:最后入栈的字数据所对应的地址单元

栈底:固定的一端,栈区最高地址单元的前一个单元

操作:push(入栈),栈顶上移,栈顶-2 

           pop(出栈),栈顶下移,栈顶+2

7.CPU提供的栈机制

PUSH(入栈)POP(出栈)

在8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS和SP指向栈顶元素,PUSH指令和POP指令执行时,CPU从SS和SP中得到栈顶的地址。

PUSH AX 的执行

(1)SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元作为新的栈顶

(2)将ax中内容送入SS:SP指向的的内存单元处,SS:SP此时指向新栈顶

     入栈时栈顶从高地址向低地址方向增长

POP ax的执行

(1)将SS:SP指向的内存单元处的数据送入ax中

(2)SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。

注意:

出栈后 SS:SP指向新的栈顶1000EH,POP操作前的栈顶元素。1000CH处的2266H依然存在,但是已经不在栈中,当再次执行PUSH等入栈指令后,他将被覆盖。

8.栈顶超界问题

当栈空时,再使用pop出栈,当栈满时,再使用push入栈

要根据可能用到的最大栈空间来安排栈的大小,防止入栈的数据与太多而导致的超界;执行出栈的时候继续出栈二导致的超界。

9.push、pop指令

push、pop实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由ss:sp指出的。

执行push时:先改变sp,后向ss:sp处传送。

执行pop时:先读取ss:sp处的数据,后改变sp。

栈顶的最大变化范围为0~FFFFH。

转载于:https://www.cnblogs.com/hongyezhu/p/10009637.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从 Android 手机免费恢复已删除的通话记录/历史记录?

有一个有合作意向的人给我打电话&#xff0c;但我没有接听。更糟糕的是&#xff0c;我错误地将其删除&#xff0c;认为这是一个骚扰电话。那么有没有办法从 Android 手机恢复已删除的通话记录呢&#xff1f;” 塞缪尔问道。如何在 Android 上恢复已删除的通话记录&#xff1f;如…

springBoot 登录拦截器

1、首选创建一个继承HandlerInterceptor的拦截器 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /*** 拦…

[pytorch、学习] - 3.11 模型选择、欠拟合和过拟合

参考 3.11 模型选择、欠拟合和过拟合 3.11.1 训练误差和泛化误差 在解释上述现象之前&#xff0c;我们需要区分训练误差&#xff08;training error&#xff09;和泛化误差&#xff08;generalization error&#xff09;。通俗来讲&#xff0c;前者指模型在训练数据集上表现…

关于'java' 不是内部或外部命令,也不是可运行的程序 或批处理文件 和 错误: 找不到或无法加载主类 helloworld的问题...

一、前几天电脑重装了一次系统将java配置的环境变量都弄没了&#xff0c;自己添加了两个新的变量JAVA_HOME&#xff08;自己jdk的地址&#xff09;以及在path中添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 然后因为这几天都是用eclipse进行编程的&#xff0c;没有出现问题&#…

spring-boot注解详解(一)

spring-boot注解详解(一) SpringBootApplication SpringBootApplication (默认属性)Configuration EnableAutoConfiguration ComponentScan。 Configuration&#xff1a;提到Configuration就要提到他的搭档Bean。使用这两个注解就可以创建一个简单的spring配置类&#xf…

前端基础-jQuery的优点以及用法

一、jQuery介绍 jQuery是一个轻量级的、兼容多浏览器的JavaScript库。jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互&#xff0c;能够极大地简化JavaScript编程。它的宗旨就是&#xff1a;“Write less, do more.“二、jQuery的优势 一…

[pytorch、学习] - 3.12 权重衰减

参考 3.12 权重衰减 本节介绍应对过拟合的常用方法 3.12.1 方法 正则化通过为模型损失函数添加惩罚项使学出的模型参数更小,是应对过拟合的常用手段。 3.12.2 高维线性回归实验 import torch import torch.nn as nn import numpy as np import sys sys.path.append("…

Scapy之ARP询问

引言 校园网中&#xff0c;有同学遭受永恒之蓝攻击&#xff0c;但是被杀毒软件查下&#xff0c;并知道了攻击者的ip也是校园网。所以我想看一下&#xff0c;这个ip是PC&#xff0c;还是路由器。 在ip视角&#xff0c;路由器和pc没什么差别。 实现 首先是构造arp报文&#xff0c…

spring-boot注解详解(二)

ResponseBody 作用&#xff1a; 该注解用于将Controller的方法返回的对象&#xff0c;通过适当的HttpMessageConverter转换为指定格式后&#xff0c;写入到Response对象的body数据区。使用时机&#xff1a; 返回的数据不是html标签的页面&#xff0c;而是其他某种格式的数据时…

转:org.apache.maven.archiver.MavenArchiver.getManifest错误

eclipse导入新的maven项目时&#xff0c;pom.xml第一行报错&#xff1a; org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration) 解决办法&#xff1a; 1、Help——>Install …

Codeforces Round #524 Div. 2 翻车记

A&#xff1a;签到。room里有一个用for写的&#xff0c;hack了一发1e8 1&#xff0c;结果用了大概600ms跑过去了。惨绝人寰。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorith…

[pytorch、学习] - 3.13 丢弃法

参考 3.13 丢弃法 过拟合问题的另一种解决办法是丢弃法。当对隐藏层使用丢弃法时,隐藏单元有一定概率被丢弃。 3.12.1 方法 3.13.2 从零开始实现 import torch import torch.nn as nn import numpy as np import sys sys.path.append("..") import d2lzh_pytorc…

springboot---request 中Parameter,Attribute区别

HttpServletRequest类既有getAttribute()方法&#xff0c;也由getParameter()方法&#xff0c;这两个方法有以下区别&#xff1a; &#xff08;1&#xff09;HttpServletRequest类有setAttribute()方法&#xff0c;而没有setParameter()方法 &#xff08;2&#xff09;当两个…

Python之令人心烦意乱的字符编码与转码

ASC-II码&#xff1a;英文1个字节&#xff08;8 byte&#xff09;&#xff0c;不支持中文&#xff1b; 高大上的中国&#xff0c;扩展出自己的gbk、gb2312、gb2318等字符编码。 由于各个国家都有自己的编码&#xff0c;于是就需要统一的编码形式用于国际流传&#xff0c;防止乱…

[pytorch、学习] - 4.1 模型构造

参考 4.1 模型构造 让我们回顾以下多重感知机的简洁实现中包含单隐藏层的多重感知机的实现方法。我们首先构造Sequential实例,然后依次添加两个全连接层。其中第一层的输出大小为256,即隐藏层单元个数是256;第二层的输出大小为10,即输出层单元个数是10. 4.1.1 继承Module类来…

springboot---基本模块详解

概述 1.基于Spring框架的“约定优先于配置&#xff08;COC&#xff09;”理念以及最佳实践之路。 2.针对日常企业应用研发各种场景的Spring-boot-starter自动配置依赖模块&#xff0c;且“开箱即用”&#xff08;约定spring-boot-starter- 作为命名前缀&#xff0c;都位于org.…

第二课 运算符(day10)

第二课 运算符(day10) 一、运算符 结果是值 算数运算 a 10 * 10 赋值运算 a a 1 a1 结果是布尔值 比较运算 a 1 > 5 逻辑运算 a 1>6 or 11 成员运算 a "蚊" in "郑建文" 二、基本数据类型 1、数值…

[pytorch、学习] - 4.2 模型参数的访问、初始化和共享

参考 4.2 模型参数的访问、初始化和共享 在3.3节(线性回归的简洁实现)中,我们通过init模块来初始化模型的参数。我们也介绍了访问模型参数的简单方法。本节将深入讲解如何访问和初始化模型参数,以及如何在多个层之间共享同一份模型参数。 import torch from torch import nn…

spring-boot注解详解(三)

1.SpringBoot/spring SpringBootApplication: 包含Configuration、EnableAutoConfiguration、ComponentScan通常用在主类上&#xff1b; Repository: 用于标注数据访问组件&#xff0c;即DAO组件&#xff1b; Service: 用于标注业务层组件&#xff1b; RestController: 用于…

IEnumerableT和IQueryableT区分

哎&#xff0c;看了那么多&#xff0c;这个知识点还是得开一个文章 IQueryable和IEnumerable都是延时执行(Deferred Execution)的&#xff0c;而IList是即时执行(Eager Execution) IQueryable和IEnumerable在每次执行时都必须连接数据库读取&#xff0c;而IList读取一次后&…