[bx]和loop的使用

(1)编程,向内存0:200~0:23F依次传送数据0 ~63(3FH)

assume cs:code
code segmentmov ax,20Hmov es,ax;数据传到哪里去mov cx,64mov bx,0mov dl,0  ;逻辑清晰loop setnumber:mov es:[bx],dlinc bx ;increase自增inc dlloop setnumbermov ax,4c00hint 21h
code ends
end

(2)编程,向内存0:200~0:23F依次传送数据0 ~63(3FH),程序中只能使用9条指令,9条指令中包括"mov ax,4c00h"和"int 21h"。

assume cs:code
code segmentmov ax,20Hmov es,ax;数据传到哪里去mov cx,64mov bx,0mov dl,0  ;逻辑清晰loop setnumber:mov es:[bx],bl  ;把dl也省了inc bx ;increase自增loop setnumbermov ax,4c00hint 21h
code ends
end

(3)下面的程序的功能是将“mov ax,4c00h”之前的指令复制到0:200处,补全程序。上机调试,跟踪运行结果。

assume cs:code
code segment:mov ax,csmov ds,axmov ax,0020hmov es,axmov bx,0mov cx,23   ;cx决定复制多少个字节s:  mov al,ds:[bx];数据从哪里来mov es:[bx],alinc bxloop s
;IP=IP+所读指令的字节数  17h-0=23=cxmov ax,4c00hint 21h
code ends
end

比较以下汇编源程序中以下指令的含义
mov al,[0] ——》 含义:(al)=0,将常量0送入al中,与mov al,0含义相同
mov al,ds:[0] ——》 含义:(al)=((ds)*16+0),将内存单元中的数据送入al中
mov al,[bx] ——》 含义:(al)=((ds)*16+【bx】),将内存单元中的数据送入al
mov al,ds:[bx] ——》含义:与“mov al,【bx】”相同

从上面的比较中可以看出
(1)在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用“[…]”来表示内存单元,如果在“[ ]”里用一个常量idata直接给出内存单元的偏移地址,就要在“[ ]”的前面显示地给出段地址所在的段寄存器。比如 mov al,ds:[0]
如果没有在“【】”的前面显示地给出段地址所在的段寄存器,比如
mov al,【0】
那么编译器masm把指令【idata】理解为idata。
(2)如果在“【】”中用寄存器,比如bx,间接给出内存单元的偏移地址,则段地址默认在ds中。当然也可以显式地给出段地址所在的段寄存器。

段前缀

指令“mov ax,[bx]”中,内存单元的偏移地址由bx给出,而段地址默认在ds。我们可以在访问内存单元的指令中显式地给出内存单元的段地址所在的段寄存器。比如:
(1)mov ax,ds:[bx]
将一个内存单元的内容送入ax,这个内存单元的长度为两个字节,存放一个字,偏移地址在bx中,段地址在ds中。

(2)mov ax,cs:[bx]
将一个内存单元的内容送入ax,这个内存单元的长度为两个字节,存放一个字,偏移地址在bx中,段地址在cs中。

(3)mov ax,ss:[bx]
将一个内存单元的内容送入ax,这个内存单元的长度为两个字节,存放一个字,偏移地址在bx中,段地址在ss中。

(4)mov ax,es:[bx]
将一个内存单元的内容送入ax,这个内存单元的长度为两个字节,存放一个字,偏移地址在bx中,段地址在es中。

(5)mov ax,ss:[0]
将一个内存单元的内容送入ax,这个内存单元的长度为两个字节,存放一个字,偏移地址为0,段地址在ss中。

(6)mov ax,cs:[0]
将一个内存单元的内容送入ax,这个内存单元的长度为两个字节,存放一个字,偏移地址为0,段地址在cs中。

用于显式地指明内存单元段地址的“ds:”,“cs:”,“ss:”,“es:”,在汇编语言中称为段前缀。

