
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
'1','7','5','2' | ;value is 2571 |
'3','8','1','4' | ;value is 4183 |
| |
;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 |
| |
ENDS |
| |
| END | GO |
;establish data segment
;forward strings ;establish pointers
;establish count ;clear upper half of b ;clear c[l]
;get ali]
;clear its
;add to c[i] ;adjust for ASCII ;store in c[i]
;,..and c[l]
;repeat for entire string