📄 ieeeconv_exmaple.asm
字号:
MYDATA SEGMENT
BUFF DB 38
DB ?
DB 38 DUP(0)
DB 0DH,0AH,'$'
INFO DB 'Convert from fix pointer number to IEEE float format'
DB 0DH,0AH,'Your input should be positive only,'
DB 0DH,0AH,' for there is only sign bit diffrence'
DB 0DH,0AH,' between a positive number and negtive one.'
DB 0DH,0AH,'Input a decimal fraction number : 0.$'
RESULT DB 0DH,0AH,'This is the final result: $'
CRLF DB 0DH,0AH,0DH,0AH,'$'
IEEE DB '0',',',8 DUP(0),',',23 DUP(30H),0DH,0AH,'$'
MYDATA ENDS
EDATA SEGMENT
TEMP DW 4 DUP(0)
EDATA ENDS
SSTACK SEGMENT STACK 'STACK'
DW 10 DUP(0)
SSTACK ENDS
CCODE SEGMENT
MAIN PROC FAR
ASSUME CS:CCODE,DS:MYDATA,ES:EDATA,SS:SSTACK
START:
MOV AX,SSTACK
MOV SS,AX
PUSH DS
SUB AX,AX ;MOV AX,0
PUSH AX
MOV AX,MYDATA
MOV DS,AX
MOV AX,EDATA
MOV ES,AX
;Your Code Can Be Input Below:
LEA DX,INFO
MOV AH,09H
INT 21H ;print the information
LEA DX,BUFF
MOV AH,0AH
INT 21H ;receive a fraction number
MOV SI,OFFSET BUFF
INC SI
XOR CX,CX
MOV CL,[SI]
INC SI
XOR AX,AX
MOV DL,10
AGAIN: MUL DL
MOV BH,0
MOV BL,[SI]
SUB BL,30H
ADD AX,BX
INC SI
LOOP AGAIN ;ASCII to binary
MOV TEMP,AX
MOV SI,OFFSET BUFF
INC SI
XOR CX,CX
MOV CL,[SI]
MOV AX,1
MOV BX,10
LOP: MUL BX
LOOP LOP ; AX=10^lenght
MOV BX,TEMP ; BX=binary
MOV DL,1 ;DL count the exponent(1-127)
NEXT: ADD BX,BX
SUB BX,AX
JNS A
ADD BX,AX
INC DL
JMP NEXT
A: MOV TEMP,AX ;TEMP 存10^
MOV AL,127
SUB AL,DL ;AL contains the exponent to be saved(8 bit)
MOV CX,8
MOV AH,80H
MOV SI,OFFSET IEEE ;'0'
INC SI ;','
B: INC SI
MOV DL,0
TEST AL,AH
JZ BC
INC DL
BC: ADD DL,30H
SHR AH,1 ;AH逻辑右移
MOV [SI],DL
LOOP B
INC SI
MOV AX,TEMP
MOV CX,23
D: INC SI ;','
MOV DL,1
ADD BX,BX
JZ E
SUB BX,AX
JNS F
ADD BX,AX
DEC DL
F:ADD DL,30H
MOV [SI],DL
LOOP D
;
E: LEA DX,RESULT
MOV AH,09H
INT 21H
LEA DX,IEEE
MOV AH,09H
INT 21H ;print the result
;Your Code Have Been Ended:
MOV AH,4CH
INT 21H
RET
MAIN ENDP
CCODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -