ورود

View Full Version : تبدیل رشته به عدد



kiuhnmgtrdcv
سه شنبه 19 خرداد 1388, 12:21 عصر
سلام
فرض کنید رشته "9092" داشته باشیم چطور میتونیم اینو به عدد تبدیل کنیم ؟
من یکم از این برنامه نوشتم ولی نمیدونم وقتی افست یه رشته میگیریم و انرا زیاد میکنیم با چه شرطی میشه فهمید که به انتهای رشته رسیدیم لطفا راهنماییم کنید




title ehsan
.model small
.stack 100h
.data
n1 dw "121$"
fz db 8 dup(' '),"$"
str1 db "65$";
.code

main proc
mov ax,@data
mov ds,ax

push n1
push offset fz
call convert_string_num

mov ah,9
mov dx,offset fz
int 21h

mov ax,4c00h
int 21h

main endp

convert_string_num proc

push bp
mov bp, sp
push si
push ax
push bx
push cx
push dx

mov ax, word ptr[bp+06];string
mov si, word ptr[bp+04];jaye number mafroz

lea di,ax

divloop:

inc di

sub [di], 30h ; convert
mov [si], dx
inc si
cmp [di],"$" ;sharte tohi bodane number ???
jne divloop
;mov cl, bh ; insert sign to string
;mov [si], cl
pop dx
pop bx
pop cx
pop ax
pop si
pop bp
ret 4
convert_string_num endp
end main

Open-Source
سه شنبه 19 خرداد 1388, 12:32 عصر
این برنامه یک رشته میگیره
تبدیل به عدد میکنه
15 واحد بهش اضافه میکنه
بعد چاپ میکنه(رشته ای)


;
;Get a Number(string) & add 15 & print
;
.model small
.data
maxlen db 6
actlen db ?
string db 6 dup(?)

sum db 5 dup(' '),'$'

.code

;+++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++
main proc

mov ax,@data
mov ds,ax

;--------------------- get number(string)
mov ah,10
mov dx,offset maxlen
int 21h

;---------------------conver string to number
mov si,offset string
call asctobin

;---------------------add 15 & conver number to String
add ax,15
mov si,offset sum
call bintoasc

;--------------------- Print number(string)
mov ah,9
mov dx,offset sum
int 21h

;--------------------- end
mov ah,0
int 16h

mov ah,4ch
int 21h

main endp



;================================== Convert string to number(get si,out ax)
asctobin proc

push bx
push dx
mov ax,0
mov bx,10

up_asc:
cmp [si],'0'
jb exit_asc ;if < 0 then exit
cmp [si],'9'
ja exit_asc ;if > 9 then exit
mul bx;(dx:ax=bx*ax)=> dx==0
mov dl,[si]
sub dl,'0';48
add ax,dx
inc si
jmp up_asc

exit_asc:
pop dx
pop bx
ret

asctobin endp


;=================================Convert number to string(get ax,out si)
bintoasc proc
push bx
push dx
mov bx,10

up_bin:
mov dx,0
div bx
add dl,'0'
mov [si+4],dl
dec si
cmp ax,0
jne up_bin
pop dx
pop bx
ret
bintoasc endp
;======================================

end main
;+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++


:لبخند: