首页
社区
课程
招聘
遇到无效指令
发表于: 2006-4-9 22:51 4279

遇到无效指令

2006-4-9 22:51
4279
书上的一个例子, 根据logic_rule的位,执行z = x +(-) y
datarea segment
        x dw 1,2,3,4,5,6,7,8,9,10
        y dw 1,2,3,4,5,6,7,8,9,10
        z dw 10 dup (?)
        logic_rule dw 0dch
datarea ends
prognam segment
main proc far
        assume cs:prognam,ds:datarea
start:
        mov ax,datarea
        mov ds,ax
        mov bx,0
        mov cx,10
        mov dx,logic_rule

next:        mov ax,x[bx]
        shr dx,1
        jc subtract
        add ax,y[bx]
        jmp short result
subtract:
        sub ax,y[bx]
result:       
        mov z[bx],ax
        add bx,2
        dec cx
        jnz next
        ret
main endp
prognam ends
        end start

执行的时候遇到无效指令
但是把x的数据全改为10就不会出错了, 为什么啊?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
datarea segment
  x dw 1,2,3,4,5,6,7,8,9,10
  y dw 1,2,3,4,5,6,7,8,9,10
  z dw 10 dup (?)
  logic_rule dw 0dch
datarea ends
prognam segment
  assume cs:prognam,ds:datarea
start:
  mov ax,datarea
  mov ds,ax
  mov bx,0
  mov cx,10
  mov dx,logic_rule

next:  mov ax,x[bx]
  shr dx,1
  jc subtract
  add ax,y[bx]
  jmp short result
subtract:
  sub ax,y[bx]
result:  
  mov z[bx],ax
  add bx,2
  dec cx
  jnz next
  
  mov ah, 4ch
  int 21h

prognam ends
  end start
纯DOS下通过,
2006-4-10 13:53
0
雪    币: 194
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我发现把上面的

ret

改成

MOV AX,4C00H
INT 21H

就不会出错了

我在其它程序中也遇到这样的问题
不知为什么
2006-4-18 13:50
0
雪    币: 194
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
thinksj 你就是这样改的是不是?
2006-4-18 13:51
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
5
就是这样改的啊,,
2006-4-18 15:06
0
游客
登录 | 注册 方可回帖
返回
//