实验4 [bx]和loop的使用

本文介绍了一个简单的8086汇编程序,该程序将一系列数据写入指定内存区域,并复制代码段到另一内存位置。通过调试工具测量代码长度并准确复制。
1、编程、向内存中0:200~0:23f依次传送数据0~63(3FH)

分析:0~63要循环64次,然后就是导入ds,bx,cx,很简单的一个程序

assume cs:codesg

codesg segment

	mov ax,0
	mov ds,ax
	mov bx,200h
	
	mov cx,64	;循环64次
s:	mov [bx],ax
	inc ax
	inc bx
	loop s

	mov ax,4c00h
	int 21h

codesg ends

end


2、上面题目,要求只用9条。。。答案跟上面一样,不知道为啥


3、下面的程序的功能是将mov ax,4c00h之前的指令复制到内存0:200处,补全程序。

首先先分析整个代码能读懂的部分,就可以得知ds就是要指向我们的代码段,cx要为mov ax,4c00h前面的长度。

前面的长度要怎样求呢?下面给出一个办法

1、先随便填1个数字

如下代码:

assume cs:codesg

codesg segment

	mov ax,cs
	mov ds,ax
	mov ax,0020h
	mov es,ax
	mov bx,0
	mov cx,1h
s:	mov al,[bx]	;将前面代码内容送到al中
	mov es:[bx],al	;将al送到0:200处
	inc bx
	loop s
	
	mov ax,4c00h
	int 21h
	
codesg ends

end

然后进入debug中,用u查看代码长度


发现mov前面的地址为076a:0017,所以前面代码长度就为17h

这时候回填入17h,代码如下:

assume cs:codesg

codesg segment

	mov ax,cs
	mov ds,ax
	mov ax,0020h
	mov es,ax
	mov bx,0
	mov cx,17h
s:	mov al,[bx]	;将前面代码内容送到al中
	mov es:[bx],al	;将al送到0:200处
	inc bx
	loop s
	
	mov ax,4c00h
	int 21h
	
codesg ends

end

整个程序就完成了,这时候再观察0:200的代码(更改程序后记得重新masm、link和debug)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值