【学习笔记】-汇编语言5

第五章:【BX】和loop指令

[BX]

对于[bx]
  1. [bx]和内存单元的描述
    要完整的描述一个内存单元,需要两种信息:
    - 内存单元的地址
    - 内存单元的长度
    [bx]也表示一个内存单元,它的偏移地址在bx中,段地址在ds中
    […]中可以是值也可以是寄存器

  2. 定义一个描述性符号“()”来表示一个寄存器或一个内存单元(直接用数值要写物理地址,20位(二进制位)的)中的内容
对于[idata]

Debug将[idata]解释为:[idata]是一个内存单元,iadta是内存单元的偏移地址
Masm将[idata]解释为:idata
所以在edit中编写汇编程序时,如果想用[idata]表示偏移地址,那么就得在前面显式地给出段地址所在的段寄存器。比如mov al,ds:[0],(ds称为段前缀)
如果写成mov al,[0]那么编译的时候Masm就会把它解释成idata而不是偏移地址

loop

CPU执行loop指令的时候,要进行两步操作

  • (cx)=(cx)- 1;
  • 判断cx中的值,不为零则转至标号处执行程序,如果为0则向下执行。

通常用loop指令来实现循环功能(说明还有其他循环方式,比如jmp指令),cx中存放循环次数

标号

标识一个地址,这个地址处有一条汇编指令,可以是任意字母,初学通常用s,s0

程序框架如下:
mov cx,循环次数
s:
循环执行的程序段
loop s

CPU执行中没有乘法,只有加减法,所以可通过循环加法来达到乘法目的

跟踪循环

使用g命令跳转到想执行的指令位置
-g 0012
表示执行程序到当前代码段(段地址在cs中)的0012h处,之前所有指令都被一次执行完毕

使用p命令让循环一次性执行完
到下一步该执行loop指令的时候使用-p。DEBUG会自动重复执行循环中的指令,直到(cx)=0为止。

安全的空间

一般的PC机都不会使用0:200到0:2ff的256字节的空间,所以我们可以把这段空间当作栈来使用,也可随意写入数据。

切记汇编程序中数据不能以字母开头,如果要往ax中存放ffffh,那么需要写成
mov ax,0ffffh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值