Senin, 26 April 2010

contoh program sederhana bahasa assembly

TITLE PROG7-4 CONVERT BINARY TO ASCII
PAGE 60,132
;--------------------------------------------------------------
STSEG SEGMENT D?ASTACK ‘STACK
DB 64 DUP(?)
STSEG ENDS
;--------------------------------------------------------------
DTSEG SEGMENT
BINNUM DW 246DH
ORG 10H
ASCNUM DB 5 DUP (‘0’)
DTSEG ENDS
;--------------------------------------------------------------
CDSEG SEGMEN ‘CODE
B2ASC_CON PROC FAR
ASSUME CS:CDSEG, DS:DTSEG, SS:STSEG
MOV AX, DTSEG
MOV DS, AX
MOV BX, 10 ;BX=10 THE DIVISOR
MOV SI, OFFSET ASCNUM ;SI = BEGINNING OF ASCII STRING
ADD SI, 5 ;ADD LENGTH OF STRING
DEC SI ;SI POINTS TO LAST ASCII DIGIT
MOV AX,BINNUM ;LOAD BINARY (HEX) NUMBER
BACK: SUB DX,DX ;DX MUST BE 0 IN WORD DIVISION
DIV BX ;DIVIDE HEX NUMBER BY 10 (BX=10)
OR DL, 30H ;TAG ‘3’ TO MAKE IT ASCII
MOV [SI], DL ;MOVE THE ASCII DIGIT
DEC SI ;DECREMENT POINTER
CMP AX, 0 ;CONTINUE LOOPING WHILE AX> 0
JA BACK
MOV AH,4CH
INT 21H ;GO BACK TO DOS
B2ASC_CON ENDP
CDSEG ENDS
END B2ASC_CON









TITLE PROG7-5 CONVERT ASCH TO BINARY
PAGE 60,132
;----------------------------------------------------------------------
STSEG SEGMENT PARASTACK ‘STACK’
DB 64 DUP (?)
STSEG ENDS
;----------------------------------------------------------------------
DTSEG SEGMENT
TEN DW 10
ASCNUM DB ‘09325’
STRLEN DB 5
ORG 10H
BINNUM DW 0
DTSEG ENDS
;----------------------------------------------------------------------
CDSEG SEGMENT
ASC2B_CON PROC FAR
ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG
MOV AX,DTSEG
MOV DS,AX
SUB DI, DI ;CLEAR DI FOR THE BINARY(HEX) RESULT
MOV SI,OFFSET ASCNUM ;SI = BEGINNING OF ASCII STRING
MOV BL,STRLEN ;BL = LENGTH OF ASCII STRING
SUB BH,BH ;BHO USE BX IN BASED INDEX MODE
DEC BX ;BX IS OFFSET TO LAST DIGIT
MOV CX,1 ;CX = WEIGHT FACTOR
AGAIN: MOV AL,[SI+BX] ;GETTHE ASCII DIGIT
AND AL,OFH ;STRIP OFF ‘3’
SUB AH,AH ;CLEAR AH FOR WORD MULTIPLICATION
MUL CX ;MULTIPLY BY THE WEIGHT
ADD DI,AX ;ADD IT TO BINARY (HEX)RESULT
MOV AX,CX ;MULTIPLY THE WEIGHT FACTOR
MUL TEN ;BYTEN
MOV CX,AX ; FOR NEXT ITERATION
DEC BX ;DECREMENT DIGIT POINTER
JNS AGAIN ;JUMP IF COUNTER > 0
MOV BINNUM,DI ;SAVE THE BINARY(HEX)RESULT
MOV AH,4CH
INT 21H ;GOBACKTODOS
ASC2B_CON ENDP
CDSEG ENDS
END ASC2B_CON





