标题:汇编中段地址
只看楼主
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
结帖率:100%
已结贴  问题点数:20 回复次数:3 
汇编中段地址
;程序功能:将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
搜索更多相关主题的帖子: 地址 汇编 
2010-11-06 23:04
wisji8
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:53
专家分:198
注 册:2010-9-19
得分:10 
因为C是一个保留字。
2010-11-06 23:54
wisji8
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:53
专家分:198
注 册:2010-9-19
得分:10 
因为a与b各是一个段。楼主可以Debug下,把b里面对八个字节移到a里面,那么操作就和楼主想的一样。而如果不移,是不是a与b段的后八个字节补0
2010-11-07 01:02
shzlw
Rank: 2
等 级:论坛游民
帖 子:11
专家分:14
注 册:2010-10-2
得分:0 
这是因为段分配的时候 不够16字节的,按16字节分配,8个字节也要分配16个,假如是17个字节也要分配32个;
公式为(N%16+1)*16    %代表求余

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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-325208-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.329660 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved