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. yii2 访问控制

    class SiteController extends Controller{ /** * @inheritdoc */ public function behaviors() { return [ ...

  2. ubuntu sendmail

    一.安装 ubuntu中sendmail函数可以很方便的发送邮件,ubuntu sendmail先要安装两个包. 必需安装的两个包: 代码  sudo apt-get install sendmail ...

  3. Tomcat学习笔记 - 错误日志 - Tomcat访问Manager apps出现401 Unauthorized错误

    原因是配置文件中未指定管理员身份. 打开tomcat>conf>tomcat-user.xml文件,添加如下代码: <role rolename="admin-gui&qu ...

  4. 通过meteor实现的一个照片墙

    always love tech 初次使用meteor所遇到的一个问题: insert failed: Method '/pictures/insert' not found 提示没有这个方法,然后可 ...

  5. Windows10 磁盘活动时间百分之百导致系统卡顿解决方法

    最近电脑边的特别慢,打开任务管理器发现是磁盘活动时间时不时的就会变成100%.起初是以为硬盘出问题了,后来网上查了一下才发现很多人都遇到过这个问题,其原因就是Windows的SuperFetch和家庭 ...

  6. java设计模式之Proxy(代理模式)

    java设计模式之Proxy(代理模式) 2008-03-25 20:30 227人阅读 评论(0) 收藏 举报 设计模式javaauthorizationpermissionsstringclass ...

  7. Linux GCC

    //test.c #include <stdio.h> int main() { printf("Hello World!\n"); ; } One Shot gcc ...

  8. find系列之xargs命令

    xargs的功能-->     将标准输入转换为命令行参数,供后面的命令调用,但是一次只能依据-d和-n限定的行数来推送一行 xargs的作用-->     使那些不能利用stdin的命令 ...

  9. google浏览器翻译失败解决方案

    用记事本打开 C:\Windows\System32\drivers\etc下hosts文件 在文件末尾加入如下两行 203.208.46.145 translate.google.com 203.2 ...

  10. Qt编程之QImage类小结

    最近用Qt做图像处理,以下references是需要用到的 references: http://blog.csdn.net/lyc_daniel/article/details/9193881 ht ...