TITLE PROG7-6 BINARY TO DECIMAL CONVERSION MODULE
PAGE 60,132
;----------------------------------------------------------------------------------------------
;this module converts a binary (hex) number up to FFFFH to decimal
;then makes it displayable (ASCII)
;CALLING PROGRAM SETS
;AX = BINARY VALUE TO BE COl”.VERTED TO ASCII
;SI OFFSET ADDRESS WHERE ASCII VALUE TO BE STORED
;-----------------------------------------------------------------------------------------------
PUBLIC B2ASO_CON
CDSEG SEGMENT RA PUBLIC ‘CODE’
B2ASC_CON PROC FAR
ASSUME CS:CDSEG
PUSHF ;STORE REGS CHANGED BY THIS MODULE
PUSH BX
PUSH DX
MDV BX,10 ;BX=10 THE DIVISOR
ADD SI.4 ;SI POINTS TO LAST ASCII DIGIT
B2A_LOOP: SUB DX,DX ;DX MUST BE 0 IN WORD DIVISION
DIV BX ;DIVIDE HEX NUMBER BY 10 (BX1O)
OR DL30H ;TAG ‘3’ TO REMAINDER TO MAKE IT ASCII
MOV [SI],DL ;MOVE THE ASCII DIGIT
DEC SI :DECREMENT POINTER
CMP AX,0 ;CONTINUE LOOPING WHILE AX> 0
JA B2A_LOOP
POP DX ;RESTORE REGISTERS
POP BX
POPF
RET
B2ASC_CON END
CDSEG ENDS
END











TITLE PROG7-7 ASCII TO BINARY CONVERSION MODULE
PAGE 60.132
;-------------------------------------------------------------------------------------------
;this module converts any ASCII number between 0 to 65535 to binary
;CALLING PROGRAM SETS
;SI = OFFSET OF ASCII STRING
;BX = STRING LENGTh - 1 (USED AS INDEX INTO ASCII NUMBER)
;THIS MODULE SETS
;AX = BINARY NUMBER
;----------------------------------------------------------------- --------------------------
EXTRN TEN:WORD
PUBLIC ASC2B_CON
CDSEG SEGMENT PARA PUBLIC ‘CODE
ASC2B_CON PROC FAR
ASSUME CS:CDSEG
PUSHF ;STORE REGS CHANGED IN THIS MODULE
PUSH DI
PUSH CX
SUB DI,DI ;CLEAR DI FOR THE BINARY(HEX) RESULT
MOV CX,1 ;CX = WEIGHT FACTOR
A2B LOOP: MOV AL,[Sl+BX] ;GET THE ASCII DIGIT
AND AL,0FH ;STRIP OFF ‘3’
SUB AH.AH ;CLEAR AH FOR WORD MULTIPLICATION
MUL CX ;MULTIPLYBYTHE WEIGHT
ADD DI,AX ;ADD IT TO BINARY (HEX) RESULT
MOV AX,CX ;MULTIPLY THE WEIGHT FACTOR
MUL TEN ;BYTEN
MOV CX,AX ; FOR NEXT ITERATION
DEC BX ;DECREMENT DIGIT POINTER
JNS A2B_LOOP ;JUMP IF OFFSET > 0
MOV AX,DI ;STORE BINARY NUMBER IN AX
POP CX ;RESTORE FLAGS
POP DI
POPF
RET
ASC2B_CON ENDP
CDSEG ENDS
END








