یکی از روش های نمایش اعداد اعشاری در زبان ماشین Floating Point است. در این روش عدد را به صورت X * 10yنمایش می دهند. که برای مثال X در 8 بیت پر ارزش یک عدد 16 بیتی و y را در 8 بیت کم ارزش آن قرار داده و محاسبات را به وسیله آن انجام می دهند.
جمع دو عدد به صورتFloating Point :
برای جمع دو عدد به صورت Floating Point مناسب ترین روش این است که عددی که نمای(y) بزرگتری دارد را آنقدر کم کنیم تا با نمای عدد دوم برابر شود. و باید به تعداد دفعاتی که نمای عدد کم می شود، X در 10 ضرب گردد. حال که نمای دو عدد برابر شد ، نمای عدد نتیجه برابر نمای یکی از دو عدد و X آن برابر جمع X های دو عدد است.
PAGE 110,100
TITLE 'Add_Floating_Point.ASM' add two ASCII
;-----------------------------------------------
; Defining segment of program
; ---------------------------
CODESG SEGMENT
ASSUME SS:CODESG,DS:CODESG,CS:CODESG
ORG 100H
START: JMP MAIN ;1-Jump over data
;
; 1- Define data
; --------------
A DD ?
B DD ?
C DD ?
ALEFT DW 314
ARIGHT DW -2
BLEFT DW 30
BRIGHT DW -1
;
; 2- The rest of instructions
; ---------------------------
MAIN PROC NEAR
;
MOV AX,ARIGHT
MOV A,AX
MOV AX,ALEFT
MOV A+2,AX
MOV AX,BRIGHT
MOV B,AX
MOV AX,BLEFT
MOV B+2,AX
;
MOV BX,A
CMP BX,WORD PTR B
JZ PO1
JC PO2
;
MOV AX,A+2
FOR2:
MOV DL,10
MUL DX
DEC WORD PTR A
MOV CX,A
CMP CX,WORD PTR B
JNZ FOR2
MOV A+2,AX
JMP PO1
;
PO2:
MOV AX,B+2
FOR1:
MOV DL,10
MUL DX
DEC WORD PTR B
MOV CX,A
CMP CX,WORD PTR B
JNZ FOR1
MOV B+2,AX
JMP PO1
;
MOV AX,4C00H ;8- End of
INT 21H ;9- processing
MAIN ENDP ; End of procedure
CODESG ENDS ; End of segment
END START ; End of program
;By : Mojtaba Alizadeh Mojia91@yahoo.com
اگه توان بزرگ باشه ما بخواهیم عدد رو در 10 ضرب کنیم در ثبات ax چرا بعد از چند بار اجرا مقدار صفر میشه؟؟ با تشکر
احتمالاً چون از ضرب 8 بیتی استفاده کردی ،بعد از چند بار ضرب ممکنه نتیجه ی وارد شده ضرب طوری بشه که در هشت بیت کم (al) ارزش 0 و در 8 پر ارزش مثلاً 12h قرار بگیره که با دستور ضرب mul cl یا هر اُپراند 8 بیتی دیگه ، نتیجه ی ضرب صفر میشه.
برای حل مشکل میشه از ضرب 16 یا 32 بیتی استفاده کرد.
دلیل اینکه وقتی ضربهات از یه حدی بیشتر که میشه ( از لحاظ اندازه و بزرگی اعداد ) صفر بدست میاری اینه که برای اعداد بزرگ در اسمبلی ثبات dx:ax حاوی عدد (نتیجه) میشن نه فقط ax .
علاقه مندی ها (Bookmarks)