ARCHITECTURE AND INSTRUCTIONS

Sample Two:

Add two unpacked BCD (ASCII) strings together.

MY_DATA SEGMENT

STRING_1 DB

STRING_2 DB

MY_DATA ENDS

MY_CODE SEGMENT ASSUME

GO:MOV MOV MOV CLC CLD MOV MOV MOV JCXZ

CYCLE:LODS

ADC

AAA

STOS

LOOP

FINISH:HLT

MY-CODE ENDS END

'1','7','5','2'

;value is 2571

'3','8','1','4'

;value is 4183

CS:MY-CODE, DS:MY-DATA

 

AX,MY-DATA

;establish data segment

DS,AX

 

ES,AX

 

 

;no carry initially

SI,OFFSET STRING_1

;forward strings

;establish string pointers

DI,OFFSET STRING_2

 

CX,LENGTH STRING_1

 

FINISH

 

STRING_1

;get STRING_1 element

AL,[DI]

;add STRING_2 element

 

;correct for ASCII

STRING_2

;result into STRING_2

CYCLE

;repeat for entire element

GO

 

Sample Three:

Decimal multiplication algorithm.

MY_DATA

SEGMENT

 

A

DB

'3','7','5','4','9'

B

DB

'6'

C

DB

LENGTH (A) DUP (7)

MY_DATA

ENDS

 

MY_CODE

SEGMENT

 

 

ASSUME

CS:MY _CODE,DS:MY _DATA

GO:

MOV

AX, MY_DATA

 

MOV

ES,AX

 

CLD

 

 

MOV

SI,OFFSET A

 

MOV

DI,OFFSET C

 

MOV

CX,LENGTH A

 

AND

B,OFH

 

MOV

BYTE PTR [SI].O

 

JCXZ

FINISH

CYCLE:

LODS

A

 

AND

AL,OFH

 

MUL

AL,B

 

AAM

 

 

ADD

AL,[DI]

 

AAA

 

 

STOS

C

 

MOV

[DI].AH

FINISH:

LOOP

CYCLE

HLT

 

MY-CODE

ENDS

 

 

END

GO

;establish data segment

;forward strings ;establish pointers

;establish count ;clear upper half of b ;clear c[l]

;get ali]

;clear its high-order bits ;multiply by b ;correct for ASCII

;add to c[i] ;adjust for ASCII ;store in c[i]

;,..and c[l]

;repeat for entire string

2-41

Page 76
Image 76
Intel 210200-002 manual Add two unpacked BCD Ascii strings together