loop和bx

本文介绍了汇编语言中bx寄存器和loop指令的使用。通过实例展示了如何利用bx保存偏移地址进行数据访问,以及loop指令在循环计算中的作用,如计算2的12次方。同时,讲解了g和p命令在调试过程中的功能,以及安全内存空间的使用。文章还探讨了段前缀的概念,强调了正确指定段地址的重要性。
摘要由CSDN通过智能技术生成

bx和loop指令

【bx】

在debug程序中,我们可以直接使用:

mov ax,[0]

将DS:0地址处的数据送入ax寄存器中,但是我们在编写源程序时候,如果也写成上述形式,则会被编译器解释成

	mov ax,0

若要想达到同样的目的,有几种方法可以实现:

  • 我们可以使用一个寄存器bx来保存偏移地址,然后

      mov ax,[bx]
    

这样编译后就没问题了,相当于是把bx当作一个变量

  •   mov ax,ds:[0]
    

这样也能让编译器正确理解

  •   mov ax,ds:[bx],同上
    

loop(英文单词有循环的含义)

	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

这是一个运用loop很典型简单的程序,它是要计算2的12次方

  • 程序中有一个标号s,它标识了一个地址,这个地址处有一条指令add ax,ax
  • 执行loop时候,需要进行两步操作:cx=cx-1和判断cx中的值(cx不为零则继续循环,为0则出循环)
    所以我们可以通过控制cx来控制add ax,ax的执行次数

g命令和p命令

  • g命令
    g+偏移地址,这个指令会自动执行程序指导ip指向目标的偏移地址。不想一个t一个t执行的时候,这个命令可以帮我们快速跳转到我们想要执行的指令位置
  • p命令
    在循环次数比较多的时候,我们可以用这个指令直接一次运行到loop结束的时候

loop和【bx】联合应用

  • 这里就是把bx当作一个循环里的变量,每循环一次bx就会加1,以指向不同的地址

段前缀

我们一般的是将ds的值默认当作段地址,如

	mov ax,[bx]

但是我们还可以换一种写法,如

	mov ax,cs:[bx]

这样就可以把寄存器cs中的值当做段地址,同理不止cs可以当,其他的寄存器也可以

安全的空间

我们一般是不能随意的指定一段内存空间去写入数据的,因为有可能在这段内存空间中存储着十分重要的数据,而我们的写入改变了这些数据,会引起一些致命的问题。
在书中,告诉我们0:200~0:2ff这段256字节的空间是安全的,数据一般不会保存在这里,我们可以放心使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值