8
Write a program to calculate the total sum of five words of data. Each data value represents the yearly wages of a worker. This person does not make more than $65,555 (FFFFH) a year. The decimal data is as follows: 27345, 28521, 29533. 30105, and 32375. TITLE PROG3.1B (EXE) ADDING 5 WORDS PAGE 60,132 STSEG SEGMENT DB 64 DUP (?) STSEG ENDS ;------------------------------------------------------------------ DTSEG SEGMENT COUNT EQU 05 DATA DW 27345,28521,29533,30105,32375 ORG 0010H SUM DW 2 DUP (?) DTSEG ENDS ;-------------------------------------------------------------------- CDSEG SEGMENT MAIN PROC FAR ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG MOV AX,DTSEG MOV DS,AX MOV CX,COUNT ;CX is e kiop counter MOV SI,OFFSET DATA ;SI is the data pointer MOV AX,00 ;AX will hold the sum MOV BX,AX ;BX hold the carries BACK: ADD AX,[SI] ;add the next word to AX ADC BX,0 ;add carry to BX INC SI ;increment data pointer twice INC SI ;to point to next word DEC CX ;decrement loop counter JNZ BACK ;if not finished, continue adding MOV SUM,AX ;store the sum MOV SUM+2,BX ;store the carries MOV AH,4CH INT 21H ;go back to DOS MAIN ENDP CDSEG ENDS END MAIN

CONTOH-CONTOH 3

Embed Size (px)

DESCRIPTION

Bahasa rakitan

Citation preview

Page 1: CONTOH-CONTOH 3

Write a program to calculate the total sum of five words of data. Each data value represents theyearly wages of a worker. This person does not make more than $65,555 (FFFFH) a year. The decimal data is as follows: 27345, 28521, 29533. 30105, and 32375.

TITLE PROG3.1B (EXE) ADDING 5 WORDSPAGE 60,132STSEG SEGMENT

DB 64 DUP (?)STSEG ENDS;------------------------------------------------------------------DTSEG SEGMENTCOUNT EQU 05DATA DW 27345,28521,29533,30105,32375

ORG 0010HSUM DW 2 DUP (?)DTSEG ENDS;--------------------------------------------------------------------CDSEG SEGMENTMAIN PROC FAR

ASSUME CS:CDSEG,DS:DTSEG,SS:STSEGMOV AX,DTSEGMOV DS,AXMOV CX,COUNT ;CX is e kiop counterMOV SI,OFFSET DATA ;SI is the data pointerMOV AX,00 ;AX will hold the sumMOV BX,AX ;BX hold the carries

BACK: ADD AX,[SI] ;add the next word to AXADC BX,0 ;add carry to BXINC SI ;increment data pointer twiceINC SI ;to point to next wordDEC CX ;decrement loop counterJNZ BACK ;if not finished, continue addingMOV SUM,AX ;store the sumMOV SUM+2,BX ;store the carriesMOV AH,4CHINT 21H ;go back to DOS

MAIN ENDPCDSEG ENDS

END MAIN

Page 2: CONTOH-CONTOH 3

Assume that there is a class of five people with the following grades: 69, 7, 96, 45, and 71Find the highest grade.

TITLE PROG3.3 (EXE) CMP EXAMPLEPAGE 60,132STSEG SEGMENT

DB 64 DUP (?)STSEG ENDS;---------------------------------DTSEG SEGMENTGRADES DB 69,87,96,45,75

ORG 0008HIGHEST DB ?DTSEG ENDS;---------------------------------CDSEG SEGMENTMAIN PROC FAR

ASSUME CS:CDSEG,DS:DTSEG,SS:STSEGMOV AX,DTSEGMOV DS,AXMOV CX,5 ;set up loop counter ;MOV BX,OFFSET GRADES ;8X points to GRADE dataSUB AL,AL ;AL holds highest grade found so far

AGAIN: CMP AL,[BX] ;compare next grade to highest JA NEXT ;jump if AL still highestMOV AL,[BX] ;else AL holds new highest

NEXT: INC BX ;point to next gradeLOOP AGAIN ;continue searchMOV HIGHEST,AL ;store highest gradeMOV AH,4CHINT 21H ;go back to dos

MAIN ENDPCDSEG ENDS

END MAIN

Page 3: CONTOH-CONTOH 3

Two sets of ASCIi data have come in from the keyboard. Write and run a program to:1. Convert from ASCII to packed BCD.2. Add the multibyte packed BCD and save it.3. Convert the packed BCD result into ASCII.

TITLE PROG3.6 (EXE) ASCII TO BCD CONVERSION AND ADDITION PAGE 60,132STSEG SEGMENT

DB 64 DUP(?)STSEG ENDS;-----------------------------------------------------------------------------DTSEG SEGMENTDATA1_ASC DB ‘0649147816’

ORG 0010HDATA2_ASC DB ‘0072687188’

ORG 0020HDATA3_BCD DB 5 DUP (?)

ORG 0028HDATA4_BCD DB 5 DUP (?)

ORG 0030HDATA5_ADD DB 5 DUP (?)

ORG 0040HDATA6_ASC DB 10 DUP (?)DTSEG ENDS;------------------------------------------------------------------------------CDSEG SEGMENT MAIN PROC FAR

