鱼C论坛

 找回密码
 立即注册
查看: 2179|回复: 8

一个小问题,求解释

[复制链接]
发表于 2012-5-4 02:09:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于王爽著的《汇编语言》第八章,实验7的问题:
-----------------------------------------------------------------
1.
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982'


dd 16,22,382,1356,2390,8000,16000,24486


dw 3,7,9,13,28,38,130,220


data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,table
mov es,ax

mov bx,0
mov di,0              
mov cx,8
s: mov ax,[bx]
mov es:[di],ax
add bx,2
mov ax,[bx]
mov es:[2+di],ax
add bx,2
add di,10h
loop s

mov ax,4c00h
int 21h
codesg ends
end start
-------------------------------------------------------------------------------
2.
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982'


dd 16,22,382,1356,2390,8000,16000,24486


dw 3,7,9,13,28,38,130,220


data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,table
mov ss,ax
              
mov bx,0
mov bp,0
mov cx,8
s: mov ax,[bx]
mov ss:[bp],ax
add bx,2
mov ax,[bx]
mov ss:[2+bp],ax
add bx,2
add bp,10h
loop s

mov ax,4c00h
int 21h
codesg ends
end start
---------------------------------------------------------------------
两段代码只有table段使用的寄存器不一样(第一个是es:[di],第二个是ss[bp]),在dubug中得到的结果不一样。
---------------------------------------------------------------------
第一段的执行结果:
-d 13db:0
13DB:0000  31 39 61 72 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   19ar summ ne ??
13DB:0010  31 39 37 36 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1976 summ ne ??
13DB:0020  31 39 37 37 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1977 summ ne ??
13DB:0030  31 39 37 38 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1978 summ ne ??
13DB:0040  31 39 37 39 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1979 summ ne ??
13DB:0050  31 39 38 30 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1980 summ ne ??
13DB:0060  31 39 38 31 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1981 summ ne ??
13DB:0070  31 39 38 32 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1982 summ ne ??
--------------------------------------------------------------
第二段的执行结果:
-d 13db:0
13DB:0000  31 39 37 35 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1975 summ ne ??
13DB:0010  31 39 37 36 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1976 summ ne ??
13DB:0020  31 39 37 37 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1977 summ ne ??
13DB:0030  31 39 37 38 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1978 summ ne ??
13DB:0040  31 39 37 39 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1979 summ ne ??
13DB:0050  31 39 38 30 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1980 summ ne ??
13DB:0060  31 39 38 31 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1981 summ ne ??
13DB:0070  31 39 38 32 20 73 75 6D-6D 20 6E 65 20 3F 3F 20   1982 summ ne ??

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-4 02:10:09 | 显示全部楼层
谁能告诉我,这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-4 08:01:34 | 显示全部楼层
你不能用栈寄存器,这样下面程序一旦有栈操作,你程序就不对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-4 22:23:00 | 显示全部楼层

用栈寄存器【ss】得到的结果是正确的,用【es】寄存器第一行的年份高位字节出问题了,没有改变。如果不能用【ss】栈寄存器的话,我用【es】寄存器,该怎样修改代码,才能让程序得到正确的结果呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-5 07:56:21 | 显示全部楼层
修改代码这事只能你自己DEBUG去,我那会也改了好长时间;P;P;P
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-6 22:18:24 | 显示全部楼层
在我的机子里运行是正确的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-6 23:11:54 | 显示全部楼层
群益电脑 发表于 2012-5-6 22:18
在我的机子里运行是正确的

谢谢你的帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-6 23:12:35 | 显示全部楼层
群益电脑 发表于 2012-5-6 22:18
在我的机子里运行是正确的

两段代码得到的结果都一样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-8 14:32:41 | 显示全部楼层
在我的机子里两个都正确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表