Reference Section
_abs_q {
quad num;
_abs_q(_mov_ql(num, 0xFFFFFFFF));/* num1 = 1 */
}
#include <inline.h>
{
quad num;
...
lea di,num /* DI = offset of num */
mov ax,0xFFFF
mov dx,0xFFFF/* DX:AX = 0xFFFFFFFF */
mov_ql(); /* num = 0xFFFFFFFF */
abs_q(); /* num = 1 */
...
}
Source file _IMABSQ.ASM ASM equiv ABS_Q
{
quad num1;
...
_mov_qi(num1,65000);
_add_qi(num1,65000); /* num1 += num2 */
...
}
{
quad num1;
...
mov ax,65000
lea di,num1 /* DI = offset of num1 */
mov_qi(); /* set num1 value /
add_qi(); /* num1 += num2 */
jnooverflow/* jump to label if overflow */
...
overflow:
...
}
Source file _IMADSQI.ASM ASM equiv ADDS_QW
{
long num2 = 1000;
quad num1;
quadptr num3;
_mov_ql(num1, 4000000000);/* set quad value */
num3 = _add_ql(num1, num2);/* quad + long */
...
}
#include <inline.h>
{
long num2 = 2000000000;
quad num1;
...
lea di,num1 /* DI = offset of num1 */
mov dx,word ptr num2+2
mov ax,word ptr num2 /* DX;AX = num2 */
mov_ql(); /* set quad value */
add_ql(); /* num1++ */
jno a_ql_100 /* jump to label if overflow */
...
a_ql_100:
...
}
Source file _IMADSQL.ASM ASM equiv ADDS_QD
{
quad num1, num2;
_mov_ql(num1, 1999999999);
_mov_ql(num2, 1234567890);
_add_qq(num1, num2);/* num1 += num2 */
}
#include <inline.h>
{
quad num1, num2;
long num_a = 1999999999, num_b = 1234567890;
...
leadi,num1 /* DI = offset of num1 */
lea si,num2 /* SI = offset of num2 */
mov ax,word ptr num_a
mov dx,word ptr num_a+2/* DX;AX = 1999999999 */
mov_ql(); /* set num1 value */
mov ax,word ptr num_b
mov ax,word ptr num_b+2/* DX;AX = 1234567890 */
xchgdi,si /* DI = offset of num2 */
mov_ql(); /* set num2 value */
xchgdi,si /* DI = offset of num1 */
add_qq(); /* num1 += num2 */
jnca_qq_100
... /* overflow occurred */
a_qq_100:
...
}
Source file _IMADDQQ.ASM ASM equiv ADDS_QQ
{
unsigned int num2;
uquad num1;
_add_uqi(num1,num2);/* num1 += num2 */
...
}
#include <inline.h>
{
unsigned int num2;
uquad num1;
...
lea di,num1 /* DI = offset of num1 */
mov ax,num2 /* AX = num2 */
add_uqi(); /* num1 += num2 */
jnca_uqi_100/* check for overflow */
... /* unsigned overflow occurred */
a_uqi_100:
...
}
Source file _IMADDQI.ASM ASM equiv ADD_QW
{
unsigned long num2;
uquad num1;
_add_uql(num1,num2);/* num1 += num2 */
}
#include <inline.h>
{
unsigned long num2;
uquad num1;
...
lea di,num1 /* DI = offset of num1 */
mov ax,word ptr num2
mov dx,word ptr num2+2/* DX:AX = num2 */
add_uql(); /* num += num2 */
jnca_uql_100
... /* unsigned overflow occurred */
a_uql_100:
...
}
Source file _IMADDQL.ASM ASM equiv ADD_QD
{
uquad num1, num2;
_mov_uqi(num1,1000);
_mov_uqi(num2,10000);
_add_uqq(num1, num2);/* num1 += num2 */
}
#include <inline.h>
{
uquad num1, num2;
...
lea di,num1 /* DI = offset of num1 */
lea si,num2 /* SI = offset of num2 */
xor ax,ax
mov dx,0xFFFF/* DX;AX = 0xFFFF0000 */
mov_uql(); /* set num1 value */
xchgdi,si /* DI = offset of num2 */
mov_uql(); /* set num2 value */
xchgdi,si /* DI = offset of num1 */
add_uqq(); /* num1 = num1 + num2 */
jnca_uqq_100/* if overflow jump to label */
...
a_uqq_100:
...
}
Source file _IMADDQQ.ASM ASM equiv ADD_QQ
{
int num2 = 65535;
quad num1;
_mov_qi(num1, 65536);/* set num1 value */
_dec_q(num1); /* num1 -- */
if (_cmp_qi(num1,num2) != 0)/* is num1 == num2 */
_put_str("Values are not equal!");
...
}
#include <inline.h>
{
quad num1;
...
xor ax,ax
mov dx,1 /* DX;AX = 65536 */
lea di,num1 /* DI = offset num1 */
mov_qi(); /* set num1 value */
dec_q(); /* num1-- */
mov ax,0xFFFF/* AX = 65535 */
cmp_qi(); /* is num1 = 65535 */
jl main_100/* if less jump to main_100 */
jg main_200/* if greater jump to main_200 */
_put_str("Values are equal.");
main_100:
...
main_200:
...
}
Source file _IMCMSQI.ASM ASM equiv CMPS_QW
{
long num2 = 4294967295;
quad num1;
_mov_ql(num1, 4294967294);/* set num1 value */
_inc_q(num1); /* num1++ */
if (_cmp_ql(num1,num2) != 0)/* is num1 == num2 */
_put_str("Values are not equal!");
...
}
#include <inline.h>
{
quad num1;
...
mov ax,0xFFFE
mov dx,0xFFFF/* DX;AX = 4294967294 */
lea di,num1 /* DI = offset num1 */
mov_ql(); /* set num1 value */
inc_q(); /* num1++ */
inc ax /* DX;AX = 4294967295 */
cmp_ql(); /* quad == long? */
jl inc_q_010 /* jump if less than to label */
jg inc_q_020 /* jump if greater to label */
_put_str("Values are equal.");
...
inc_q_010:
...
inc_q_020:
...
}
Source file _IMCMSQL.ASM ASM equiv CMPS_QD
{
quad num1, num2;
_mov_ql(num1, 0xFFFFFFFF);/* set num1 value */
_mov_ql(num2, 0xFFFFFFFF);/* set num2 value */
if (_cmp_qq(num1,num2) != 0)/* is num1 == num2 */
_put_str("Values are not equal!");
...
}
#include <inline.h>
{
quad num1, num2;
...
mov ax,0x1111
mov dx,0xFFFF/* DX;AX = 0xFFFF1111 */
lea di,num1 /* DI = offset of num1 */
lea si,num2 /* SI = offset of num2 */
mov_ql();
xchgdi,si /* DI = offset of num2 */
mov_ql();
xchgdi,si /* DI = offset of num1 */
cmp_qq(); /* quad == quad? */
jl cmp_q_010 /* jump if less to label */
jg cmp_q_020 /* jump if greater to label */
_put_str("Values are equal.");
...
cmp_q_010:
...
cmp_q_020:
...
}
Source file _IMCMSQQ.ASM ASM equiv CMPS_QQ
{
uquad num1;
_mov_uqi(num1, 65000); /* set num1 value */
if (_cmp_uqi(num1, 65001) != 0)/* num1 == num2 */
_cput_str("Values are not equal");
...
}
#include <inline.h>
{
uquad num1;
...
mov ax,65000
lea di,num1 /* DI = offset of num1 */
mov_uqi(); /* set num1 value */
cmp_uqi(); /* num1 == num2? */
jnecmp_q_010 /* jump if not equal to label */
...
cmp_q_010:
...
}
Source file _IMCMPQI.ASM ASM equiv CMP_QW
{
unsigned long num2 = 0x10000000;
uquad num1;
_mov_uql(num1, 0x10000000);
if(_cmp_uql(num1,num2) != 0)/* is num1 == num2 */
_put_str("Values are not equal!");
...
}
#include <inline.h>
{
unsigned long num2 = 0xFFFF1112;
uquad num1;
...
mov ax,word ptr num2
mov dx,word ptr num2+2
lea di,num1 /* DI = offset of num1 */
mov_uql(); /* set num1 value */
cmp_uql(); /* is num1 == num2 */
jnecmp_q_010 /* jump to label if not equal */
...
cmp_q_010:
...
}
Source file _IMCMPQL.ASM ASM equiv CMP_QD
{
uquad num1, num2;
_mov_uql(num1, 4000000001); /* set num1 value */
_mov_uql(num2, 4000000002); /* set num2 value */
_inc_q(num1); /* num1 ++ */
if (_cmp_uqq(num1, num2) != 0)/* is num1 == num2 */
_put_str("Values are not equal!");
...
}
#include <inline.h>
{
uquad num1, num2;
...
lea di,num1 /* DI = offset of num1 */
lea si,num2 /* SI = offset of num2 */
mov ax,0x2801
mov dx,0xEE6B/* DX;AX = 4000000001 */
mov_ql(); /* set num1 value */
xchgsi,di /* DI = offset of num2 */
inc ax /* DX;AX = 4000000002 */
mov_ql(); /* set num2 value */
xchgsi,di /* DI = offset of num1 */
inc_q(); /* num1 ++ */
cmp_uqq(); /* is num1 == num2 */
jnecmp_q_010:/* jump if not equal to label */
...
cmp_q_010:
...
}
Source file _IMCMPQQ.ASM ASM equiv CMP_QQ
{
quad num;
_mov_ql(num,0xFFFFFFFF);
_dec_q (num); /* num = 0xFFFFFFFE */
...
}
#include <inline.h>
{
quad num;
...
mov ax,0xFFFE
mov dx,0xFFFF/* DX;AX = 0xFFFFFFFE */
lea di,num /* DI = offset of num */
mov_ql(); /* set num value */
dec_q(); /* num = 0xFFFFFFFD */
jc d_q_100
... /* handle unsigned overflow */
d_q_100:
...
}
Source file _IMDECQ.ASM ASM equiv DEC_Q
{
int divisor, remainder;
quad num;
_mov_qi(num, 65535);
divisor = 2;
_div_qi(num, divisor, &remainder);
...
}
#include <inline.h>
{
int remainder;
quad dividend;
...
lea di,dividend /* DI = offset of dividend */
mov ax,65535
mov_qi(); /* dividend = 65535 */
inc_q(); /* dividend++ */
mov ax,2 /* AX = divisor = 2*/
remainder = div_qi();/* num = num/65535 */
/* (remainder = 0) */
...
}
Source file _IMDVSQI.ASM ASM equiv DIVS_QW
{
char outstr[40];
long remainder;
quad num;
_mov_ql(num, 0xFFFFFFFF);/* set num value */
_inc_q(num); /* num++ */
_put_str(_q_to_dec(div_ql(num, 2, &remainder), outstr));
/* display divide result */
...
}
#include <inline.h>
{
char outstr[40];
quad dividend;
...
lea di,dividend /* DI = offset of dividend */
mov ax,0xFFFF
mov dx,0xFFFF/* DX;AX = 0xFFFFFFFF */
mov_ql(); /* set dividend value */
inc_q(); /* increment dividend */
mov ax,2
xor dx,dx /* DX;AX = 2 (divisor) */
div_ql(); /* num = num/2 */
lea si,outstr/* SI = offset of outstr */
q_to_dec(); /* quotient -> "string" */
put_str(); /* display divide result */
...
}
Source file _IMDVSQL.ASM ASM equiv DIVS_QD
{
quad num, divisor, remainder;
_mov_ql(num, 0xFFFFFFFF);
_add_ql(num, 0xFFFFFFFF); /* num = 1FFFFFFFE */
_mov_qi(num, 2); /* divisor = 2 */
_div_qq(num, divisor, remainder);/* num = num/2 */
...
}
#include <inline.h>
{
quad num, divisor, remainder;
...
lea di,num /* DS:DI -> dividend */
mov ax,0xFFFF
mov dx,0xFFFF/* DX;AX = 0xFFFFFFFF */
mov_ql(); /* set dividend value */
add_ql(); /* dividend = 1FFFFFFFE */
lea bx,divisor/* BX = offset of divisor */
lea si,remainder/* SI = offset of remainder */
xchgbx,di /* DI = offset of divisor */
mov ax,2 /* AX = divisor value */
mov_ql(); /* divisor = 2 */
xchgbx,di /* DI = offset of dividend,
div_qq(); /* num = num/2 */
...
}
Source file _IMDVSQQ.ASM ASM equiv DIVS_QQ
{
int divisor = 2;
quad num;
_mov_ql(num, 0x80000000);/* set num value */
_divr_qi(num, divisor); /* num = num/divisor = 0x40000000 */
...
}
#include <inline.h>
{
quad num;
...
xor ax,ax
mov dx,0x8000/* DX;AX = 0x80000000 */
lea di,num /* DI = offset of dividend */
mov_ql(); /* set dividend value */
mov bx,2 /* BX = 2 (divisor) */
divr_qi(); /* num = num/2 = 0x40000000 */
...
}
Source file _IMDRSQI.ASM ASM equiv DIVRS_QW
{
long divisor = 5;
quad num;
_mov_ql(num, 0x80000001);/* set num value */
_divr_ql(num, divisor); /* num /= divisor = 0x19999999 */
...
}
#include <inline.h>
{
quad num;
...
mov ax,1
mov dx,0x8000/* DX;AX = 0x80000001 */
lea di,num /* DI = offset of dividend */
mov_ql(); /* set dividend value */
mov cx,5
xor bx,bx /* CX;BX = 5 (divisor) */
divr_ql(); /* num = num/5 */
...
}
Source file _IMDRSQL.ASM ASM equiv DIVRS_QD
{
uquad num, divisor;
_mov_uql(num, 0xFFFFFFFF);/* set num value */
_inc_q(num); /* num = 0x100000000 */
_mov_uqi(num, 2); /* set divisor value */
_divr_uqq(num, divisor); /* num = num/divisor = 0x80000000 */
...
}
#include <inline.h>
{
uquad num, divisor;
...
mov ax,0xFFFF
mov dx,0xFFFF/* DX;AX = 0XFFFFFFFF */
lea di,num /* DI = offset of dividend */
lea bx,divisor/* BX = offset of divisor */
mov_uql(); /* set dividend value */
inc_q(num); /* dividend = 0x100000000 */
mov ax,2
xchgdi,bx /* DI = offset of divisor */
mov_qi(); /* divisor = 2 */
xchgdi,bx /* DI = offset of dividend */
divr_uqq(); /* num = num/divisor */
...
}
Source file _IMDRSQQ.ASM ASM equiv DIVRS_QQ
{
char outstr[40];
uquad num;
_mov_uqi(num,65535); /* set dividend (num) */
_inc_uq(num); /* dividend = 65536 */
_divr_uqi(num,2); /* num = num/2 = 0x8000 */
_put_str(_uq_to_dec(num, outstr));
...
}
#include <inline.h>
{
char outstr[40];
uquad dividend;
...
mov ax,FFFF /* AX = 65535 */
lea di,dividend/* DI = offset of dividend */
mov_uqi() /* set dividend value */
inc_q(); /* dividend++ */
mov bx,2 /* BX = divisor */
divr_uqi(); /* num = num/2 = 0x8000 */
lea si,outstr/* SI = offset of outstr */
uq_to_dec(); /* quad -> "string" */
put_str(); /* display quotient result */
...
}
Source file _IMDVRQI.ASM ASM equiv DIVR_QW
{
unsigned long divisor = 2;
uquad num;
_mov_uql(num, 0xFFFFFFFF);
_inc_q(num); /* num = 0x100000000 */
_divr_uql(num, divisor);/* num = num/divisor */
...
}
#include <inline.h>
{
uquad num;
...
mov ax,0xFFFF
mov dx,0xFFFF/* DX;AX = 0xFFFFFFFF */
lea di,num /* DI = offset of dividend */
mov_uql(); /* set dividend value */
inc_q(num); /* dividend = 0x100000000 */
mov bx,2
xor cx,cx /* CX;BX = 2 (divisor) */
divr_uql(); /* num = num/2 */
...
}
Source file _IMDVRQL.ASM ASM equiv DIVR_QD
{
char outstr[40];
uquad num, divisor;
_mov_uql(num, 0xFFFFFFFF);
_add_uql(num, 0xFFFFFFFF);/* num = 1FFFFFFFE */
_mov_uql(num, 2);
_uq_to_dec(_divr_uqq(num, divisor), outstr);
/* num = num/divisor */
_put_str(outstr); /* display quotient result */
...
}
#include <inline.h>
{
char outstr[40];
uquad num, divisor = 2;
...
lea di,num /* DI = offset of dividend */
xor dx,dx
mov ax,0xFFFFFFFF/* DX;AX = unsigned long */
mov_uql(); /* set dividend value */
add_uql(); /* dividend += dividend */
lea bx,divisor/* BX = offset of divisor */
divr_uql(); /* dividend/divisor */
lea si,outstr/* SI = offset of outstr */
uq_to_dec(); /* convert result to "string" */
put_str(); /* display result */
...
}
Source file _IMDVRQQ.ASM ASM equiv DIVR_QQ
{
unsigned int divisor, remainder;
uquad num;
_mov_uqi(num,65535);
divisor = 2;
_div_uqi(num,divisor,&remainder);
...
}
#include <inline.h>
{
unsigned int divisor, remainder;
uquad num;
...
mov ax,65534
lea di,num /* DI = offset of dividend */
mov_uqi(); /* set dividend value */
divisor = 2;
mov ax,divisor/* AX = 2 */
remainder = div_uqi();
...
}
Source file _IMDVQI.ASM ASM equiv DIV_QW
{
char outstr[40];
unsigned long divisor, remainder;
uquad num;
_mov_uql(num,4000000000);
divisor = 3;
_div_uql(num,divisor,&remainder);
_put_str(_ul_to_dec(remainder, outstr));
/* display remainder */
...
}
#include <inline.h>
{
char outstr[40];
unsigned long divisor, remainder;
uquad num;
...
_mov_uql(dividend,4000000000);
divisor=2;
lea di,num /* DI = offset of dividend */
mov bx,word ptr divisor
xor cx,cx /* CX;BX = divisor */
remainder = div_uql();
lea si,outstr/* SI = offset of outstr */
mov ax,word ptr remainder
mov dx,word ptr remainder+2
ul_to_dec(); /* long -> "string" */
put_str(); /* display remainder value */
...
}
Source file _IMDVQL.ASM ASM equiv DIV_QD
{
char outstr[22];
uquad num, divisor, remainder;
_mov_uql(num, 0xFFFFFFFF);
_mov_uql(divisor, 0xFFFFFFFE);
_div_uqq(num, divisor, remainder); /* num = num / divisor */
_uq_to_dec(num, outstr);
_put_str(outstr);/* display resulting quotient */
...
}
#include <inline.h>
{
char outstr;
uquad dividend, divisor, remainder;
...
_mov_uql(dividend, 0xFFFFFFFF);/* set dividend value */
_mov_uql(divisor, 0xFFFFFFFE);/* set divisor value */
lea di,dividend/* DI = offset of dividend */
lea bx,divisor/* BX = offset of divisor */
lea si,remainder/* SI = offset of remainder */
div_uqq(); /* divide quads */
lea si,outstr
uq_to_dec(); /* quad -> "string" */
put_str(); /* display resulting quotient */
...
}
Source file _IMDVQQ.ASM ASM equiv DIV_QQ
{
uquad num;
_mov_ql(num,0xFFFFFFFF);
_inc_q(num); /* num = 0x100000000 */
...
}
#include <inline.h>
{
quad num;
...
lea di,num /* DI = offset of num */
mov ax,0xFFFF
mov dx,0xFFFF/* DX;AX = 0xFFFFFFFF */
mov_ql(); /* set num value */
inc_q(); /* num = 0x100000000 */
jo i_q_100
... /* handle signed overflow */
i_q_100:
...
}
Source file _IMINCQ.ASM ASM equiv INC_Q
...
quad num1;
_inc_q(_mov_qi(num1, 65535)); /* num1 = 65536 */
...
#include <inline.h>
{
quad num1;
...
mov ax,65535/* AX = int to move to num1 */
lea di,num1 /* DI = offset of num1 */
mov_qi(); /* load num1 w/int value */
inc_q(); /* num1 = 65536 */
...
}
Source file _IMMVSQI.ASM ASM equiv MOVS_QW
...
quad num1;
_dec_q(_mov_ql (num1, 0x80000000)); /* num1 = 0x7FFFFFFF */
...
#include <inline.h>
{
quad num1;
...
xor ax,ax
mov dx,0x8000/* DX;AX = num2 */
lea di,num1 /* DI = offset of num1 */
mov_ql(); /* set num1 value */
dec_q(); /* num1 = 0x7FFFFFFF */
...
}
Source file _IMMVSQL.ASM ASM equiv MOVS_QD
{
char *strindx;
quad num1, num2;
...
_dec_to_q("10000000000000000000", num1, &strindx);
if ((strindx[0] == NULL) && (c_code == 0))
_mov_qq (num2, num1);
/* num2 = num1 = 10,000,000,000,000,000,000 */
...
}
#include <inline.h>
{
quad num1, num2;
char instr[] = "10000000000000000000";
...
lea si,instr/* SI = offset of instr */
lea di,num2 /* ES:DI = offset of num2 */
dec_to_q();/* num2 = 10,000,000,000,000,000,000 */
jnem_qq_100/* jump to label if underflow */
lea si,num1 /* SI = offset of num1 */
xchgdi,si /* DI = offset of num1 */
mov_qq();/* num2 = 10,000,000,000,000,000,000 */
m_qq_100:
...
}
Source file _IMMOVQQ.ASM ASM equiv MOVS_QQ
{
uquad num1;
_inc_q(_mov_uqi(num1, 65535)); /* num1 = 65535++ */
...
}
#include <inline.h>
{
uquad num1;
...
mov ax,65535
lea di,num1 /* DI = offset of num1 */
mov_uqi(); /* load quad w/int value */
inc_q(); /* num1 = 0x10000 */
...
}
Source file _IMMOVQI.ASM ASM equiv MOV_QW
{
uquad num1;
_inc_q(_mov_uql (num1, 4000000000)); /* num1 = 4000000001 */
...
}
#include <inline.h>
{
uquad num1;
...
lea di,num1 /* DI = offset of num1 */
mov ax,0x2800
mov dx,0xEE6B/* DX;AX = 0xEE6B2800 */
mov_uql(); /* num1 = 0xEE6B2800 */
inc_q(); /* num1 = 4000000001 */
...
}
Source file _IMMOVQL.ASM ASM equiv MOV_QD
{
char *strindx;
uquad num1, num2;
...
_dec_to_uq("1000000000000000000", num1, &strindx);
if ((strindx[0] == NULL) && (c_code == 0))
_mov_uqq (num2, num1);
/* num2 = num1 = 1,000,000,000,000,000,000 */
...
}
#include <inline.h>
{
uquad num1, num2;
char instr[] = "1000000000000000000";
...
lea si,instr/* SI = offset of instr */
lea di,num2 /* ES:DI = offset of num2 */
dec_to_uq();/* num2 = 1,000,000,000,000,000,000 */
jnelabel_100/* underflow */
lea si,num1 /* SI = offset of num1 */
xchgdi,si /* DI = offset of num1 */
mov_uqq();/* num2 = 1,000,000,000,000,000,000 */
label_100:
...
}
Source file _IMMOVQQ.ASM ASM equiv MOV_QQ
{
quad num1;
_mov_qi(num1, 65535); /* num1 = 65535 */
_mul_qi(num1, 2);/* num1 = num1 * 2 = (131070) */
...
}
#include <inline.h>
{
quad num1;
...
lea di,num1 /* DI = offset of num1 */
mov ax,65535
mov_qi(); /* num1 = 65535 */
mov ax,2
mul_qi(); /* num1 = num1*2 = (131070) */
...
}
Source file _IMMLSQI.ASM ASM equiv MULS_QW
{
char outstr[22];
quad num1;
_mov_ql(num1, 0xFFFFFFFF);
_q_to_dec(_mul_ql(num1, 2), outstr);
/* num1 = num1 * 2 (1FFFFFFFE) */
_put_str(outstr);/* display product */
...
}
#include <inline.h>
{
char outstr[22];
quad num1;
...
mov ax,0xFFFF
mov dx,0xFFFF/* DX;AX = 0xFFFFFFFF ) */
lea di,num1 /* DI = offset of num1 */
mov_ql(); /* num1 = 0xFFFFFFFF ) */
mov bx,2
xor cx,cx /* CX;BX = 2 */
mul_ql(); /* num1 = num1*2 (1FFFFFFFE) */
lea si,outstr/* SI = offset of outstr */
q_to_dec(); /* product -> "string" */
put_str(); /* display result */
...
}
Source file _IMMLSQL.ASM ASM equiv MULS_QD
{
quad num1, num2;
_mov_ql(num1,0x7FFFFFFF);
_mov_qq(num2,num1);
_mul_qq(num1,num2);/* num1 = num1 * num2 */
...
}
#include <inline.h>
{
quad num1, num2;
...
mov ax,0xFFFF
mov dx,0x7FFF/* DX;AX = 0x7FFFFFFF */
lea di,num1 /* DI = offset of num1 */
mov_ql(); /* num1 = 0x7FFFFFFF */
lea bx,num2 /* BX = offset of num2 */
xchgdi,bx /* DI = offset of num2 */
mov_qq(); /* num2 = num1 */
xchgdi,bx /* DI = offset of num1 */
mul_qq(); /* num1 = num1 * num2 */
...
}
Source file _IMMULQQ.ASM ASM equiv MULS_QQ
{
quad num1;
_mov_uqi(num1,0xFFFF);
_mul_uqi(num1,0xFFFF); /* num1 = 0xFFFF * 0xFFFF = 0xFFFE0001*/
...
}
#include <inline.h>
{
char instr[] = "17204400";
quad num1;
...
lea di,num1 /* DI = offset of num1 */
lea si,instr/* SI = offset of instr */
mov bl,8 /* use octal radix */
asc_to_uq(); /* set num1 value */
mov bx,10 /* num1 = num1 * 10 */
mul_uqi(); /* num1 = 40000000 */
...
}
Source file _IMMULQI.ASM ASM equiv MUL_QW
{
uquad num1;
_mov_uql(num1, 0xFFFFFFFF);
_mul_uql(num1, 0xFFFFFFFF); /* num1 = 0xFFFFFFFE00000001 */
...
}
#include <inline.h>
{
uquad num1;
...
mov dx,0xFFFF
mov ax,0xFFFF/* DX;AX = 0xFFFFFFFF */
lea di,num1 /* DI = offset of num1 */
mov_uql(); /* num1 = 0xFFFFFFFF */
mov cx,dx
mov bx,ax /* CX;BX = 0xFFFFFFFF */
mul_uql(); /* num1 = 0xFFFFFFFE00000001 */
...
}
Source file _IMMULQL.ASM ASM equiv MUL_QD
{
uquad num1, num2;
_mov_uql(num1,0xFFFFFFFF);
_mov_uqq(num2,num1);
_mul_uqq(num1,num2);/* num1 = num1 * num2 */
...
}
#include <inline.h>
{
uquad num1, num2;
...
mov ax,0xFFFF
mov dx,0xFFFF/* DX;AX = 0xFFFFFFFF */
lea di,num1 /* DI = offset of num1 */
mov_uql(); /* num1 = 0xFFFFFFFF */
lea bx,num2 /* BX = offset of num2 */
xchgdi,bx /* DI = offset of num2 */
mov_uqq(); /* num2 = num1 */
xchgdi,bx /* DI = offset of num1 */
mul_uqq(); /* num1 = num1 * num2 */
...
}
Source file _IMMULQQ.ASM ASM equiv MUL_QQ
{
...
quad num;
_mov_ql(num,0xFFFFFFFF);
if(!_sgn_q(num));/* if not negative */
_neg_q(num);/* negate... */
...
}
#include <inline.h>
{
quad num;
...
lea di,num /* DI = offset of num */
mov ax,0xFFFF
mov dx,0x7FFF/* DX:AX = 0xFFFFFFFF */
mov_ql(); /* num = 0xFFFFFFFF */
sgn_q(); /* is num negative? */
js neg_q_100/* n: make negative */
neg_q(); /* negate... */
neg_q_100:
...
}
Source file _IMNEGQ.ASM ASM equiv NEG_Q
{
unsigned num;
...
_rand_init();
num = _rand_w();
...
}
#include <inline.h>
{
unsigned num;
...
rand_init();
num = rand_w();
...
}
Source file IMRNDI.ASM ASM equiv RAND_INIT
{
...
unsigned int num;
_rand_init();/* initialize random number generator */
num = _randr_w(1000); /* num = random number from 0 to 999 */
...
}
#include <inline.h>
{
unsigned int num;
...
mov bx,1000 /* BX = limit */
num = randr_w();/* num = random num (0 to 999) */
...
}
Source file _IMRNDRI.ASM ASM equiv RANDR_W
{
unsigned num;
...
_rand_init();
num = _rand_w();
...
}
#include <inline.h>
{
unsigned num;
...
rand_init();
num = rand_w();
...
}
Source file IMRNDW.ASM ASM equiv RAND_W
{
quad num;
_mov_ql(num,0xFFFFFFFF);
if(_sgn_q(num));/* is num negative? */
_abs_q(num);/* y: make positive */
...
}
#include <inline.h>
{
quad num;
...
lea di,num /* DI = offset of num */
mov ax,0xFFFF
mov dx,0x7FFF/* DX:AX = 0xFFFFFFFF */
mov_ql(); /* num = 0xFFFFFFFF */
sgn_q(); /* is num negative? */
jnssgn_q_100/* y: make positive */
abs_q();
sgn_q_100:
...
}
Source file _IMSGNQ.ASM ASM equiv SGN_Q
{
quad num1;
_mov_qi(num1, 65535);
_sub_qi(num1, 65530); /* num1 -= 65530 = 5 */
...
}
#include <inline.h>
{
quad num1;
...
mov ax,65535
lea di,num1 /* DI = offset of num */
mov_qi(); /* set num1 value */
mov ax,65530
sub_qi(); /* num1 -= 65530 */
jnos_qi_100
... /* handle overflow */
s_qi_100:
...
}
Source file _IMSBSQI.ASM ASM equiv SUBS_QW
{
quad num1;
_mov_ql(num1,4000000000);/* set num1 value */
_sub_ql(num1,3999999999);/* num1 -= 3999999999 = 1 */
...
}
#include <inline.h>
{
quad num1;
...
mov ax,0x2800
mov dx,0xEE6B/* DX;AX = 4000000000 */
lea di,num1 /* DI = offset of num1 */
mov_ql();
dec ax /* AX = 0x27FF */
sub_ql(); /* num1 -= 4000000000 = 1 */
jno s_ql_100
... /* handle overflow */
s_ql_100:
...
}
Source file _IMSBSQL.ASM ASM equiv SUBS_QD
{
quad num1, num2;
_mov_ql(num1,1999999999);
_mov_ql(num2,1234567890);
_sub_qq(num1,num2); /* num1 -= num2 = 765432109 */
...
}
#include <inline.h>
{
quad num1, num2;
...
lea di,num1 /* DI = offset of num1 */
lea si,num2 /* SI = offset of num2 */
mov dx,0x7735
mov ax,0x93FF/* DX;AX = 1999999999 */
mov_ql(); /* set num1 value */
mov dx,0x4996
mov ax,0x02D2/* DX;AX = 1234567890 */
xchgdi,si /* DI = offset of num2 */
mov_ql(); /* set num2 value */
xchgdi,si /* DI = offset of num1 */
sub_qq(); /* num1 -= num2 = 765432109 */
jnos_qq_100
... /* handle overflow */
s_qq_100:
...
}
Source file _IMSUBQQ.ASM ASM equiv SUBS_QQ
{
uquad num1;
_mov_qi(num1,0);
_sub_qi(num1,1);/* num1 = 0xFFFFFFFFFFFFFFFF */
...
}
#include <inline.h>
{
uquad num1;
...
mov ax,12345
lea di,num1 /* DI = offset of num1 */
mov_qi(); /* num1 = 12345 */
mov ax,12335/* AX = AX - 10 */
sub_qi(); /* num1 -= 12335 = 10 */
jncs_qi_100
... /* handle overflow */
s_qi_100:
...
}
Source file _IMSUBQI.ASM ASM equiv SUB_QW
{
uquad num1;
_mov_uql(num1,1234567890);
_sub_uql(num1,1234567880);/* num1 = 10 */
...
}
#include <inline.h>
{
uquad num1;
...
mov ax,0x02D2
mov dx,0x4992/* DX;AX = num2 = 0x499202D2 */
lea di,num1 /* DI = offset of num1 */
mov_uql();
mov ax,0x02C8/* AX = AX - 10 */
sub_uql(); /* num = 10 */
jncs_uql_100
... /* handle overflow */
s_uql_100:
...
}
Source file _IMSUBQL.ASM ASM equiv SUB_QD
{
uquad num1, num2;
_mov_uql(num1,1999999999);
_mov_uql(num2,1234567890);
_sub_uqq(num1,num2); /* num1 = 765432109 */
...
}
#include <inline.h>
{
uquad num1, num2;
unsigned long num_a = 1999999999, num_b = 1234567890;
...
lea di,num1 /* DI = offset of num1 */
lea si,num2 /* SI = offset of num2 */
mov ax,word ptr num_a
mov dx,word ptr num_a+2/* DX;AX = 1999999999 */
mov_uql(); /* set num1 value */
mov ax,word ptr num_b
mov ax,word ptr num_b+2/* DX;AX = 1234567890 */
xchgdi,si /* DI = offset of num2 */
mov_uql(); /* set num2 value */
xchgdi,si /* DI = offset of num1 */
sub_uqq(); /* num1 = 765432109 */
jncs_uqq_100
... /* handle overflow */
s_uqq_100:
...
}
Source file _IMSUBQQ.ASM ASM equiv SUB_QQ