این برنامه را با زبان اسمبلی تو محیط امولیتور 8086 نوشتم. کار این دو تا
برنامه تبدیل مبناها به هم هست برنامه اولی از عدد دریافتی را از مبنای 10
به مبنایی هر عددی حتی 7، 11 ووو تبدیل می کند. برنامه دومی یک عدد در
مبنای 10 می گیرد و مبنای 2،8،16 اون عدد رو چاپ می کنه. می خواستم این تو
تا کد را با هم ادغام کنم ولی حوصله نداشتم.
به هر حال امیدوارم بدردتون بخوره (تقدیم به جامعه برنامه نویسان کشور عزیزم) سرس در ادامه مطلب هست!
درصورتی که برنامه دیگری با اسمبلی و دیگر زبان ها می خواهید می توانید از راه تماس با ما سفارس دهید.
کلید واژه ها:
این برنامه را با زبان اسمبلی تو محیط امولیتور 8086 نوشتم. کار این دو تا برنامه تبدیل مبناها به هم هست برنامه اولی از عدد دریافتی را از مبنای 10 به مبنایی هر عددی حتی 7، 11 ووو تبدیل می کند. برنامه دومی یک عدد در مبنای 10 می گیرد و مبنای 2،8،16 اون عدد رو چاپ می کنه. می خواستم این تو تا کد را با هم ادغام کنم ولی حوصله نداشتم.
به هر حال امیدوارم بدردتون بخوره (تقدیم به جامعه برنامه نویسان کشور عزیزم)
درصورتی که برنامه دیگری با اسمبلی و دیگر زبان ها می خواهید می توانید از راه تماس با ما سفارس دهید.
; tabdil mabna az har adadi be 10
; programer mansoor behzadi from Iran(persia),Fars,Firoozabad
;src: www.behzadim.ir
data segment
; add your data here!
msg1 db "marnameye tabdile mabna!$"
msg2 db "in barnam yek adad dar mabnahaye 8 , 16 , 2 ra daryaft mikonad va moadel desimal an ra chap mikonad.$"
msg3 db "mahdoode adad vared shode dar mabnahaye 2 va 8 2bite dar mabnaye 16 1bite ast.$"
msgmabna db "az mabnaye chand be 10?$"
msgin db "adad dar mabnaye mored nazar ra vared kon(ba tavajoh be mahdood):$"
num dw 0
mabna db 0
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
lea dx, msg1
mov ah, 9
int 21h
call enter
lea dx, msg2
mov ah, 9
int 21h
call enter
lea dx, msg3
mov ah, 9
int 21h
call enter
lea dx, msgmabna
mov ah, 9
int 21h
call sdlet
mov mabna,dl
call Enter
lea dx, msgin
mov ah, 9
int 21h
mov ah,01h
mov bx,0
mov cx,0
mov si,0
mov al,30h
mov dx,0
inputnumber1:
int 21h
mov bl,al
mov bh,0
push bx
add si,1
cmp al,13
jne inputnumber1
sub si,1
mov cl,1
pop bx
mov dx,0
convertston1:
pop bx
cmp bl,'a'
jnge con1
sub bl,'a'
add bl,10
jmp con2
con1:
sub bl,30h
con2:
mov al,cl
mul bl
add dl,al
mov ax,cx
mov cl,mabna
mul cl
mov cx,0
mov cl,al
sub si,1
cmp si,0
jne convertston1
mov num,dx
endsdlet1:
call Enter
mov dx,num
call gdxet
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
sdlet proc near
push ax
push si
push bx
push cx
mov ah,01h
mov bx,0
mov cx,1
mov si,0
mov al,30h
mov dx,0
inputnumber:
cmp al,30h
jl endsdlet
cmp al,39h
jg endsdlet
int 21h
mov bl,al
mov bh,0
push bx
add si,1
cmp al,13
jne inputnumber
sub si,1
pop bx
convertston:
pop bx
sub bl,30h
mov al,cl
mul bl
add dl,al
mov al,10
mul cl
mov cl,al
sub si,1
cmp si,0
jne convertston
endsdlet:
pop cx
pop bx
pop si
pop ax
ret
sdlet endp
Enter proc near
push ax
push si
push bx
push cx
mov ah,3
int 10h
mov dl,0
inc dh
mov ah,2
int 10h
pop cx
pop bx
pop si
pop ax
ret
Enter endp
gdxetproc near
push ax
push si
push bx
push dx
cmp dx,9
jle takraghami
mov bx,0
mov si,0
taghsimat:
mov ax,dx
mov dl,10
div dl
mov bl,ah
push bx
mov ah,0
mov dx,ax
add si,1
cmp dx,9
jg taghsimat
takraghami:
add si,1
push dx
outputnumber:
pop dx
add dx,30h
mov ah,02h
int 21h
sub si,1
cmp si,0
jg outputnumber
pop dx
pop bx
pop si
pop ax
ret
gdxet endp
end start ; set entry point and stop the assembler.
; tabdil mabna az 10 be har adadi
; programer mansoor behzadi from Iran(persia),Fars,Firoozabad
;src: www.behzadim.ir
data segment
; add your data here!
pkey db "press any key...$"
msgin db "adad dar mabnaye 10 ra vared konid:$"
num db 0
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;......................................
lea dx,msgin ;daryaft adad dahdahi
mov ah,9
int 21h
call sedl
mov num,dl
call Enter
mov cx,0 ; 10 to 2
mov cl,num
mov di,0
loop10to2:
mov ax,cx
mov bx,2
div bl
cmp al,1
jg con1
mov dx,0
mov dl,ah
push dx
inc di
mov ah,0
push ax
inc di
jmp con2
con1:
mov cl,al
mov al,ah
mov ah,0
push ax
inc di
jmp loop10to2
con2:
call PrintPush
call Enter
mov cx,0 ;10 to 8
mov cl,num
mov di,0
loop10to8:
mov ax,cx
mov bx,8
div bl
cmp al,7
jg con3
mov dx,0
mov dl,ah
push dx
inc di
mov ah,0
push ax
inc di
jmp con4
con3:
mov cl,al
mov al,ah
mov ah,0
push ax
inc di
jmp loop10to8
con4:
call PrintPush
call Enter
mov cx,0 ;10 to 16
mov cl,num
mov di,0
loop10to16:
mov ax,cx
mov bx,16
div bl
cmp al,15
jg con5
mov dx,0
mov dl,ah
push dx
inc di
mov ah,0
push ax
inc di
jmp con6
con5:
mov cl,al
mov al,ah
mov ah,0
push ax
inc di
jmp loop10to16
con6:
call PrintPush
call Enter
;......................................
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
PrintPush proc near
pop bx
st:
cmp di,0
je en
pop dx
cmp dx,9
jng conpp1
add dx,55
jmp conpp2
conpp1:
add dx,48
conpp2:
mov ah,2
int 21h
dec di
jmp st
en:
push bx
ret
PrintPush endp
Enter proc near
push ax
push si
push bx
push cx
mov ah,3
int 10h
mov dl,0
inc dh
mov ah,2
int 10h
pop cx
pop bx
pop si
pop ax
ret
Enter endp
sedl proc near
push ax
push si
push bx
push cx
mov ah,01h
mov bx,0
mov cx,1
mov si,0
mov al,30h
mov dx,0
inputnumber:
cmp al,30h
jl endsedl
cmp al,39h
jg endsedl
int 21h
mov bl,al
mov bh,0
push bx
add si,1
cmp al,13
jne inputnumber
sub si,1
pop bx
convertston:
pop bx
sub bl,30h
mov al,cl
mul bl
add dl,al
mov al,10
mul cl
mov cl,al
sub si,1
cmp si,0
jne convertston
endsedl:
pop cx
pop bx
pop si
pop ax
ret
sedl endp
end start ; set entry point and stop the assembler.