508 lines
20 KiB
Plaintext
508 lines
20 KiB
Plaintext
|
README.DOC File
|
||
|
|
||
|
Release Notes for the
|
||
|
Microsoft(R) QuickC(R) Compiler with QuickAssembler, Version 2.51
|
||
|
|
||
|
(C) Copyright Microsoft Corporation, 1989-1990
|
||
|
|
||
|
This document contains release notes for Version 2.51 of the Microsoft
|
||
|
QuickC Compiler with QuickAssembler. It includes information on both C and
|
||
|
assembly language. The Contents section below lists the documentation for
|
||
|
C and assembly language affected by the release notes. In all cases, the
|
||
|
information in this document supersedes the information in the manuals.
|
||
|
However, Microsoft revises its documentation at the time of reprinting;
|
||
|
the manuals may already include some of this information.
|
||
|
|
||
|
Note: If you're reading this from within on-line help, but would prefer to
|
||
|
print it out by loading README.DOC into a word processor, you can find the
|
||
|
file in the executable files directory (the default is \QC25\BIN).
|
||
|
|
||
|
The other documentation files are \SAMPLES\QASAMPLES.DOC, which explains
|
||
|
the assembly-language example programs in the SAMPLES directory; and
|
||
|
SAMPLES.DOC, which explains the C-language example programs in the same
|
||
|
directory.
|
||
|
|
||
|
(COMPAQ is a registered trademark of Compaq Computer Corporation.)
|
||
|
(Intel is a registered trademark of Intel Corporation.)
|
||
|
(Novell is a registered trademark of Novell, Inc.)
|
||
|
|
||
|
|
||
|
===============================< Contents >================================
|
||
|
|
||
|
|
||
|
This document has five parts:
|
||
|
|
||
|
Part Notes
|
||
|
---- ----------------------------------------------
|
||
|
1 Notes on "Up and Running"
|
||
|
2 Notes on "C for Yourself"
|
||
|
3 Notes on "QuickC Tool Kit"
|
||
|
4 Notes on "QuickAssembler Programmer's Guide"
|
||
|
5 Additional Notes on QuickC with QuickAssembler
|
||
|
|
||
|
|
||
|
|
||
|
===================< Part 1: Notes on "Up and Running" >===================
|
||
|
|
||
|
|
||
|
Page Note
|
||
|
---- ----
|
||
|
|
||
|
Inside Front Cover
|
||
|
Brief Guide to Keystrokes
|
||
|
--- -------------------------
|
||
|
The chart on the inside front cover says the ESC key "stops the
|
||
|
compiler and linker from continuing." ESC stops the compiler but NOT
|
||
|
the linker. Press CTRL+BREAK to stop both the compiler and linker.
|
||
|
|
||
|
If you are using the debugger and running a program that expects
|
||
|
keyboard input, pressing either CTRL+C or CTRL+BREAK and then ENTER
|
||
|
will allow you to exit.
|
||
|
|
||
|
6 Running SETUP
|
||
|
--- -------------
|
||
|
If you already have QuickC installed, SETUP will overwrite the
|
||
|
existing QC.INI file that contains the current compiler options,
|
||
|
etc. set in the environment. If you wish to save those settings,
|
||
|
rename this file before running SETUP.
|
||
|
|
||
|
19 Using QuickC
|
||
|
--- ------------
|
||
|
If you own a COMPAQ(R) SLT/286, and the LCD display goes
|
||
|
blank when exiting from QuickC back to DOS, you should
|
||
|
run the program DAC_ON.COM before loading QuickC. To obtain a
|
||
|
copy of DAC_ON.COM, contact your authorized COMPAQ Computer
|
||
|
Dealer.
|
||
|
|
||
|
42 The Debugger
|
||
|
--- ------------
|
||
|
The Quickwatch command does not display complete information
|
||
|
for assembler structures. Only the first member of a structure
|
||
|
is shown.
|
||
|
|
||
|
You may see the message "currently running program terminated"
|
||
|
while debugging.
|
||
|
|
||
|
This may happen if your program is linked with a user-created
|
||
|
library module that contains debugging information, and for
|
||
|
which the source files are present. In such a case, single-
|
||
|
stepping into a function contained in the library will cause
|
||
|
the debugger to terminate the current program and attempt to
|
||
|
compile the source files for the library module into an
|
||
|
executable program.
|
||
|
|
||
|
You can avoid this problem by setting your program list to
|
||
|
contain only the name of the source file of your program.
|
||
|
|
||
|
(miscellaneous)
|
||
|
|
||
|
Accessing Memory at 0xFFFF
|
||
|
--------------------------
|
||
|
Due to a problem with the Intel(R) processor, any attempt to
|
||
|
access a word value at memory location 0xFFFF may cause the
|
||
|
system to hang. The most likely way for this to happen is from
|
||
|
within the QuickC debugger, if you use the WO (display word) or
|
||
|
DW (display double word) operators to examine a register
|
||
|
containing 0xFFFF. Any C or assembly-language program trying
|
||
|
to access that location may also cause the system to hang.
|
||
|
|
||
|
Incompatibility with Novell(R) Netware
|
||
|
--------------------------------------
|
||
|
If you have a peripheral (such as a mouse) that uses IRQ 3, and
|
||
|
your system is part of a network using Novell Netware version
|
||
|
2.15 or lower, your system may hang when you load the QuickC
|
||
|
environment. As a temporary solution, reset your peripheral to
|
||
|
use another interrupt. For more information, contact your Novell
|
||
|
Netware dealer.
|
||
|
|
||
|
|
||
|
|
||
|
===================< Part 2: Notes on "C for Yourself" >===================
|
||
|
|
||
|
|
||
|
Page Note
|
||
|
---- ----
|
||
|
|
||
|
53 Type Qualifiers
|
||
|
--- ---------------
|
||
|
The fourth paragraph in this section is incorrect. A long double
|
||
|
value is the same size as a double. It contains 8 bytes, not 10. It
|
||
|
expresses a floating-point number with at least 15 digits of
|
||
|
precision, not 19. Table 4.1 on page 49 should also be corrected.
|
||
|
|
||
|
164 Declaring a Pointer with the Wrong Type
|
||
|
--- ---------------------------------------
|
||
|
In the first program listing on the page, the line
|
||
|
|
||
|
ptr = val; /* Error! */
|
||
|
|
||
|
should read
|
||
|
|
||
|
ptr = &val; /* Error! */
|
||
|
|
||
|
215 Table 11.4 Standard vs. Low-Level
|
||
|
--- -----------------------------------
|
||
|
The headings across the top of the table should read
|
||
|
|
||
|
Function Parameters Returns Error Condition
|
||
|
|
||
|
298 Vector-Mapped Fonts
|
||
|
--- -------------------
|
||
|
Add this note to the description of vector mapping:
|
||
|
|
||
|
If a vector-mapped font is selected in graphics mode, any function
|
||
|
affecting "_moveto" or "_lineto" will also affect the font
|
||
|
("_setlinestyle" and so on) when "_outgtext" is called.
|
||
|
|
||
|
304 Example Program Using Fonts
|
||
|
--- ---------------------------
|
||
|
The line reading
|
||
|
|
||
|
if( !_setfont( list ) )
|
||
|
|
||
|
should read
|
||
|
|
||
|
if( _setfont( list ) >= 0 )
|
||
|
|
||
|
309 Limits on _asm Identifiers
|
||
|
--- --------------------------
|
||
|
Never use reserved assembly words as labels, variable names, or other
|
||
|
identifiers within an _asm block. This includes words in the
|
||
|
following categories:
|
||
|
|
||
|
- ASM Opcodes such as CMP or MOV
|
||
|
- Opcodes new to the 80186, 80286, and 80386 such as ARPLS or CLTS
|
||
|
- Reserved operand words such as WORD or PARA
|
||
|
- C library functions such as "exit" or "time"
|
||
|
|
||
|
For example, the following code is not permitted:
|
||
|
|
||
|
main()
|
||
|
{
|
||
|
int word;
|
||
|
_asm { mov WORD PTR [word],ax }
|
||
|
}
|
||
|
|
||
|
The variable 'word' can be used in the C part of the program, but not
|
||
|
within the assembly block.
|
||
|
|
||
|
366 Font Display Routines
|
||
|
--- ---------------------
|
||
|
The return values for the _registerfonts and _setfont functions
|
||
|
should be
|
||
|
|
||
|
_registerfonts
|
||
|
|
||
|
Returns: the number of fonts registered, or a negative value if
|
||
|
failure
|
||
|
|
||
|
_setfont
|
||
|
|
||
|
Returns: a negative value if failure, zero or positive if
|
||
|
successful
|
||
|
|
||
|
|
||
|
|
||
|
==================< Part 3: Notes on "QuickC Tool Kit" >===================
|
||
|
|
||
|
|
||
|
Page Note
|
||
|
---- ----
|
||
|
|
||
|
94 /Gw, GW (Generate Code for Windows Function Calls)
|
||
|
--- --------------------------------------------------
|
||
|
QuickC 2.5 supports development of programs for the next release
|
||
|
of Windows. If you wish to develop programs for Windows 2.03, you
|
||
|
must explicitly link your program with C51STUBS.LIB.
|
||
|
|
||
|
130 /INC (Prepare for ILINK)
|
||
|
--- ------------------------
|
||
|
By default, ILINK will call LINK if the incremental link fails.
|
||
|
To make ILINK call QLINK instead, use the /E option and an
|
||
|
argument. For example:
|
||
|
|
||
|
ILINK /E "QLINK @RESPONSE" PROGRAM.EXE
|
||
|
|
||
|
259 Warning Message C4018
|
||
|
--- ---------------------
|
||
|
The warning message below is new and should be added to page 259:
|
||
|
|
||
|
C4018 'operator': signed/unsigned mismatch
|
||
|
|
||
|
An expression involving the specified operator had inconsistent
|
||
|
integer types. The two integer expressions used in the comparison
|
||
|
operation are not of the same signed or unsigned type.
|
||
|
|
||
|
(miscellaneous)
|
||
|
|
||
|
Makefile Compatibility with QuickC 2.0
|
||
|
--------------------------------------
|
||
|
The name of the linker supplied with QuickC has been changed
|
||
|
from LINK to QLINK. Any makefile used with QuickC 2.0 that
|
||
|
specify the LINK command should be changed accordingly.
|
||
|
|
||
|
Makefile Compatibility with Programmer's WorkBench
|
||
|
--------------------------------------------------
|
||
|
The makefiles generated by QuickC are not fully readable by
|
||
|
Microsoft Programmer's WorkBench (PWB) included with Microsoft's
|
||
|
Professional Development Systems. PWB is unable to read the
|
||
|
linker options specified in QuickC makefiles, so you will have to
|
||
|
re-specify those options using PWB's menus. QuickC cannot read
|
||
|
makefiles generated by PWB.
|
||
|
|
||
|
|
||
|
|
||
|
========< Part 4: Notes on "QuickAssembler Programmer's Guide" >===========
|
||
|
|
||
|
|
||
|
Page Note
|
||
|
---- ----
|
||
|
|
||
|
xi Running SETUP Before Using Help
|
||
|
--- -------------------------------
|
||
|
Before using the Quick Advisor, make sure you run the SETUP
|
||
|
program. This program combines files on different disks to build
|
||
|
QA.HLP, which contains help on assembly language as well as DOS
|
||
|
and BIOS interrupt functions.
|
||
|
|
||
|
xi Expanding Environment Space
|
||
|
--- ---------------------------
|
||
|
|
||
|
QuickAssembler for QuickC makes use of certain environment
|
||
|
variables, such as HELPFILES. However, these variables are stored
|
||
|
in an area of memory called the "environment space." You may need
|
||
|
to expand this memory to use the new environment variables
|
||
|
successfully.
|
||
|
|
||
|
If you run DOS 3.2 or later, you can set the environment space
|
||
|
with the DOS SHELL command. For example, the following command
|
||
|
sets the environment size at 3000 bytes when placed in CONFIG.SYS:
|
||
|
|
||
|
SHELL=COMMAND.COM /E:3000 /p
|
||
|
|
||
|
Consult your DOS manual for more information.
|
||
|
|
||
|
xi Temporary Files and the TMP Environment Variable
|
||
|
--- ------------------------------------------------
|
||
|
If you do not have a TMP environment variable set, the linker
|
||
|
prints the following message when it creates a temporary file:
|
||
|
|
||
|
temporary file <filename> created
|
||
|
|
||
|
To avoid getting this message, set the TMP environment variable to
|
||
|
the name of a drive and directory. This drive should have some free
|
||
|
space. For example, the following command line sets C:\TEMP as the
|
||
|
directory where the linker places temporary files:
|
||
|
|
||
|
SET TMP=C:\TEMP
|
||
|
|
||
|
For convenience, place this command (or a similar one) in your
|
||
|
AUTOEXEC.BAT file to execute it automatically.
|
||
|
|
||
|
6 Terminating the Program with .EXIT
|
||
|
--- ----------------------------------
|
||
|
When you use the .STARTUP directive, the recommended method for
|
||
|
terminating the program is to use the .EXIT directive. With
|
||
|
stand-alone assembly programs, you must explicitly terminate
|
||
|
or the processor will execute meaningless instructions beyond the
|
||
|
end of the program.
|
||
|
|
||
|
The .EXIT directive has the following syntax:
|
||
|
|
||
|
.EXIT [exitcode]
|
||
|
|
||
|
in which exitcode is an optional register, memory location, or
|
||
|
constant that contains a value to return to DOS. This value must
|
||
|
not be larger than one byte.
|
||
|
|
||
|
When you use this directive, the assembler generates instructions
|
||
|
that call DOS function 4CH (Exit with Return Code). You can use
|
||
|
another method to terminate the program if you wish. The assembler
|
||
|
generates an advisory warning if you use .STARTUP without .EXIT.
|
||
|
|
||
|
The .EXIT directive requires that .MODEL was previously used.
|
||
|
|
||
|
Within the environment, the assembler generates an advisory
|
||
|
warning message if you use .STARTUP without using .EXIT. Outside
|
||
|
the environment, the assembler does not generate this message.
|
||
|
|
||
|
7 Effect of ILINK on Building a Program
|
||
|
--- -------------------------------------
|
||
|
By default, the QuickC environment invokes ILINK to link programs.
|
||
|
ILINK, in turn, requires that a program have a default data
|
||
|
segment (it may be empty). To meet this requirement, you can do
|
||
|
any of three alternatives:
|
||
|
|
||
|
1. Declare a data segment with .DATA if using simplified segment
|
||
|
directives.
|
||
|
|
||
|
2. Declare a group named DGROUP.
|
||
|
|
||
|
3. Turn Incremental Link off in the Linker Flags dialog box.
|
||
|
|
||
|
The use of ILINK imposes some other requirements on assembly-
|
||
|
language programs:
|
||
|
|
||
|
1. You cannot have a segment with the AT attribute.
|
||
|
|
||
|
2. Avoid depending on distances between segments being fixed. Some
|
||
|
programs calculate the distance between two segments and then
|
||
|
use this value elsewhere. When ILINK is in use, segment-address
|
||
|
arithmetic is unpredictable.
|
||
|
|
||
|
3. The DUP operator cannot have a program address as an operand.
|
||
|
For example, the following statement is compatible with ILINK:
|
||
|
|
||
|
myarr DW 10 DUP (5)
|
||
|
|
||
|
However, the next statement is not compatible with ILINK, even
|
||
|
though it is supported by the assembler:
|
||
|
|
||
|
myarr DW 10 DUP (myproc)
|
||
|
|
||
|
7 Searching for Include Files
|
||
|
--- ---------------------------
|
||
|
When building and running a program, note that the assembler looks
|
||
|
for include files in the following order:
|
||
|
|
||
|
1. The directory in which the current source file is located
|
||
|
2. Directories specified with the /I command-line option
|
||
|
3. The current directory (as recognized by the environment)
|
||
|
4. Directories specified in the INCLUDE environment variable
|
||
|
|
||
|
9 Assembling from the Command Line
|
||
|
--- --------------------------------
|
||
|
QCL does not report some warning messages reported inside the QuickC
|
||
|
environment. QCL does not warn you if you use .STARTUP without .EXIT.
|
||
|
|
||
|
14 Specifying Debug Expressions
|
||
|
--- ----------------------------
|
||
|
The QuickC environment now supports an optional display-format
|
||
|
character for examining arrays. You can add a suffix to any
|
||
|
expression for the Watch window as follows:
|
||
|
|
||
|
expression,nf
|
||
|
|
||
|
in which n is a number and f is a format specifier (such as i, x,
|
||
|
d, or a). Both are optional. The use of n displays the expression
|
||
|
as if it were an array. If the expression is already an array,
|
||
|
then the use of n displays the array as if it were an array of a
|
||
|
higher dimension. The assembler does not type any symbol as an
|
||
|
array. Thus, the use of n with a variable declared in assembly
|
||
|
always displays the variable as an array of one dimension.
|
||
|
|
||
|
The optional f display-format specifier only affects the format
|
||
|
in which each member of the array is displayed.
|
||
|
|
||
|
The Watch window determines the type of array from the expression
|
||
|
or from BY, WO, or DW if used. If WVAR is declared as type WORD
|
||
|
(or "int" in C), then WVAR,5x displays the first five words at the
|
||
|
address of WVAR. The "x" specifies hex format. BY WVAR,5x displays
|
||
|
the first five bytes at the address of WVAR. Each byte is
|
||
|
displayed as if it were a hexadecimal word-sized value.
|
||
|
|
||
|
56 The PROC Directive
|
||
|
--- ------------------
|
||
|
The PROC directive sets the BP register to point to a procedure's
|
||
|
frame, but only if you use a parameter list or the LOCAL directive.
|
||
|
|
||
|
82 Using Full Segment Definitions
|
||
|
--- ------------------------------
|
||
|
The program example on this page should declare class name 'CODE'
|
||
|
for the segment definition:
|
||
|
|
||
|
_TEXT SEGMENT 'CODE'
|
||
|
|
||
|
The class name 'CODE' is necessary if you want to debug the
|
||
|
module. The assembler issues a warning message if you assemble a
|
||
|
code segment without this class name. If you use simplified
|
||
|
segment directives, the code segments automatically have this
|
||
|
class name.
|
||
|
|
||
|
109 Defining Segment Combine Types
|
||
|
--- ------------------------------
|
||
|
The combine type describes how the linker combines segments, but
|
||
|
does not affect the assembler itself. Within any given module, the
|
||
|
assembler concatenates segments with the same name. Thus, segments
|
||
|
with the COMMON attribute are overlapped only if they are in
|
||
|
different modules.
|
||
|
|
||
|
383 Assembling with Two Passes
|
||
|
--- --------------------------
|
||
|
In addition to the options listed in Appendix B, QCL supports the
|
||
|
/P2 option, which specifies two-pass assembly. The /P1 option
|
||
|
specifies one-pass assembly and is now the default. Two-pass
|
||
|
assembly is slower than one-pass assembly, but enables some
|
||
|
language-specific features (such as IF1 and IF2) that rely on two
|
||
|
passes.
|
||
|
|
||
|
383 Removing Copyright Message
|
||
|
--- --------------------------
|
||
|
In addition to the options listed in Appendix B, QCL supports the
|
||
|
/nologo option, which prevents QCL from printing the product name
|
||
|
and copyright information. QCL also prints a warning message when a
|
||
|
nonstandard version of DOS is detected. The /nologo option prevents
|
||
|
this message from being printed.
|
||
|
|
||
|
386 Using /AT to Generate a .COM File
|
||
|
--- ---------------------------------
|
||
|
If you use QCL to generate a .COM file but do not use /AT, the
|
||
|
linker may produce a file with an .EXE extension. This file is
|
||
|
really in .COM format. It should be renamed immediately. You can
|
||
|
prevent this situation by using the /AT option, or by using the
|
||
|
/Fe option to explicitly give the name of the output file. For
|
||
|
example, the following command line produces a file with a .EXE
|
||
|
extension:
|
||
|
|
||
|
QCL sample.asm /link /TINY
|
||
|
|
||
|
However, the following command lines each produce a file with a
|
||
|
.COM extension:
|
||
|
|
||
|
QCL /AT /Ln sample.asm /link /TINY
|
||
|
QCL /Fe sample.com sample.asm /link /TINY
|
||
|
|
||
|
392 Line-Number Index in Listing File
|
||
|
--- ---------------------------------
|
||
|
The line-number index generated by /Sq (and generated by default
|
||
|
within the environment) lists correspondences between source-file
|
||
|
lines and listing-file lines. This index, placed at the end of the
|
||
|
listing file, is read and interpreted by the QuickC environment.
|
||
|
You should avoid writing utilities that read this index. The
|
||
|
format of the line-number index is subject to change without
|
||
|
notice.
|
||
|
|
||
|
|
||
|
|
||
|
========< Part 5: Additional Notes for QuickC with QuickAssembler>=========
|
||
|
|
||
|
|
||
|
Source of DOS and BIOS Function Information in Help
|
||
|
---------------------------------------------------
|
||
|
On-line help includes information on IBM ROM BIOS services as well as
|
||
|
MS-DOS service calls. The information on these topics is adapted from the
|
||
|
books "IBM ROM BIOS" and "MS-DOS Functions" by Ray Duncan. Both books are
|
||
|
published by Microsoft Press and are part of the Programmer's Quick
|
||
|
Reference Series.
|
||
|
|
||
|
Math Coprocessor Instructions in .ASM Programs
|
||
|
----------------------------------------------
|
||
|
If you do not have a math coprocessor chip, you must use the /FPi option
|
||
|
when assembling code for emulated floating-point instructions. If the
|
||
|
switch is omitted, your assembly-language programs may hang your machine.
|
||
|
|
||
|
Setting Breakpoints on Assembly Procedures and Labels
|
||
|
-----------------------------------------------------
|
||
|
Version 2.51 of QuickAssembler now supports setting breakpoints on labels.
|
||
|
Because assembly procedures are treated as labels, a dialog box verifies if
|
||
|
you want to set a breakpoint at a procedure label. Additional information
|
||
|
can be found in the on-line help.
|
||
|
|
||
|
ILINK and Tiny Model
|
||
|
--------------------
|
||
|
When switching to tiny model from another model, or from another model to
|
||
|
tiny model, turn off the incremental link option the first time you build
|
||
|
after switching models. Alternatively, you can delete to .SYM and .ILK
|
||
|
files to force a full link. ILINK should always be disabled
|
||
|
when creating tiny model (.COM) programs.
|