body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(2n){background-color: #f8f8f8;}

mov ax , [0]  将一个内存单元的内容送入 ax , 这个内存单元的长度为 2字节 (字单元);
mov al , [0]   将一个内存单元的内容送入 al  , 这个内存单元的长度为 1字节 (字节单元);
1、[bx]  也表示一个内存单元,它的偏移地址在 bx 中;
mov ax , [bx]   ; 将一个内存单元的内容送入 ax , 这个内存单元的长度为 2字节(字单元),存放一个字,偏移地址在 bx 中,段地址在 ds 中。
mov al , [bx]   ; 将一个内存单元的内容送入 ax , 这个内存单元的长度为 1字节(字节单元),存放一个字节,偏移地址在 bx 中,段地址在 ds 中。
2、loop
循环
3、描述性的符号“()”
“()”表示一个寄存器或一个内存单元中的内容。
(ax)表示 ax 中的内容、(al)表示 al 中的内容;
4、约定符号 idata 表示常量
eg:mov ax , [idata]  代表 mov ax , [1] 、mov ax , [2] 、mov ax , [3] ...
mov bx , idata 
mov ds , idata  非法指令
SA--Segment Address 段地址
EA--Effective Address  有效地址

Loop 指令:loop   标号
①、(cx)=(cx)-1;   cx 中存放循环次数
②、判断 cx 中的值,不为零则转至标号处执行程序,如果为零则向下执行。
计算2^12次方
assume cs:code 
code segment
     mov ax , 2
     mov cx , 11
 s:  add ax , ax
     loop s
     mov ax , 4c00h
     int 21h
code ends
end
mov ax , 2000h        ; 将 ds:bx 单元中的数据送入 al
mov ds , ax
mov bx , 0
mov al , [bx]        ;将 2000h:0 处的值到al中
\ mov al , [0]  在debug中和上面作用一样,masm中就是把0放到al中


mov al , ds:[0]       ; [0] 前显示给出段地址所在寄存器

注意:masm 中,对 [idata] 解释成 “idata”; 在 debug 中解释成“[idata]”是一个内存单元,idata 是内存单元的偏移地址;
所以要在源程序中实现将内存 2000:0、2000:1 ... 这样的单元数据送入寄存器,目前的方法就是将偏移地址送入 bx 寄存器中,用 [bx] 的方式来访问内存单元。
如果要向 debug 中那样显示的直接用 [idata] 给出内存单元,就要在 [idata] 前给出段地址所在的段寄存器。

要将字节单元(8位)数据累加到一个16位寄存器的方法,先把这个8位数据放到一个16位寄存器的低8位,高8位置0,最后在累加到16位的寄存器。
mov ax , ffffh
mov ds , ax 
mov dx , 0            ; 初始化累加器
mov al , ds:[0]      ; 8位字节单元数据放到ax的低8位
mov ah , 0           ;高8位置0
add dx , ax
在 8086 模式中,不能随意向一段内存空间写入内容,因为可能那段段空间中存放着重要的系统数据或代码。
编程的时候一般用 0:200~0:300 这段 256 个字节的空间。如果要使用其他的空间,要先看一下这段空间的数据是不是都为0
将内存 ffff:0~ffff:b 单元中的数据拷贝到 0:200~0:20b 单元中:
assume cs:code
code segment
     mov bx , 0
     mov cx , 12
s:   mov ax , ffffh
     mov ds , ax
     mov dl , [bx]
     mov ax , 0020h
     mov ds , ax
     mov [bx] , dl
     inc bx 
     loop s
     mov ax , 4c00h
     int 21h
code ends
end


最直接的做法,但是每次都两次设置 ds
改进:
assume cs:code
code segment
    mov ax , ffffh
    mov ds , ax
    mov ax , 0020
    mov es , ax      ;用附加段寄存器存放另一个段地址
    mov bx , 0 
    mov cx , 12
s:  mov dl , [bx]
    mov es:[bx] , dl
    inc bx
    loop s
    mov ax , 4c00h
    int 21h
code ends
end


masm 编译器[idata]之前要显示给出段地址所在寄存器

[bx]和loop指令的更多相关文章

  1. 汇编语言-[BX]和loop指令

    汇编语言-[BX]和loop指令 [BX]指令介绍 mov ax,[bx] 功能: bx为偏移地址,段地址默认为ds.因此,上面指令作用就是将ax中的数据送入内存ds:bx处,即:((ds)*16 + ...

  2. [汇编学习笔记][第五章[BX]和loop指令]

    第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...

  3. 80806汇编(5)——[BX]和Loop指令

    80806汇编(5)--[BX]和Loop指令 已经好久没写点东西了,国庆节就一直想弄个个人网站,这段时间一直在弄那个,虽然有现成的框架(Hexo),但是总想弄出自己的效果来,但是最后还是有些差强人意 ...

  4. 王爽汇编第五章,[bx]和loop指令

    目录 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 例子: 王爽汇编第五章,[bx]和loop指令 [bx]和loop指令 [bx]之前我们介绍寄存器的时候,已经很详细的说明过了,b ...

  5. 第五章 [BX]和loop指令

    5.1 [bx] [bx]是什么 和 [0] 有些类似,[0] 表示内存单元,它的偏移地址是 0. 例如: mov ax, [0] 内存以字节为单位:ax以字(16bit = 2Byte)为单位:al ...

  6. 汇编语言-[bx]和loop指令和多个段

    5.1 [BX]和内存单元的描述 要完成描述一个内存单元,需要两种信息: 内存单元的地址: 可以用 [0] 表示一个内存单元, 0 表示单元的偏移地址,段地址默认在 ds 中: 同样也可以用 [bx] ...

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

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

  8. [汇编语言]-第五章[bx]和loop指令

    1- [bx]和内存单元的描述 [0]表示内存单元, 他的偏移地址为0 mov ax,[0] 将一个内存单元的内容送入到ax.这个内存单元的长度为2字节(字单元),存放一个字,偏移地址为0,段地址在d ...

  9. 实验4 [BX]和loop指令

    实验内容: 1.综合使用loop,[bx],编写完整汇编程序,实现向内存b800:07b8开始的连续16个字单元重复填充字数据0441H. 实验结果: 若填充的数据为:0403h,则实验结果转变为: ...

随机推荐

  1. 更加清楚理解mvc结构

      更加清楚理解mvc结构 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有问题一起学习欢迎留言.评论.

  2. JavaScript ES6中export及export default的区别

    相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...

  3. js 闭包的用法详解

    一.闭包 实现可重用的局部变量,且保护其不受污染的机制. 外层函数包裹受保护的变量和内层函数. 内层函数专门负责操作外层函数的局部变量. 将内层函数返回到外层函数外部,反复调用. 二.作用域 子函数会 ...

  4. jQuery源码解析资源便签

    最近开始解读jQuery源码,下面的链接都是搜过来的,当然妙味课堂 有相关的一系列视频,长达100多期,就像一只蜗牛慢慢爬, 至少品读三个框架,以后可以打打怪,自己造造轮子. 完全理解jQuery源代 ...

  5. js中的数组去重

    var str=["1","4","5","5","6","1","7 ...

  6. 用Vue中遇到的问题和处理方法

    用Vue开发项目有一段时间,在实际项目中遇到一些问题,在里把问题记录下来,并附上解决方案,给遇到同样的问题的码友提供一个解决思路吧: 测试部抛出问题一:在Vue1.0路由vue-router中,当点击 ...

  7. C#并发编程实例讲解-概述(01)

    在工作中经常遇到需要并发编程的实例,一直没有时间来整理,现在空了下来,个人整理对并发一下理解. 关于并发编程的几个误解 误解一:并发编程就是多线程 实际上多线只是并发编程的一中形式,在C#中还有很多更 ...

  8. Java多线程与并发编程学习

    一.线程三大特性 多线程有三大特性,原子性.可见性.有序性 1.1 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行.一个很经典的例子就是银行账户转账 ...

  9. 基于Windows下python3.4.1IDLE常用快捷键小结

    安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.ALT ...

  10. BZOJ 1800: [Ahoi2009]fly 飞行棋【思维题,n^4大暴力】

    1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1689  Solved: 1335[Submit][St ...