ASSUME CS:CDSEG,DS:DTSEG,SS:STSEGMOV AX,DTSEGMOV DS,AXMOV BX,OFFSET DATAI_ASC ;BX points to first ASCII dataMOV D1,OFFSET DATA3_BCD ;Dl points to first BCD dataMOV CX,10 ;CX holds number bytes to convertCALL CONV_BCD ;convert ASCII to BCDMOV BX,OFFSET DATA2_ASC ;BX points to second ASCII dataMOV DI,OFFSET DATA4_BCD ;DI points to second BCD dataMOV CX,10 ;CX holds number bytes to convertCALL CONV_BCD ;convert ASCII to BCDCALL BCD_ADD ;add the BCD operandsMOV SI,OFFSET DATA5_ADD ;SI points to BCD resultMOV DI,OFFSET DATA6_ASC ;DI points to ASCII resultMOV CX,05 ;CX holds count for convertCALL CONV_ASC ;convert result to ASCIIMOV AH,4CHINT 21H ;go back to DOS

MAIN ENDP;------------------------------------------------------------------------------------;THIS SUBROUTINE CONVERTS ASCII TO PACKED BCD CONV_BCD PROCAGAIN: MOV AX,[BX] ;BX=pointerforASCll data

XCHG AH,AL

Page 4: CONTOH-CONTOH 3

AND AX,0F0FH ;mask ASCII 3sPUSH CX ;save the counterMOV CL,4 ;shift AH left 4 bits SHL AH,CL ; to get ready for packingOR AL,AH ;combine to make packed BCDMOV [DI],AL ;Dl=pointer for BCD dataADD BX,2 ;point to next 2 ASCI1 bytesINC DI ;point to next BCD dataPOP CX ;restore loop counterLOOP AGAINRET

CONV_BCD ENDP;------------------------------------------------------------------------------------------;THIS SUBROUTINE ADDS TWO MULTIBYTE PACKED BCI) OPERANDS BCD_ADD PROC

MOV BX,OFFSET DATA3_BCD ;BX=pointer to operand 1MOV DI,OFFSET DATA4_BCD ;DI=pointer to operand 2MOV SI,OFFSET DATA5_ADD ;SI=pointer to sumMOV CX,05CLC

BACK: MOV AL,[BX]+4 ;get next byte to operand 1ADC AL,[DIJ+4 ;add next byte to operand 2DAA ;correct for BCD additionMOV [SI] +4,AL ;save sumDEC BX ;point to next byte of operand 1 DEC DI ;point to next byte of operand 2DEC Si ;point to next byte of sumLOOP BACKRET

BCD_ADD ENDP;-------------------------------------------------------------------------------------------- ;THIS SUBROUTINE CONVERTS FROM PADED BGD CONV_ ASC PROCAGAIN2: MOV AL,[SI] ;SIoir r BCD data

MOV AH,AL ;dtp1c Ia wipackAND AX,0F00FH ;unpackPUSH CX ;save counterMOV CL,04 ;shift right 4 bit to unpackSHR AH,CL ;the upper nibbleOR AX,3030H ;make it ASCIIXCHG AH,AL ;swap for ASCII storage convertionMOV [DI],AX ;store ASCII dataINC SI ;point to next BCD dataADD DI,2 ;point to next ASCII dataPOP CX ;restore loop counterLOOP AGAIN2RET

CONV_ASC ENDPCDSEG ENDS

END MAIN

Page 5: CONTOH-CONTOH 3

TITLE PROGRAM 4-5:KEYBOARD HIT USING INT 16H;THIS PROGRAM SOUNDS THE BELL CONTINUOUSLY UNLESS ANY KEY IS PRESSED

.MODEL SMALL

.STACK

.DATAMESSAGE DB ‘TO STOP THE BELL SOUND PRESS ANY KEY$’

.CODEMAIN PROC

MOV AX,@DATAMOV DS.AXMOV AH,09MOV DX,OFFSET MESSAGE ;DISPLAY THE MESSAGEINT 21H

AGAIN: MOV AH,02 ;SENDING TO MONITOR A SINGLE CHARMOV DL,07 ;SEND OUT THE BELL CHARINT 21HMOV AH,0l ;CHECK THE KEY PRESSINT 16H ;USING INT 16HJZ AGAIN ;IF NO KEY PRESS STAY IN THE LOOPMOV AH,41H ;IF ANY KEY PRESSED GO BACK TO DOSINT 21H

MAIN ENDPEND

Page 6: CONTOH-CONTOH 3

TITLE PROGRAM 4-6: MODIFIED VERSION OF PROGRAM 4-5;THIS PROGRAM SOUNDS THE BELL CONTLNUOUSLY UNTIL ‘Q’ OR ‘q’ IS PRESSED

.MODEL SMALL

.STACK

.DATAMESSAGE DB ‘TO STOP THE BELL SOUND PRESS 0 (or q) KEY$’

.CODEMAIN PROC

MOV AX,@DATAMOV DS,AXMOV AH,09MOV DX,OFFSET MESSAGE ;DISPLAY THE MESSAGEINT 21H

AGAIN: MOV AH,02MOV DL,07 ;SOUND THE BELL BY SENDING OUT BELL CHARINT 21HMOV AH,01 ;CHECK FOR KEY PRESSINT 16H ;USING INT I6HJZ AGAIN ;IF NO KEY PRESS KEEP SOUNDING THE BELLMOV AH,0 ;TO GET THE CHARACTERINT 16H ;WE MUST USE INT 16H ONE MORE TIMECMP AL,’Q’ ;IS IT ‘Q’?JE EXIT ;IF YES EXITCMP AL,’q’ ;IS IT ‘q’JE EXIT ;IF YES EXITJMP AGAIN ;NO. KEEP SOUNDING THE BELL

EXIT: MOV AH,4CH ;GO BACK TO DOSINT 21H

MAIN ENDPEND