1- SI和DI是8086CPU中和bx功能相近的寄存器, SI和DI不能够分成两个8位寄存器来使用, 下面的三组指令实现了相同的功能:

(1)  mov bx,0

  mov ax,[bx]

(2) mov si,0

  mov ax,[si]

(3) mov di,0

  mov ax,[di]

或者

(1)  mov bx,0

  mov ax,[bx + 123]

(2) mov si,0

  mov ax,[si + 123]

(3) mov di,0

  mov ax,[di + 123]

方法一:

 ;用寄存器SI和DI实现将字符串'welcome to masm!'复制到它后面的数据区中.
assume cs:codesg, ds:datasg
datasg segment
db 'welcome to masm!'
db '................'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov si,
mov di,
mov cx,
s: mov ax,[si]
mov [di],ax
add si,
add di,
loop s mov ax,4c00H
int 21h
codesg ends
end start

方法二:

用 [bx(si 或 di) + idata]的方式实现

 ;用寄存器SI和DI实现将字符串'welcome to masm!'复制到它后面的数据区中.
assume cs:codesg, ds:datasg
datasg segment
db 'welcome to masm!'
db '................'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov si, mov cx,
s: mov ax,[si]
mov [si],ax
add si,
loop s mov ax,4c00H
int 21h
codesg ends
end start

2- [bx+si] 和 [bx+di]

;(ax)=((ds)*16+(bx)+(si))
;用debug查看内存,如下
;2000:1000 BE 00 06 00 00 00 ......

mov ax,2000H
mov ds,ax
mov bx,1000H
mov si,0
mov ax,[bx + si] ;bx+si = 0 (ax)=00BEH
inc si
mov cx,[bx + si] ;bx+si = 1 (cx)=0600H
inc si
mov di,si
add cx,[bx + di] ;bx+di = 2 (cx)=0600H + 0006H = 0606H

3- [bx+si+idata] 和 [bx+di+idata]
;(ax)=((ds)*16+(bx)+(si)+(idata))
;用debug查看内存,如下
;2000:1000 BE 00 06 00 6A 22 ......

mov ax,2000H
mov ds,ax
mov bx,1000H
mov si,0
mov ax,[bx+2+si] ;(ax)=0600H
inc si
mov cx,[bx+2+si] ;(cx)=6A00H
inc si
mov di,si
mov bx,[bx+2+di] ;(bx)=226AH

总结:内存地址从0开始 bx + 0 表示BE的位置, 由于有高8位和低8位, BE为低8位, 需要组合高8位内容所以[0]中的字为 00BEH

[汇编语言]-第七章 SI和DI的更多相关文章

  1. [汇编语言]-第七章 用[bx+idata]的方式进行数组的处理

    1- 转化为大写 方法一: assume cs:code,ds:data data segment db 'BaSiC' db 'MinIX' data ends code segment start ...

  2. 《汇编语言 基于x86处理器》第七章整数运算部分的代码

    ▶ 书中第七章的程序,使用各种位移运算,加深了对内存.寄存器中整数类型变量存储的认识 ● 代码,双字数组右移 4 位 INCLUDE Irvine32.inc COUNT = ; 右移位数 .data ...

  3. 获取编译学习笔记 (六)—— si、di,双环

    疯狂暑期学习  汇编入门学习笔记 (六)-- si.di,双重循环 參考: <汇编语言> 王爽 第7章 1. and和or指令,与[bx+idata] and和or.就不多说了. [bx+ ...

  4. 汇编语言学习——第二章 寄存器(CPU工作原理)

    1.一个典型的CPU由运算器.控制器.寄存器等器件组成,这些器件靠内部总线相连. 区别: 内部总线实现CPU内部各个器件之间的联系. 外部总线实现CPU和主板上其它器件的联系. 8086CPU有14个 ...

  5. linux第七章笔记

    第七章 链接 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就 ...

  6. 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...

  8. 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7  标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...

  9. Java语言程序设计(基础篇) 第七章 一维数组

    第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...

随机推荐

  1. java普通类如何得到spring中的bean类

    在SSH集成的前提下.某些情况我们需要在Action以外的类中来获得Spring所管理的Service对象. 之前我在网上找了好几好久都没有找到合适的方法.例如: ApplicationContext ...

  2. Android 开发转型前端准备知识

    最近React Native甚是流行,再加上微信推动微应用的背景下,Android和IOS向前端转型势在必行. 技能点: 1.lambda表达式 http://blog.csdn.net/ioriog ...

  3. ZendFramework2 源码分析 index.php

    <?php /** * This makes our life easier when dealing with paths. Everything is relative * to the a ...

  4. ZendFramework 环境部署

    查看源码 int_autoloader.php 文件中,发现应用了一个 AutoloaderFactory 的命名空间,路径写得是相对路径,所以需要在 php.ini 中定义一个 inclde_pat ...

  5. python笔记之调用系统命令

    python笔记之调用系统命令 目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数, ...

  6. 如何使用Prism框架的EventAggregator在模块间进行通信

    目的 本文主要介绍如何使用Prism类库提供的事件机制在松耦合组件之间相互通信,Prism类库的事件机制建立在事件聚合服务之上,允许发布者和订阅者通过事件进行通信,不需要彼此之间引用. 事件聚合 Ev ...

  7. C和指针c6-1

    #include<stdio.h> #include<stdlib.h> char *find_char(char const *source_str, char const ...

  8. T-SQL 基于列的逻辑表达式 (CASE)

    CASE简介 基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后.由于这里讲的是T-SQL ...

  9. SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性

    原文:SQL Server 2008空间数据应用系列六:基于SQLCRL的空间数据可编程性 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 ...

  10. 过程化开发2048智力游戏WebApp

    时间荏苒,唯编程与青春不可辜负,感觉自己一直没有专心去提升编程的技能,甚是惭愧!!! 周五,无意间看到一个开发2048的视频,有点兴趣就动起手来了,虽然不擅长前端开发,在此献丑,分享一下自己使用过程化 ...