汇编学习笔记四

和自甴很熟 提交于 2019-11-26 10:26:54

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

我们通常使用访问内存单元的语句位 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!