回 帖 发 新 帖 刷新版面

主题:[原创]请高手快来看这个错在哪里?

[size=3][size=1][size=3][size=1][size=2][size=3][size=4][size=5][size=6][size=5][size=4][size=3]题目: 求出首地址位data的100个字数组中的最小偶数,并把它存放在AX中.
下面是我编的汇编代码,但是提示 divid overflow,不过我没看出有什么不对的啊!请各位帮帮忙,看看哪里错了!!!先谢谢了
dase segment
  data dw 1,2,3,4,5,6,7,8,9,10
  buf dw 100
dase ends
code segment
 main proc far
 assume cs:code,ds:dase

start:
  push ds
  mov ax,ax
  push ax
  mov si,0
  mov cx,10
  mov dl,2
next: mov bx,data[si]
      add si,2
      mov ax,bx
      idiv dl
      cmp ah,0
      jne loop1
      cmp buf,bx
      jb loop1
      mov buf,bx
 loop1:
   loop next
   mov ax,buf
   ret
main endp
code ends
  end start                [/size][/size][/size][/size][/size][/size][/size][/size][/size][/size][/size][/size]

回复列表 (共5个回复)

沙发

测试一个数是否为偶数不用除法,用除法很慢,容易出错(对于初学者)
  如果想知道 ax 是否为偶数,可这样
  test ax,1
  jz even 
odd:
  ;ax是奇数
even:
  ;ax是偶数

板凳

你的程序我debug过了,算法(逻辑)没有问题,原因是没有正确初始化ds寄存器,将
  push ds
  mov ax,ax
  push ax
改为:
  MOV AX,dase
  MOV DS,AX

一切OK

3 楼

谢谢2楼的,我把那句给忘了,唉!怎么看了好几遍都没发现这么低级的问题。
谢谢!

4 楼

不知1楼的做法是什么原理啊?
谢谢

5 楼

哦,我明白了,谢谢
test 还真是个好办法!

我来回复

您尚未登录,请登录后再回复。点此登录或注册