mov ax cxvalue1,cx这条指令正确么?错误的话为什么?ADD VALUE1,VALUE2错

General Registers - These are the registers that are used for general
accumulator (16 bit)
accumulator high-order byte (8
accumulator low-order byte (8
accumulator (16 bit)
accumulator high-order byte (8
accumulator low-order byte (8
count and accumulator (16 bit)
count high order byte (8 bit)
count low order byte (8 bit)
data and I/O address (16 bit)
data high order byte (8 bit)
data low order byte (8 bit)
Segment Registers - These registers are use to calculate 20 bit address
from 16 bit registers.
code segment (16 bit)
data segment (16 bit)
stack segment (16 bit)
extra segment (16 bit)
Index Registers - These registers are used with the string
instructions.
destination index (16 bit)
source index (16 bit)
Pointers - These registers are used with the segment register to obtain
20 bit addresses
stack pointer (16 bit)
base pointer (16 bit)
instruction pointer (16 bit)
Dos supplies routines for finding and changing interrupt vectors.
DESCRIPTION
COM1 PORT ADDRESS
COM2 PORT ADDRESS
COM3 PORT ADDRESS
COM4 PORT ADDRESS
LPT1 PORT ADDRESS
LPT2 PORT ADDRESS
LPT3 PORT ADDRESS
LPT4 PORT ADDRESS
EQUIPMENT FLAG (SEE INT 11)
MEMORY SIZE IN KBYTES
KEYBOARD FLAG BYTE 0 (SEE INT 9)
KEYBOARD FLAG BYTE 1 (SEE INT 9
STORAGE FOR ALTERNATE KEYPAD ENTRY
POINTER TO KEYBOARD BUFFER HEAD
POINTER TO KEYBOARD BUFFER TAIL
KEYBOARD BUFFER
DRIVE RECALIBRATION STATUS
MOTOR STATUS
DRIVE RECALIBRATION STATUS
MOTOR STATUS
MOTOR OFF COUNTER (DECR. BY TIMER)
STATUS OF LAST DISKETTE OPERATION
NEC STATUS
CURRENT CRT MODE
NUMBER OF COLUMNS ON SCREEN
REGEN BUFFER LENGTH IN BYTES
STARTING OFFSET OF REGEN BUFFER
CURSOR POSITION PAGES 1-8
END LINE FOR CURSOR
START LINE FOR CURSOR
CURRENT PAGE BEING DISPLAYED
BASE PORT ADDRESS FOR ACTIVE DISPLAY
CURRENT SETTING OF THE 3X8 REGISTER
CURRENT PALETTE SETTING COLOR CARD
TEMP. STORAGE FOR SS:SP DURING SHUTDOWN
TIMER COUNTER LOW WORD, HIGH WORD
24 HOUR TIMER OVERFLOW
BIOS BREAK FLAG (BIT 7 = BREAK KEY HIT)
RESET FLAG (1234 = SOFT RESET)
STATUS OF LAST HARD DISK OPERATION
NUMBER OF HARD FILES ATTACHED
PORT OFFSET TO CURRENT HF ADAPTER
TIMEOUT VALUE FOR LPT1,LPT2,LPT3,LPT4
TIMEOUT VALUE FOR COM1,COM2,COM3,COM4
KEYBOARD BUFFER START OFFSET (SEG=40)
KEYBOARD BUFFER END OFFSET (SEG=40H)
ROWS ON THE SCREEN (EGA ONLY)
BYTES PER CHARACTER (EGA ONLY)
MODE OPTIONS (EGA ONLY)
FEATURE BIT SWITCHES (EGA ONLY)
LAST DISKETTE DATA RATE SELECTED
HARD FILE STATUS RETURNED BY CONTROLLER
HARD FILE ERROR RETURNED BY CONTROLLER
HARD FILE INTERRUPT (BIT 7=WORKING INT)
MEDIA STATE DRIVE 0,1,2,3
TRACK CURRENTLY SEEKED TO DRIVE 0,1
KEYBOARD FLAG BYTE 3 (SEE INT 9)
KEYBOARD FLAG BYTE 2 (SEE INT 9)
POINTER TO USERS WAIT FLAG
USERS TIMEOUT VALUE IN MICROSECONDS
RTC WAIT FUNCTION IN USE
LANA DMA CHANNEL FLAGS
STATUS LANA 0,1
SAVED HARDFILE INTERRUPT VECTOR
EGA POINTER TO PARAMETER TABLE
KEYBOARD NMI CONTROL FLAGS (CONVERTIBLE)
KEYBOARD BREAK PENDING FLAGS (CONVERTIBLE)
PORT 60 SINGLE BYTE QUEUE (CONVERTIBLE)
SCAN CODE OF LAST KEY (CONVERTIBLE)
POINTER TO NMI BUFFER HEAD (CONVERTIBLE)
POINTER TO NMI BUFFER TAIL (CONVERTIBLE)
NMI SCAN CODE BUFFER (CONVERTIBLE)
DAY COUNTER (CONVERTIBLE AND AFTER)
PRINT SCREEN STATUS BYTE
The 8086 uses a 20 bit address bus but the registers are only sixteen bit.
derive twenty bit addresses from the registers two registers are combined.
Every memory reference uses one of the four segment registers plus an offset
and/or a base pointer and/or a index register.
The segment register is
multiplied by sixteen (shifted to the left four bits) and added to the sixteen
bit result of the offset calculation.
The 8086 provides four segment registers for address calculations.
segment register is assigned a different task. The code segment register is
always used with the instruction pointer (also called the program counter) to
point to the instruction that is to be executed next.
The stack segment
register is always used with the stack pointer to point to the last value
pushed onto the stack.
The extra segment is general purpose segment register.
The data segment register is the default register to calculate data operations,
this can be over ridden by specifying the segment register.
For example
mov ax,var1
would use the offset var1 and the data segment to calculate
the memory reference but mov ax,ss:var1 would use the offset var1 and
the stack segment register to calculate the memory reference.
The offset can be calculated in a number of ways.
Their are three elements
that can make up an offset.
The first element is a base register, this can be
one of the BX of BP registers (the BP register defaults to the stack segment).
The second element is one of the index register, SI or DI.
The third element
is a displacement.
A displacement can be a numerical value or an offset to a
An offset can contain one to three of these elements, making a total of
sixteen possibilities.
Displacement
The offset to a label in calculated using the assembler directive
This directive makes the assembler calculate the distant from the
start of the segment that the label resides in to the label.
For example
label DW ?
mov di,OFFSET label ;loads the offset from the start of the
; data segment (.DATA) to the label in
The contents of the source register is copied into the destination register.
The source can only be a general purpose register.
mov ax,568
The value 568 is moved to the register.
Only the general purpose registers
can be used.
mov cx,count
The value pointed to by the offset (count) and segment register is loaded into
the register. Only the general purpose registers can be used.
mov ax,[si]
The value pointed to by the index register and the segment register is loaded
into the general purpose register.
ax,[count+di]
The value pointed to by the index register, the offset and the segment
register is loaded into the general purpose register.
[bp+di],ax
or mov ax,[bp+di]
The value pointed to by the index register and the base register is loaded
into the general purpose register.
Note: The data segment register
is used to calculate the 20 bit address
unless aH segment register is specified. ie:
mov ax,cs:count
would use the
code segment instead of the data segment.
Set when their is a carry from the most significant bit
Used with the string instructions to indicate the
Used to enable/disable interrupts
Set if the last operation resulted in a negative number
Set if last operation resulted in a zero
Show carry out or borrow into leftmost bit position
Set if last operation resulted in an even parity
Indicates carry or borrow for eight bit operation
Instruction
dest &- src
mov ax, var1
switch operands
xchg ax,bx
al &- al + [bx]
xlat EBCDIC
sp &- sp +2 [sp]
dest &- [sp] sp &-
load effective
lea dx,MESSAGE
same as: mov dx, OFFSET
ds:dest &- src
lds si,data[bx]
src must be dd dest must
es:dest &- src
les di,array
similar to lds
ah &- low byte flags
low byte flags &- ah
push flags onto
pops flags from
Instruction
src &- NOT src
src &- dest AND src
and al,054h
dest AND src
test bx,0F7h
Only affects flags
dest &- dest OR src
or flag,040h
dest &- dest XOR
xor flags,97h
shift left by count
or count in CX
logical shift right
or count in CX
shift right by
or count in CX
rotate left by
or count in CL
rotate right by
or count in CL
left by count
or count in CL
right by count
or count in CL
Instruction
dest &- dest+src
add al,077h
dest &- dest+src+CF
adc dx,[si]
add with carry
dest &- dest +1
dest &- dest -1
BCD addittion
BCD subtration
ACD addition
ACD subtract
ACD division
ACD multiply
dest &- dest - src
sub vect[di],num
dest &- dest - src
sbb vect[di],num
src &- -src
dest - src
cmp ax,var2
ax &- al * src
mul with sign
ah &- al mod src
div byte ptr num
al &- al div src
dx &- ax mod src
ax &- ax div src
div with sign
idiv num,demon
extend sign to ah
extend sign to dx
Instruction
jump less than
(SF xor OF) = 1
less than or equal
((SF xor OF) or ZF) =1
greater than or
(SF xor OF) = 0
greater than
((SF xor OF) or ZF) =0
not signed
(CF or ZF) = 1
(CF or ZF) = 0
cx is zero
parity even
parity odd
The 8086 supplier a set of instructions designed to do string manipulation.
These instructions are unique to the 80x86 family of processor.
They provide
FAST efficient string manipulation techniques.
Instruction
destination
moves a byte
moves a word
moves a byte
moves a word
moves a byte
moves a word
compares bytes
compares word
compares bytes
compares word
NOTE: AX and AL refer to the contents of the registers , ES:DI
and DS:SI refer the to memory location they point to.
These instructions can be prefixed by one of:
repeat while CX != 0
repeat while CX != 0 and not
repeat while CX != 0 and equal
These prefixed will cause the string operation to be repeated while the
conditions are true and the CX register is not zero.
After each execution of
the instruction CX is decremented and the index registers are either
incremented of decremented depending on the direction flag.
To uses these
instruction the direction flag and the CX register have to be setup properly.
The direction register
can be set with either :
Instruction
Clear direction flag for increment
Set direction flag for decrement
;Set for forward direction
mov ax,SEF WordArray ;ES:DI
points to WordArray
mov di,OFFSET WordArray
sub ax,ax ;Clear ax
mov cx,WORD_ARRAY_LENGTH ;Only repeat for size of segment
rep stosw ;Fill WordArray with zeros
ASCII TABLE
ie: B = 42 hex
Even the simplest of assembly language programs has to contain a minimum of
"setup" information.
This information is used by the assembler to help it make
certain decisions while it assembles.
Some of this information is common to
all assemblers and some is specific to 8086 assemblers.
There are even
variations among 8086 assemblers.
The assembler has to make certain assumptions about the values in the segment
registers in order the calculate offsets.
are several ways to tell the
assembler the value of the segment registers.
Turbo Assembler provides a set of simple directive to specify information about
the segment registers.
.CODE Defines the start of the code segment
.DATA Defines the start of the data segment
Defines the stack segment
A more powerful but complicated
ways is to use the ASSUME directive.
DATA SEGMENT
ASSUME ds:DATA
The assembler would think that the ds segment register contains
the address of DATA and would calculate the offset accordingly.
The programmer
has to load the register with the right value or the offsets will all be
SEGMENT name
[align] [combine] [use] ['class']
name Is the name given to the segment.
The same name can be used
several times through several source files.
Each time the name is encountered
the segments will be combined.
is optionally used to tell the assembler what boundary to start
the segment on.
BYTE - Use the next byte
WORD - Use the next word boundary (16 bits)
DWORD - Use the next double word boundary (32 bits)
PARA - Use the next paragraph boundary (16 bytes)
PAGE - Use the next page (256 bytes)
[combine] Tell how to combine segments with the same name
AT expression -
The segment is located at the address specified
by expression.
COMMON - Locate all segments with this name at the same location.
PRIVATE - Do not allow this segments to be combined with any other.
PUBLIC - Concatenates all segments with this name together.
STACK - Concatenates all segments with this name together and initialize
the SS register to this segment and the SP register to the end of
this segment.
VIRTUAL- is a common area that will be combined across modules to permit
static data
to be shared.
Specifies the default word size for the segment, this can only be
use with the 386 processor enabled.
USE16 - use 16 bit segment references.
This allows for 64K segments.
USE32 - use 32 bit segment references.
This allows for up to 4 Gb
[class] Controls the ordering of segments at link time.
Segments with
the same class are ordered together regardless of their order in the source
The class must be in quotes (' or ")
The following directives require the model to be defined with the .MODEL
directive.
This tells the compiler how memory is to be addressed. The options
tiny Code and data fit with in a single 64K segment.
Memory references
small Code and data each fit with in
64K segments.
Memory references
medium Code may be bigger than 64K but data can only be 64K. References
to code are FAR and data is NEAR.
compact Code must fit within 64K but the data may exceed 64K.
references are NEAR and data is FAR.
No data array can exceed 64K.
large Both data and code can be larger than 64K. All references are FAR.
No data array can exceed 64K.
huge Both data and code can be larger than 64K. All references are FAR.
Data array can exceed 64K. Pointers to elements within an array are far.
The 8086 contains a segment register (DS) that is dedicated to a data segment.
This register is the default segment register used for all memory references
(this can be overridden by explicitly specifying the segment).
The user is
responsible loading the DS register with the appropriate value and telling the
assembler where the DS register points so that it can calculate the offsets
correctly.
The standard is to define a segment to be a data segment.
a convenient way of keeping data an code separate.
The most common way of
doing this is:
DATA SEGMENT
ENDS DATA ;indicates the end of the data
ASSUME ds:DATArequired to inform
; assembler of location
; of DS pointer
REMEMBER: The programmer is responsible for loading the DS register with
the correct value.
With in the DATA SEGMENT there are several ways of defining data.
[name] DB expression [,expression]
DB allocates and initializes a byte of memory.
name refers to the symbol associated with this memory location.
expression can be:
A constant that will be loaded into memory.
A question mark indicates not to initialize memory.
A character string to initialize memory with.
A DUP statement
[name] DD [type PTR] expression
[,expression]
DD allocates and initializes a double word (4 bytes) of memory.
name refers to the symbol associated with this memory location.
type PTR is used to added debug information to the symbol.
BYTE, WORD,DATAPTR, CODEPTR, NEAR,FAR, DWORD,FWORD, PWORD, QWORD, TBYTE,
expression can be:
A constant that will be loaded into memory.
A question mark indicates not to initialize memory.
A character string to initialize memory with.
A DUP statement
[name] DW [type PTR] expression
[,expression]
DD allocates and initializes a word (2 bytes) of memory.
name refers to the symbol associated with this memory location.
type PTR is used to add debug information to the symbol.
BYTE, WORD,DATAPTR, CODEPTR, NEAR,FAR, DWORD,FWORD, PWORD, QWORD, TBYTE,
expression can be:
A constant that will be loaded into memory.
A question mark indicates not to initialize memory.
A character string to initialize memory with.
A DUP statement
count DUP (expression [,expression]...)
Repeats a data allocation operation count
This directive is to
be used with one of the data storage directives.
The format of the listing file is:
Turbo Assembler
Version 2.5
07/02/91 09:40:20
Line Offset Opcode Program listing
Number or Data value
**Error** SUB.ASM(26) Near jump or call to different CS
Turbo Assembler
Version 2.5
07/02/91 09:40:20
Symbol Table
Symbol Name
"07/02/91"
??FILENAME
"09:40:19"
Number 0205
_TEXT:0000
DGROUP:0000
Number 0038
DGROUP:0004
DGROUP:---- Extern
Groups & Segments
Bit Size Align
Combine Class
Turbo Assembler
Version 2.5
07/02/91 09:40:20
Error Summary
**Error** SUB.ASM(26) Near jump or call to different CS
**Error** SUB.ASM(31) Symbol already different kind: SUB1
The first section contains the listing of the program along with the line
number, the offset from the start of the segment, and the hexadecimal opcode.
Equates are defined but are not part of the object code.
Error messages are
printed after the line on which they occur
**Error** SUB.ASM(26) Near jump or call to different CS
The next section is the Symbol table.
The first part of the Symbol table
contains some symbols defined by the assembler.
The next section contains the
symbols that were defined within the program.The next section contains
information about the segments.
The last section contain a summary of the
The line number is included within brackets
Turbo Assembler will produce warning messages if it has to make an assumptions
during assembly.
These assumptions are usually correct but not always.
warning message is of the form:
**Warning** filename(line) message
or if the warning is within a macro:
**Warning** filename(line) macroname(macroline) message
An error will stop Turbo Assembler from generating object code but assembly
will continue to the end of the file to find any more errors. An error message
is of the form:
**Error** filename(line) message
or if the error is within a macro:
**Error** filename(line) macroname(macroline) message
For a complete list of error messages and their explanations see Turbo
Assembler Reference Guide
8086 REGISTERS
GENERAL REGISTERS
accumulator (16 bit)
accumulator high-order byte (8
accumulator low-order byte (8
accumulator (16 bit)
accumulator high-order byte (8
accumulator low-order byte (8
count and accumulator (16 bit)
count high order byte (8 bit)
count low order byte (8 bit)
data and I/O address (16 bit)
data high order byte (8 bit)
data low order byte (8 bit)
SEGMENT REGISTERS
code segment (16 bit)
data segment (16 bit)
stack segment (16 bit)
extra segment (16 bit)
INDEX REGISTERS
destination index (16 bit)
source index (16 bit)
POINTER REGISTERS
stack pointer (16 bit)
base pointer (16 bit)
instruction pointer (16 bit)
Set when a carry results from the MSB
Indicates the direction for the string
instructions
Used to enable/disable interrupts
Set if last operation resulted in a
negative number
Set if last operation resulted in a zero
Show carry out or borrow in
Set if last operation resulted in an even
Indicates carry or borrow for eight bit
DATA TRANSFER
dest &- src
mov ax, var1
switch operands
xchg ax,bx
al &- al + [bx]
xlat EBCDIC
sp &- sp +2 [sp]
dest &- [sp] sp &-
load effective
lea dx,MSG
same as: mov
dx, OFFSET MSG
ds:dest &- src
src must be dd
si,data[bx]
dest must be
es:dest &- src
les di,array
similar to lds
ah &- low byte
low byte flags &-
push flags onto
pops flags from
BIT MANIPULATION
src &- NOT src
src &- dest AND src
and al,054h
dest AND src
test bx,0F7h
Only affects
dest &- dest OR src
or flag,040h
dest &- dest XOR
xor flags,97h
shift left by count
or count in CX
logical shift right
or count in CX
shift right by
or count in CX
rotate left by
or count in CL
rotate right by
or count in CL
left by count
or count in CL
right by count
or count in CL
ARITHMETIC
dest &- dest+src
add al,077h
adc dx,[si]
dest+src+CF
dest &- dest +1
dest &- dest -1
BCD addittion
BCD subtration
ACD addition
ACD subtract
ACD division
ACD multiply
dest &- dest - src
vect[di],num
dest &- dest-src
vect[di],num
src &- -src
dest - src
cmp ax,var2
ax &- al * src
mul with sign
ah &- al mod src
div byte ptr
al &- al div src
dx &- ax mod src
ax &- ax div src
div with sign
idiv num,demon
extend sign to ah
extend sign to dx
jump less than
(SF xor OF) = 1
less than or equal
((SF xor OF)
greater than or
(SF xor OF) = 0
greater than
((SF xor OF)or
not signed
(CF or ZF) = 1
(CF or ZF) = 0
cx is zero
parity even
parity odd
STRING INSTRUCTIONS
Instruction
destination
moves a byte
moves a word
moves a byte
moves a word
moves a byte
moves a word
compares bytes
compares word
compares bytes
compares word
AX and AL refer to the contents of the registers , ES:DI and DS:SI refer the to
memory location they point to.
These instructions can be prefixed by one of:
repeat while CX != 0
repeat while CX != 0 and not
repeat while CX != 0 and equal
Instruction
Clear direction flag for increment
Set direction flag for decrement
ADDRESSING
Register mov
Immediate mov ax,568
Direct mov cx,count
Register indirect mov ax,[si]
Register indirect with displacement
ax,[count+di]
[bp+di],ax
or mov ax,[bp+di]
INTERRUPT (TRAP) VECTORS
HEX Ascii Character Codes
B = 42 hex
DATA SEGMENT
ENDS DATA ;indicates the end of the data
REMEMBER: The programmer is responsible for loading the DS register with
the correct value.
[name] DB expression [,expression]
DB allocates and initializes a byte of memory.
name refers to the symbol associated with this memory location.
expression can be:
A constant that will be loaded into memory.
A question mark indicates not to initialize memory.
A character string to initialize memory with.
A DUP statement
[name] DD [type PTR] expression
[,expression]
DD allocates and initializes a double word (4 bytes) of memory.
name refers to the symbol associated with this memory location.
type PTR is used to added debug information to the symbol.
BYTE, WORD,DATAPTR, CODEPTR, NEAR,FAR, DWORD,FWORD, PWORD, QWORD, TBYTE,
expression can be:
A constant that will be loaded into memory.
A question mark indicates not to initialize memory.
A character string to initialize memory with.
A DUP statement
[name] DW [type PTR] expression
[,expression]
DD allocates and initializes a word (2 bytes) of memory.
name refers to the symbol associated with this memory location.
type PTR is used to add debug information to the symbol.
BYTE, WORD,DATAPTR, CODEPTR, NEAR,FAR, DWORD,FWORD, PWORD, QWORD, TBYTE,
expression can be:
A constant that will be loaded into memory.
A question mark indicates not to initialize memory.
A character string to initialize memory with.
A DUP statement
count DUP (expression [,expression]...)
Repeats a data allocation operation count
This directive is to
be used with one of the data storage directives.
BIOS DATA AREA ADDRESSES
DESCRIPTION
COM1 PORT ADDRESS
COM2 PORT ADDRESS
COM3 PORT ADDRESS
COM4 PORT ADDRESS
LPT1 PORT ADDRESS
LPT2 PORT ADDRESS
LPT3 PORT ADDRESS
LPT4 PORT ADDRESS
EQUIPMENT FLAG (SEE INT 11)
MEMORY SIZE IN KBYTES
KEYBOARD FLAG 0 (SEE INT 9)
KEYBOARD FLAG 1 (SEE INT 9
STORAGE FOR ALTERNATE KEYPAD ENTRY
POINTER TO KEYBOARD BUFFER HEAD
POINTER TO KEYBOARD BUFFER TAIL
KEYBOARD BUFFER
STATUS OF LAST DISKETTE OPERATION
CURRENT CRT MODE
NUMBER OF COLUMNS ON SCREEN
REGEN BUFFER LENGTH IN BYTES
STARTING OFFSET OF REGEN BUFFER
CURSOR POSITION PAGES 1-8
END LINE FOR CURSOR
START LINE FOR CURSOR
CURRENT PAGE
BASE PORT ADDRESS FOR ACTIVE DISPLAY
CURRENT SETTING OF THE 3X8 REGISTER
CURRENT PALETTE SETTING COLOR CARD
TEMP. STORAGE FOR SS:SP DURING SHUTDOWN
TIMER COUNTER LOW WORD, HIGH WORD
24 HOUR TIMER OVERFLOW
BIOS BREAK FLAG (BIT 7 = BREAK KEY HIT)
RESET FLAG (1234 = SOFT RESET)
STATUS OF LAST HARD DISK OPERATION
NUMBER OF HARD FILES ATTACHED
PORT OFFSET TO CURRENT HF ADAPTER
TIMEOUT VALUE FOR LPT1,LPT2,LPT3,LPT4
TIMEOUT VALUE FOR COM1,COM2,COM3,COM4
KEYBOARD BUFFER START OFFSET (SEG=40)
KEYBOARD BUFFER END OFFSET (SEG=40H)
ROWS ON THE SCREEN (EGA )
BYTES PER CHARACTER (EGA )
MODE OPTIONS (EGA )
FEATURE BIT SWITCHES (EGA )
DISKETTE DATA RATE SELECTED
HARD FILE STATUS RETURNED BY CONTROLLER
HARD FILE ERROR RETURNED BY CONTROLLER
HARD FILE INTERRUPT (BIT 7=WORKING INT)
MEDIA STATE DRIVE 0,1,2,3
TRACK CURRENTLY SEEKED TO DRIVE 0,1
KEYBOARD FLAG 3 (SEE INT 9)
KEYBOARD FLAG 2 (SEE INT 9)
POINTER TO USERS WAIT FLAG
USERS TIMEOUT VALUE IN MICROSECONDS
RTC WAIT FUNCTION IN USE
LANA DMA CHANNEL FLAGS
STATUS LANA 0,1
SAVED HARDFILE INTERRUPT VECTOR
EGA POINTER TO PARAMETER TABLE
KEYBOARD NMI CONTROL FLAGS (CONVERTIBLE)
KEYBOARD BREAK PENDING FLAGS (CONVERTIBLE)
PORT 60 SINGLE BYTE QUEUE (CONVERTIBLE)
SCAN CODE OF LAST KEY (CONVERTIBLE)
POINTER TO NMI BUFFER HEAD (CONVERTIBLE)
POINTER TO NMI BUFFER TAIL (CONVERTIBLE)
NMI SCAN CODE BUFFER (CONVERTIBLE)
DAY COUNTER (CONVERTIBLE AND AFTER)
PRINT SCREEN STATUS BYTE

我要回帖

更多关于 mov cx 0ffffh 的文章

 

随机推荐