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. 一步步实现滑动验证码,Java图片处理关键代码

    最近滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低.当然到目前为止,没有绝对的安全验证,只是不断增加攻击者的绕过成本. ...

  2. angular4.0常用依赖汇总

    Routes 路由配置 Router 路由跳转 ActivatedRoute 路由参数 FormsModule 表单配置(在app.module.ts中注入在imports下) EventEmitte ...

  3. django 项目中遇到的问题(持续更新中)

    问题1:in include 'provide the namespace argument to include() instead 描述:在最外层的urls.py 添加项目的urls后报错,错误显 ...

  4. Babel 转码器 § es6转换es5

    Babel 转码器 § es6转换es5 实时转码 /  Repl  -babel-node / babel-register(自动转码引入babel-register模块) 配置文件.babelrc ...

  5. set排序(个人模版)

    set排序: #include<stdio.h> #include<string.h> #include<iostream> #include<set> ...

  6. 51 Nod 1028 大数乘法 V2【Java大数乱搞】

    1028 大数乘法 V2 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A ...

  7. Codeforces Round #328 (Div. 2)_B. The Monster and the Squirrel

    B. The Monster and the Squirrel time limit per test 1 second memory limit per test 256 megabytes inp ...

  8. HDU--1212大数取模

    大数取模问题.题目传送门:HDU1212 #include <iostream> using namespace std; char a[1010]; int main() { int b ...

  9. java的finalize()方法与C++的析构函数

    ---<java编程思想> 读书笔记 --- 2017/3/15 读<java编程思想>读到初始化与清理一章,文中提及java的finalize()方法,联想到了C++的析构函 ...

  10. 使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项

    1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号                           工号  姓名 310110xxxx220130004 101 傅家宜3101 ...