Upload
daved-agustian
View
14
Download
3
Embed Size (px)
DESCRIPTION
Bahasa rakitan
Citation preview
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
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
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
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
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
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