TITLE PROG 6-1 FIND THE AVERAGE TEMPERATURE
PAGE 60,132
;--------------------------------------------------------------------------------
STSEG SEGMENT
DB 64 DUP(?)
STSEG ENDS
;--------------------------------------------------------------------------------
DTSEG SEGMENT
SIGN_DAT DB +13,-10,+19,+14,-18,-9,+12,-9,+16
ORG 0010H
AVERAGE DW ?
REMAINDER DW ?
DTSEG ENDS
;---------------------------------------------------------------------------------
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG
MOV AX,OTSEG
MOV DS,AX
MOV CX,9 ;LOAD COUNTER
SUB BX,BX ;CLEAR BX, USED AS ACCUMULATOR
MOV SI,OFFSET SIGN_DAT ;SET UP POINTER
BACK: MOV AL,[SI] ;MOVE BYTE INTO AL
CBW ;SIGN EXTEND INTO AX
ADD BX,AX ;ADD TO BX
INC SI ;INCREMENT POINTER
LOOP BACK ;LOOP IF NOT FINISHED
MOV AL,9 ;MOVE COUNT TO AL
CBW ;SIGN EXTEND INTO AX
MOV CX,AX ;SAVE DENOMINATOR IN CX
MOV AX,BX ;MOVE SUM TO AX
CWD ;SIGN EXTEND THE SUM
IDIV CX ;FIND THE AVERAGE
MOV AVERAGE,AX ;STORE THE AVERAGE (QUOTIENT)
MOV REMAINDER,DX ;STORE THE REMAINDER
MOV AH,4CH
INT 21H ;GOBACKTODOS
MAIN ENDP
CDSEG ENDS
END MAIN






TITLE PROG6-2 ;FIND THE LOWEST TEMPERATURE
PAGE 60,132
;--------------------------------------------------------------------------------------
STSEG SEGMENT
DR 64DUP(?)
STSEG ENDS
;--------------------------------------------------------------------------------------
DTSEG SEGMENT
SIGN_DAT DB +13,-10,+19,+14,-18,-9,+12,-9,+16
ORG 0010H
LOWEST DB ?
DTSEG ENDS
;--------------------------------------------------------------------------------------
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG, DS:DTSEG, SS:STSEG
MOV AX, DTSEG
MOV DS, AX
MOV CX.8 ;LOAD COUNTER (NUMBER ITEMS - 1)
MOV SI,OFFSET SIGN_DAT ;SET UP POINTER
MOV AL,[SI] ;AL HOLDS LOWEST VALUE FOUND SO FAR
BACK: INC SI ;INCREMENT POINTER
CMP AL,[SI] ;COMPARE NEXT BYTE TO LOWEST
JLE SEARCH ;IF AL IS LOWEST, CONTINUE SEARCH
MOV AL,[SI] ;OTHERWISE SAVE NEW LOWEST
SEARCH: LOOP BACK ;LOOP IF NOT FINISHED
MOV LOWEST,AL ;SAVE LOWEST TEMPERATURE
MOV AH,4CH
INT 21H ;GO BACK TO DOS
MAIN ENDP
CDSEG ENDS
END MAIN

1 komentar:

  1. Aku coba kok gini ya ...

    ........
    **Error** ti.asm(4) Bad keyword in SEGMENT statement: D?ASTACK
    **Error** ti.asm(14) Illegal instruction
    **Error** ti.asm(16) Undefined symbol: CDSEG
    **Error** ti.asm(17) Code or data emission to undeclared segment
    **Error** ti.asm(18) Code or data emission to undeclared segment
    **Error** ti.asm(19) Code or data emission to undeclared segment
    **Error** ti.asm(20) Code or data emission to undeclared segment
    **Error** ti.asm(21) Code or data emission to undeclared segment
    **Error** ti.asm(22) Code or data emission to undeclared segment
    **Error** ti.asm(23) Code or data emission to undeclared segment
    **Error** ti.asm(24) Code or data emission to undeclared segment
    **Error** ti.asm(25) Code or data emission to undeclared segment
    **Error** ti.asm(26) Code or data emission to undeclared segment
    **Error** ti.asm(27) Code or data emission to undeclared segment
    **Error** ti.asm(28) Code or data emission to undeclared segment
    **Error** ti.asm(29) Code or data emission to undeclared segment
    **Error** ti.asm(30) Undefined symbol: CDSEG
    **Error** ti.asm(31) Code or data emission to undeclared segment
    **Error** ti.asm(32) Code or data emission to undeclared segment
    *Warning* ti.asm(34) Unmatched ENDS: CDSEG
    Error messages: 19
    Warning messages: 1
    Passes: 1
    Remaining memory: 442k


    D:\TASM>

    BalasHapus