汇编语言(学习笔记-----[bx]和loop)
1、[bx]是什么??
和[0]有些类似,[0]表示内存单元,它的偏移地址是0
[bx]同样也表示一个内存单元,它的偏移地址在bx中,mov ax,[bx] (字) mov al,[bx] (字节)
mov ax,[bx]功能
bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中
2、描述一个内存单元,需要两种信息:1>内存单元的地址;2>内存单元的长度(类型)
我们用[0]表示一个内存单元时,0表示单元的偏移地址,段地址默认在ds中,单元的长度(类型)可以由具体指令中的其他操作对象指出
3、loop:英文循环
用一个描述性的符号“()”来表示一个寄存器或一个内存单元中的内容
看一下(X)应用,比如:
1>ax中的内容为0010H,我们可以这样来描述:(ax)=0010H;
2>2000:1000处的内容为0010H,(21000H)=0010H;
3>对于mov ax,[2]的功能,我们可以这样来描述:(ax)=((ds)*16+2);
4>对于add ax,2的功能,我们可以这样来描述:(ax)=(ax)+2;
4、约定符号idata表示常量:
mov ax,[idata]就代表mov ax,[1]、mov ax,[2]、…
mov ax,idata就代表mov ax,1、mov ax,2…
mov ds,idata就代表 mov ds,1、mov ds,2…是非法指令
5、loop指令格式:loop 标号,CPU执行loop指令的时候,要进行两步操作:
>1< (cx)=(cx)-1。
>2< 判断cx中的值,不为零则转至标号出执行程序,如果为零则向下执行。
>3< cx中的值影响着loop指令的执行结果
>4< loop指令来实现循环功能,cx中存放循环次数
>5<loop指令中的标号所表示地址要在前面
>6<框架如下:mov cx,循环次数
s:
循环执行的程序段
loop s
>7< 在汇编语言程序中,数据不能以字母开头,所以要在前面加 0
6、loop和[bx]的联合应用:
一、 计算ffff:0~ffff:b内存单元的数据的和,结果存储在dx中
1、运算后的结果是否会超出dx(16位)所在存储的范围??
ffff:0~ffff:b内存单元(8位)中的数据是字节型数据,范围在0~255(2^8)之间,12个这样的数据相加,结果不会大于65535(2^16),可以在dx中存放
2、是否将ffff:0~ffff:b中的数据直接累加到dx中??
当然不行,因为ffff:0~ffff:b中的数据是8位,不能直接加到16位的寄存器dx中。
3、能否将ffff:0~ffff:b中的数据累加到dl中,并设置(dh=0,从而实现累加到dx中的目标?)
这也不行,因为dl是8位寄存器,能容纳的数据的范围在小255之间,ffff:0~ffff:b中德数据也是8位,如果仅向dl中累加12个8位数据,可能造成进位丢失
4、到底怎样将用ffff:0~ffff:b中的8位数据,累加到16位寄存器dx中?
从上面的分析中,我们可以看到,这里面有个问题,类型的匹配(8位和16位)和结果的不超界
具体的说,就是在做加法的时候我们有两种方法:
(dx)=(dx)+内存中的8位数据;(类型不匹配)
(dl)=(dl)+内存中的8位数据;(可能越界)
5、就是用一个16位的寄存器做中介
我们将内存单元中8位数据赋值到一个16位寄存器ax中,再将ax中的数据加到dx中上,从而使两个运算对象的类
型对象的类型匹配并且结果不会超界
assume cs:codesg
codesg segment
start:
mov ax,0ffffh
mov ds,ax
mov bx,0 mov dx,0
mov cx,12
s:
mov al,[bx]
mov ah,0
add dx,ax
inc bx
loop s mov ax,4c00H
int 21H
codesg ends
end start
7、指令分辨:(MASM编译器解释)
mov al,[0] (al)=0
mov al,ds:[0] (al)=((ds)*16+0)
mov al,[bx] (al)=((ds)*16+bx)
mov al,ds:[bx] 同上
8、一段安全的空间
在8086CPU模式中,随意向一段内存空间写入内容是很危险的,因为这段空间中可能存放着重要的系统数据或代码
在一般的PC机中,DOs方式下,dos和其他合法的程序一般都不会使用0:200~0:2FF(0:200H~0:2FFH)的256个字节的空间,所以,我们使用这段空间是安全的。
考虑一个问题:
将内存ffff:0~ffff:b段元中的数据拷贝到0:200~020b单元中。
分析一下:
(1)0:200~020b单元等同于0020:0~0020:b单元,它们描述的是同一段内存空间
(2)拷贝的过程应用循环实现,简要描述如下:初始化:X=0;循环12次:将FFFF:X单元中德数据送入0020:X
(3)在循环中,原单元FFFF:X和目标单元的0020:X的偏移地址是X变量,我们用bx来存放X变量
(4)用0:200~020b单元等同于0020:0~0020:b单元,它们描述的是同一段内存空间,就是为了使目标单元的偏移地址和原始单元的偏移地址从同一数值0开始。
汇编语言(学习笔记-----[bx]和loop)的更多相关文章
- 小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令
这一章主要介绍什么是[BX]以及loop(循环)指令怎么使用,loop和[BX]又怎么样相结合,段前缀又是什么鬼,以及如何使用段前缀. 1.[BX]的概念 [BX]和[0]类似 ...
- Linux下汇编语言学习笔记10 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记11 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记6 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记7 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记5 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记4 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记2 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Linux下汇编语言学习笔记3 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
随机推荐
- 【 D3.js 高级系列 — 7.0 】 标注地点
有时需要告诉用户地图上的一些目标,如果该目标是只需要一个坐标就能表示的,称其为"标注". 1. 标注是什么 标注,是指地图上只需要一个坐标即可表示的元素.例如,在经纬度(116, ...
- temp - Linux administration handbook 答案
我开始做第一章后的练习题,发觉不是很容易随意地回答,就像是C++ primer之后的练习题的感觉. 自己有这么多不会的,让我感觉很不爽啊- -! 先不要要求自己一下子都明了,一口吃不成胖子,先找一份工 ...
- GreenDao官方文档翻译(上)
笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...
- redis错误汇总
1.redis因为内存不够而启动失败 Microsoft Open Tech group 在 GitHub上开发了一个REDIS Win64的版本,项目地址是:https://github.com/M ...
- Dropping water balloons
题意: 给你k个水球n层楼(n很大) 现在做实验在楼上向下丢水球,若水球没破可以重新丢,求把所有水球弄破的最小试验次数. 分析: 开始完全没思路啊.从正面求没法做不会表示状态,做实验是只能从第一层,一 ...
- 《Python基础教程(第二版)》学习笔记 -> 第八章 异常
什么是异常 Python用 异常对象(exception object)来表示异常情况.遇到错误后,会引发异常,如果异常对象并未被处理或者捕捉,程序就会用所谓的回溯(Traceback,一种错误信息) ...
- OpenGL超级宝典第5版&&glProvokingVertex
翻译:https://www.opengl.org/sdk/docs/man3/xhtml/glProvokingVertex.xml 方法原型:void glProvokingVertex(GLen ...
- DataTable转List<Model>通用类【实体转换辅助类】
/// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...
- 【windows核心编程】IO完成端口(IOCP)复制文件小例前简单说明
1.关于IOCP IOCP即IO完成端口,是一种高伸缩高效率的异步IO方式,一个设备或文件与一个IO完成端口相关联,当文件或设备的异步IO操作完成的时候,去IO完成端口的[完成队列]取一项,根据完成键 ...
- NGUI学习笔记-Label
属性说明 Overflow: ShrinkContent : 如果文本超出文本框宽度,会自动缩小文本size,使其显示完整 ClampContent : 文本大小固定,超出文本框的部分不会显示,也不会 ...