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)的更多相关文章

  1. 小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令

         这一章主要介绍什么是[BX]以及loop(循环)指令怎么使用,loop和[BX]又怎么样相结合,段前缀又是什么鬼,以及如何使用段前缀.   1.[BX]的概念      [BX]和[0]类似 ...

  2. Linux下汇编语言学习笔记10 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  3. Linux下汇编语言学习笔记11 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  4. Linux下汇编语言学习笔记6 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  5. Linux下汇编语言学习笔记7 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  6. Linux下汇编语言学习笔记5 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  7. Linux下汇编语言学习笔记4 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  8. Linux下汇编语言学习笔记2 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  9. Linux下汇编语言学习笔记3 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

随机推荐

  1. 物联网操作系统HelloX应用编程指南

    HelloX操作系统应用编程指南 HelloX应用开发概述 可以通过三种方式,在HelloX操作系统基础上开发应用: 1.        以内部命令方式实现应用,直接编译链接到HelloX的内核she ...

  2. Delphi or函数的用法

    function GetFlag(a: string): Integer;var I: Integer;begin Result := 0; for I := 0 to 3 - 1 do begin ...

  3. Permutations java实现

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  4. 陈发树云南白药股权败诉真相 取胜仅差三步 z

    22亿元现金,三年只拿到750多万元的利息.福建富豪陈发树的云南生意可谓失望之极.在漫长的官司中,曾经有绝处逢生之机的陈发树,连告状的主体都没有找准,岂能同强大的国企扳手腕?陈发树律师团距取胜只有三步 ...

  5. HDU 3584-Cube(三维BIT)

    题意: 给你三维空间两种操作,给出两顶点坐标,把它们确定范围(长方体)内的数全部取反.查询给定点的值.初始全部为零 分析: 有了前面的知识,用BIT实现区间更新单点查询,再用多维实现即可 #inclu ...

  6. 《Python 学习手册4th》 第九章 元组、文件及其他

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  7. 常用的正则表达式归纳—JavaScript正则表达式

    来源:http://www.ido321.com/856.html 1.正则优先级 首先看一下正则表达式的优先级,下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序: 2.常用的正则表达 ...

  8. 线性模型(1):Perceptron Learning Algorithm (PLA)

    此笔记源于台湾大学林轩田老师<机器学习基石><机器学习技法> (一) PLA算法是基本的binary Classification算法. 一个基本的问题是,对于银行,假设我知道 ...

  9. jQuery Mobile入门教程

    简介:jQuery Mobile框架可以轻松的帮助我们实现非常好看的.可跨设备的Web应用程序.我们将后续的介绍中向大家介绍大量的代码及实例. jQuery一直以来都是非常流行的富客户端及Web应用程 ...

  10. mybatis系列-09-订单商品数据模型

    9.1     数据模型分析思路 1.每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程. 2.每张表重要的字段设置 非空字段.外键字段 3.数据库级别表与 ...