number reading routine
This commit is contained in:
parent
c12c67b556
commit
e639d1fd2a
24
asm.qf
24
asm.qf
|
@ -86,25 +86,34 @@ var lblfixup var currlbl
|
|||
r@ inst-opcount begin dup while 1 - swap , repeat drop
|
||||
r> inst-nextimpl r> swap ! ;
|
||||
|
||||
: int &hcd outb! outb! 1 assembled ;
|
||||
2 inst mov
|
||||
2 inst movb
|
||||
|
||||
OP_IMM OP_REG16 :noname &hb8 op1 + outb! op2 outw! ; ' mov impl
|
||||
OP_IMM OP_REG8 :noname &hb0 op1 + outb! op2 outb! ; ' movb impl
|
||||
: :+r anondo >r , OP_REG16 r> does> @ op1 + outb! ;
|
||||
: :+sreg anondo >r , OP_SREG r> does> @ op1 8 * + outb! ;
|
||||
: modrm ( mod rm reg ) 8 * | swap 64 * | outb! ;
|
||||
|
||||
: int &hcd outb! outb! 1 assembled ;
|
||||
|
||||
2 inst mov
|
||||
|
||||
OP_IMM OP_REG16 :noname &hb8 op1 + outb! op2 outw! ; ' mov impl
|
||||
OP_IMM OP_REG8 :noname &hb0 op1 + outb! op2 outb! ; ' mov impl
|
||||
OP_REG8 OP_REG8 :noname &h88 outb! 3 op1 op2 modrm ; ' mov impl
|
||||
|
||||
2 inst add
|
||||
OP_REG16 OP_REG16 :noname &h01 outb! &h03 op1 op2 modrm ; ' add impl
|
||||
OP_IMM OP_REG8 :noname &h80 outb! 3 op1 0 modrm op2 outb! ; ' add impl
|
||||
2 inst sub
|
||||
OP_REG16 OP_REG16 :noname &h29 outb! &h03 op1 op2 modrm ; ' sub impl
|
||||
OP_IMM OP_REG8 :noname &h80 outb! 3 op1 5 modrm op2 outb! ; ' sub impl
|
||||
2 inst xor
|
||||
OP_REG16 OP_REG16 :noname &h31 outb! &h03 op1 op2 modrm ; ' xor impl
|
||||
2 inst cmp
|
||||
OP_IMM OP_REG16 :noname &h81 outb! 3 op1 0 modrm op2 outw! ; ' cmp impl
|
||||
OP_IMM OP_REG16 :noname &h81 outb! 3 op1 7 modrm op2 outw! ; ' cmp impl
|
||||
OP_IMM OP_REG8 :noname &h80 outb! 3 op1 7 modrm op2 outb! ; ' cmp impl
|
||||
|
||||
1 inst div
|
||||
OP_REG16 :noname &hf7 outb! &h03 op1 &h06 modrm ; ' div impl
|
||||
1 inst mul
|
||||
OP_REG16 :noname &hf7 outb! &h03 op1 &h04 modrm ; ' mul impl
|
||||
|
||||
1 inst push
|
||||
&h06 :+sreg ' push impl
|
||||
|
@ -136,6 +145,7 @@ OP_REG16 :noname &hff outb! 3 op1 4 modrm ; ' jmp impl
|
|||
&h7e :jumprel jle
|
||||
&h75 :jumprel jne
|
||||
&h74 :jumprel jz
|
||||
&heb :jumprel jmps
|
||||
|
||||
: .EXIT ax &h4c00 | # mov &h21 int ;
|
||||
: d" begin in@ dup [ in@ " lit ] != while outb! repeat drop ;
|
||||
|
|
32
in.asm
32
in.asm
|
@ -1,7 +1,33 @@
|
|||
:> end
|
||||
cs push \ copy code segment to data segment
|
||||
ds pop
|
||||
|
||||
ax 0 # mov
|
||||
\ read number
|
||||
\ clobbers: ax, bx, cx, dx
|
||||
dx dx xor
|
||||
cx cx xor
|
||||
bx 10 # mov
|
||||
dx push
|
||||
:> readnext
|
||||
ax &h0100 # mov
|
||||
&h21 int
|
||||
|
||||
:> readover
|
||||
al in@ 0 # cmp
|
||||
readover jl
|
||||
al in@ 9 # cmp
|
||||
readover jg
|
||||
cl al mov
|
||||
cl in@ 0 # sub
|
||||
ax pop
|
||||
bx mul
|
||||
ax cx add
|
||||
ax push
|
||||
readnext jmps
|
||||
readover <:
|
||||
ax pop
|
||||
|
||||
\ ax 0 # mov
|
||||
\ print number
|
||||
\ in: ax = number
|
||||
\ clobbers: ax, bx, cx, dx
|
||||
|
@ -18,7 +44,7 @@
|
|||
|
||||
:> moredigits
|
||||
dx pop
|
||||
dl 48 # add
|
||||
dl in@ 0 # add
|
||||
ax &h0200 # mov
|
||||
&h21 int
|
||||
bx dec
|
||||
|
@ -26,4 +52,4 @@
|
|||
|
||||
0 .EXIT
|
||||
|
||||
cx 11 # mov
|
||||
end <:
|
||||
|
|
Loading…
Reference in a new issue