回 帖 发 新 帖 刷新版面

主题:[讨论]看看为什么debug这个程序总是不正常

data segment                     ;统计数组0,负数,正数的个数
BUF db 0,-1,-2,-3,2,3,5,0,-9,1  ;存个数组
z db 0    ;0的个数
f db 0    ;负数的个数
l db 0    ;正数的个数
data ends
code segment
assume cs:code,ds:data
main proc far
       push ds
       sub ax,ax
       push ax
       mov ax,data
       mov ds,ax
       mov bx,offset BUF
       mov cx,10
pd:    mov ax,[bx]     ;判断程序段
       or ax,[bx]
       jz next1
       jns next2
       inc f
       jmp finish
next1: inc l
       jmp finish
next2: inc z
finish:inc bx
       loop pd
       ret
main endp
code ends
end

回复列表 (共6个回复)

沙发

debug不正常,时没有返回dos的中断
mov ah,4ch     ;结束,可以修改al设置返回码
int 21h

----------------------
       loop pd
       ret     ;为什么用ret,应该用返回dos的中断吧,否则无法正常结束
main endp

---------------------
pd:    mov ax,[bx]     ;判断程序段
       or ax,[bx]    ; 同一个数相or,结果还是这个数吧
       jz next1       ;如果结果为0,则跳到next1: inc l ,但l是用来统计正数的吧
       jns next2
       inc f
       jmp finish
-----------------------

板凳

大哥,你都说错了吧,你还没看懂,程序没任何问题


今天才看清楚,主要是最后没有设置结整点,end后面忘记写main了。一切正常。

3 楼

不过我上面的注释有点错误,正,负,零完全是拼音的首字母,写反了正数和零的。

4 楼

ret 是清理栈,和call对应
    
放在程序结尾写法,没见过。

5 楼

没用呀,不会做,

6 楼

高手帮忙解释下:

pd:  mov  ax,[bx]
     or ax,[bx]
这两句是什么意思?

我来回复

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