本帖最后由 shenyuan 于 2015-3-16 22:26 编辑
调试了一晚上,用栈顶来计算压栈的方法容易出错,忘记了 call调用的时候进行了push ip 的操作,所以 元素数目应该是 减一的DATAS SEGMENT
dw 123,12666,1,8,3,38
db 30 dup(0)
DATAS ENDS
STACKS SEGMENT
dw 10 dup(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,STACKS
mov ss,ax
mov sp,20
; 初始化数据段和栈段
mov di,0
mov ax,[di]
mov si,12 ;参数赋值
;参数=(ax) 存放地址=ds:[si]
call dtoc
MOV AH,4CH
INT 21H
dtoc:
mov bx,10
sr: mov dx,0
div bx
push dx ; 把余数压栈
mov cx,ax
jcxz okd ;判断商是否为0
jmp sr
okd: mov ax,20
sub ax,sp
mov bl,2
div bl
<font color="#ff0000"> dec al</font>
mov cl,al
mov ch,0 ; 以上为计算栈中元素的数目, (20-sp)/2
s1:pop ax
add al,30H
mov [si],al
inc si
loop s1
mov byte ptr [si],0
ret
CODES ENDS
END START
|