将AX以10进制显示出来
scturtle
posted @ 2009年10月22日 20:00
in 各种实验
, 1786 阅读
写汇编实验7遇到的问题,以前懒,这次只好硬着头皮写了
ret曾因为前面循环而少push了一次,不停在子程序里循环跳不出来了
SHOWAXD PROC NEAR ;USES AX BX CX DX SI
CMP AX,0
JG ZHENG
JL FU
MOV DL,30H
MOV AH,2
INT 21H
RET
FU:
PUSH AX
MOV DL,'-'
MOV AH,2
INT 21H
POP AX
NEG AX
ZHENG:
XOR SI,SI
MOV BX,10
MOV CX,10000
NEXT:
XOR DX,DX
DIV CX
PUSH DX
MOV DL,AL
CMP DL,0
JNE DISIT
CMP SI,0
JE IGNOR
DISIT:
ADD DL,30H
MOV AH,2
INT 21H
INC SI
IGNOR:
CMP CX,1
JE GOOUT
XOR DX,DX
MOV AX,CX
DIV BX
MOV CX,AX
POP AX
JMP NEXT
GOOUT:
POP DX
RET
SHOWAXD ENDP
CMP AX,0
JG ZHENG
JL FU
MOV DL,30H
MOV AH,2
INT 21H
RET
FU:
PUSH AX
MOV DL,'-'
MOV AH,2
INT 21H
POP AX
NEG AX
ZHENG:
XOR SI,SI
MOV BX,10
MOV CX,10000
NEXT:
XOR DX,DX
DIV CX
PUSH DX
MOV DL,AL
CMP DL,0
JNE DISIT
CMP SI,0
JE IGNOR
DISIT:
ADD DL,30H
MOV AH,2
INT 21H
INC SI
IGNOR:
CMP CX,1
JE GOOUT
XOR DX,DX
MOV AX,CX
DIV BX
MOV CX,AX
POP AX
JMP NEXT
GOOUT:
POP DX
RET
SHOWAXD ENDP
09.11.17 上面的想法不好 这一个应该要好很多
showbxd proc near uses ax bx cx dx si di
xor di,di ;0正1负
mov cx,5 ;循环次数
mov si,10 ;被除数
cmp bx,0
jnl zheng
inc di
neg bx
zheng:
mov ax,bx
next:
xor dx,dx
div si
add dx,30h
push dx
loop next
test di,1 ;是否输出负号
je nofu
mov dl,'-'
mov ah,2
int 21h
nofu:
xor bx,bx ;是否已输出0
mov cx,5
mov ah,2
next2:
pop dx
cmp dx,30h
jne nozero
cmp bx,0
je noprint
nozero:
inc bx
int 21h
noprint:
loop next2
ret
showbxd endp
xor di,di ;0正1负
mov cx,5 ;循环次数
mov si,10 ;被除数
cmp bx,0
jnl zheng
inc di
neg bx
zheng:
mov ax,bx
next:
xor dx,dx
div si
add dx,30h
push dx
loop next
test di,1 ;是否输出负号
je nofu
mov dl,'-'
mov ah,2
int 21h
nofu:
xor bx,bx ;是否已输出0
mov cx,5
mov ah,2
next2:
pop dx
cmp dx,30h
jne nozero
cmp bx,0
je noprint
nozero:
inc bx
int 21h
noprint:
loop next2
ret
showbxd endp