汇编入门学习笔记 (四)—— [BX] 和 loop指令

本文深入探讨了汇编语言中的BX寄存器与loop指令的应用,包括如何通过BX实现类似debug环境的操作,以及如何利用loop指令进行循环计算,如计算2的20次方。同时介绍了在DOS环境下0:200H~0:2ffH空间的使用以及段前缀的正确应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

疯狂的暑假学习之  汇编入门学习笔记 (四)—— [BX]  和 loop指令


参考:《汇编语言》 王爽 第5章


1.[BX]


mov al,[1]

在debug中,会把bs:1 中数据赋给al,但在在masm中不会把bs:1 中数据赋给al,而是把 [1] 认为是 1 赋给al。

如果要实现在debug中的mov al,[1],在masm中就需要[bx]

如:

mov bx,1

mov al,[bx]


还可以用 bs:[1] 的方式

如:

mov al,bs:[1]


2.loop


循环 要使用 loop指令

例子:计算2^20

assume cs:codesg

codesg segment
start:	mov ax,0
	mov cx,20
s:	add ax,2
	loop s
		
	mov ax,4c00H
	int 21H
codesg ends

end start


cx 存放 循环的次数,每次循环减1

s是标号 可以任意取名,表示循环的开始处,loop 跳转到s处,可以用debug单步调试看到 上面代码,loop s其实就是 loop  0006H


3.debug 中loop调试


可以用 -g 000B (安装上面代码的调试)运行到指定代码停止,来跳出循环。

或者在循环中直接用 -p 来跳出循环


4.一段安全空间


一般情况下 DOS中 0:200H~0:2ffH 空间 没有系统或者其他程序的数据或者代码,可以使用。



5.段前缀的使用


前面的mov al,bs:[1]

这里bs: 叫做段前缀

不仅bs可以

mov ax,ds:[bx]

mov ax,cs:[bx]

mov ax,ss:[bx]

mov ax,es:[bx]

都可以


例子:把内存 ffff:0~ffff:b 单元中的数据复制到  020:0~020:f 中。

assume cs:codesg

codesg segment

start:	mov ax,0ffffh
	mov ds,ax
	
	mov ax,0020H
	mov es,ax
	
	mov cx,12
	mov bx,0
s:	mov al,ds:[bx]
	mov es:[bx],al
	inc bx
	loop s
	
	mov ax,4c00H
	int 21H

codesg ends

end start









 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值