[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. JMSTemplate发送消息
  2. 【Python生成readme文件】——Markdown语法
  3. keepalive的作用
  4. 根据时间戳 统计每天用户的金额总数
  5. android之appwidget(一)简单appwidget
  6. POJ 2409 Let it Bead【Polya定理】(模板题)
  7. 基于UCenter关联第三方网站与Discuz用户
  8. 开课吧:C++基础之字符串匹配之BM算法(Boyer-Moore)
  9. 【异或】LeetCode 136. Single Number
  10. [POI2013]LUK-Triumphal arch
  11. 时域离散信号/系统频域分析(matlab)零点,极点,因果,稳定
  12. html制作网页案例代码
  13. js实现select动态添加option,默认为选中状态
  14. 知其然不知其所以然!
  15. PotPlayer设置最小化的快捷键
  16. 第三次个人作业——关于K米(Andorid)的案例分析
  17. 2022年高处安装、维护、拆除考试试卷及高处安装、维护、拆除作业考试题库
  18. 服务器摆放需要预留U位么_办公沙发摆放有何讲究?
  19. python目前版本强势英雄_王者荣耀S11赛季什么英雄强势 S11强势英雄推荐
  20. 【人工智能笔记】第三十六节:TF2实现VITGAN对抗生成网络,MSA多头注意力 实现

热门文章

  1. hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)
  2. CSU 1081集训队分组(搜索)
  3. 异想-天开 python---while、for、if-else 循环学习
  4. 梯度下降法,牛顿法,高斯-牛顿迭代法,附代码实现
  5. Hadoop集群完全分布式模式环境部署
  6. 使用QCustomPlot绘图的基础
  7. Linux下c和cuda混合编译,并生成动态链接库.so和使用
  8. 【Matlab】山地建模?立体热度?怎么绘制三维曲面图?
  9. [云炬创业学笔记]第一章创业是什么测试15
  10. 科大星云诗社动态20210328