zd19920303 发表于 2011-5-31 22:04:09

帮忙看下那点错了

assume cs:codesg,ds:datasg,ss:stacksg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends

datasg segment
db '1. display......'
db '2. brows........'
db '3. replace......'
db '4. modify.......'
datasg ends

codesg segment
start:mov ax,stacksg
      mov ss,ax
          mov sp,16
          mov ax,datasg
          mov ds,ax
          mov bx,0
          
          mov cx,4
s0: push cx
      mov si,0
          mov cx,4
        s:mov al,
          and al,11011111b
          mov ,al
          inc si
          loop s
          
          add bx,16
          pop cx
          loop s0
          
          mov ax,4c00h
          int 21h

codesg ends
end start

提示25 27有一些错误就是s:mov al,
          and al,11011111b
          mov ,al

陌路狂奔 发表于 2011-5-31 22:43:56

MS,没问题啊,刚试编译了一下还真不行,将BX直接置3去掉那里面的常量3就通过了,或者把AL直接换成AX
难道8位寄存器不能用两个寄存器加一个常量来索引地址?

高手们解答

winddyj 发表于 2011-5-31 23:01:05

在我的MASM5.0上无问题,直接编译成功
试下调整下顺序mov ,al

zd19920303 发表于 2011-6-1 09:11:29

陌路狂奔 发表于 2011-5-31 22:43 static/image/common/back.gif
MS,没问题啊,刚试编译了一下还真不行,将BX直接置3去掉那里面的常量3就通过了,或者把AL直接换成AX
难道 ...

我按照教程上的来打的啊   按常理说    应该能通过的

lqyha 发表于 2011-6-1 20:55:59

winddyj 发表于 2011-5-31 23:01 static/image/common/back.gif
在我的MASM5.0上无问题,直接编译成功
试下调整下顺序mov ,al

这位高手,小弟也有一个问题。为什么把那个程序的mov ,al 顺序调换了就行了呢?BX SI 还有Idata的顺序有什么规定呢?可以列下那顺序吗?尽量讲得详细点。。。小弟新手不过理解能力还可以。。。。

winddyj 发表于 2011-6-1 21:11:01

高版本的masm里应该规定了,必须符合它已定义的格式才可以
比如以下几种方式,都是在书里给出的正确格式
MOV AX,    MOV AX, 1000H
MOV AX, 1000H    MOV AX, 1000H
这种格式要求我们不必太纠结,编译器怎么要求我们怎么做就好了
你的这种写法,在我用的masm5.0里,是能成功编译的

lqyha 发表于 2011-6-2 09:05:47

除了上面高手指出的错误之外我还发现一处错误
add bx,16
应该改为add bx,16h
如果不加H计算机只能认为你是BX+10
刚才刚运行了一下跟踪调试了一下。。。嘿嘿这个低级错误不应该错的。。。

幕府幽魂 发表于 2011-6-2 15:44:59

add bx,16
在编辑器里这样写是对的,默认是10进制,在DEBUG里要换算成16进制加H

zd19920303 发表于 2011-6-3 12:24:48

幕府幽魂 发表于 2011-6-2 15:44 static/image/common/back.gif
add bx,16
在编辑器里这样写是对的,默认是10进制,在DEBUG里要换算成16进制加H

那样写会引导前面出错》??

35349878 发表于 2011-6-3 14:36:18

改成书上的是没错 可是你能保证你跟书上的编译环境是一样的吗 每个版本的编译器代码规范都是不同的
页: [1]
查看完整版本: 帮忙看下那点错了