回 帖 发 新 帖 刷新版面

主题:请高手指教请教!!

data    segment
date    dw     1122h,3434h,5656h,200h,1245h
num     db     ($-data)/2

data    ends

code    segment
main    proc    far
   assume    cs:code,ds:data


start:  
    push    ds
    mov     ax,0h
    push    ax
    mov     ax,date
    mov     ds,ax
    mov     dx,0h
    mov     cx,word ptr[num]
    mov     si,0h
iso:
    mov     bx,word ptr data[si]
    shr     bx,1h
    jnc     adddx
adddx:
    add     dx,1h
    cmp     dx,1h
    je      firstaxvalue
compare:
    mov     bx,word ptr data[si]
    cmp     bx,ax
    jge     commoncontrol
    mov     ax,bx
commoncontrol:
    add     si,2h
    loop    iso
    jmp     exit
firstaxvalue:
    mov     ax,word ptr data[si]
    jmp     compare
exit:   
    mov    dx,ax    
    mov    ah,2
    int    21h
    ret
main    endp
code    ends
    end     start

为什么不会显示出来呢?请高手指教一下,小妹先谢过了。[em12]

回复列表 (共3个回复)

沙发

读不懂此程序想干什么!不过,
此处
    mov     ax,date
    mov     ds,ax
肯定应改为
    mov     ax,seg date
    mov     ds,ax
所有的
    word ptr data[si]
似乎应改为
    word ptr date[si]

板凳


就是想找到最小的偶数放在AX中,并要显示出来,但是这个程序就是显示不出来,那些错误我改了,但是还是不行,请大家再帮帮忙看看!谢谢了

3 楼

I服了YOU 了。你的算法我永远不懂(好像不对,我这里结果是8000)

显示部分我凑合解决了。记住,数字要换成ASCII才能显示!

.model small
.data
date    dw     1122h,3434h,5656h,200h,1245h
num     db     ($-date)/2

tab     db     '0123456789ABCDEF'

.code

start:  
    mov     ax,@data
    mov     ds,ax
    
    mov     dx,0h
    mov     cx,word ptr[num]
    mov     si,0h
iso:
    mov     bx,word ptr date[si]
    shr     bx,1h
    jnc     adddx
adddx:
    add     dx,1h
    cmp     dx,1h
    je      firstaxvalue
compare:
    mov     bx,word ptr date[si]
    cmp     bx,ax
    jge     commoncontrol
    mov     ax,bx
commoncontrol:
    add     si,2h
    loop    iso
    jmp     exit
firstaxvalue:
    mov     ax,word ptr date[si]
    jmp     compare

exit:       ;以下是显示部分,不过是十六进制的
    mov    cl,12      
again:
    mov    si,ax       ;AX中是最小偶数,我这里是8000
    shr    si,cl
    cmp    cl,-4
    jz     ok
    sub    cl,4
    and    si,0fh
    mov    dl,byte ptr tab[si]
    push   ax
    mov    ah,2
    int    21h
    pop    ax
    jmp    again
ok:    
    mov    ah,04ch
    int    21h

.stack
    end     start

我来回复

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