鱼C论坛

 找回密码
 立即注册
查看: 2790|回复: 4

帮我看看下面那个代码错了

[复制链接]
发表于 2012-3-8 13:22:44 | 显示全部楼层 |阅读模式
1鱼币
assume cs:zhu
zhu segment

start:   mov bx,1000h
                    mov ds,bx
                        mov ax,1111h
                    mov [0],ax
                         mov ax,0
                         mov cx,10h
                peng:  add ax,[0]
                     loop peng
                         
                         mov ax,4c00h
                         int 21h
                         
zhu ends
end start                         
               
pa.asm(7) : error A2001:

最佳答案

查看完整内容

H代表十六进制,你这个mov ax,1111h太大拉。mov [0],ax;add ax,[0]这两句好像不对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-8 13:22:45 | 显示全部楼层
H代表十六进制,你这个mov ax,1111h太大拉。mov [0],ax;add ax,[0]这两句好像不对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-8 14:01:28 | 显示全部楼层
第 7 行的 mov [0],ax 应该改为 mov ds:[0],ax。 和在debug 里不同,编译器看 [idata] 是直接把它当常数看的,所以mov ax,[0] 编译后变成了 mov ax,0 ,而不是mov ax,ds:[0].
但[bx] 编译后还是ds:[bx]。
所以为什么编译器会报错就很明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-8 14:06:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-9 17:25:23 | 显示全部楼层
侦探说的是正确的。

debug中 可以这样用,但是masm不会认的,必须加上segment。

你这个程序还有个问题:1111H, 16次累加会超过ax的表示范围,ax最大表示0FFFFH.

所以你这个程序中用来累加的话,需要用到eax。 eax是32bit的寄存器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 13:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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