鱼C论坛

 找回密码
 立即注册
查看: 3746|回复: 9

帮忙看下那点错了

[复制链接]
发表于 2011-5-31 22:04:09 | 显示全部楼层 |阅读模式

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

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

x
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,[bx+3+si]
          and al,11011111b
          mov [bx+3+si],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,[bx+3+si]
          and al,11011111b
          mov [bx+3+si],al
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-31 22:43:56 | 显示全部楼层
MS,没问题啊,刚试编译了一下还真不行,将BX直接置3去掉那[bx+3+si]里面的常量3就通过了,或者把AL直接换成AX
难道8位寄存器不能用两个寄存器加一个常量来索引地址?

高手们解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-31 23:01:05 | 显示全部楼层
在我的MASM5.0上无问题,直接编译成功
试下调整下顺序mov [bx+si+3],al
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-1 09:11:29 | 显示全部楼层

我按照教程上的来打的啊     按常理说    应该能通过的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-1 20:55:59 | 显示全部楼层
winddyj 发表于 2011-5-31 23:01
在我的MASM5.0上无问题,直接编译成功
试下调整下顺序mov ,al

这位高手,小弟也有一个问题。为什么把那个程序的mov [bx+si+3],al 顺序调换了就行了呢?BX SI 还有Idata的顺序有什么规定呢?可以列下那顺序吗?尽量讲得详细点。。。小弟新手不过理解能力还可以。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-1 21:11:01 | 显示全部楼层
高版本的masm里应该规定了,必须符合它已定义的格式才可以
比如以下几种方式,都是在书里给出的正确格式
MOV AX, [BX+SI+1000H]   MOV AX, 1000H[BX+SI]
MOV AX, 1000H[BX][SI]    MOV AX, 1000H[SI][BX]
这种格式要求我们不必太纠结,编译器怎么要求我们怎么做就好了
你的这种写法,在我用的masm5.0里,是能成功编译的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-2 09:05:47 | 显示全部楼层
除了上面高手指出的错误之外我还发现一处错误
add bx,16
应该改为add bx,16h
如果不加H计算机只能认为你是BX+10
刚才刚运行了一下跟踪调试了一下。。。嘿嘿这个低级错误不应该错的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-2 15:44:59 | 显示全部楼层
add bx,16
在编辑器里这样写是对的,默认是10进制,在DEBUG里要换算成16进制加H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-3 12:24:48 | 显示全部楼层
幕府幽魂 发表于 2011-6-2 15:44
add bx,16
在编辑器里这样写是对的,默认是10进制,在DEBUG里要换算成16进制加H

那样写会引导前面出错》??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-3 14:36:18 | 显示全部楼层
[bx+3+si] 改成[bx+si+3]书上的是没错 可是你能保证你跟书上的编译环境是一样的吗 每个版本的编译器代码规范都是不同的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-28 17:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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