汇编 -[BX]和loop指令

[BX]和loop指令

[bx]和内存单元的描述

如 mov ax,[bx]:
将一个内存单元的内容送入ax,长度为2个字节,因为ax的长度是2个字节,偏移地址在bx中,段地址在ds中

loop

循环

我们定义的描述性的符号:“()”

(ax)表示ax中的内容,(al)表示al中的内容
(2000H)表示内存单元2000H中的内容
((ds)*16+(bx))
 表示ds中的内容addr1x16 + bx中的内容addr2的地址单元的内容
 也可以理解为以addr1为段地址,addr2为偏移地址的内容
()里面可以有三种元素:寄存器名,段寄存器名,物理地址

在这里插入图片描述

约定符号idata表示常量

[BX]

mov ax,[bx] 表示将偏移地址为bx的内存的值写入到ax寄存器
mov [bx],ax 表示将ax寄存器的值写入偏移地址为bx的内存空间

loop指令

指令格式:loop 标号
CPU执行执行操作
(cx) = (cx) - 1
判断cx的值,不为0则转至标号处执行程序,为零则向下执行
assume cs:codesg
codesg segment
	mov ax,2
	mov cx,11
s:add ax,ax
	loop s
	mov ax,4c00h
	int 21h
codesg ends
end

在DEBUG中跟踪用loop指令循环的程序

DEBUG和汇编编译器masm对指令的不同处理

在masm中
mov ax, 1000H
mov ds, ax
mov al, [0] 
[idata]会被翻译为idata
mov ax, 1000H
mov ds, ax
mov al, ds:[0]
这样子就是将ds偏移地址0的内容写入ax

[BX]和loop的联合应用

assume cs:a
a segment
	mov ax,ffff
	mov ds,ax
	mov ax,0
	mov bx,0
	mov cx,12
s: mov bl,ds:[ax]
	  add dx,bx
	  inc ax
	  loop s
mov ax,4c00h
int 21h
a ends
end

段前缀

段前缀格式:ds:[xx]

一段安全的空间

在8086模式中,随意向一段内存空间写入内容是很危险的,因为这段空间可能存在重要的数据或者代码
一般情况下dos方式,0:200f ~ 0:2ff空间时可用的

段前缀的使用

将ffff:0~ffff:b单元的数据复制到0:200~0:20b单元
	mov ax:ffff
	mov ds:ax
	mov bx:0000
	mov dx:200
	mov cx:6
s:	add dx,ax
	mov bx:[dx],ds:[ax]
	inc ax
	loop s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值