汇编学习笔记四

使用偏移地址寄存器来访问内存单元

我们通常使用访问内存单元的语句位 mov ax,ds:[0]

我们也可以使用这样的形式访问内存单元 mov ax,ds:[bx]

我们称bx位偏移地址寄存器,这里只能使用bx寄存器
bx成为偏移地址寄存器

inc指令表示将目标操作数加1


assume cs:code

code segment
		mov ax,2000H
		mov ds,ax
		mov bx,1000H
		mov cl,0

	cc:	mov ds:[bx],cl
		inc cl
		inc bx
    	jmp cc

		
code ends

end

这段指令的含义便是将0,1,2,3,4,5…辅助到一个内存中,我们使用了cc: mov ds:[bx],cl 这个指令中的cc表示一个标号,可以说是这个内存的地址

loop指令 这个指令和jmp指令也是相同的,都可以进行跳转,我们通常使用loop指令来进行循环,我们使用这个指令可以限制循环的次数,将循环的次数保存在cx寄存器中,没循环一次cx寄存器便会减一,当cx为0时便退出了循环,下面是一个例子进行说明。

assume cs:code

code segment
		mov ax,2000H
		mov ds,ax
		mov cx,4
		mov bx,1000H
		mov dl,0

	cc:	mov ds:[bx],dl
		inc dl
		inc bx
    	loop cc

		
code ends

end

下面使用汇编指令做一道算术题 123X456的值

assume cs:code

code segment
		
		mov cx,123
		mov bx,0
	num:add bx,456	
    	loop num

		
code ends

end

在通过循环是我们使用p命令跳过循环

编程题
将FFFF:0FFFF:F内存单元的数据存放在0:2000:20F中

assume cs:code

code segment
		mov bx,0
		mov cx,8


	num:mov ax,0FFFH
		mov ds,ax
		mov ax,ds:[bx]
		mov dx,20H
		mov ds,dx
		mov ds:[bx],ax
		inc bx
		inc bx
    	loop num
		
code ends

end

es寄存器 也是和数据有关的寄存器 这个寄存器也是段地址寄存器和ds的作用是一样的,为什么要有ds和es两个数据段地址寄存器哪?

比如上面那个例子中我们需要设置两个段地址寄存器,而我们的做法是将ds相互转换的,这种方式是很复杂的而且浪费内存空间,因此我们可以通过es寄存器来改写上面的代码。

assume cs:code

code segment
		mov bx,0
		mov cx,8
		mov ax,0FFFFH
		mov es,ax
		mov ax,20H
		mov ds,ax

	num:mov ax,es:[bx]
		mov ds:[bx],ax
		inc bx
		inc bx
    	loop num
		
code ends

end

我将es当做原目的数据地址,将ds当做目的数据段地址的
使用es保存FFFFH,使用ds保存20H

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值