1020232499 发表于 2012-3-8 13:22:44

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

assume cs:zhu
zhu segment

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

霸王龙 发表于 2012-3-8 13:22:45

H代表十六进制,你这个mov ax,1111h太大拉。mov ,ax;add ax,这两句好像不对吧

笨蛋侦探 发表于 2012-3-8 14:01:28

第 7 行的 mov ,ax 应该改为 mov ds:,ax。 和在debug 里不同,编译器看 是直接把它当常数看的,所以mov ax, 编译后变成了 mov ax,0 ,而不是mov ax,ds:.
但 编译后还是ds:。
所以为什么编译器会报错就很明白了。

1020232499 发表于 2012-3-8 14:06:33

笨蛋侦探 发表于 2012-3-8 14:01 static/image/common/back.gif
第 7 行的 mov ,ax 应该改为 mov ds:,ax。 和在debug 里不同,编译器看是直接把它当常数看的,所以 ...

知道了,谢谢了

arkhe 发表于 2012-3-9 17:25:23

侦探说的是正确的。

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

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

所以你这个程序中用来累加的话,需要用到eax。 eax是32bit的寄存器
页: [1]
查看完整版本: 帮我看看下面那个代码错了