محاسبه لگاریتم عدد در پایه 2 با کد اسمبلی

the_king

مدیرکل انجمن
ممنون میشم اگه کسی سورس کدش اسمبلیش را داره برام بذاره

محاسبه لگاریتم بر پایه 2 عدد صحیحی (حداکثر 32767) با دقت 2 رقم بعد از اعشار :

کد:
.MODEL SMALL
.386
.DATA
	msg1	DB "Please enter a number : $"
	msg2	DB 13, 10, "Log2 = $"
	msg3	DB 13, 10, "Press any key to continue.", 13, 10, "$"
	numMax	DB 6
	numLen	DB ?
	num	DB 6 DUP(?)
	numDec	DW ?
.CODE
	.STARTUP
	MOV	AH, 09h
	LEA	DX, msg1
	INT	21h
	MOV	AH, 0Ah
	LEA	DX, numMax
	INT	21h
	MOVZX	CX, numLen
	LEA	SI, num
	MOV	BX, 0
loop1:
	MOV	AX, 10
	MUL	BX
	MOV	BL, [SI]
	INC	SI
	SUB	BL, '0'
	MOV	BH, 0
	ADD	BX, AX
	LOOP	loop1
	MOV	numDec, BX
	FLD1
	FILD	numDec
	FYL2X
	MOV	numDec, 100
	FIMUL	numDec
	FISTP	numDec
	MOV	AH, 09h
	LEA	DX, msg2
	INT	21h
	MOV	CX, 0
	MOV	AX, numDec
	MOV	BX, 10
loop2:
	MOV	DX, 0
	DIV	BX
	ADD	DL, '0'
	PUSH	DX
	INC	CX
	CMP	CX, 2
	JNE	next1
	MOV	DL, "."
	PUSH	DX
	INC	CX
next1:
	CMP	AX, 0
	JNE	loop2
loop3:
	POP	DX
	MOV	AH, 02h
	INT	21h
	LOOP	loop3
	MOV	AH, 09h
	LEA	DX, msg3
	INT	21h
	MOV	AH, 08h
	INT	21h
	.EXIT
.STACK
END

نمایش پیغام :
کد:
	MOV	AH, 09h
	LEA	DX, msg1
	INT	21h

دریافت عدد بصورت یک رشته در num
کد:
	MOV	AH, 0Ah
	LEA	DX, numMax
	INT	21h

تبدیل رشته به عدد صحیح در numDec
کد:
	MOVZX	CX, numLen
	LEA	SI, num
	MOV	BX, 0
loop1:
	MOV	AX, 10
	MUL	BX
	MOV	BL, [SI]
	INC	SI
	SUB	BL, '0'
	MOV	BH, 0
	ADD	BX, AX
	LOOP	loop1
	MOV	numDec, BX

محاسبه کردن لگاریتم مبنای 2 عدد numDec و ضرب کردن نتیجه آن در 100 (دقت دو رقم بعد از اعشار)
کد:
	FLD1
	FILD	numDec
	FYL2X
	MOV	numDec, 100
	FIMUL	numDec
	FISTP	numDec

نمایش پیغام پیش از درج مقدار لگاریتم :
کد:
	MOV	AH, 09h
	LEA	DX, msg2
	INT	21h

جدا کردن رقم های داخل numDec در مبنای 10، چون عدد در 100 ضرب شده بعد از دو رقم سمت راست کاراکتر نقطه اعشاری اضافه می شود.
کد:
	MOV	CX, 0
	MOV	AX, numDec
	MOV	BX, 10
loop2:
	MOV	DX, 0
	DIV	BX
	ADD	DL, '0'
	PUSH	DX
	INC	CX
	CMP	CX, 2
	JNE	next1
	MOV	DL, "."
	PUSH	DX
	INC	CX
next1:
	CMP	AX, 0
	JNE	loop2

نمایش عدد داخل numDec در مبنای 10 بصورت اعشاری (دو رقم بعد از اعشار)
کد:
loop3:
	POP	DX
	MOV	AH, 02h
	INT	21h
	LOOP	loop3

نمایش پیغام پیش از خروج از برنامه :
کد:
	MOV	AH, 09h
	LEA	DX, msg3
	INT	21h

درخواست فشار دادن یک کلید پیش از خاتمه برنامه :
کد:
	MOV	AH, 08h
	INT	21h
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا