Professional Documents
Culture Documents
:
Intel
3833
4
4
3
08
Debug
41
40
42
44
44
44
43
43
16
01
04
32
32
32
28
23
24
:
CMP
IF.Then .End_If
If.ThenElseEnd_If
Case
FOR
While
Repeat
53
44
44
41
42
43
43
43
44
18
13
12
14
14
14
:
TEST
71
20
22
24
22
24
38
30
33
33
:
Procedures
CALL RET
85
34
31
32
33
34
34
40
94
44
42
44
44
083
084
084
:
DUP
PTR LABEL
108
083
084
084
084
008
008
008
008
002
004
002
002
XLAT
038
033
032
034
:
REP
128
033
034
034
028
023
022
024
022
:
:
:
:
:
:
:
140
048
040
042
044
041
043
Personal ComputersIntel
.
Assembly Language Programming and Organization of The IBM PCA
?CAC
Background
C
.
CAC
Structured Programming Language
.
A
.
C.
A C
.
A.
C
.
.
.
:
:Intel
8088
.
:C
?
..
: Flag Register
.
:A
High Level Language
AC. A
C
:A
A.?
?.
:Stack
: A
. ?A
.
: A
.
:A.Strings
A?
Low-Level
A A
..Systems Programming
:
IBM.Intel
8086?8086
C.Segments
Intel 8086
IBMIntel8086
8088802868038680486APentium?
8088?IBM PC
80286?) XT ( eXtended Technology? ( AT
) Advanced Technology.80386
A
LocalPCIVESA
.
AIntel
Software Compatibility
AC
. ?
Word LengthA.
00060000
Intel1978808616-
bits( 16-bit).19798088
8086
8-bits
8086
A?(
A
.)MHz
IBM8088?PC
IBM
C?
808616-bit ?
16-bit.
80868088A
A
80868088
A.
8018680188
801868018880868088
C
Chips
.SupportC
.Extended Instruction
C80286
.
80286-:
802861982Bits
16A
.
2--:
80286C16 MByte
(1 MBYTE8086).
3--:
1 GBYTE(AA
16
MBYTE).
80386-:
1985CA32 BITS80386
A80286(16_BITC)32_BIT
C40 MHZ
A.80286
80386
80386.80286C
8086(VIRTUAL 8086 MODE)
A8086.
80386 CGbytes
C.64 T BYTES
80386SX
80386BITS
16.
80486-:
19898048680386
80386
80387
A
8038680387
Math. Co_Processor80386C
Cache Memory(
).8 Kbytes
80486A80386
.CA80486()C
.100 M Hz
A80486SX80486A
.C80486
.
Pentium
Pentium@CIntelA
64
BitsC80486C
.Cache Memory
CPentiumC
CCCMMXA.
00000006
?
?
.
A.Pentium
C:
:C?.
:.
:A.
14 ?A?.
DX,CX,BX,AX
.AACA
A()
.
.
A16-BITSA
8-BITSCHIGH LOW
AX16-BITSA(HIGH) AH
8-BITS)(LOW
ALA8-BITS.
D,C,B88-BITSAA
.16-BITS
AGENERAL PURPOSE REGISTERS
ACA
?:
-1(Accumulator) AX
AX
.
?.A
CC??
C?.AXAA
.
-2(Base Register) BX
BX
??
.
-3(Count Register) CX
CX
..
=
=
=
=
=
00000 h
00001 h
00002 h
00003 h
00004 h
A00000h@.FFFFFh
A20
16 (A
C64 Kbytes)
CSegments64 K Bytes?.
?216 = 64 Kbytes
Segment NumberA0000h.FFFFh
COffset
16 BytesA0000h.FFFFh
:
Segment : Offset
Logical AddressAABB:55665566
.AABB
16(CA
A) CC
AABB:5566:
+
B
2
0
)
<+16<B0116
LOCATIONS OF SEGMENTS
AA0000:0000A00000@
0000:FFFFA0FFFFA0001:0000A
000100001:FFFFA.1000F
.()1:
45
1001F
..
45
1000F
..
35
0FFFF
..
29
00020
76
00010
00000
54
0
(1)
()1AA16.16
.ParagraphA10h
.Paragraph Boundaries
A
.:
-:1256A:
-A1256
-1240
:
:<>16+
-AAXA
X1256>10h+<
1256A
X12560+
1256A
<
000A
1256:000A
?
AXA
X10h+><1240
1256A
X12400+
1256A
<
016A
1240:016A
AAC
1256A = 1256:000A = 1240:016A
A:
80FD2hC8FD2h
:<>16+ A
80FD2h
<
>10h+BFD2h
< 7500h
CC
Stack.
Code SegmentData Segment
Segment
StackC
.Segment
Extra
Segment Address
Code
;
)Code Segment Register (CS
Instruction Pointer.
Stack Pointer
).(SP
A
A.
.AA
.
A Instruction Pointer
)(IPSegment
Code
.CS:IPC
C
.
Flags Register
(): .
(C A
@) .
A ?
Interrupt FlagA?
C(A)
.
Memory Organization
8088.1Mbyte
?1KByte
?Vector Table
Interrupt A?
BIOS;
?)ROM (READ ONLY MEMORY?
.
(.)VIDEO DISPLAY MEMORY
I/O PORTS
808864KB ?
. C
A?
.
-1 802868088=
-2 =
-3.DX,CX,BX,AX
-40A51:CD90=
-54A37B:
-AC.40FF
-C.123B
6-=
8088
A
B.
A.
AA.
A??
?A ?
.
C.
-:
Assembler
Assembler
.
AAA
.
AInstructionsAssemblerC
Assembler-DirectivesCAssembler
?.
COMMENT
)OPERAND(S
OPERATION
NAME
TABA)(SPACEA
.
NAME()?
.
Operation.
)Operation(s A
.( A ).
Comments.
CX , 5 ; initialize counter
Srart: MOV
StartMOVCX55
CXA5.
:
Proc
Main
(C?).Main
:
Name Field
?A?A?
C.
A31
. CA
.
A?:
start counter - @character sum_of_digits - $1000 done? -.test
A?:
two words
2abc
( ).
a45.ab
()Operation Field
OpCodeAC
Assembler
CSubAddMov
.
ACCPseudo-OpAssembler
?ProcProcedure
Operand Field
()AAA
A
NOP
INC CX
ADD Word1 , 2
CX
Word12
destination OperandCAA(
AA)A
Source
Operand.
AC.
Comment Field
AC A.
?";"A
A.
A
AAAA
A.
:
; move 0 to CX
MOV CX , 0
MOV CX , 0
A:
AA
:
;
; Initialize Registers
MOV CX,0
MOV BX, 0
Program Data
A
AAA.
Numbers
01BAbA
Binary
01010111BA11100011b
DAdADecimal12341345d.234D
AAHAhA
Hexadecimal0abhA.56H(0
Aabab).
10011
10011b
6455
-456h
FFFFh
(A)
1,234
()
0ab
(hA)H
Characters
AASUDAN
CASCIIAssembler
A41h(A
)A.
VARIABLES
) DW (Define Word
)DD (Define Double Word
?DB .DW
:Byte Variables
:
Initial_Value
DB
Name
DB
Alpha
Alpha
4.
(=).
DB
Byte
0255
CNumbers
Unsigned-128+127
.Signed Numbers
Word Variables
AWordBytes
Two
initial_value
name DW
-2
DW
WRD
WRD(2)
=.
wordA065535(216 1)
C()Unsigned Numbers
32768(-215)32767(215 - 1)
().Signed Numbers
Arrays
AA
. A3Bytes
10h20h30h:
10h, 20h, 30h
DB
B_ARRAY
B_ARRAYC)10h)B_ARRAY + 1
CB_ARRAY + 2C.C
0200hB_ARRAY:
10h
20h
30h
0200h
()Symbol
B_ARRAY
B_ARRAY + 1
B_ARRAY + 2
0201h
0202h
DW
W_ARRAY
1000h2000h3000h.
) ( 1000hW_ARRAYW_ARRAY +2
W_ARRAY + 4.?
300h:
1000h
2000h
3000h
(Symbol)
W_ARRAY
W_ARRAY + 2
W_ARRAY + 4
0300h
0302h
0304h
A
Low ByteHigh Byte.
C:Word1 DW 1234h
34h()word112h(
).word1 + 1
Character Strings
AA
ASCII TableC
LettersABC
ABC
41h, 42h,43h
db
db
1 - Letters
2 Letters
0dh,0ah,Sudan$
msg
db
Capital Letters
Small
.Letters
A?
.) EQU (EQUate
:
EQU Constant
name
name.LF0Ah
0Ah
EQU
LF
LF0AhMOV AL , LF
.MOV AL,0AhAssemblerLFC
.0Ah
Prompt
Msg
EQU
DB
AEQU CAA
.
?
AByte1Byte2Word1Word2
1MOV
MOV A
AA()
A.
Destination , Source
MOV
SourceCDestination
AX , Word1
MOV
()Word1C.AX
AX.
AL, A
MOV
041h(AASCII).AL
MOV
()
()
-2XCHG()Exchange
XCHG A
().:
XCHG Destination, Source
:
XCHG AH, BL
AH, BL(AHBLBL.)AH
:
AXWORD1
XCHG AX, WORD1
XCHG
MOV
XCHG
MOV
Word1,Word2
:
AX , Word2
Mov
Word1 , AX
Mov
ADDSUBAA
AA-:
Destination, Source
Destination, Source
ADD
SUB
WORD1, AX
ADD
AXCWORD1
WORD1(AX)
AX, DX
SUB
DXAXAX(
ADX)
ADDSUB
AAA
ADD BYTE1, BYTE2C:
C ; AL, BYTE2
MOV
BYTE1, AL
ADD
ADD BL,55CBL.BL
AA
MOV AX ,BYTE1
BYTEAAX.2-BYTE
(AA()A)
ASEMBLER
MOV AH, A(AHA)
41hAHA
MOV AX ,A(AXA)
0041h.AX
INC AA1
:
Destination ; Destination = Destination +1
INC
INC WORD11CWORD1
DEC WORD21.WORD2
A)NEG(NegateCC
CC
Complement2S:
NEG Destination
AA
:
; BX = -BX
NEG BX
; BYTE = -BYTE.
NEG BYTE
-:
?
High Level Programming LanguagesC.
CAAB.WORD
B=A
C@
CCC
MOV AX , A
AAX B
MOV B , AX
AA= 5 - AC
5AX
AX 5-A
A
AC
MOV AX , 5
SUB AX , A
MOV A , AX
NEG A
ADD A,5
AA=B-2*AC
MOV AX,B
SUB AX,A
SUB AX, A
MOV A,AX
-:
C
SEGMENT
CODE@
DATA SEGMENT
STACK SEGMENT
?ASSEMBLER
.
:MEMORY MODELS
A
C.
MODEL.:
MEMORY_MODEL
.MODEL
A
CSMALL
.
MODEL .:
SMALL
A?
MODEL
SMALL
MEDIUM
COMPACT
LARGE
AA
64k BYTE
HUGE
AAA
64k BYTE
:DATA SEGMENT
A
A@.
DATA.
.DATA
2
DW
WORD1
DW
WORD2
THIS IS A MESSAGE
DB
MSG
10011001B
EQU
MASK
:Stack Segment
?A?
. AA(
A?).
Stack Size.:
size.bytes
100h
.Stack 100h
C1KB.Assembler
:Code Segment
.Code Name
Name.?Small(
)Assembly?.
(C?)ProcedureA
?
Name Proc
? ;
Name ENDP
.CODE
MAIN PROC
?;
MAIN ENDP
? ;
AA.small
:
.MODEL SMALL
.STACK 100H
.DATA
;
.CODE
MAIN PROC
? ;
MAIN ENDP
?;
END MAIN
@ END?.
IN??COUT?C.
C
A
SERVICE ROUTINES
.
BIOS (BASIC
)?
INT INTERRUPT_NUMBER
?16h
?21h
INTBIOS
INT?DOS
21H(INT 21H)
?DOS
AHA
?.21H
?.
C.
1
2
9
()
?
:1
:1AH
:
ALASCII
)F1-F10).
-:
AH, 01
21H
MOV
INT
C.A
ASCIIAL
.C
.CF1-F10
AL.21h
INTAL
.
-2:2.
:02.AH
ASCII.DL
:ASCII.AL
AH , 02H
? DL ,
21H
MOV
MOV
INT
C(C
C).
Control CharacterA
)
ASCII
7
)BEL (Beep
)HT (Tab
C
) Back Space)
Tab
ALASCII
:
?C
C?.
?:
- 1 C"="
AH,2
?DL,
21h
MOV
MOV
INT
AH,1
21h
MOV
INT
-2
-3
C@BLDL
CAL(A2
DLAL
)@BL
-4
BL , AL
MOV
-5
AH,2
DL,0dh ; Carriage Return
21h
DL,0ah ; Line Feed
21h
MOV
MOV
INT
MOV
INT
DL , BL
21h
MOV
INT
C(BL()3
-6
C?4ChAH
??.21h
AH,4CH
21h
MOV
INT
:
TITLE FIRST: ECHO PROGRAM
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
;
MOV AH,2
?MOV DL,
INT 21H
?;
? ;
MOV AH,01
INT 21H
MOV BL,AL
C ;
MOV AH,02
MOV DL,0DH ; carriage return
INT 21H
MOV DL,0AH ; line feed
INT 21H
C ;
C ; ;
MOV DL,BL
INT 21H
C ; DOS
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
ADOSINT 21h4Ch
-:
?C?-:
-1
AText Editor.()
-2
ASSEMBLER.OBJECT FILE
-3
LINKEROBJECT
.EXECUTABLE FILE
-4
-:
-1-:SOURCE FILE
AEditorA
Text EditorEDIT)ASM (Extention
.FIRST.ASM
MASM(Microsoft
A ;MASM FILENAME
?TASM?-:
COPYRGHT(C)1988,1992BRLAND
3.1
;>TASM FIRST
TURBO
ASSEMBLER
VERSION
INTERNATIONAL
ASSEMBLING FILE: FIRST.SAM
ERROR MESSAGE: NONE
WARNING MESSAGE:NONE
PASSES: 1
ASSEMBLER?
.
AC AC
first.asmA
C.first.obj
-?A
A?A@.
Link Program?Files
Object
. EXE)(Executable File
:
;> TLINK First
Turbo Link Version 2.0 Copyright (c) 1987 Borland International.
"="C.
C?
C.
Display String
1?21h
2.
9
9
:OffsetDX
(A""$)
""$.CA
Control CharacterA?.
!Hello.
LEA
HELLO!$
db
msg
9?21h
INTCCDX
LEA
A().
.
msg.DX
DX, MSG
LEA
CDSC
.
@DATADATA.
ASSEMBLER@DATAC
DSAX
AC.DS
!HELLODX
9?.21h
TITLE SECOND: DISPLAY STRING
.MODEL SMALL
.STACK 100H
.DATA
'MSG DB 'HELLO!$
.CODE
MAIN PROC
; initialize DS
MOV AX,@DATA
MOV DS,AX
;display message
LEA DX,MSG
MOV AH,09H
INT 21H
;return to DOS
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
;
;
lower-case
CC
upper-case
letter
Enter A Lower Case Letter: a
In Upper Case It Is: A
EQU CR,LF
0DH
0AH
EQU
EQU
CR
LF
MSG1 DB
MSG2 DB
Char DB
charMSG2
msg2char( CC-case
Upper
20hC)
CR,LFmsg2A.
msg2$
char(A$char).
Amsg1?
DX ,msg1
AH ,9
21h
AH ,1
21h
Cupper-case
20h
LEA
MOV
INT
MOV
INT
ASCII 20hA?
41hA? )61hchar
;
AL,20h
SUB
MOV
char ,AL
.charmsg2
:
TITLE THIRD: CASE CONVERSION PROGRAM
.MODEL SMALL
.STACK 100H
.DATA
CR
EQU 0DH
LF
EQU 0AH
MSG1 DB
'ENTER A LOWER CASE LETTER: $'
MSG2 DB
CR,LF,'IN UPPER CASE IT IS:'
CHAR DB
?,'$'
.CODE
MAIN PROC
; initialize DS
MOV AX,@DATA
MOV DS,AX
;print user prompt
LEA DX,MSG1
MOV AH,09H
INT
21H
;input character and convert to lower case
MOV AH,01H
INT
21H
SUB AL,20H
MOV CHAR,AL
;display on the next line
LEA DX,MSG2
MOV AH,09H
INT
21H
;return to DOS
MOV AH,4CH
INT
21H
MAIN ENDP
END MAIN
-:
=...IBM PCA?A-1
1- two_words
2- ?1
3- tow words
4- t=
AC.AA-2
.
1- 246
5- 2EAH
2- 246h
6- FFEH
3- 1001
7-1011B
4- 1.101
)C(A-3
.52Aword-A
-wordword1.
-ByteB.52
-ByteC.
-wordword2.65536
-Array1
-Bell.7
-msgThis Is A Message $
-4 A?0000h
DB
7
1ABCH
HELLO
A-A.A,B,C
A
DW
DB
B
C
-.0002h
-.0004h
-O.HELLO
-5CAB1,B2Byte
w1,w2.words
2-MOV
Ds,1000h
w1,DS
5,B1
4-MOV
6-SUB
AL,256
8-ADD
Ds,Ax
CS,ES
w1,w2
B1,B2
w1,B1
1-MOV
3- MOV
5-XCHG
7-ADD
9-MOV
-7():
1- A=B - A
)2- A= -(A+1
3- C= A + B
4- B= 3* B + 7
5- A= B - A- 1
-1?.
-2?Upper case letter
.Lower case letter
:
-8:
-1?.
-2?A10
-3.
? 35
The sum of 3 and 5 is 8
-9.?
.
Enter Three Letters: ABC
A
B
C
-10?A( )A-F
.
Enter A Hexadecimal Digit: C
In Decimal It Is: 12
AA
.8086@9
Flags .
Register
Flag C
0
246711 8910
( AA
) ?
Cf
Pf
Af
Zf
Sf
Tf
Of Df If
Status Flags
@AAx,Bx
SUB
1C.
Status Flags
Name
CF
Carry Flag
PF
Parity Flag
AF
ZF
Zero Flag
SF
Sign Flag
OF
Overflow Flag
11
Control Flags
Trap Flag
TF
IF
Interrupt Flag
10
DF
Direction Flag
)1 (OF=1 C Signed
NumbersC.?
.
Overflow
C
(AByte
One255)
CAC?
.
(C)Unsigned Numbers
.Signed NumbersC?A
:
1-
2-
3-
4-
CAAXFFFFhA
BX1ADD AX, BX:
A
- 1
1111
0001
0000
1111
0000
0000
1111
0000
0000
1111
0000
0000
+
=1
CAAC65536A
10000h(AA
65535)10000hAX
.
- 2
ACAA FFFFh1
1C0()0
.
@C AAXBX
7FFFhADD AX,BX:
FFFEh
1111
1111
1110
1111
1111
1111
1111
1111
1111
0111
0111
1111
7FFFhACA
0(MSB = 0)32767)(7FFFh
A65534
A (-2)
C
OF=1C C
CCF=1
AA?
. C .
AC
AAC. A
C CF .OFAC
OF.
CA
Unsigned overflow
CC
MSBAAA(AA
AAFFFFhA16A
FFhA8).
A().
Signed Overflow
AAC
C. A
A
-A ( +B ) = -A -B
A(-B)=A+B
CC
AAA+-
)(BA-BA ABAA
A.A
.
:CC
MSB(AC
AC).
(A).
:
AA . A
CC .
AINSTRUCTIONS
JUMP
.
?
:
MOV / XCHG
ADD / SUB
INC / DEC
()CF
NEG
(CF=1CC0 0F=1C
800HWORDA80hByte)
operands 0f,sf,zf,pf,cf(
AFBCD).
:1
ADD AX,BXAXFFFFhBX
FFFFh
:
FFFFh
+FFFFh
1FFFEh
)1111 1111 1111 1110 (0FFFEhAX
:
SF:
1MSB1.
PF:07()1
LOW BYTE.
ZF:
0.
CF:
1 MSB
.
OF:
CC
(CMSBMSB).
2:
ADD AL,BLAL80hBL80h
:
80h
+80h
100h
AL00h
SF:
SF=0MSB0
:PF PF=101
ZF:
ZF=10
CF:
CF=1 CMSB
OF:
OF=1(C
MSB).
:3
SUB AX,BXCAX8000h
BX0001h
:
8000h
-0001h
7FFFh = 0111 1111 1111 1111
SF:
SF=0MSB=0(@)MSB
:PF PF=18()""1
ZF:
ZF=00
CF:
CF=0 CA
OF:
OF=1.
.A(C
).
:4
INC ALALFFh
:
FFh
1h
100h
100hAL.A
SF:
SF=0MSB=0
:PF PF=181
ZF:
ZF=1
CF:
INC.
OF:
OF=0C(C
MSB).
:5
MOV AX,-5
5()FFFBhAXA MOV.
:6
NEG AXAX8000h
8000h = 1000 0000 0000 0000
SF=1
:PF PF=1
ZF:
ZF=0
CF:
CF=1CF<1CC
.
OF:
OF=1NEGC
.
DEBUG:
DEBUG_C
C
DEBUG
EXCUTABLE FILE
C:\DOS\DEBUG TEST.EXE
""- A
-:
.1R.AR
(.)R IP
.2T()TRACEC.
.3G(GO)C.
.4Q()QUITC.
.5A ASSEMBLE.
.6UB?.
.7D DUMBCC?.
Debug:
;ax = 4000h
;ax = 8000h
;ax = 8001h
;ax = 7fffh
;ax = 8000h
4000H
AX
0FFFFH
4CH
;DOS exit
MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AX ,
ADD AX ,
SUB AX ,
NEG AX
INC AX
MOV AH ,
INT 21H
MAIN ENDP
END MAIN
test.asmExecutable file
Test.exe?Debug:DOS
c:\asm> DEBUG TEST.EXE
C""-.
AR:
-R
0EE6:0000
(-CS:IP)
Machine CodeB80040.
A
.
8ANV UP DI PL NZ NA PO NC
:
Set
)CF (CarryFlag
)PF (Parity Flag
)AF (Auxiliary Flag
)ZF (Zero Flag
)SF (Sign Flag
)OF (Overflow Flag
Clear
)CY (CarrY
)PE (Parity Even
)AC (Auxiliary Carry
)ZR (ZeRo
)NG (NeGative
)OV (OVerflow
Control Flags
)DF (Direction Flag
) IF ( Interrupt Flag
)DN (DowN
)EI (Enable Interrupt
)UP (UP
)DI (Disable Interrupt
TATrace:
(
-R
AX=0000 BX=0000 CX=001F DX=0000 SP=000A BP=0000 SI=0000 DI=0000
DS=0ED5 ES=0ED5 SS=0EE5 CS=EE6 IP=0000 NV UP DI PL NZ NA PO NC
A:MOV AX , 4000h
0EE6:0000
-T
4000hAX
ADD AX , AX
03C0
0EE6:0003
AAXA4000H AA
ADD AX,AX
-T
0EE6:0005
AAXA8000H AA
2DFFFF SUB AX , FFFF
C CA
AX(A)AL1.
SUB AX,FFFFh
-T
NEG AX
F7D8
0EE6:0008
-T
40
0EE6:000A
-T
0EE6:000B
MOV AH , 4C
B44C
-G
PROGRAM TERMINATED NORMALLY
-Q
>\C:
:
REG
DESTINATION
.
ADD AX,BX .1AX7FFFhBX.0001h
.2
SUB AL,BAL=01hBL=FFh
.3
DEC ALAL=00h
.4
NEG ALAL=7F
-3AAAX,BX
ADDCAX
BX.AX
AC.
.A512Ch
+4185h
FE12h .
.E1E4h
.7132h
.6389h
+ 1ACBh
+ DAB3h
+ 7000h
+ 1176h
-4AASUB AX,BXCAX
BX.AX
AC.
.A
.19BCh
2143h
.81Feh
-1986h
.0002h
71ABh
88CDh
Flow Control Instructions
A
ACA
Status Flags.
A HIGH LEVEL
LANGUAGE.
:
AA
ASCII Table.
.Model Small
.Stack 100h
.Code
PROC
AH , 2
MOV
CX , 256
MOV
DL , 0
MOV
MAIN
Print_Loop:
;DL
21h
INT
DL
INC
CX
DEC
; PRINT_LOOP
JNZ
CC
; DOS_EXIT
AH , 4Ch
MOV
21h
INT
ENDP
MAIN
MAIN
END
)(ZF= 0CAC)(ZF= 1C
.4CH
CONDITIONAL JUMP
JNZ. A
destination-Label
Jxxx
C
A.CC.
A126A127
CAA.
.A @
AA A C .
C IPAA.C
C.
JNZ PRINT-LOOP
AC ZF= 0C
PRINT-LOOP
C Unsigned JumpsC
Unsigned Numbers.
A.AA JG JNLE
CA JGACAA.A
C.
-1Signed Jumps
JG / JNLE
A(AA)
JGE / JNL
AA(A)
SF=OF
JL / JNGE
A(AA)
SF<>OF
JLE / JNG
AA(A)
& SF=OF
ZF=0
ZF=1 OR SF<>OF
-2Unsigned Jumps
JA / JNBE
A(AA)
JAE / JNB
AA(A)
CF=0
JB / JNAE
A(AA)
CF=1
JBE / JNA
AA(A)
& ZF=0
OR ZF=1
CF=0
CF=1
JE / JZ
ZF=1
JNE / JNZ
()
ZF=0
JC
Carry
CF=1
JNC
Carry
CF=0
JO
OF=1
JNO
OF=0
JS
SF=1
JNS
SF=0
JP / JPE
PF=1
JNP / JPO
PF=0
CMP
)Compare(CMP:
Destination , SourceCMP
source destination
CMPA destination
A.
ACMPSUBA.
A:
Ax , Bx
Below
CMP
JG
A zf = sf = of =0JGA
Zf = 0 Sf = OfCBelow.
A C
:
AX,BX
CMP
Below
JG
CAXABXC
Below.
ACMPA
AA@:
DEC
JNZ
CX
loop
C C loop CX.
:
AACJGJAA
.AA
A zf , sf , of
C zf , cfC.
CAx 7fffh Bx
8000h:
AX,BX
CMP
Below
JA
MOV
CMP
NEXT
JLE
NEXT: MOV
CX,BX
Unconditional Jump
JMP CA:
Destination
Jmp
.
.
TOP:
; Loop Body
;
CX
Dec
TOP
JNZ
C TOP(A126)
JNZ JMP
A
TOP:
; Loop Body
CX
DEC
BOTTOM
JNZ
EXIT
JMP
BOTTOM:
TOP
JMP
EXIT:
AA ?
A
Languages.
IF..Then.
If..Then
IF condition is True then
Execute True branch statements
End_IF
AC C?
AX.
AC().
IF AX < 0 then
Replace AX with AX
End_IF
AX , 0
END_IF
CMP
JNL
; Then
AX
NEG
END_IF:
2IFTHEN..ELSE..ENDIF
CCA
-:
ABL,AL)(ASCII CODE ()
IF
AL < = BL THEN
DISPLAY
AL
ELSE
DISPLAY BL
END_IF
-:()
AH,2
MOV
CMP
AL,BL
JNBE
ELSE_
MOV
DL,AL
JMP
DISPLAY
MOV
DL,BL
INT
21H
ELSE_:
DISPLAY:
CASE-3
:AACASE
CASE
EXPRESSION
VALUE_1
VALUE_2
STATEMENT_1
STATEMENT_2
:
VALUE_N
STATEMENT_N
END_CASE
0AX BX 1AX C
.BX1AX CABX
:
CASE
AX
<0
PUT
IN BX
=0
PUT
IN BX
>0
PUT
IN BX
END_CASE
CMP AX, 0
; AX
JL
NEGATIVE
; AX < 0
JE
ZERO
; AX = 0
JG
POSITIVE
; AX > 0
BX,-1
JMP
ZERO
END_CASE
:
MOV
BX,0
JMP
POSITIVE
:
MOV BX,1
END_CASE
END_CASE:
ACMPA .
: C AL1A3A""0 C
AL2A4A.E
:
AL of
CASE
1,3:DISPLAY 0
2,4:DISPLAY E
END_CASE
AL , 1
CMP
ODD
JE
AL , 3
CMP
ODD
JE
AL , 2
CMP
EVEN
JE
AL , 4
CMP
EVEN
JE
END_CASE
JMP
DL , O
MOV
DISPLAY
JMP
DL , E
MOV
EVEN:
AH ,2
MOV
DISPLAY:
21H
INT
ODD:
END_CASE:
Compound Conditions
condition2
AND
condition1
A condition2
IF
OR
condition1
IF
""AND"A"OR
""AND Condition
""C@
: A CCapital Letter
:
Read a Character into AL
If ( A <= character AND character <= Z) then
Display character
End_IF
AH , 1
MOV
21h
INT
AL , A
CMP
JNGE End_IF
AL , Z
CMP
JNLE End_IF
DL , AL
MOV
AH , 2
MOV
21h
INT
End_IF:
""OR Condition
AAC"A"
?YAyCYAyCA :
OR
character = Y ) then
Display character
Else
Terminate the program
End_IF
MOV
AH , 1 ;
INT
21h
CMP
AL , y
JE
then
CMP
AL , Y
JE
Then
JMP
else_
Then: MOV
DL,AL
MOV
AH , 2
INT
21h
JMP
End_if
else: MOV
INT
AH ,4ch
21h
End_if:
.A
.
for loop
For loop_count times do
statements
End_for
loop
loop destination_label
CX()loop
CC CXCCX<C
(destination_labelA126A)
CXC?.
loop
) ; ( CX
top:
;
loop top
-:80"*"
for 80 times do
* display
End_for
CX , 80
MOV
AH , 2
MOV
* DL ,
MOV
21h
Top: INT
LOOP top
ALOOPC
CCX
16553565535
)(00FFFh
.
ACX
) JCXZ ( Jump if CX is Zero
skip
JCXZ
Top:
;
top
loop
skip:
WHILE
While Condition DO
Statements
End_while
C
.
AACC
.AAA
C?()
:?
A ; INITIALIZE COUNT TO 0
A ; READ A CHARACTER
CHARACTER<>CARRIAGE-RETURN DO
WHILE
COUNT =COUNT+1
READ A CHARACTER
END-WHILE
; DX,0
MOV
1(?)
AH , 1
MOV
21h
INT
WHILE:
AL,0DH
CMP
END_WHILE
JE
DX
INC
AC
21H
INT
WHILE.
JMP
:
END-WHILE
REPEAT
A .
REPEAT
; )STATEMENT(s
CONDITION
UNTIL
.AC
.
:?? blank
AH,1
MOV
REPEAT:
2!H
AL ,
REPAET
INT
CMP
JNE
WHILE REPEAT
WHILE
C REPEAT
A.
C:
A
A(.)ASCII
C) (No capital letters.:
TYPE A LINE OF TEXT :
SUDAN UNIVERSITEY OF SCIENCE AND TECHNOLOGY
FIRST CAPITAL = A LAST CAPITAL = Y
C
AC
PROGRAM DESIGN:
-1.
-2A.
-3.
.
-1
?
9
AH,9
DX ,PROMPT
21H
PROMPT
MOV
LEA
INT
TOP - DOWN
CCURSOR
:-2
?
Read Character;
While Character Is Not a Carriage Return Do
IF Character Is A Capital Letter Then
IF Character Precedes First Capital THEN
First Capital =CHARACTER
END_IF
IF Character Follows Last Capital THEN
Last Capital = Character
END_IF
END_IF
Read Character
END_WHILE
MOV
AH , 1
INT
21H
CMP
AL,0DH
JE
END_WHILE
WHILE:
CMP
AL , A
JNGE END_IF
CMP
AL , Z
JNLE END_IF
CMP
AL,FIRST
JNL
CHECK-LAST
MOV
FIRST,AL
CHECK-LAST:
CMP
AL,LAST
JNG
END-IF
MOV
LAST,AL
END_IF:
INT
21H
JMP WHILE
END_WHILE
-:LASTFIRST
FIRST
DB
LAST
DB
A @Z ]
-:/3
:
IF NO CAPITAL LETTER TYPED THEN
DISPLAY NO CAPITAL
ELSE
DISPLAY FIRST & LAST CHARACTER
END_IF
AACC
:?.C
NOCAP-MSG
DB
NO CAPITALS $
CAP-MSG
DB
FIRST CAPITAL=
FIRST
DB
DB
LAST CAPITAL=
DB
LAST
?
MOV
AH ,
CMP
FIRST,]
JNE
CAPS
LEA
DX ,NOCAP_MSG
JMP
DISPLAY
LEA
DX, CAP_MSG
DISPLAY:
INT
21H
CAPS
EQU
0DH
LF
EQU
0AH
PROMPT
DB
NOCAP_MSG
DB
CAP_MSG
DB
FIRST
DB
']'
LAST
DB
DB
'@
$'
.CODE
MAIN PROC
; initialize DS
MOV
AX,@DATA
MOV
DS,AX
DX,prompt
MOV
AH,09H
INT
21H
AH,01H
INT
21H
CMP
AL,CR
JE
END_WHILE
WHILE_:
AL,'A'
JNGE END_IF
CMP
AL,'Z'
JNLE END_IF
; if character precede first capital
CMP
AL,FIRST
JNL
CHECK_LAST
MOV
FIRST,AL
CHECK_LAST:
; if character follow last capital
CMP
AL,LAST
JNG
END_IF
MOV
LAST,AL
INT
21H
JMP
WHILE_
MOV
AH,9
END_IF:
END_WHILE:
FIRST,']'
JNE
CAPS
LEA
DX,NOCAP_MSG
JMP
DISPLAY
LEA
DX,CAP_MSG
INT
21H
CAPS:
DISPLAY:
;exit to DOS
MOV
AH,4CH
INT
21H
MAIN
ENDP
END
MAIN
C-1
1-
IF
AX < 0 THEN
PUT -1 IN BX
END_IF
2-
IF
AL < 0
THEN
PUT FFh
IN AH
ELSE
PUT 0 IN AH
END_IF
3-
IF ( DL >= A
DISPLAY
DL
END_IF
4-
IF
AX < BX THEN
IF
BX < CX THEN
PUT
0 IN AX
ELSE
PUT 0 IN BX
END_IF
END_IF
5-
IF AX < BX THEN
6-
PUT 0 IN AX
ELSE
THEN
IF BX < CX
PUT 0 IN BX
ELSE
PUT 0 IN CX
END_IF
END_IF
2-
CASE?
A.
A-
- CA()Carriage Return
- CB()Line Feed
CA@?.
3-
?:
1+4+7+........+148.AX
A-
- 100+95+90+......+5.BX
4-
LOOP:
A501 5 9 13AX
A-
- ?80.
5-
INITIALIZE QUOTIENT TO 0
WHILE DIVIDENT > = DIVISOR DO
INCREMENT QUOTIENT
SUBTRACT DIVISOR FROM DIVIDEND
END_WHILE
?AX
BXCX
6-
NM
INITIALIZE PRODUCT TO 0
REPEAT
ADD M TO PRODUCT
DECREMENT N
UNTIL N = 0
?AX
BXCX()
7-
CA LOOPLOOPZCCXC
= ZF(C).
CX <> 0) ( AND 1
LOOPNELOOPNZCCXC
= ZF(C).
CX <> 0) ( AND 0
ACCarriage Return
C80(LOOPNE).
8-
??.
-9
?80hFFh
ASCII10.
-10 (
""0C""9A""AC""F)
. C
'YAyCAA@
C?. ( CA
A)
-11 10 CC3
?C.
AND,OR,XOR
:
AND DESTINATION ,
OR
DESTINATION ,
SOURCE
XOR DESTINATION ,
SOURCE
SOURCE
DESTINATIONAA
SOURCEAAA.
.
:
PF,ZF,ZF
:.
AF
:.
CF,OF
:.
A
MASK
:
0
b
b
=
=
=
0
0
0
AND
OR
XOR
b
b
b
,
,
,
=b
=1
=~ b
AND 1
OR
1
XOR 1
b
b
b
:
-10(A)Clear AND
0 MASK'0'1
.
-21(A) SET OR
1 MASK '1 '0
.
-3(A)COMPLEMENTXOR
'1 MASK '0
.
:
'0 AL .
SetMSBLSB
ALA
OR
CDX
A)to z
)to Z
( aASCII?61h7Ah
( A ASCII?41h 5Ah
C20hCDL
CDL , 20h
SUB.
A.
CA
a61h = 0110 0001
A61h = 0100 0001
C0
Mask1101 1111b= 0DFh
AND
AND DL , 0DFh
C.
()Clear Register
AAAX,0
MOV
ASUB AX , AXCAAXORA
XOR 0 = 0
XOR 1 = 0
XOR
XOR AX , AX
OR
AX ZF
SFAX ) ( ZF = 1
AX , 0
CMP
NOT
NOTComplement
1s(0C1'1C'0
A):
Destination
AX
NOT
NOT
TEST
TESTANDDestination
Destination , Source
PFZFSF
AF
OFCF0
TEST
TEST AC'1A'0
Mask1'0
0 AND b = 0 AND b = b
'1C
1
:
ALCCEven_No
0 LSB
MASK1b0000000:
AL , 01h
Even_No
TEST
JZ
:
A?CAAA
.
shift CC A
C .
C:
Destination,1
A Destination,CL
Opcode
Opcode
CL.
SHL CA
:
Destination , 1
SHL
AA CL
Destination , CL
SHL
CL
PF , SF , ZF.
CF@C
of1C@CAC.
:
CL .
:
DH100010103C
h = 0101000050CL()3
.0(DH3A
AC3AA)
:
)(2d (5d) 101C
C1010
)(10d
)(4d.
(2)
) :Shift Arithmetic Left ( SAL
SALSHLSAL
.Machine Code
:
AA CC
AA
AC
80hCL=2A Of , Cf
.
: AAX)(8.
: CC)(3.
MOV CL , 3
SAL AX, CL
CMSBC
LSBC Cf. AC?
CL.
SHR Destination, CL
.SHL
:
DH CF?
MOV DH, 8Ah
MOV CL , 2
SHR DH,CL
:
DH = 10001010
DH = 00100010 = 22h
Cf1
(:Shift Arithmetic Right (SAR
SARSHR A
MSB.A.
Destination , 1
SAR
A
CL
Destination, CL
SAR
:
?2
. A
Cf1C?
(00000101)=5)(00000010.2
:
C?C.
CSHR.
SAR(A
).
:
65143
4.AX
:
AX, 65143
CL,2
MOV
MOV
AX, CL
SHR
:
CAL-15AL.
AL,1
SAR
:
AL2
-7.5-8C
A-1511110001C?
11111000.-8
A?
2 ACAC?C2
C?C
IMUL, MULIDIV, DIV?A
A.
:
)(ROL
Rotate Left
?
CF.
Destination , 1
Destination , CL
ROL
ROL
.A:
Destination ,1
Destination ,CL
ROR
ROR
ROR , ROL CF
:
ROL)(1BX
.BX.Ax
:
;
DX ,16D
MOV
; AX
AX,AX
XOR
; CX,1
MOV
; CF
BX,CX
Top : ROL
NEXT
AX
DX
Top
JNC
INC
NEXT: DEC
JNZ
RCL
RCL
Destination , 1
Destination ,CL
RCR
RCR
:
CDH8Ah
CF=1CL3DH
RCR DH, CL
DH
CF
10001010
11000101
01100010
10110001
0
1
0
ADHB1h .
:
A?AL
DLCAL11011100
00111011.BL
:
SHL
RCR
BL8.?
MOV CX, 8
AL,1
BL,1
Reverse
AL , BL
SHL
RCR
Loop
MOV
Reverse:
:
??AA
.
-1:
Return
.Carriage
'0'1 CC)(1, 0
.
BX:
) Clear BX ( BX will hold Binary values
)Input a character ( 0 OR 1
While character < > CR DO
Convert character to binary value
Left shift BX
Insert value into LSB of BX
Input a character
End_While
C110:
Clear BX :
BX = 0000 0000 0000 0000
Input character 1 , convert to 1
Left shift BX:
BX = 0000 0000 0000 0000
Insert value into LSB of BX:
BX = 0000 0000 0000 0001
Input character 1, convert to 1
Left shift BX:
BX = 0000 0000 0000 0010
BX110b
A'01A
16 CACC17A
CC18.
BXBX
CORA
( 00)A
OR 0 = b
bOR
?
:
A
BX,BX
AH,1
XOR
MOV
21h
INT
AL, 0Dh
END_While
While_:
CMP
JE
AL , 0fh
AND
BX, 1
SHL
; BL
BL, AL
OR
21h
INT
JMP
_While
END_While:
2-:Binary Output
C C
C . 1
1C.'0
FOR 16 times Do
Rotate left BX
If CF = 1 then
Output 1
else
Output 0
end - if
END_FOR
.
3-:Hex input
'0C'9'AC'F
.A
4().
CA
C( A)
.:
Clear
BX
Input Hex character
While character <> CR Do
Convert character to Binary value
Left shift BX 4 Times
Insert value into lower 4 bits of BX
input a character
End_While
AA
BX , BX
CL,4
AH,1
XOR
MOV
MOV
21h
INT
AL , 0dh
END_While
While_:
CMP
JE
A;
"9
AL , 39h
CMP
Letter
JG
AL , 0fh
AND
shift
JMP
AL , 37h
Sub
Letter:
BX, CL
SHL
Shift:
; BX
; BL, AL
OR
21h
INT
_JMP While
END_While:
-4:HEX Output
BX16A4.
A@AC
4:
For 4 times Do
MOV BH to DL
Shift DL 4 times to Right
If DL < 10 then
Convert to character in 0 ......9
else
Convert to character in A..........F
end_if
Output character
Rotate BX left 4 times
END_For
1-?:
01001001
b. 10110001 OR
d. Not 01011110
-2:
- A1
BL .
II
BX .
III
-.Word1
-3Test:
.1
'1 CAX.
.2
'0 CDX.
.3
'1 CDX.
.4
1 CDX.
.5
1 CBL
'1
-4
CAL11001011b
CF=1AL
().
b. SHR AL , 1
d. ROR AL, CL ; if CL contains 3
f. RCL AL, CL if CL contains 3
a. SHL AL,1
if CL contains 2
if CL contains 2
if CL contains 3
; c. ROL AL , CL
; e. SAR AL,CL
;g. RCR AL ,CL
-5 AA.
-AB5h
-AL8
-321424AX
--214516BX
-6AA:
.1CALA10.
.2CDLASCII..
7-AA:
.1BL10D.
.2CAL.()8
AH(:.)ROR
:
8-A.
ASCII
1.
TYPE A CHARACTER
: A
THE ASCII CODE OF A IN BINARY IS 01000001
THE NUMBER OF 1 BITS IS 2
9-A.
ASCII.
C.
TYPE A CHARACTER : 7
THE ASCII CODE OF 7 IN HEX IS : 37
TYPE A CHARCTER :
10- A4
A..C
()
A.
TYPE A HEX NUMBER (0000 - FFFF) : xa
ILLEGAL HEX DIGIT, TRY AGAIN ; 1ABC
IN BIRARY IT IS 0001101010111100
-11 16
A..C
(""0A
""1)A.
TYPE A BINARY NUMBER UB TO 16 DIGITS : 112
ILLEGAL BINARY DIGIT , TRY AGAIN : 11100001
IN HEX IT IS EI
-12 AA8
A.
CCA.
TYPE A BINARY NUMBER , UP TO 8 DIGITS : 11001010
TYPE A BINARY NUMBER , UP TO 8 DIGITS : 10011100
THE BINARY SUM IS 101100110
13- AC
.C
A.
C
TYPE A HEX NUMBER (0 FFFF ) : 21AB
TYPE A HEX NUMBER (0 FFFF ) : FE03
THE SUM IS 11FAE
-14 A
C.C
(9 , 0
)A
A?
?Procedures
Apush
pop,
?.
A C
A@
@A)LIFO (Last In first outA
.
STACK 100h
SSC
SP100hC C
.
:PUSH , PUSHF
PUSH
SOURCE
PUSH
A16.
PUSH
AX
:
-1
CSP2
-2
SS:SP
A.
PUSHF .
SP100h PUSHF
C2SP00FEh
.00FE
:POP , POPF
POP
Destination
POP
16()IPA
POP BXPOP:
-1
SS:SP
-2
SP2
POPFAC .
AA A
168.
Push AL
;
ILLEGAL
CUser Program?
?21h
INT
A??
.
:
A@A
LIFO ??.
:
? this is a test
tset a si siht
:
? Display
Initialize count to 0
Read a character
While Character is not a Carriage return Do
push character onto the stack
increment counter
Read a character
End_While
Go to New line
For count times Do
Pop a character from the stack
Display it
End_For
CX C
whileCX
C
CACX.
SMALL
100H
PROC
.MODEL
.STACK
.CODE
MAIN
CMP
JE
PUSH
INC
INT
JMP
AH , 2
DL , 0DH
21H
DL , 0AH
21H
EXIT
MOV
MOV
INT
MOV
INT
JCXZ
DX
21H
TOP
AH , 4CH
21H
POP
INT
LOOP
MOV
INT
ENDP
MAIN
END_WHILE:
TOP:
EXIT:
MAIN
END
:PROCEDURES
C
C
A.
AC
.
A
? ?C
.High Level Programming Languages
?A?
CALLARET.
:Procedure Declaration
:
Name PROC type
; Body of the procedure
RET
Name ENDP
Name?typeOperandNEARA
FARNEAR A?AFAR
C?.CA
.NEAR
RET()ReturnCC?C.A
ARETCB(
)@.
AACC
CC
AC
AC A.
?A
ACA:
-1
-2
-3
-4
(C)
.
:RET , CALL
?CALLDIRECT
name
CALL
nameB.?Indirect
CALL address_expression
Return address
CALL?
-2
CAA
IPC
ARETC
C?
Pop_value
RET
Pop_value.CPop_value = NA
N -BytesC.
-:
a,b
-:
Product = 0
Repeat
If LSB of B is 1 then
Product = Product + A
End_if
Shift left A
Shift right B
until B = 0
B<1101bA<111b
product = 0
since LSB of B is 1 , product = 0 + 111b = 111b
shift left A:
A = 1110b
shift right B :
B = 110b
since LSB of B is 0 ;
shift left A :
A=11100b
shift right B :
B = 11b
since LSB of B is 1 ;
product = 111b + 11100b = 100011b
shift left A :
A = 111000b
shift right B :
B =1b
since LSB of B is 1 ,
product = 100011b + 111000b = 1011011b
shift left A :
A = 1110000
shift right B :
B=0
since LSB of B is 0 ,
return Product = 1011011b = 91d
.MODEL
.STACK
.CODE
MAIN
MAIN
MULTIPLY
SMALL
100H
PROC
CALL
MOV
INT
ENDP
PROC
PUSH
PUSH
XOR
MULTIPLY
AH,4CH
21H
AX
BX
DX , DX
REPEAT:
TEST
JZ
ADD
BX , 1
END_IF
DX , AX
SHL
SHR
JNZ
POP
POP
RET
ENDP
MAIN
AX , 1
BX , 1
REPEAT
BX
AX
END_IF:
MULTIPLY
END
BXAX?
.FFhABX AX.DX
AA
A PUSH ??
Apop
:
NAME PROC
Push AX
Push BX
Pop BX
Pop AX
RET
NAME ENDP
:
-1
C
-A
.STACK
100H
SP=
- A
AX = 1234h , BX = 5678h , CX = 9ABCh , and SP=100h
SP , CX , BX , AX?
AX
BX
AX , CX
CX
AX
BX
PUSH
PUSH
XCHG
POP
PUSH
POP
-3
) .( SP=0
.SP=
A.
-4
A?:
A:
CALL PROC1
MOV AX , BX
-A
MOV AX,BX08FD:0203
PROC1Near08FD:300h
SP = 010Ah
SP , IPCALL PROC1
-5
:
-A
AX
.
CX
.
6-
] [ } { ) (.
A@.
C.CC
@C?C
A.C
C A.
A?.
)}](A +{B-(D-E)+[A+B
)](A+ {B-C
7- A1C32767
-
A.
1415XOR.
.15
?:
C?READABX
A-
- C?RANDOMBX
C?WRITEBX.
A???READ?
??RANDOM??WRITE
1004A4
.
A?
A.
A.
C
AA
C A8A
A16.
AAC
?.
).(Multiply
IMUL (Integer
).Multiply8
16A16
32.:
MUL
Source
Source
IMUL
&
A8
A16
8Byte Form
ALSource
CA().
(16).AX
16Word form
AX
CA().(32
)AX , DXAXDX
.DX:AX}:
{
.IMUL, MUL
:
?.
/1AX = 1
MUL BX
BX = ffffh ,
65535
-1 IMUL
BX
() AX
ffff
0000ffff
Ffffffff
/2 BX = ffffh, AX=ffffh
MUL BX
()
4294836225
1 IMUL
BX
MUL AX
16769025 IMUL
AX
0000
ffff
()
FFFE0001
AX
DX
0001
FFFE 1
00000001
0001
/3AX = 0fffh
))
16769025
Ffff
DX
CF/OF
()
00ff E00l
00ff E00l
0000
CF/OF
0
AX
DX
CF/OF
Eoo1
00ff
E001
00ff
()
16776960
MUL CX
-256 IMUL
CX
()
00FFFF00
FFFFFF00
AX
DX
CF/OF
FF00
00FF
FF00
FFFF
:
/1CA
A = 5 x A - 12 x B
MOV
AX,5
; AX = 5
; AX = 5 *A
; A = 5 *A
; AX = 12
; AX = 12 x B
IMUL
A
MOV A , AX
MOV AX,12
IMUL
B
; A = 5 x A - 12 x B
SUB
A ,AX
/2
C?PROCEDUREFACTORIAL?
!N(N)?NCX
?N.AX()
:
if N =1 Then
N!=1
if N > 1 Then N ! = N (N - 1) (N - 2) ..... 2 1
PRODUCT = 1
Term = N
For N Times Do
product = product * term
Term = Term -1
END_For
?:
FACTORIAL
PROC
; Computes N1
MOV AX, 1
Top: Mul CX
Loop Top
RET
FACTORIAL ENDP
A?65535
.
DIV , IDIV
C
C)(Divide
DIV
DIV
IDIV
C?
@.
CA8A
A16:
8Byte form
AX
(8)AL(8)
.AH
16Word form
DX , AX(
DX :AXDXAX)
AX.DX
CC.C
.IDiv , Div
A .
Divide Overflow
C
.
. ?
" Divide Overflow.
:C, DX = 0000
BX = 0002 , A x =0005
()
2
Div BX
2 IDIV BX
()
1
1
Div B x
()
0
-2 Idiv B x
()
5
1
Div B x
()
AX
DX
0002
0001
0002
0001
AX
DX
0000
0005
FffE
0001
AX
DX
fffffffbh2(7ffffffeh)AX
1-
-2 Idiv B x
FffE
Ffff
()
0
()
251
AL
AH
FB
Div B L
Divide overflow Idiv B L( -25)AL
Div0DX
.2
IDIVADX
AX(AAX
0DXAX
ffffh)DX CWD
MOV AX , -1250
CWD
MOV BX , 7
IDIV BX
:
AACA
A??
.
A
AC.
C.
Decimal Output
A?outdecAX C
AX()-AX
-AX(AX)
AX.
If AX < 0
print a minus sign
Replace AX By its twos complement
End-if
Get the digits in AXs decimal representation
Convert these digits to characters and print them
123456-
5CAX
3567
3567103567
35610 356
351035
10
stack
count.
count = 0
Repeat
Divide quotient by
10
Push remainder on the stack
count = count + 1
Until quotient = 0
(quotient)AX
6(
count).
For
count times do
Pop a digit from the stack
Convert it to a character
Output the character
End_For
?:
OUTDEC PROC
; Prints AX as a signed decimal integer
; input : AX
; Output : None
PUSH
AX
PUSH
BX
PUSH
CX
PUSH
DX
;if AX < 0
OR
AX , AX
JGE
@END_IF1
;Then
PUSH
AX
MOV
'DL , '-
MOV
AH,2
INT
21H
POP
AX
NEG
AX
@END_IF1:
XOR
CX , CX
;Get Decimal Digit
MOV
BX , 10D
@REPEAT1:
XOR
DX , DX
DIV
BX
PUSH
DX
INC
CX
OR
AX , AX
JNE
@REPEAT1
;Convert Digits to characters and print them
MOV
AH , 2
@PRINT_LOOP:
POP
DX
OR
DL , 30H
INT
21H
LOOP
@PRINT_LOOP
POP
DX
POP
CX
POP
BX
POP
AX
RET
OUTDEC ENDP
?outdec
?.??outdecAA
Assembler C?@
Include.
Filespec
IncludeFilespec
?.Assembler?
.
C?OUTDECAPRocfile.ASM
??:
SMALL
100h
.MODEL
.STACK
.CODE
MAIN PROC
AX , 1234
OUTDEC
AH, 4Ch
21h
MOV
CALL
MOV
INT
MAIN ENDP
INCLUDE PROCFILE.ASM
END Main
Decimal Input
?ASCII
..
Total = 0
Read an ASCII Digit
Repeat
Convert character to a Binary value
Total = total* l0 + value
Read a character
Until character is a carriage return
C157:
Total = 0
Read 1
Convert 1 to 1
Total = 10 x 0 + 1 = 1
Read 5
Convent 5 to 5
Total = 1 x 10 + 5 = 15
Read 7
Convent 7 to 7
Total = 15 x 10 + 7 = 157
AC?INDEC?
?.A -
A.+C(0 )9
?..
Negative = True
Read a character
Read a character
? Print
Total = 0
Negative = False
Read a character
Case character of
-
:
+
:
End_Case
Repeat
if character is not between 0 and 9 then
GO TO Beginning
Else
convert character to a Binary value
:
INDEC PROC
; Reads a number in range -32768 to 32767
; input : None
; Output : AX = Binary equivalent Of Number
PUSH
BX
PUSH
CX
PUSH
DX
@BEGIN: MOV
AH , 2
MOV
DL , '?'
INT
21H
XOR
BX , BX ; total =0
XOR
CX , CX
;Read A Character
MOV
AH , 1
INT
21H
;Case Char of
CMP
AL ,'-'
JE
@MINUS
CMP
AL , '+'
JE
@PLUS
JMP
@REPEAT2
@MINUS: MOV
CX , 1
@PLUS: INT
21H
@REPEAT2:;If Character Between 0 AND 9
CMP
AL , '0'
JNGE
@NOT_DIGIT
CMP
AL , '9'
JNLE
@NOT_DIGIT
; Convert Character To Digit
AND
AX ,000FH
PUSH
AX
; TOTAL = TOTAL * 10 + DIGIT
MOV
AX , 10
;Get 10
MUL
BX
;AX = TOTAL * 10
POP
BX
;RETRIEVE DIGIT
ADD
BX , AX
; TOTAL = TOTAL*10+DIGIT
;Read A Character
MOV
AH , 1
INT
21H
CMP
AL,0DH
JNE
@REPEAT2
MOV
AX , BX
OR
CX , CX
JE
@EXIT
NEG
AX
@EXIT: POP
DX
POP
CX
POP
BX
RET
@NOT_DIGIT:
MOV
AH , 2
DL , 0DH
21H
DL , 0AH
21H
@BEGIN
MOV
INT
MOV
INT
JMP
ENDP
INDEC
?procfile. ASM?OutDec
???
?INDEC?CAX?
?OUTdecAX
.
TITLE DECIMAL: READ AND WRITE A DECIMAL NUMBER
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
;INPUT A NUMBER
CALL
INDEC
PUSH
AX
;MOVE CURSOR TO NEXT LINE
MOV
AH , 2
MOV
DL , 0DH
INT
21H
MOV
DL , 0AH
INT
21H
;OUTPUT A NUMBER
POP
AX
CALL
OUTDEC
;EXIT
MOV
AH,4CH
INT
21H
MAIN
ENDP
INCLUDE
PROCFILE.ASM
END MAIN
Overflow
?Indec(
) AXA
(-32768C.)32767C
C.Input Overflow
A:total
10.total
99999
999910 AC
327699C32760
.
Negative = True
Read a character
Read a character
? Print
Total = 0
Negative = false
Read a character
case character of
-
:
+
:
End_Case
Repeat
If character is not between 0 & 9 then
GO TO Beginning
Else
Convert character to a value
Total = 10 x total
If overflow then
go to Beginning
Else
Total = total + value
If overflow then
Go To Beginning
End_If
End_If
endif
Read a character
Until character is a carriage return
If Negative = True then
Total = - total
End_if
:
/1DX , AX CF/OF:
MULCBX = 0003h , AX = 0008h
/A
BX
BX
CX
word
AX
/2AX Cf/of:
/A
BL
MUL
= 10h , AL = ABh
BL
BL
TMUL
Ah
MUL
BL
= 10h , AL = ABh
= 01ABh
AX
Byte1
/3DX , AX:
/ADiv BXC= 0000h
B x = 0002h, AX = 0007 , DX
B x = 0010h , AX = FFFEh , DX
BX
BX
/4AH , AL]fu:
/ADIV BL = 03h , AX = 000Dh
DL
BL
BL
/Div BL
= 02h , AX = FFE0h
BL
/5DXCWDAX:
/A7E02
/8ABCh
/1ABCh
/6AXCBWAL:
/AF0h
/5Fh
/80h
/7
C , B , AWord
A
B
A
if
= 5xA-7
)= (A - B ) * (B - 10
= 6 -9*A
A2 + B2 = C2 then
set cf
else
clear cf
end_if
abcd-
A?Indec
Outdec ,
.
/8?INDEC
/9 A()65535
.
?INDEC?N , M
/11 A
DivisorM , N.
032
.
ACA
AC?.
.
One - Dimensional Arrays
?
BytesAWordsAA@.A
]A[1]A[2]A[3A[N]....N
Msg
MSG[1] = A
ABCDE
)(B
= ]MSG[2.
DB
MSG
()A
:
10,20,30,40,50,60
DW
5Word
A[1] = 10 A[2] = 20 A[3] = 30 A[4] = 40A[5] = 50
Base Address of the array
CCA
0200h:
A
A + 2h
A + 4h
A + 6h
0200h
0202h
0204h
0206h
10
20
30
40
A + 8h
)DUP (Duplicate
50
0208h
Dup
.
)Repeat_Count Dup (value
DupvalueRepeat_count:
)GAMMA DW 100 Dup (0
GAMMA100Word
0@.
)?( DELTA DB 60 Dup
Delta60ByteA
line:
) DB 5 , 4 , 3 DUP ( 2 , 3 DUP ( 0 ) , 1
Line
DB 5 , 4 , 2,0,0,0,1,2,0,0,0,1,2,0,0,0,1
Line
AA
Byte
+1ACWord+2
CS(S =1CByte
= 2
SC)WordN
+( N - 1) * SAN A +
(N - 1) S
:1025 W)?(
DW 100 Dup
W + 9 x 2 = W + 18
25 W + 24 x 2 = W + 48
=*2
) W + (10 - 1
= W + (25 - 1) * 2
AX , W + 18
A x , W + 48
W + 18 , A x
MOV
XCHC
MOV
.CAC
AN
:
Sum = 0
M = 0
Repeat
]Sum = sum + A [M
M = M+1
Until
M = N
?
.
MODES
ADDRESSING
A
:
/1Register Mode
A
MOV A x , B
/2Immediate Mode
MOV A x , 5
AxRegister5
Immediate
/3Direct Mode
A
Words MOV
Ax ,
Words
AAA?:
/4.Register Indirect Mode
ASI
A BXADIABP
APointer
:
][Register
DI , SI , BXCDSBPC
.SS
:
C= 0100h
SI0100h1234h
]AX , [SI
MOV
A100hSIDS: 0100A
()1234hAX(A)AX = 1234h
MOV AX , SI
0100hAX
:
A = 3000h , SI = 2000h , BX = 1000h
DIA
1000h1BACH2000h20FEh
3000h031DhAAData Segment.
AA.:
]BX, [BX
MOV
-]CX, [SI
MOV
A-
-]BX, [AX
MOV
-][SI] [DI
ADD
-]INC [DI
:
A-]BX, [BX
MOV1BAChBX
-]CX, [SI
MOV20FEhCX
]BX, [AX
MOVAX.
-][DI], [SI
ADD
/][DI
INCC3000h
031Eh
: A? WAXC
W DW 10,20,30,40,50,60,70,80,90,100
:
SI ?
2()WordCSI
:
AX , AX
SI , W
CX , 10
]AX , [SI
XOR
LEA
MOV
ADDNOS :
ADD
ADD SI ,2
LOOP ADDNOS
: AC?REVERSEN
Words( ).
: CN N/2
ACS1CD1
SICADIC@.
DI2CSI
, SI
2DI(.)Words
REVERSE
PROC
: SI
)DI = SI + 2 (n - 1
Cx = n/2
;
;
- S
; Outputs : SI
Push
Push
Push
Push
Push
@
Cx = n
Bx = n
; Inputs
BX
AX
BX
CX
SI
DI
;
;
DI , SI
Cx , Bx
BX
BX , 1
DI , Bx
Cx , 1
]AX , [SI
]AX , [DI
[SI],
AX
SI ,2
DI , 2
XCHg_Loop
DI
SI
CX
BX
AX
ENDP
; D1
Mov
Mov
Dec
SHL
ADD
ShR
XCHG_Loop:
Mov
XCHC
Mov
ADD
Sub
Loop
Pop
Pop
Pop
Pop
Pop
RET
REVERSE
+ 2
C:
] [ Register +Displacement
] [ Displacement + Register
[ Register ] +Displacement
] Displacement + [ Register
] Displacement [ Register
AABXBPSI CDIABXASI
ADIDSCACBPSS
C.
CBXABPBasedIndexedC
SIA.DI
C WWord ArrayABX
4W + 4AX
]AX , W [ BX
MOV
:
] AX , [ W + BX
] AX , [ BX + W
] AX , W +[ BX
AX , [ BX ] + w
@ASI WArray
MOV
MOV
MOV
MOV
.WordA
W + 2AX:
] AX , [ SI + 2
] AX , [ 2 + SI
] AX , 2 + [ SI
AX , [ SI ] + 2
] AX , 2 [ SI
MOV
MOV
MOV
MOV
MOV
A()?W
AXC:DW 10,20,30,40,50,60,70,80,90,100
:
AX , AX
BX , BX
CX , 10
] AX , w [ BX
XOR
XOR
MOV
ADDNOS:
ADD
ADD BX , 2
LOOP ADDNOS
C2SI A
Words
A Alpha:
A:
ALPHA
DW
SI =4, DI = 1A1084h
00022BACh.0004
AC
:
] AX , [ALPHA + BX
] BX , [ BX+ 2
] CX , ALPHA [ SI
] AX , -2 [ SI
] BX , [ALPHA + 3 + DI
AX , [ BX ] 2
] BX , [ALPHA + AX
MOV
MOV
MOV
MOV
MOV
MOV
ADD
a.
b.
c.
d.
e.
f.
g.
A
B
C
D
E
F
G
0456h
2BACh
0789h
1084h
0789h
APLPHA +2
2+2=4
ALPHA + 4
-2 + 4 = 2
ALPHA + 3 + 1
AX
PTR:LABEL
AA
ByteAWORD. C
A
WORD.
AX , 1
Byte
AL , 1
MOV
MOV
[ BX ] , 1
MOV
wordAByte.
AByte
PTR [ BX ] , 1
AWORD
PTR [ BX ] , 1
BYTE
MOV
WORD
MOV
:MSGT
:
:
Register indirect mode
MOV
:Index Mod
SI, SI
mSG[ SI ] , T
XOR
MOV
PTRAMsg
PTR:
PTR :
Type PTR Address_Expression
TypeByteAWORDADwordAddress_ExpressionDBA DW
ADD
C:
1Ah
52h
DB
DB
DOLLARS
CENTS
CADollarsALCentsAH
A
ILLEGAL
AX , DOLLARS
MOV
AByteWordC
521AhAX
:LABEL
LABEL
:
MONEY
LABEL
WORD
DOLLARS
DB
1Ah
CENTS
DB
52h
MONEYWordDOLLARS
CENTSByte.
Ax , Money
MOV
AL , DOLLARS
AH , CENTS
: :
MOV
MOV
.DATA
DW
LABEL
DW
LABEL
DB
DB
1234H
BYTE
5678H
WORD
9AH
0BCH
A
B
C
C1
C2
MOV AX , B
1
2
MOV AH , B
MOV CX , C
78h
0BC9Ah
5678h
9Ah
0BC9AH
Segment Override
RegistersBX SIDI
.DS
@:
]Segment_Register : [ Pointer_Register
]Ax , ES : [SI
MOV
ESSICAX
A
.
CX
.
:
MOV
MOV
MOV
MOV
BP , SP
]AX , [ BP
]BX , [ BP + 2
]CX , [ BP + 4
::
. C
Select Sort
N
:A] A [1C]A [N
]A [NIC- 1
:A] A [ 1C]A [N - 1
]A [N-1IC- 2
:N - 1A] [I
AC]A [2
]A [1
:
2
1
21
21
16
40
16
40
40
21
16
40
21
16
40
21
16
:
i = N
For N - 1 Times Do
Find the position K of the Largest element among A [1] .. A [ I ]
SWAP A [K] and A [ 1 ]
I : = I - 1
End_For
:
SELECT
PROC
;SORTS A BYTE ARRAY BY THE SELECTSORT METHOD
;INPUTS:SI= ARRAY OFFSET ADDRESS
;
BX=NUMBER OF ELEMENTS
;OUTPUTS:SI=OFFSET OF SORTED ARRAY
;USES:SWAP
PUSH
BX
PUSH
CX
PUSH
DX
PUSH
SI
DEC
JE
MOV
SORT_LOOP:
MOV
MOV
MOV
MOV
FIND_BIG:
INC
CMP
JNG
MOV
MOV
NEXT:
LOOP
CALL
DEC
JNE
END_SORT:
PUSH
PUSH
PUSH
PUSH
BX
END_SORT
DX , SI
SI
CX
DI
AL
,
,
,
,
DX
BX
SI
[DI]
SI
[SI], AL
NEXT
DI , SI
AL , [DI]
FIND_BIG
SWAP
BX
SORT_LOOP
SI
DX
CX
BX
ENDP
SELECT
PROC
;INPUT: SI=ONE ELEMENT
;
DI=OTHER ELEMENT
;OUTPUT:EXCHANGED ELEMENTS
PUSH
AX
MOV
]AL , [SI
XCHG
]AL , [DI
MOV
[SI] , AL
POP
AX
RET
ENDP
SWAP
SWAP
?SELECTASI
NBX.
A
Debug:
C?
-GC
AX=100D BX=0005 CX=0049 DX=0000 SP=0100 Bp=0000 SI=0004 DI=0000
DS=100D ES=0FF9 SS=100E CS=1009 IP=000C NV UP EI PL NZ NA PO NC
1009:000C E80400 CALL 0013
??
-D 4 8
100D:0000 05 02 01 03- 04
??
-GF
AX=1002 BX=0005 CX=0049 DX=0000 SP=0100 Bp=0000 SI=0004 DI=0005
DS=100D ES=0FF9 SS=100E CS=1009 IP=000F NV UP EI PL ZR NA PE NC
1009:000F B44C MOV AH , 4C
-D 4 8
100D:0000 01 02 03 04- 05
][ I, 1
B18
.1_Major Order
Row
B34A10203040
,50,60,708090,100 110,120
.
_
10, 20,30,40
-:
20 , 60 , 100
DW
50 , 60 , 70 , 80
90 , 100, 110 , 120
DW
DW
DW
10 , 50 , 90
DW
DW
DW
30 , 60 , 110
40 , 80 , 120
A_.
A_C
_C
.
CC
ACA?C
_?_
:
AAMN_A
S(AS=1
ByteS=2Word).
] =A [ I , j
:
.1CAI
.2C j
A
N
+ s * N
+2* N*S
+ (I - 1 ) N * S
:
j( j - 1) * s((
)j - 1) A [ I ,
] j_
A + ( i - 1) N s + ( j - 1 ) s
C_A A
]] [ I ,
A + ( j - 1) M S + ( I - 1 ) s
AMN_
.1AI
.2Aj
.3
.1AI
A + (I - 1) + N S
.2Aj
A + ( j - 1) S
.3
N x S
:based - indexed
.1(BXA BP)
.2(SIA)DI
.3
.4(A)
CBXDS
CBPSS
1.
2.
3.
4.
A WBX2SI
.4W+6
Ax
]AX , W [ BX] [ SI
]MOV AX , W [ BX+ SI
] MOV AX , [ W + BX + SI
MOV AX , [ BX + SI ] W
MOV
: A57Awords
_Based - Indexed?: .1
0
.20
: -1A
A + ( 3 - 1) x 7 x 2 = A + 2 x 7 x 2 = A + 28
MOV Bx, 28
XOR S I ,SI
MOV Cx , 7
CLEAR :
MOV A [ Bx] [SI] , 0
ADD SI , 2
LOOP CLEAR
-2A
A + ( 4 - 1) x 2 = A + 3 x 2 = A + 6
14(7x2)
A [ Bx] [SI] , 0
MOV SI , 6
XOR BX ,BX
MOV Cx , 5
CLEAR :
MOV
ADD BX , 14
LOOP CLEAR
XLAT:
.XLAT(
)ByteAL
BX:
.1ALCBX
.2AL
AAL0hFhASCII
(6h36h0ch42hAB).....
TABLE
DB
30h, 31h,32h, 33h, 34,35h, 36h, 37h, 38h, 39h
DB
41h, 42h , 43h, 44h, 45h, 46h
(chC)c
AL , och
Mov
(@)
(@)A.
.
TITLE secret message
.MODEL SMALL
.STACK 100H
.DATA
CODE_KEY
DB 65 DUP(' '),'XQPOGHZBCADEIJUVFMNKLRSTWY'
DB 37 DUP (' ')
DECODE_KEY DB 65 DUP(' '),'JHIKLQEFMNTURSDCBVWXOPYAZG'
DB 37 DUP (' ')
CODED
DB 80 DUP ('$')
PROMPT
DB 'ENTER A MESSAGE :' , 0DH , 0AH , '$'
CRLF
DB 0DH , 0AH , '$'
.CODE
MAIN PROC
; initialize DS
MOV
AX,@DATA
MOV
DS,AX
;print user prompt
LEA
DX,PROMPT
MOV
AH,09H
INT
21H
;READ AND ENCODE MESSAGE
MOV
AH , 1
LEA
BX , CODE_KEY
LEA
DI , CODED
WHILE_:
INT
21H
CMP
AL , 0DH
JE
END_WHILE
XLAT
MOV
[DI],AL
INC
DI
JMP
WHILE_
END_WHILE:
;GOTO NEW LINE
MOV
AH , 9
LEA
DX , CRLF
INT
21H
;PRINT ENCODED MESSAGE
LEA
DX,CODED
INT
21H
;GOTO NEW LINE
LEA
DX,CRLF
INT
21H
;DCODE MESSAGE AND PRINT IT
AH , 2
BX , DECODE_KEY
SI , CODED
MOV
LEA
LEA
WHILE2:
MOV
]AL , [SI
CMP
'AL ,'$
JE
END_WHILE2
XLAT
MOV
DL ,AL
INT
21H
INC
SI
JMP
WHILE2
END_WHILE2:
;return to DOS
MOV AH,4CH
INT 21H
MAIN
ENDP
END MAIN
.1:
AX0500h
BX1000h
SI1500h
DI2000h
1000h0100h
15000150h
20000200h
30000400h
40003000h
BetaWord1000h
(A
)
.2CA
A
B
C
Msg
ABXC.A
AH , BYTE PTR A
AX , word PTR B
AX , C
AX , Msg
AH , BYTE PTR C
.3BP(push)pop
MOV
MOV
MOV
MOV
MOV
abcde-
/AA
/A5CST_ARR
ST_ARRST_ARR+2
.4CA10wordB
Byte
/A
(A] A [ I
]A[1 + 1)]A [ 10
].A[1
/DXA.
/AB.SIEC.C
'E1 cf
.5AC?Find_ijI , J
Ij_?
IAXiBXNCx
DX. DX.
:
.6C?BUBBLE
Sort
Bubble?
SIBX.
A
BLANK.??Bubble
.
? 1 2
1 2
6 537
3 567
:Bubble
AN
: J2CN-1 ] A [J ]C A [j - 1]A [J ] < A[ J 1
AN-1
:
:N - 1C]A[ 2] < A [1] A [ 2] A [ 1
.7:
, 67 , 54 , 9 ,8 , 31
, 30 , 50 , 59 ,42 , 53
, 65 , 73 , 85 ,18 , 90
CLASS
DB
Ali
DB
HASSAN
DB
AHMED
?7
AA
.8A100
(_) ?
. .ESC
:
?A
A
?D
AD
?B
ABD
?a
ABDa
>?<esc
.9AC?PRINTHEXXLATBX
. ?4
?IN_HEX?.??
PRINTHEXC.
String Instructions
?.
A
>A
>A
>A
>A
A
?
AA
A.
:DF
A
Flags
Control
ADI , SI
. . C
DIA SICA
C0
.DF
C1 A
C.
CLD ; clear Direction flag
String
:Moving
C:
Hello
) ? ( 5 Dup
String1
String2
DB
DB
A
A.
MOVSBA.
DS:SICES:DI
.ADI:SIC
0.()1
()2:
MOV AX ,@DATA
MOV DS, AX
MOV ES, AX
LEA SI , String1
LEA DI , String2
CLD
MOVSB
MOVSB
:
MOVSB AA.
:REP
MOVSB.
()MOVSBCX
REP MOVSB
MOVSBN.CX
MOVSB.CX=0
SI , String1
DI , String2
CX, 5
MOVSB
CLD
LEA
LEA
MOV
REP
:
A?String1CString 2
.
SIC(A)DIC
.SI(1
)ADI2C
1MOVSB.1
SI, String1 + 4
DI, String2
5
CX,
LEA
LEA
STD
MOV
MOVE:
MOVSB
ADD DI ,
LOOP MOVE
:MOVSW
MOVSBWORDByte
DS: SICES:DIC
.ACSI
DI,2
(DF = A= 1
)DF
:
:
? 10,20,40,50,60,
ARR DW
C30.40 , 20ADS
ESC.
:
60 , 50,40C30
SI , ARR + 8h
; SI Points to 60
DI , ARR +0Ah
? ; DI Points to
CX,3
MOVSW
WORD PTR [DI], 30
:Storing String
STD
LEA
LEA
MOV
REP
MOV
STOSBAL
ES:DI.DICDF=0
CCDF=1
STOSWAXC
ES: DI.ADI
.
AString1
LEA
DI, String1
MOV AL, A
CLD
STOSB
:
1?21h?.?
STOSB.
?READ_STR?
Carriage Return.
???DI
?CBX.CA
CBack_Space
?:
Chars_Read = 0
Read a Character
While character is Not a carriage Return Do
If character is a Back_Space Then
Chars_Read = Chars_Read - 1
Remove Previous character from String
Else
Store character in String
Chars_Read = Chars_Read + 1
End_If
Read a character
End_While
READ_STR
PROC NEAR
;READS AND STORES A STRING
;INPUT:
DI ODFFSET OF THE STRING
;OUTPUT:
DI OFFSET OF THE STRING
;
BX=NUMBER OF CHARACTERS READ
PUSH
DX
PUSH
DI
CLD
BX , BX
AH , 1
21H
XOR
MOV
INT
WHILE1:
CMP
AL , 0DH
JE
END_WHILE1
;IF CHARACTER IS BACHSPACE
CMP
AL , 8H
ELSE1
DI
BX
READ
JNE
DEC
DEC
JMP
BX
STOSB
INC
ELSE1:
READ:
21H
WHILE1
DI
AX
ENDP
INT
JMP
END_WHILE1:
POP
POP
RET
READ_STR
String
:Load
LODSBAL
DS:SI.ASI1
.
LODSWAX
DS:SI.ASI2
.
:
?Disp_StrCSI
BX.
For count times Do
Load a String Character into Al
Move it to DL
Output Character
End_For
Proc
SI : offset of the String
BX : No of Characters to Display
None
AX
BX
DISP_STR
; inputs
;
; Outputs
PUSH
PUSH
PUSH
PUSH
PUSH
MOV
JCXZ
CLD
MOV
CX
DX
SI
CX, BX
P_EXIT
AH , 2h
TOP:
LODSB
MOV
INT
LOOP
DL , AL
21h
TOP
P_EXIT:
POP
POP
POP
POP
POP
RET
DISP_STR
SI
DX
CX
BX
AX
ENDP
:Scan String
SCASB A
AL.ES:DIAL
.A
DI .
SCASWAXAL
SCSABA?.
ABC
DB
AX, @ DATA
ES, AX
DI , String1
AL, B
;Scan first byte
; Scan second Byte
String1
:
MOV
MOV
LEA
MOV
CLD
SCASB
SCASB
0A
41hA42h.B
.
CX
SCASB
REPNZ
CXCAX
CX A
.
:
ConsonantsA
.Vowels
:
initialize Vowels_Count and Consonant_Count to zero
Read and Store a String
Repeat
load a String Character
IF it is a Vowel Then
Increment Vowel_Count
else if it is a Consonant Then
Increment Consonant_Count
End_IF
Until End of string
Display Vowels_Count and Consonant_Count
.MODEL SMALL
.STACK 100H
.DATA
STRING DB
80 DUP(0)
VOWELS DB
'AEIOU'
CONSONANTS
DB
'BCDFGHJKLMNPQRSTVWXYZ'
OUT1
DB
0DH,0AH,'VOWELS= $'
OUT2
DB
CONSONANTS= $'
VOWELCT
DW
0
CONSCT DW
0
.CODE
MAIN PROC
; initialize DS
MOV
AX,@DATA
MOV
DS,AX
MOV
ES,AX
LEA
DX,STRING
CALL READ_STR
MOV
SI,DI
CLD
REPEAT:
LODSB
LEA
DI,VOWELS
MOV
CX ,5
REPNE SCASB
JNE
CK_CONST
INC
VOWELCT
JMP
UNTIL
CK_CONST:
LEA
DI,CONSONANTS
MOV
CX,21
REPNE SCASB
JNE
UNTIL
INC
CONSCT
UNTIL:
DEC
BX
JNE
REPEAT
;OUTPUT NO OF VOWELS
LEA
DX,OUT1
MOV
AH ,9
INT
21H
MOV
AX,VOWELCT
CALL OUTDEC
;OUTPUT NO OF CONSONANTS
LEA
DX,OUT2
MOV
AH ,9
INT
21H
MOV
AX,CONSCT
CALL OUTDEC
;EXIT TO DOS
MOV
AH,4CH
INT
21H
MAIN
ENDP
INCLUDE PROCFILE.ASM
END
MAIN
:Compare String
COPSBES:DI
DS:SI .
, SI
DI .
CMPSW.Words
String1
DB
ACD
DB
ABC
Ax, @ DATA
DS, Ax
ES, Ax
A
B
D
SI, String1
DI, String2
;sub A from
;sub B from
;sub C from
String2
MOV
MOV
MOV
CLD
LEA
LEA
CMPSB
CMPSB
CMPSB
CSTR12C
.
CX,10
SI, STR1
DI, STR2
CMPSB
STR1_FIRST
STR2_FIRST
AX, 0
EXIT
AX, 1
Exit
AX,2
MOV
LEA
LEA
CLD
REPE
JL
JG
MOV
JMP
STR1_FIRST:
MOV
JMP
STR2_FIRST
MOV
EXIT:
:
AAC
A:
ABC
CAB
ABABCA
DB
DB
DB
SUB1
SUB2
MAINST
ABC
ABABCA
SUB1
MAINST
ABC
ABABCA
SUB1
MAINST
ASUB1?A
?
?
ABC
ABABCA
SUB1
MAINST
SUB1SUDSTRING
CC
.CA
STOP
STOP = MAINST + Length of MAINST - Length of sub string
A:
()
ES:DI
DS:SI
MOVSB
MOVSW
ES:DI
DS:SI
CMPSB
CMPSW
ES:DI
AL OR AX
STOSB
STOSW
AL OR AX
DS:SI
LODSB
LODSW
ES:DI
AL or AX
SCASB
SCASW
:
1- ASI100h100h10h
ADI00h2101h15h
20h
AAX4142h200h
A DF0201h25h
, SI
STOSB
LODSW
.2
cf-
DL
MOVSW
LODSB
be-
MOVSB
STOSW
a
d-
FGHIJ
ABCDE
5
)?( DUP
DB
DB
DB
STRING1
STRING2
.3
A?
ABCDEFGHIZ
A?
.4
0
this is an ASCIIz String ,
DB
STR
C?LengthDX
CX.
A:
.5
c- LODSB
.6:
b- STOSB
e- CMPSB
MOVSB
SCASB
ad-
String DB TH *S* AR
* 'E
.7
:
String1 DB TH I S I S A T E S T
)?( String2 DB 11 DUP
?CC.
:
.8 A
" MADAM I
AM ADAM.
A? ()
. ?.
.9:
123
12465
131
?A10.
.10 ?AA
.11 C?INSERTSTRING1
STRING2.
:
SI
DI
BX
CX
AXC
DI
BX
?N??INSERT
.12C?DELETEN
.
:
DI
BX
CX
SI?
DI
BX
A?
.??DELETE.
Practical Applications
? A
:
30h?Int 21hC
6.22AC
Minor622 ?
ALAH.
====================================================================;
;
program: DosVer.asm
;
purpose: gets the DOS Version using
;interrupt 21h function 30h
;
purpose: gets the DOS Version using
interrupt 21h
function 30h
;
input : None
;
output : Minor and Major versions
;
usage : OUTDEC procedure in procfile.asm
;
update :
====================================================================;
.MODEL SMALL
.STACK 100H
.DATA
CR
EQU 0DH
LF
EQU 0AH
'?' MAJOR DB
'?' MINOR DB
MSG
DB 'GET DOS VERSION:INT 21H FUNCTION 3OH',CR,LF,'MS-DOS
'Version ','$
'DB CR,LF,'MAJOR VERSION NUMBER IS :$
'DB CR,LF,'MINOR VERSION NUMBER IS :$
MSG1
MSG2
.CODE
MAIN PROC
;initialization
MOV AX,@DATA
MOV DS,AX
;get dos version
MOV AH,30H
INT 21H
MOV MAJOR,AL
MOV MINOR ,AH
;display results
LEA DX,MSG
MOV AH,9h
INT 21H
LEA DX,MSG1
MOV AH,9h
INT 21H
XOR AX,AX
MOV AL,MAJOR
CALL OUTDEC
LEA DX,MSG2
MOV AH,9h
INT 21H
XOR AX,AX
MOV AL,MINOR
CALL OUTDEC
;return to dos
MOV AH,4CH
INT 21H
MAIN ENDP
Include Procfile.asm
END
MAIN
:
Int 21h?2Ah
:?
;====================================================================
;
program: sysDate.asm
;
purpose: gets the year,month,day,and day of the week
;
from the system using interrupt 21h function 2Ah
;
Calling Registers : AH = 2A
;
Return registers:
;
CX : year(1980 - 2099)
;
DH : month(1 - 12)
;
DL : day(1 - 31)
;
AL : day of the week (0 =Sunday, 1 =Monday,etc )
;
usage : OUTDEC procedure in procfile.asm
;
update : 27/11/2000
;====================================================================
.MODEL
SMALL
.STACK
100H
.DATA
CR
EQU
0DH
LF
EQU
0AH
MSG
DB
'GET SYSTEM DATE :INT 21H FUNCTION 2A',CR,LF
DB
'YEAR :$'
YEAR DW
'?'
MSG2 DB
CR,LF,'MONTH :$'
MONTH DB
'?'
MSG3 DB
CR,LF,'DAY
:$'
DAY
DB
'?'
MSG4 DB
CR,LF,'DAY OF WEEK:','$'
Dweek DB
'?'
SUN
DB
'Sunday $'
MON
DB
'Monday $'
TUES DB
'Tuesday $'
WEDN DB
'Wednesday $'
THURS DB
'Thursday $'
FRID DB
'Friday $'
SAT
DB
'Saturday $'
.CODE
MAIN PROC
;initialization
MOV
AX,@DATA
MOV
DS,AX
;get system date
MOV
AH,2AH
INT
21H
;assign values of date
MOV
YEAR,CX
MOV
MONTH,DH
MOV
DAY,DL
MOV
Dweek,AL
;
MOV
DL,dWEEK
MOV
AL,2H
INT
21H
;display values of date
LEA
DX,MSG
MOV
AH,09H
INT
21H
;year
MOV
AX,CX
CALL OUTDEC
;month
LEA
DX,MSG2
MOV
AH,09H
INT
21H
XOR
AX,AX ;clear AH and AL
MOV
AL,MONTH
CALL OUTDEC
;day
LEA
DX,MSG3
MOV
AH,09H
INT
21H
XOR
AX,AX
MOV
AL,DAY
CALL OUTDEC
; display the equivalent day of week
LEA
DX,MSG4
MOV
AH,09H
INT
21H
CMP
Dweek,0
JE
ZERO
CMP
Dweek,1
JE
ONE
CMP
Dweek,2
JE
TWO
CMP
Dweek,3
JE
THREE
CMP
Dweek,4
JE
FOUR
CMP
Dweek,5
JE
FIVE
CMP
Dweek,6
JE
SIX
JMP
END_CASE
ZERO:
LEA
DX,SUN
JMP
DISPLAY_
ONE:
LEA
JMP
DX,MON
DISPLAY_
TWO:
LEA
JMP
THREE:
LEA
JMP
FOUR:
LEA
JMP
FIVE:
LEA
JMP
SIX:
LEA
DISPLAY_:
MOV
INT
END_CASE:
MOV
INT
MAIN ENDP
Include
END
MAIN
DX,TUES
DISPLAY_
DX,WEDN
DISPLAY_
DX,THURS
DISPLAY_
DX,FRID
DISPLAY_
DX,SAT
AH,09H
21H
AH,4CH
21H
procfile.asm
:
Int
21h?2Ch
:
;====================================================================
;
program: sysTime.asm
;
purpose: gets the hour,minutes,seconds,and hundredth of seconds
;
from the system using
;
calling registers: AH = 2Ch
;
return registers: CH =Hour(O - 23)
;
CL =Minutes(O - 59)
;
DH =Seconds(O - 59)
;
DL =Hundredths of seconds(O - 99)
;
input : None
;
output : hour,minutes,seconds,and hundredth of seconds
;
usage : OUTDEC procedure in procfile.asm
;
update : 28/11/2000
;====================================================================
.MODEL SMALL
.STACK 100H
.DATA
CR
EQU 0DH
LF
EQU 0AH
MSG
DB 'GET SYSTEM TIME :INT 21H FUNCTION 2C',CR,LF,'$'
TM
DB ?
.CODE
MAIN PROC
;initialization
MOV
AX,@DATA
MOV
DS,AX
;print msg
LEA
DX,MSG
MOV
AH,09H
INT
21H
;get system time
MOV
AH,2cH
INT
21H
;assign values of time
MOV
BX,DX
; store sec and hundred of secs from DX
XOR
AX,AX
; ax:=zero
MOV
AL,CH
;hour
CMP
AL,12d
JG
GREAT
MOV
TM,'a'
jmp
CONTINUE
GREAT:
SUB
AL,12
MOV
TM,'p'
CONTINUE:
CALL OUTDEC
MOV
DL,':'
MOV
Ah,02H
INT
21H
AND
AX,0
;ax:=zero
MOV
AL,CL
;minutes
CALL OUTDEC
MOV
DL,':'
MOV
Ah,02H
INT
21H
MOV
AX,0
;ax:=zero
MOV
AL,BH
;seconds
CALL OUTDEC
MOV
DL,'.'
MOV
Ah,02H
INT
21H
MOV
AX,0
; ax:=zero
MOV
AL,Bl
;hundred of seconds
CALL OUTDEC
;print space
MOV
DL,' '
MOV
AH,02H
INT
21H
MOV
DL,TM
MOV
AH,02H
INT
21H
;return to dos
MOV
AH,4CH
INT
21H
MAIN ENDP
Include ProcFile.asm
END
MAIN
:
Int
21h?2Bh
:
TITLE Setdate.asm
;====================================================================
;
Purpose: sets the System date using interrupt 21h
;
function 2Bh
;
Calling Registers :
;
AH = 2B H
;
CX : year(1980 - 2099)
;
DH : month(1 - 12)
;
DL : day(1 - 31)
;
Return Registers :
;
AL = 00 if success to change the system date
;
usage : INUNDEC procedure in procfile.asm
;
update : 27/11/2000
;====================================================================
.MODEL SMALL
.STACK 100H
.DATA
LF EQU 0DH
CR EQU 0AH
prompt
DB
LF,CR,'Enter The Day
: $'
MSG_M
DB
LF,CR,'Enter The Month : $'
MSG_Y
DB
LF,CR,'Enter The Year(1980..2099) : $'
MSGSUC
DB
LF,CR,'Your Date Is Changed.$'
MSGFAIL
DB
LF,CR,'Your Date Is Not Changed.'
DB
LF,CR,'Do You Want To Try Again Y/N? $'
MSGINV
DB
LF,CR,'Invalid Date...'
DB
LF,CR,'Do You Want To Try Again Y/N? $'
year
DW
'?'
month
DB
'?'
day
DB
'?'
.CODE
MAIN PROC
MOV
AX,@DATA
MOV
DS,AX
begin :
; Display Prompy Message
MOV
AH,9
LEA
DX , prompt
INT
21H
; Read the Day
CALL INUNDEC
CMP
AL , 1
JL
begin
CMP
AL , 31D
JG
begin
MOV
DAY , AL
@month :
MOV
AH , 9
LEA
DX , MSG_M
INT
21H
; Read the Month
CALL INUNDEC
CMP
AL , 1
JL
@MONTH
CMP
AL , 31D
JG
@MONTH
;CALL INUNDEC
MOV
MONTH , AL
@YEAR :
MOV
AH,9
LEA
DX , MSG_Y
INT
21H
; Read the Year
CALL INUNDEC
CMP
AX , 1980D
JL
@YEAR
CMP
CX , 2099D
JG
@YEAR
; Set Date using Function
MOV
CX , AX
;
MOV
DH , MONTH
;
MOV
DL , DAY
;
MOV
AH , 2BH
INT
21H
;IS DATE CHANGED ?
CMP
AL , 00H
JNE
AGAIN
MOV
AH , 9H
LEA
DX , MSGSUC
INT
21H
JMP
EXIT
again:
MOV
AH , 9H
LEA
DX , MSGFAIL
INT
21H
answer: ;ANSWER Y/N
MOV
AH , 1H
INT
21H
CMP
AL , 'Y'
JE begin
CMP
AL , 'y'
JE
begin
CMP
AL , 'n'
JE
EXIT
CMP
AL , 'N'
JE
EXIT
JMP
ANSWER
exit:
MOV
AH , 4CH
INT
21H
MAIN ENDP
include procfile.asm
END
MAIN
2Bh
CX = The Year
DH = The Month
DL = The Day
:
Int 21h?2Dh
:
TITLE Settime.asm
;====================================================================
;
Purpose: sets the System time using interrupt 21h
;
function 2Dh
;
Calling Registers :
;
AH = 2D H
;
CH : Hours (0..23)
;
CL : Minutes (0..59)
;
DH : Seconds (0..59)
;
Return Registers :
;
AL = 00 if success to change the system time
;
usage : INUNDEC procedure in procfile.asm
;
update : 27/11/2000
;====================================================================
.MODEL SMALL
.STACK 100H
.DATA
LF EQU 0DH
CR EQU 0AH
PROMPT DB
LF,CR,'Enter The Hour(0..23) : $'
MSG_M
DB
LF,CR,'Enter The Minute(0..59) : $'
MSG_S
DB
LF,CR,'Enter The Second(0..59) : $'
MSGSUC DB
LF,CR,'Your time is changed.$'
MSGFAIL DB
LF,CR,'Your Time Is Not Changed.'
DB
LF,CR,'Do You Want To Try Again Y/N? $'
MSGINV DB
LF,CR,'Invalid Time...'
DB
LF,CR,'Do You Want To Try Again Y/N? $'
HOUR
DB
'?'
MINUTE DB
'?'
.CODE
MAIN PROC
MOV
AX,@DATA
MOV
DS,AX
begin :
; DISPLAY PROMPT MESSAGE
MOV
AH , 9
LEA
DX , prompt
INT
21H
; Read The Hour
CALL INUNDEC
MOV
HOUR , AL
CMP
AL , 23D
JG
begin
@minute:
MOV
AH , 9
LEA
DX , MSG_M
INT
21H
; Read the Minute
CALL INUNDEC
CMP
AL , 59D
JG
@minute
MOV
MINUTE , AL
@second :
MOV
AH,9
LEA
DX , MSG_S
INT
21H
; Read The Second
CALL INUNDEC
CMP
AL , 59D
JG
@second
; Set Time using Function 2Dh
MOV
DH , AL
; DH = Seconds
MOV
CL , MINUTE
; CL = Minutes
MOV
CH , HOUR
; CH = Hour
MOV
AH , 2DH
INT
21H
;IS DATE CHANGED ?
CMP
AL , 00H
JNE
AGAIN
MOV
AH , 9H
LEA
DX , MSGSUC
INT
21H
JMP
EXIT
again:
MOV
AH , 9H
LEA
DX , MSGFAIL
INT
21H
answer: ;ANSWER Y/N
MOV
AH , 1H
INT
21H
CMP
'AL , 'Y
JE
begin
CMP
'AL , 'y
JE
begin
CMP
'AL , 'n
JE
EXIT
CMP
'AL , 'N
JE
EXIT
JMP
ANSWER
exit:
MOV
AH , 4CH
INT
21H
MAIN ENDP
include procfile.asm
END
MAIN
:
A
(SVGA
AB8000h)ASCII
Attribute.
?ACZ(?)
9??
C.
:Write:
program
;displayrun
;uses crt,Dos
var
;hs, ms, ss, hunds,he, me, se, hunde : Word
;ch:char
;BX, Counter:integer
begin
;clrscr
;)TextColor(blue
;)TextBackground(white
;)GetTime(hs,ms,ss,hunds
FOR BX:= 1 TO 9 DO
for ch:='A' to 'Z' do
for counter :=1 to 2000 do
;)write(ch
GetTime(he,me,se,hunde);
writeln;
writeln('Started at ',hs,':',ms,':',ss,'.',hunds);
writeln('Finished at ',he,':',me,':',se,'.',hunde);
writeln('Run time is ',he-hs,':',me-ms,':',se-ss,'.',hunde-hunds);
repeat until keypressed;
end.
::
program
displayrun;
uses crt,Dos;
var
hs, ms, ss, hunds,he, me, se, hunde : Word;
ATRIB,ch:BYTE;
BX, Counter:integer;
begin
clrscr;
TextColor(blue);
TextBackground(white);
GetTime(hs,ms,ss,hunds);
ATRIB:=$17;
FOR BX:= 1 TO 9 DO
for ch:=65 to 90 do
for counter :=0 to 2000 do
BEGIN
MEM[$B800:2*COUNTER]:=CH;
MEM[$B800:2*COUNTER+1]:=ATRIB;
END;
{
write(ch);}
GetTime(he,me,se,hunde);
writeln;
writeln('Started at ',hs,':',ms,':',ss,'.',hunds);
writeln('Finished at ',he,':',me,':',se,'.',hunde);
writeln('Run time is ',he-hs,':',me-ms,':',se-ss,'.',hunde-hunds);
end.
::
TiTle Disp_asm : Fill The screen & Compute Runtime
.MODEL SMALL
.STACK 100H
.DATA
printCh
MSGS DB
Hs
DB
Ms
DB
Scs
DB
HSs
DB
MSGe DB
He
DB
Me
DB
Se
DB
HSe
DB
MSGR DB
dw '?'
0DH,0AH,'Start Time is
'?'
'?'
'?'
'?'
0DH,0AH,'Finish Time is
'?'
'?'
'?'
'?'
0DH,0AH,'Run
Time is
$'
$'
$'
.CODE
MAIN PROC
;initialization
MOV
AX , @DATA
MOV
DS , AX
; Get start time
MOV
AH,2CH
INT
21H
MOV
Hs , CH
MOV
Ms , CL
MOV
Scs , DH
MOV
HSs , DL
MOV
AX,0B800h
;color active display page
MOV
DS,AX
MOV
AH,17H
MOV
BX,9
DISPLAY_ALL:
MOV
AL,41h
AGAIN:
MOV
DI,0
MOV
CX,2000d
;fill active display page
FILL_BUF:
MOV
[DI],AX
ADD
DI,2
LOOP FILL_BUF
;loop until done
ADD
AX,01H
CMP
AL,'Z'
JLE
AGAIN
DEC
BX
JNZ
DISPLAY_ALL
; Get finish time
MOV
AX , @DATA
MOV
DS , AX
MOV
AH,2CH
INT
21H
MOV
He , CH
MOV
Me , CL
MOV
Se , DH
MOV
HSe , DL
; display start time
MOV
AH , 9
LEA
DX , MSGs
INT
21H
XOR
AX , AX
MOV
AL , Hs
CALL OUTDEC
MOV
DL , ':'
MOV
AH , 2
INT
21H
;
XOR
AX , AX
MOV
AL , Ms
CALL OUTDEC
MOV
DL , ':'
MOV
AH , 2
INT
21H
;
XOR
AX , AX
MOV
AL , Scs
CALL OUTDEC
MOV
LEA
CALL
MOV
MOV
DL , '.'
MOV
AH , 2
INT
21H
;
XOR
AX , AX
MOV
AL , HSs
CALL OUTDEC
MOV
DL , ':'
MOV
AH , 2
INT
21H
; display finish time
MOV
AH , 9
LEA
DX , MSGe
INT
21H
XOR
AX , AX
MOV
AL , He
CALL OUTDEC
MOV
DL , ':'
MOV
AH , 2
INT
21H
;
XOR
AX , AX
MOV
AL , Me
CALL OUTDEC
MOV
DL , ':'
MOV
AH , 2
INT
21H
;
XOR
AX , AX
MOV
AL , Se
CALL OUTDEC
MOV
DL , '.'
MOV
AH , 2
INT
21H
;
XOR
AX , AX
MOV
AL , Hse
CALL OUTDEC
MOV
DL , ':'
MOV
AH , 2
INT
21H
; display run time
AH , 9
DX , MSGR
INT
21H
XOR
AX , AX
MOV
AL , He
SUB
AL , Hs
OUTDEC
DL , ':'
MOV
AH , 2
INT
21H
XOR
AX , AX
MOV
AL , Me
SUB
AL , Ms
CALL OUTDEC
MOV
DL , ':'
MOV
AH , 2
INT
21H
XOR
AX , AX
MOV
AL , Se
AL , Scs
OUTDEC
'DL , '.
AH , 2
INT
21H
AX , AX
AL , HSe
AL , HSs
OUTDEC
SUB
CALL
MOV
MOV
XOR
MOV
SUB
CALL
; dos exit
MOV
AH,4CH
INT
21H
MAIN ENDP
Include procfile.asm
END MAIN
:
A. A
==
Mc-Graw-Hill
: Terry R. Dettmann
:
QUE
: Steven Holzer
-4
: TanenBaum
Brdy Publishing
Prentice-Hall
5- : 8038680486
:
: