求帮我看一个数字转化进十进制表示的字符串的问题
求将DATA段的数字转换成十进制表示的字符串放入DATA2段中: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 cx,5
s:push bx
mov ax,
mov dx,
mov bx,0
mov si,0
call dtoc
pop bx
add bx,4
add si,0ah
loop s
mov ax,4c00h
int 21h
dtoc:
push si
push bx
s1:
mov cx,10
call divdw
add cl,30h
mov es:,cl
mov cx,ax
or cx,dx
inc cx
loop s1
pop si
pop bx
ret
divdw:push bx
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 不懂为什么就死循环了,哪位大侠帮我看看,感激不尽!!! {:5_104:}搞明白了,原来是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,
mov dx,
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:,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
页:
[1]