困扰我一下午的汇编题,虽然结果达到了。但是DEBUG却不尽人意,望高手指点,

来源:百度知道 编辑:UC知道 时间:2024/07/02 15:03:13
困扰我一下午的汇编题,虽然结果达到了。但是DEBUG却不尽人意,望高手指点,

题:补充代码段, 将A段和B段的内容相加,结果存入C段
对db的功能还不太了解。望指点,,,以及三个段在内存中的段地址和偏移地址是如何分配的,望指点。。

assume cs:code
a segment
db 1,2,3,4,5,6,7,8,
a ends
b segment
db 2,3,4,5,6,7,8,9
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
.
.
.
?
code ends
end ..

首先,回答两个问题。
1、db的功能
db是定义字节变量的伪指令。若是数值(非字符),多于一个的数值之间要用逗号分开。如,你问题中定义的数据。
若是字符串,可连续定义。如,
db 'A'
db 'abcd',13,10,'$'
当一个数据段有多组变量时,最好给每组变量起个名字。这样做有两个好处:一是区分组别,二是便于寻址。
2、三个段在内存中的段地址和偏移地址是如何分配的
这一问,说明这个程序是16位汇编,即分段式管理。16位汇编语言,最多可以定义和使用4个段:代码段、数据段、附加数据段、堆栈段。问题给出三组数据,且要求在不同的数据段,而16位汇编最多只允许定义两个数据段,所以,必须把其中的两组数据合并在一个数据段,或者把其中一组数据放在代码段。下面的程序,就是把C组数据放在了代码段。
至于段地址的分配,是按着各个段的定义顺序、从低地址到高地址、以节(paragraph:本以为文章中的段、节,在内存分配中,1节=16字节)为基本单位来分配,不足一节的,按1节分配。至于实际分配多大空间,要看你实际定义了多少个字节的数据。这个段分配完之后,紧接着分配下一个段。
偏移地址是相对一个段的开始而言的,每个段的起始偏移地址都是0,其后数据的偏移地址就是这个数据的当前位置距当前段的距离,以字节为单位。

下面是按要求补充的代码段和完成指定功能的完整程序:
; 本程序通过编译,运行正确
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 2,3,4,5,6,7,8,9
b ends
Code Segment
Assume CS:Code,DS:a,es:b
Start: mov ax,a
mov ds,ax
mov ax,b
mov es,ax
xor si,si ;数据段数据偏移地址
xor di,di ;附加段数据偏移