回 帖 发 新 帖 刷新版面

主题:哪错了?

大家帮忙看一下,这个程序哪错了?
实现这个功能:
if(AX<=-1) AX=-1;
else if(AX<1) AX=0;
else AX=AX-1;



dseg segment
     data db 10                           
     show db ?
dseg ends
cseg segment
     assume ds:dseg,cs:cseg
start:
     mov ax,dseg
     mov ds,ax

     mov al,data
     cmp al,-1
     jle case1
     jb  case2
     mov al,data
     dec al
     jmp over
case1:
     mov al,-1
     jmp over
case2:
     mov al,0
     jmp over
over:
     mov show,al
     mov ah,4ch
     int 21
cseg ends
     end start
再问大家一件事,怎么实现将 show 中的数显示在屏幕上?
在此感谢!     


回复列表 (共3个回复)

沙发

你是自己错了?
if(AX<=-1) AX=-1;
else if(AX<1) AX=0;
else AX=AX-1;
这里面一定有重复啊!
if(AX<=-1) AX=-1;
else if(AX>1) AX=0;
else AX=AX-1;
是不是这样????

板凳

程序比较的是有符号数,不能既用jle(有符号),又用jb(无符号),应该统一
     mov al,data
     cmp al,-1
     jle case1
     cmp al, 1
     jl  case2
     dec al    ;直接减一就可以了,前面的指令并没有修改al的值
     jmp over
case1:
     mov al,-1
     jmp over
case2:
     mov al,0
     jmp over
over:
     mov show,al
     mov ah,4ch
     int 21

3 楼

支持2楼的兄弟

我来回复

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