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
end2、上面题目,要求只用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)

本文介绍了一个简单的8086汇编程序,该程序将一系列数据写入指定内存区域,并复制代码段到另一内存位置。通过调试工具测量代码长度并准确复制。
2432

被折叠的 条评论
为什么被折叠?



