汇编语言学习笔记07——[BX]和loop指令

一、思维导图

二、关键内容摘录


注意:因为每个人记忆与思维的差异,对知识的理解在难易性、熟练度和重要性上带来很大差异,这些笔记是从我的视野出发进行的归纳,有些内容我觉得简单或潜移默化中已经掌握,所以可能并没有在思维导图和内容摘录中体现;反之亦然,有些内容可能读者觉得没有必要在笔记中呈现,却可能恰恰是我的短板或者偏重的地方。

一、思维导图

斥候
第五章,思维导图by汉唐斥候

二、关键内容摘录

1、loop指令的格式:loop 标号,CPU执行loop指令的时候,要进行两步操作,①(cx)=(cx)-1;②判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行。loop指令来实现循环功能,cx中存放循环次数。

2、用cx和loop指令相配合实现循环功能的3个要点:

● 在cx中存放循环次数;

● loop指令中的标号地址要在前面;

● 要循环执行的程序段,要写在标号和loop指令的中间。

框架如下:

    mov cx,循环次数

s:

    循环执行的程序段

    loop s

3、计算ffff:0006单元中的数乘以3,结果存储在dx中。

分析与思考:

  • 运算后结果是否会超出dx所能存储的范围?
  • 用循环累加来实现乘法,用哪个寄存器进行累加?
  • ffff:6单元是一个字节单元,ax是一个16位寄存器,数据长度不一样,如何赋值。

4、在汇编源程序中(就是文本中),数据不能以字母开头。所以不可以写作ffffh,而应该写成0ffffh。

5、注意:在单步调试程序时,调试到“int 21h”时要调用-p而不是平时所用的-t

6、-g 代码段的偏移地址,可以一次执行完前面的指令。比如-g 0012将使Debug从当前的CS:IP指向的指令执行,一直到(IP)=0012h为止。

当loop很多次时,可以用-p命令一次性完成完整循环,也可以通过-g loop之后下一条命令地址 使得循环执行完毕。

7、在debug中,我们写过类似指令:mov ax,[0] 表示将ds:0处的数据送入ax中。但是在汇编源程序(asm、txt格式的汇编程序)中,指令“mov ax,[0]”会被编译器(masm)当做mov ax,0处理。解决的方式为在编写汇编源程序时,使用mov bx,0 mov ax,[bx]的方式或者使用 mov ax ds:[0]的方式。

8、计算ffff:0~ffff:b单元中的数据的和,结果存储在dx中。

分析与思考:

  • 运算后结果是否会超出dx所能存储的范围?否
  • 能够将ffff:0~ffff:b单元中的数据直接累加到dx中?否
  • 能够将ffff:0~ffff:b单元中的数据直接累加到dl中,并设置(dh)=0,从而实现累加到dx中?否

从上面分析中可以看到两个问题:类型的匹配和结果不超界。(dx)=(dx)+内存中8位数据不匹配;(dl)=(dl)+内存中8位数据可能超界;

9、dos方式下,一般情况,0:200~0:2ff空间中没有系统或其他程序的数据和代码,我们可以利用将数据写入这段内存。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值