实验四 [bx]和loop的使用+段前缀相关推荐

  1. 《汇编语言》第5章 [BX]和loop指令——实验4[bx]和loop的使用

    本篇是第5章的实验--[bx]和loop的使用 (1)编程,向内存0:200~0:23F依次传送数据0~63(3FH). 解答: assume cs:codesg codesg segmentmov ...

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

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

  3. 实验 4 [bx]和 loop 的使用

    实验结论 实验1:综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个字单元重复填充字数据 0403H. 1.源代码及实验结果 运行结果:屏幕中央出现一 ...

  4. 汇编语言(王爽)实验4 [bx]和loop的使用

    首先一定要知道第一空填cs,代码段: 接下来可以先随便给cx赋一个值,这里先给1,然后debug看总共占对少字节 assume cs:code code segmentmov ax,csmov ds, ...

  5. 实验4 [bx]和loop的使用

    (1) assume cs:codesgcodesg segmentmov ax, 0mov ds, axmov bx, 200H ;ds:bx数据区mov cx, 40hmov dl, 0 s: m ...

  6. [BX] 和 loop 指令---汇编学习笔记

    [BX] 和 loop 指令 [bx]和内存单元的描述 loop 我们定义的描述性的符号:"()","()"中的元素可以有3中类型:寄存器名.段寄存器名.内存单 ...

  7. 汇编语言知识点总结之五:第五章《[bx]和loop指令》

    1.[bx]和内存单元的描述 [0]表示内存单元,它的偏移地址是0.比如在Debug中使用,如下指令: mov ax, [0] 代表:将一个内存单元的内容送入ax,这个内存单元的长度为2字节(字单元) ...

  8. matlab实验符号计算答案,2014秋实验四_MATLAB的符号计算二答案

    实验四MATLAB的符号计算(二) 130123096 段石磊 一.实验目的 1.掌握MA TLAB7.0 subs.simple.simplify.finverse等函数的应用: 2.掌握利用MA ...

  9. 汇编试验四:[bx] 和 loop 的使用

    预备知识: 段前缀的使用: ffff:0~ffff:b 和 0020:0~0020:b 的数据: 一次循环的复制效果: 但是,这种方式DS的数据得修改: Source Code: assume cs: ...

最新文章

  1. iOS键盘弹出时动画时长失效问题
  2. python代码大全p-python处理写入数据代码讲解
  3. Ubuntu下查看命令的源码
  4. rpm安装mysql报错_【CentOS-65】通过rpm包安装mysql57解决了server报错和mysqld启动报错的问题...
  5. React之props基本使用
  6. SpringBoot+Redis缓存概念介绍
  7. 系统描述符类型,段描述符类型和段描述符表
  8. fir.im Weekly - 2016 开年技术干货分享
  9. ECTouch_v2.7.2-一款强大的商城系统源码带视频教程
  10. django注册登录
  11. 山东大学计算机学院第二校园,山东大学本科生第二校园学习经历管理办法
  12. ecshop模板支持php,解决ecshop模板不支持php代码,修改ecshop过滤模板php代码!
  13. python opencv gpu加速_让Python下的OpenCV也能GPU加速!part.1
  14. 付费搞来的Excel资源,请低调使用!
  15. oracle pga的作用,Oracle PGA作用
  16. 《C Primer Plus》中文第六版 编程练习答案 第五章 运算符、表达式和语句
  17. 正确的慢跑姿势是怎样的?
  18. 裁员纪实:联想不是我的家[转载]
  19. 一个女孩的IT创业经历,想创业的男人女人必看!
  20. 招聘管理系统有哪些比较实用的功能呢?

热门文章

  1. poj 3614(最大流)
  2. nyoj116士兵杀敌2
  3. NYOJ 38 布线问题
  4. 洛谷 - P1111 - 修复公路 - 并查集
  5. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码...
  6. 字段中存在空值的问题测试
  7. 评论设置----第二章:创建和管理内容
  8. LoadRunner 8.1 学习笔记4
  9. Thread concepts
  10. 转载 干货 | 1400篇机器学习的文章中,这10篇是最棒的!