汇编语言第五章

  在第四章学会了基础编写的基础上,我们在第五章介绍一个特殊的指令loop来完成循环式的结构。

  特别规定:(XX)代表XX中的内容

(一)Loop指令的用法和作用

loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作,①(cx)=(cx)-1,②判断cx的值是否为零,不为零则转至标号处继续执行程序,为零则跳出循环继续向下执行

举例一个简单的循环程序:

assume cs:code

code segment

  mov ax,2

  mov cx,11

s:add ax,ax

  loop s

  mov ax,4c00h

  int 21h

code ends

end

这个程序的作用是计算2的12次方

从中我们可以发现,cx中的值代表的是循环的次数,标号s与loop s之间就是循环执行的代码段

我们同样可以通过debug来对循环程序进行单步追踪,这里介绍两个新的debug指令:

-g 偏移地址: 使得执行到cs:偏移地址处停止;

-p:直接重复执行循环代码直至循环结束

(二)段前缀


在指令“mov ax,[bx]”中,偏移地址由bx给出,而段地址在默认的ds中。我们也可以在访问指令中显式地给出段地址所处的段寄存器,如:mov ax,es:[bx] .这就是段前缀

在前面的学习中,我们可以用Debug中直接写入指令,[idata]表示((段地址)*16+idata)处的值。但是在汇编源代码中,[idata]代表idata这个数值。因此在汇编源代码中以[idata]表示偏移地址时,须加前缀以显式表明,比如:ds:[idata],这就是段前缀的作用之一。同时,在程序中出现几处需要改动段地址时,我们可以用段前缀显式指定不同的段寄存器来存放不同的段地址,而不用一次次的更改ds。

注意,在CPU中随意向一段内存空间写入数据是很危险的,因为我们并不知道这段空间原来是否已经存放了数据,这很可能导致你会覆盖某些重要的代码甚至是系统数据。所以我们在编写前一定要查看一下其中的内容,一般来说0:200~0:2ff这段空间是安全的,不会被其他程序占用。

转载于:https://www.cnblogs.com/makise-kurisu/p/9922574.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值