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

遇到无效指令

2006-4-9 22:51
3846
书上的一个例子, 根据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就不会出错了, 为什么啊?

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
thinkSJ 4 2006-4-10 13:53
2
0
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下通过,
雪    币: 194
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fangxin 2006-4-18 13:50
3
0
我发现把上面的

ret

改成

MOV AX,4C00H
INT 21H

就不会出错了

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