首页 > 汇编语言第五到八章总结

汇编语言第五到八章总结

第五章 [BX]和loop

1.内存单元间接表示: [bx]

mov  dl, [0];  dl  ←  ((ds)×16 + 0)

mov  bx, 0

mov  dl, [bx];  dl  ←  ((ds)×16 + (bx))

可以使用bx间接访问内存单元。默认,段地址在ds。

 

2.loop指令

(1) 语法格式

     loop  标号

(2) CPU执行指令过程

      ① (cx) ← (cx) - 1

      ② 判断cx的值是否为0。 如果(cx) ≠ 0,跳转到标号处执行; 如果(cx) = 0, 执行loop后面的其它指令。

 

3.段前缀

mov dl, [6];  dl  ←  ((ds)×16 + 6)

mov ax, [bx];  ax  ←  ((ds)×16 + (bx))

默认情形下,无论是直接给出的偏移地址,还是通过bx间接给出的偏移地址,都是取ds的值作为段地址来计算物理地址。 可以通过增加「段前缀」改变默认状况。

 

4.安全内存空间

计算机系统内存的使用并不是任意的,有些内存单元有专用用途,保留有系统重要数据。

① 在8086模式中,00200h ~ 002ffh这段空间一般不会被使用,视作用户可自由使用的安全空间。

② 现代操作系统大多使用CPU保护模式对内存使用进行管理,限制用户非法访问一些关键内存空间。

 

第六章 包含多个段的程序

① 使用伪指令segment和ends定义逻辑段后,究竟是用作代码段、数据段还是栈,由程序员指定。

② 使用assume仅仅表示将某个逻辑段和某个段寄存器关联起来;真正当作特定的段使用,需要在代码段中设置相应的段寄存器值,如ds, ss。

③ 段名代表的是段地址,是常数。不能使用mov直接送入段寄存器。

 

第七章 更灵活的定位内存地址方法

1.汇编指令: and和or

and指令:① and指令语法格式及对操作数要求与add指令同

                 ② 可以实现将操作数指定位设置为0

or指令:① or指令语法格式及对操作数要求与add指令同

              ② 可以实现将操作数指定位设为1

 

2.汇编中的字符处理

在汇编源程序中:既可以使用诸如'a'这样的字符写法,也可以使用ASCⅡ码形式的写法。

在debug中: a命令中不支持诸如'a'这样的写法

                      e命令中支持诸如'a'这样的写法,也支持ASCⅡ码形式的写法

 

3.其它灵活的内存地址表示

用[bx + idata]表示表示内存单元。idata表示常数。

用[si]表示表示内存单元。

用[si + idata]表示表示内存单元。idata表示常量。

用[di]表示表示内存单元。

用[di + idata]表示表示内存单元。idata表示常量。

用[bx+di], [bx+si]表示表示内存单元。

用[bx+di+idata], [bx+si+idata]表示表示内存单元。

 

第八章 数据处理的两个基本问题

1.汇编指令中操作数的类型

常数位于cpu内部,指令缓冲器;寄存器位于cpu内部,寄存器;内存单元位于cpu外部,内存

 

2.汇编指令中内存单元操作数的地址表示

在8086中,可用于表示内存偏移地址的寄存器只有: BX, SI, DI和BP。

这些寄存器可以单个出现在[]中,也可以以特定组合方式出现。

使用BX, SI, DI表示偏移地址时,默认段地址在DS中;

使用BP表示偏移地址时,默认段地址在SS中。

 

3.汇编伪指令: db, dw, dd, dup

data segment

db 1,2,3; 每个数据分配1个字节

dw 1,2 3; 每个数据分配2个字节

dd 1,2,3; 每个数据分配4个字节

data ends

 

data segment

db 0,0,0,0,0,0,0,0

db 8 dup(0); 预留8个字节单元,每个单元值为0

dd 8 dup(?); 预留8个字节单元,每个单元值未分配

data ends

 

转载于:https://www.cnblogs.com/yangpengassembly/p/10165947.html

更多相关:

  • pcl_common库包含大多数PCL库使用的公共数据结构和方法。核心数据结构包括PointCloud类和许多用于表示点、表面法线、RGB颜色值、特征描述符等的点类型。它还包含许多用于计算距离/范数、均值和协方差、角度转换、几何变换,等等。这个模块是不依赖其他模块的,所以是可以单独编译成功,单独编译出来可利用其中的数据结构自行开发,当...

  • 一. 字符型的分类和表示范围        char:是有符号还是无符号数视编译器而定,一般为有符号数,下文把它全部当成有符号数进行讨论                    表示范围:32位和64位机器上均是一个字节,所以是八个bit位,最高位为符号位之后,后七位是数据位,所以它的取值范围是-128---127(-2^7---2...

  • 1. Container Bootstrap中容器类提供了2个类标识:container、container-fluid。 两者的区别在于:container:容器不止有15px的padding,还有一个随着浏览器宽度变化而变化的margin。container-fluid:只有固定的15px的padding。 因此,containe...

  • Servlet API: javax.servlet.http.HttpServletResponse 用于创建HTTP响应,包括HTTP协议的状态行、响应头以及消息体 HTTP状态码: 100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。 200-299:表示客户请求成功。 300-399:表示用于已经移走的...

  • 更多内容,欢迎关注微信公众号:全菜工程师小辉~前言在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理。这篇博客将针对第三个原因,进行更详细的讲解。首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space)...

  • 一、预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器...

  • 我的爱机是一台ThinkPad T420,原装三星DDR 1333 4G内存一根,还剩一根内存位置,最近趁京东6.18促销,准备增加一根物理内存。为了确保兼容性,觉得仍然选购DDR 1333 4G内存,于是购买了金士顿这款,比如DDR3 1600的还贵。 这个安装过程完全参照该内存的网页提示进行 这里简单记录一下,以备...

  • 陪伴我多年的老本ThinkPad T420渐渐垂垂老矣, 我想更新一下可以更新的部分, 比如将2.5寸HDD更换为SSD, 将单条4G内存再增加一根, 凡此种种想法, 可能最后归结为如何获取该笔记本的硬件配置信息, 在windows下面使用鲁大师之类的检测软件, 也许很好搞定,但是在Ubuntu 14.04平台上如果办到呢? 很简单...

  • 一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库, 在一个.cpp主文件中,即用new又用malloc来动态分配内存, 可能会导致内存错误.后来网上调研和查资料发现, new和mal...