注册 登录
编程论坛 汇编论坛

汇编中段地址

Spygg 发布于 2010-11-06 23:04, 502 次点击
;程序功能:将a段和b段中的数据依次相加,结果存到d段中
;会溢出,因为是db,byte类型
;假如 a的地址是0b66,为什么b的地址是0b67,a段是byte类型的啊?
;=============================================
;按照我的想法,b的地址应该是 0b660+08h而不是0b660+10h=0b670

assume cs:code
a segment   
   db 1,2,3,4,5,6,7,8
a ends
b segment   
   db 1,2,3,4,5,6,7,8
b ends
d segment     ;这里为什么不能写成c segment
db 8 dup(0)
d ends
code segment   
start:      
    mov cx,8         
mov ax,a        
mov ds,ax         
mov bx,0      
   mov al,0     
s:         
add     al,ds:[bx]         
add al,ds:[bx+10h]   
mov ds:[bx+20h],al   
      mov al,0        
inc bx   
loop s        
   mov ah,4ch     
int 21h
code ends
end start
3 回复
#2
wisji82010-11-06 23:54
因为C是一个保留字。
#3
wisji82010-11-07 01:02
因为a与b各是一个段。楼主可以Debug下,把b里面对八个字节移到a里面,那么操作就和楼主想的一样。而如果不移,是不是a与b段的后八个字节补0
#4
shzlw2010-11-13 08:42
这是因为段分配的时候 不够16字节的,按16字节分配,8个字节也要分配16个,假如是17个字节也要分配32个;
公式为(N%16+1)*16    %代表求余

[ 本帖最后由 shzlw 于 2010-11-13 23:08 编辑 ]
1