Я работаю над калькулятором с плавающей запятой для 16-битных процессоров, в частности 8086/8088.Я использую as88 Tracker , который не реализует плавающие точки, не позволяя мне использовать sscanf с "% f".
Я думал об этом в коде C и вызывал эту функциюиз моего кода ассемблера, но не мог узнать, как это сделать.
Это мой код:
#include "../syscalnr.h"
.sect .text
_code_:
push bp
mov bp, sp
push SEGOP-PRIOP ! Pushes PRIOP String Size into the stack
push PRIOP
push STDOUT
push _WRITE ! System Call to print string on the display
sys
add sp, 8
mov di, rasc ! Prepares DI to receive char
push _GETCHAR
1: sys
cmpb al, '\n' ! Compares with EOL and keeps storing the string chars
je 2f
stosb ! Stores char into variable rasc
jmp 1b
2: xorb al, al ! Clears registers
add sp, 2
.sect .data
_data_:
PRIOP: .asciz "Insert first operand:\n "
SEGOP: .ascii "Insert second operand: "
FORMAT: .asciz "%u"
F_CHAR: .asciz "%c"
F_STR: .asciz "%s\n"
.sect .bss
_bss_:
rasc: .space 10
Я хочу написать функцию C как:
float* getVal(char* ch) {
float fVal;
sscanf(ch, "%f", &fVal);
if(fVal == 0) return 0;
return fVal;
}
И вызвать ее из моего кода сборкичтобы перевести введенный пользователем номер строки в число с плавающей точкой.
Может кто-нибудь помочь мне с этим?
Спасибо!