汇编语言程序设计第五章

5.1 【BX】

mov ax,[bx]  功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中。即:(ax)=((ds)*16+(bx))。

mov [bx],ax 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA中。即:((ds)*16+(bx))=(ax)。

5.2 Loop指令

loop指令的格式:loop 标号。CPU执行loop指令有两个步骤:①(cx)=(cx)-1②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。

三个要点:(1)在cx中存放循环的次数。(2)loop指令中的标号所标识的地址要在前面。(3)要循环执行的程序段,要写在标号和loop指令的中间。

程序框架:

mov cx,循环次数

s:

循环执行的程序段

loop s

5.3在Debug中跟踪用loop指令实现的循环程序

在汇编源程序中,数据不能以字母开头,所以要在前面加0。

5.4Debug和汇编编译器masm对指令的不同处理

(1)在汇编语言中,如果一个指令要访问内存单元,则在指令中必须用[...]来表示内存单元,如果在[...]中直接用一个常量idata给出内存地址的偏移地址,就要在"[ ]"前面显示地给出段地址所在的段寄存器。

比如,mov al,ds:[0]

如果没有在“【】”的前面显示的给出段寄存器,比如mov al,[0]那么,编译器masm将把指令中的“【idata】”理解为“idata”。

(2)如果在“【】”里用寄存器,比如bx,间接给出内存单元的偏移地址,则段地址默认在ds中。当然,也可以显示地给出段地址所在的段寄存器。

5.5loop和[bx]的联合应用

5.6段前缀

出现在访问内存单元的指令中,用于显示地指明内存单元的段地址的“ds:”、“cs:”、“ss:”、“es:”,在汇编语言中称为段前缀。

5.7一段安全的空间

(1)直接向一段内存中写入内容,

(2)这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误;

(3)DOS方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据或代码;

(4)需要直接向一段内存中写入内容时,就使用0:200~0:2ff这段空间。

5.8段前缀的使用(见实验四)

原文地址:https://www.cnblogs.com/sqy1999/p/10016089.html

时间: 2024-11-06 07:35:51

汇编语言程序设计第五章的相关文章

汇编语言程序设计 第2章概念梳理

汇编语言程序设计 第2章概念梳理 8086 14个寄存器: AX,BX,CX,DX (通用寄存器) SI,DI,BP,SP (基址和变址寄存器) CS,SS,DS,ES (段寄存器) IP,FLAGS (指令指针和标志寄存器) 通用寄存器: AX,BX,CX,DX通常用于存放一般性数据 称为通用寄存器 一般存储的数据范围为0 ~ 2^16-1 且为了与早期CPU操作兼容,这4个寄存器均可拆分成2个8位寄存器单独使用 {             AX分为AH和AL            BX分为B

汇编语言程序设计 第3章概念梳理

汇编语言程序设计 第3章概念梳理 基础概念部分:{ 字数据在内存当中的存储:高-高 低-低     字数据的低位字节存放在低地址内存单元     字数据的高位字节存放在高地址内存单元 取低地址内存单元地址作为字数据地址,例如数据124EH:    12H存储在偏移量为"2"的字节单元,4EH存储在偏移量为"1"的字节单元    则从地址为"1"的地址单元取出的一个字数据为124EH   12为高位,故存储在高位"2"单元,4E

《JavaScript高级程序设计第五章--引用类型》之Object对象和array对象

这一章主要就是介绍各种内置对象的用法,认识其经常用到的属性和方法. 5.1Object类型 创建objec的方式,一种是new Object(),一种是对象字面量(简化创建包含大量属性的对象的过程) var person = { name = "Nicholas"; age = 27 };//最后一个属性不必添加逗号,ie7等会导致错误 //在使用对象字面量语法时,属性名也可以使用字符串.这里的数值属性会自动转字符串. var person = { "name" :

汇编语言学习第五章-[BX]和loop指令

本博文系列参考自<<汇编语言>>第三版,作者:王爽 1.[bx]和内存单元的描述 [bx]与我们前面见过的[0]类似,mov ax,[0] 的意思是将内存地址为DS:0的两字节内容存入ax中.其中[0]中的0代表的是偏移地址. 类似的,我们有 mov al,[0]的意思是将内存地址为DS:0的单字节内容存入al中.那么我们可以大胆的推断mov ax,[bx]代表的是将偏移地址为bx寄存器中的值的内存地址的两字节内容存入到ax中,其段地址在DS中存储. 2.关于定义的描述性符号: &

汇编语言程序设计第三章

第三章 寄存器(内存访问) 1 内存中字的存储 1个字=2个字节,如从0开始存放20000(4E20H),20.4E分别表示1个字节,内存中字的存储如下图所示: 任何两个地址连续的内存单元(0.1.2......),N号单元和N+1号单元,可以看成两个内存单元.比如说上图中的0内存单元(字节单元),存放的是字节型数据,就是20H(十进制的32):0地址字单元,存放字型数据,就是4E20H. 任何两个地址连续的内存单元,N号单元和N+1号单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字

程序设计基础 第五章 选择结构的程序设计(知识点)

第五章  选择结构的程序设计 第一部分: 总结 1根据某种条件的成立与否而采用不同的程序段进行处理的程序结构称为选择结构 2C语言的选择语句包括if 和switch语句 3使用break语句,可以中断switch语句的执行. 4使用goto 语句,可以将程序执行流程无条件专项. 第二部分: 分别简述 5.1用if语句设计选择结构程序 5.1.1  简单的if语句 使用条件:满足条件就执行,不满足就不执行. 格式: If(表达式){语句1} 5.1.2    if_else语句 格式: If(表达

Delphi基本之pascal语法(第五章.函数与过程程序设计)

第五章.函数与过程程序设计一.函数(包括标准函数和自定义函数) 1.函数的定义 格式:FUNCTION 函数名(<形参表>):返回值类型: VAR <变量说明> BEGIN <函数体> END [注]:1.形参表每个参数都写明其类型: 2.有且只有一个返回值,并且要将返回值赋值给函数名. [例]:求五边形的面积 function area(a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; area:=sqrt(p*(p-

《javascript高级程序设计》第五章知识点总结

第五章知识点总结 1.object类型 访问对象的方法:①点表示法        (people.name) :      ②方括号表示法         (people[name]). 常用方法:hasOwnProperty()         用于检查给定属性在当前对象实例中是否存在 isPrototypeOf()              用于检测传入的对象是否传入对象原型 toString()                        返回对象的字符串表示 valueOf()    

《80X86汇编语言程序设计教程》二十五 结语(读后感:这本书怎么样)

这本书的推荐星级是:5星.毕竟是经典书籍,没什么好说的. 就汇编本身而言,在编写高效率程序以及对程序的优化,调试,工程的逆向都是一门基础:就理论上的操作系统而言,汇编让你了解CPU,了解计算机的体系结构,它是阅读操作系统源码的前提,这也是<80X86汇编语言程序设计教程>做得比较好的一点,它对386的保护方式下的编程写得比较详实,读完整本书,会发现这学的不仅仅是汇编语言,还有CPU的体系架构,它让你基本猜测得到在编写基于80386CPU的操作系统时,大概要做一些什么事情. 阅读前,我选过几本书