注册 登录
编程论坛 汇编论坛

怪问题???

dizengrong 发布于 2008-10-19 11:26, 1304 次点击
下面的这个DOS汇编程序真让人费解,
麻烦高手给看看问题出在哪了。
程序代码:
.model small
.stack 200h    
.CODE
START:
    ;mov     ax,@data
    ;mov     ds,ax
    mov     bl,0ffh
    mov     al,bl
    call     displayBit
    
    ;暂停,任意键关闭
    mov ah,1
    int 21h
    mov ah,4ch     ;结束,可以修改al设置返回码
    int 21h
    
displayBit    proc    ;要显示的8位二进制放在al中
    .386
    pusha
    mov     cx,8
    display:    
            shl     al,1        ;将al的最高位送进CF
            ;push     ax        ;当我不加push ax与pop ax时运行结果就不对,
            mov     dl,0       ;加了就对了,难道哪条指令改变了al?
            adc    dl,0        
            or    dl,30h    ;转化为ASCII码
            mov    ah,2
            int    21h
            ;pop    ax
    loop    display    
    popa
    ret
displayBit endp
END START
6 回复
#2
netsolo2008-10-19 16:11
int    21h
#3
zklhp2008-10-19 20:08
[bo][un]netsolo[/un] 在 2008-10-19 16:11 的发言:[/bo]

int    21h


dos里的中断和windows里的api 或其他语言里函数都用ax/eax放返回值 当然会变了

类似的还有win32里的寄存器保护 ecx……

很典型!!!
#4
zklhp2008-10-19 20:09
说实话 搭眼一看偶也看不出来 呵呵

以后得注意呀 警惕!
#5
dizengrong2008-10-19 20:40
哦,原来如此啊!
感谢各位啦!并再次谢谢版主zklhp的提醒。
#6
zklhp2008-10-19 21:10
汇编毕竟不同与高级语言
#7
abc9760316172011-03-10 11:22
现在还看不懂,不过以后就就不一定了
1