做80X86的习题,要求是把由十进制数ASCII码组成的字符串转换为对应的数值
.8086
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DATA SEGMENT
string1 db '33652214','$'
DATA ENDS
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CODE SEGMENT
assume cs:CODE,ds:DATA
_Translation proc
;bx=10,cl=提取ASCII码,ax,dx=结果,si=指针
push bp
mov bp,sp
mov ax,0
mov dx,0
mov si,sp
mov si,ss:[si]
mov bx,10
mov cx,0
LOOP1: mov cl,byte ptr [si]
cmp cl,'$'
jz DONE
sub cl,48
mul bx
add ax,cx
adc dx,0
inc si
jmp LOOP1
DONE: mov sp,bp
pop bp
sub sp,2
push dx
push bx
ret
_Translation endp
START:
lea dx,string1
mov ah,9
int 21h
lea ax,string1
push ax
call _Translation
;
mov dl,al
mov ah,2
int 21h
mov dl,ah
mov ah,2
int 21h
;
mov ah,4ch
int 21h
CODE ENDS
END START
------解决方案--------------------
你那子程根本不能正常返回,那几个指令纯属乱来,不知道你这么做的依据是什么。要平衡参数,ret 2 指令即可(对一个word类参数)。