|  | 
 
 
 楼主|
发表于 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
 | 
 |