|
楼主 |
发表于 2012-7-8 22:02:16
|
显示全部楼层
搞明白了,原来是CX没保存!!!
程序改良如下:assume cs:code
data segment
dd 2320001,8acbeffh,0fffe0001h,0ffffffffh,987654321
data ends
data2 segment
db 64 dup(0)
data2 ends
code segment
start:mov ax,data
mov ds,ax
mov ax,data2
mov es,ax
mov bx,0
mov si,0
mov cx,5
s: ;依次将DATA段的数据放入AX、DX寄存器,然后调用子程序DTOC实现转化
mov ax,[bx]
mov dx,[bx+2]
call dtoc
add bx,4
add si,0ah
loop s
mov ax,4c00h
int 21h
dtoc: ;该子程序用于将AX、DX中的DW型数据以十进制表示的字符串放入ES段中
push si
push bp
push cx
push ax
push dx ;将所有用到的寄存器入栈保存
mov bp,9
s1:
mov cx,10
call divdw
add cl,30h
mov es:[si+bp],cl
sub bp,1
mov cx,ax
or cx,dx
inc cx
loop s1
pop dx
pop ax
pop cx
pop bp
pop si
ret
divdw: ;该子程序用于DW型除法计算
push bx ;将BX入栈保存
;因为要用AX、DX传商,CX传余数,所以无须入栈保存
mov bx,ax
mov ax,dx
mov dx,0
div cx
push ax
mov ax,bx
div cx
mov cx,dx
pop dx
pop bx
ret
code ends
end start |
|