Jump to content

assembler help

- - - - -

  • Please log in to reply
6 replies to this topic

#1
M88

M88

    Newbie

  • Members
  • Pip
  • 1 posts
Write a program in assembler TASM which is drawing (using "*" character) a right-angled triangle of desired height ranging from 1 to 22. For example if the height is 5 the triangle should look like this:

*
**
***
****
*****

Anyone can solve this?

#2
gokuajmes

gokuajmes

    Programming God

  • Members
  • PipPipPipPipPipPipPip
  • 518 posts
here is the pseudocode

int numHeight = [COLOR=DarkOrange]GetNumber()[/COLOR];
for([COLOR=DarkOrange]int i[/COLOR]=1;i[COLOR=SandyBrown]<=numHeight[/COLOR];i++)
for([COLOR=DarkOrange]int j[/COLOR]=1;[COLOR=Orange]j<=i[/COLOR];j++)
print("[COLOR=DarkOrange]*[/COLOR]");

important conditions to be checked are colored

#3
Sega

Sega

    Newbie

  • Members
  • Pip
  • 5 posts
***
*****
*******
masm

model   small


 sp1   equ 20h

 p     equ '*'

 cr    equ 13,10


.data

	mes    db     3 dup (sp1),p,cr

	       db     2 dup (sp1),3 dup (p),cr

	       db     sp1,5 dup (p),cr

	       db     7 dup (p),cr

	meslen equ $-mes


stack  256

.code

m1:

	mov AX,@data

    mov DS,AX


    mov AH,40h

    mov BX,1

    mov CX,meslen

    mov DX,offset mes

    int 21h

              

outpr:

	mov AX,4c00h

    int 21h


    end m1



#4
thuwon

thuwon

    Newbie

  • Members
  • Pip
  • 2 posts
Hello everybody,
I'm a mechatronics student who studying assembly language. I have a problem
even though, i have program, I don't know how to draw for flow chart for this program I read instructions i don't got the concept. That weird because i got first program. If i have flow chart concept i may be write new program or can modify old one. Please draw for me. I know the that is tread question but i am in hurry for flowchart.......please help me
thank in advance

#INCLUDE <P16F88.INC>
#DEFINE SPD_UP PORTA,0
#DEFINE SPD_DOWN PORTA,1

SPD EQU H'20' ;STORE ACTUAL SPEED
TEMP4 EQU H'21' ;TEMP4 BUFFER
TEMP3 EQU H'22' ;TEMP3 BUFFER
REF_L EQU H'23' ;STORE LOWER LINIT OF SPEED
REF_H EQU H'24' ;STORE UPPER LIMIT OF SPEED
COUNTER EQU H'25' ;COUNTER
AVG_SPD EQU H'26' ;AVERAGE VALUE OF 6 SPED DATA
OUTER EQU H'27' ;OUTER COUNTER
INNER EQU H'28' ;INNER COUNTER
TEMP1 EQU H'29' ;TEMP1 BUFFER
TEMP2 EQU H'30' ;TEMP2 BUTTER

;*************************************************************
; MAIN PROGRAM
;*************************************************************
ORG H'00' ;ASSIGN START MEMORY ADDRESS
GOTO START ;GO START
START CALL SETTINGS ;RUN THE SETTINGS SUB-ROUTINE
REPEAT CALL SPD_READINGS ;REPEAT & RUN SPD READINGS SUB-ROUTINE
CALL SPD_CHECK ;RUN SPD_CHECK SUBROUTINE
GOTO REPEAT ;GO TO REPEAT
;*************************************************************
; CONFIGURATIONS
;*************************************************************
SETTINGS
CLRF ANSEL ; TO SET FROM DEFAULT ANALOG I/O TO DIGITAL I/O
BSF STATUS,RP0 ; SELECT BANK1
CLRF TRISA ; SET PORTA AS OUTPUT
MOVLW B'11110111' ; SET PORT B BIT 3 AS OUTPUT
MOVWF TRISB ; SET REST OF PORTB BITS AS INPUT
BCF STATUS,RP1 ; SELECT BANK
BCF STATUS,RP0 ; SELECT BANK 0
CLRF PORTA ; ERASE DATA IN SPD_UP AND SPD_DOWN
MOVLW D'70' ; D'70' lateral number to W
MOVWF SPD ; SET SPD AT 43KM/H
RETURN


;********************************************************************************
;*SUM UP THE 6 DIFFERENT SPD READINGS AND STORE THE RESULTS IN SPD_MSB & SPD_LSB*
;********************************************************************************
SPD_READINGS
MOVLW D'05'
MOVWF COUNTER ; SET THE LOOP TO ADD THE SPD 6 TIMES
CLRF TEMP4 ; CLEAR TEMP4
MOVF SPD,W ; READ SPD FROM H'20' AND STORE IN W
MOVWF TEMP3 ; STORE THE READING AT SPD_LSB
LOOP CALL DELAY ; CALL FOR 1OOMS DELAY
MOVF SPD,W ; READ NEW SPD FROM H'20'
ADDWF TEMP3,F ; ADD NEW SPD TO SPD_LSB
BTFSC STATUS,C ; IF C = 0, SPD_LSB =< 255
INCF TEMP4,F ; IF C = 1, SPD_LSB > 255
DECFSZ COUNTER,F ; DECREASE COUNTER, TO
GOTO LOOP
;****************************************************************
; CALCULATION OF AVERAGE SPEED
;****************************************************************
CLRF AVG_SPD
MINUS6 MOVLW D'06' ; STORE D'06' TO W
SUBWF TEMP3,F ; MINUS SPD_LSB WITH 6
BTFSS STATUS,C ; IF C = 0, SPD_LSB >= 6
GOTO MSB ; IF C = 1, SPD_LSB < 6
INCF AVG_SPD ; INCREASE AVG_SPD
GOTO MINUS6 ; GOTO MINUS6
MSB MOVF TEMP4,W ; READ SPD_MSB FROM H'21' AND STORE IN W
BTFSS STATUS,Z ; CHECK IF SPD_MSB IS ZERO
GOTO LSB ; GOTO LSB_255 IF SPD_MSB IS NOT ZERO
RETURN ; RETURN PROGRAM
LSB DECF TEMP4 ; DECREASE SPD_MSB
MOVLW D'255' ; STORE D'255' INTO W
MOVWF TEMP3 ; MOVE D'255' INTO SPD_LSB
GOTO MINUS6
RETURN

;*****************************************************************
; CHECK IF SPD IS AT 60KM/H TO 70KM/H.
;*****************************************************************

SPD_CHECK
MOVLW D'60' ; MOVE LATERAL D'60' TO W
MOVWF REF_L ; SET REFERENCE_L AT 60
MOVLW D'70' ; MOVE LATERAL D'70' TO W
MOVWF REF_H ; SET REFERENCE_H AT 70
MOVF AVG_SPD,W ; READ AVG_SPD FROM H'26' AND STORE IN W
SUBWF REF_L ; MINUS AVG_SPD TO 60
BTFSS STATUS,C ; IF C = 1, AVG_SPD CAN BE =< 60KM/H
GOTO SPD_CHECK2 ; IF C = 0, AVG_SPD IS MORE THAN 60KM/H
BTFSC STATUS,Z ; IF Z = 0, AVG_SPD < 60KM/H. IF Z = 1, AVG_SPD IS = 60KM/H
RETURN ; RETURN TO MAIN WHEN AVG_SPD IS = 60KM/H (WITHIN REQUIREMENT)
INC_SPD BSF SPD_UP ; AVG_SPD IS < 60KM/H, ACTIVATE SPD_UP
BCF SPD_DOWN ; TO ENSURE SPD_DOWN IS NOT SET.
MOVLW D'05' ; STORE D'05' INTO W
ADDWF SPD,F ; INCREASE SPEED
RETURN

SPD_CHECK2
MOVF AVG_SPD,W ; READ AVG_SPD FROM H'26' AND STORE IN W
SUBWF REF_H,W ; MINUS AVG_SPD TO 70
BTFSS STATUS,C ; IF C = 1, AVG_SPD IS < 70KM/H
GOTO REDUCE_SPD
BTFSS STATUS,Z ; IF Z = 0, 60KM/H < AVG_SPD > 70KM/H
RETURN ; RETURN TO MAIN

REDUCE_SPD BSF SPD_DOWN ; ACTIVATE SPD_DOWN
BCF SPD_UP ; ENSURE SPD_UP IS NOT SET
MOVLW D'10' ; MOVE D'20 INTO W
SUBWF SPD,W ; REDUCE SPD BY 10
RETURN

;***********************************************************
; 100MS DELAY SUB-ROUTINE
;***********************************************************

DELAY
MOVLW D'100' ; STORE 100 INTO W
MOVWF OUTER ; STORE 100 INTO OUTER
DELAY2 MOVLW D'124'
MOVWF INNER ; STORE 124 INTO INNER
DELAY1 NOP
DECFSZ INNER ; DECREASE INNER, SKIP IF ZERO
GOTO DELAY1
DECFSZ OUTER ; DECREASE OUTER, SKIP IF ZERO
GOTO DELAY2
RETURN
END

#5
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,705 posts
  • Programming Language:C, Java, C++, PHP, Python, Perl, Assembly, Bash, Others
  • Learning:JavaScript
1) Please use tags when posting code. Highlight your code and click on the button with the # on it. That'll make it much easier for us to read.
2) If you have a question, please start your own thread, don't hijack others'. I would move this post to another thread myself but I don't have the privileges yet.
3) Might also want to tell us that this is PIC code next time. :)

As for the flow chart: do you know C, C++, or some other higher-level language like that? If so, you can go step-by-step and try to convert it over to one of those. That'll make it much easier to figure out where things go.
sudo rm -rf /

#6
thuwon

thuwon

    Newbie

  • Members
  • Pip
  • 2 posts
i already solved. thz anyway nice to meet u all members & admins.......:)

#7
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,705 posts
  • Programming Language:C, Java, C++, PHP, Python, Perl, Assembly, Bash, Others
  • Learning:JavaScript
Oh yeah, I forgot: Welcome to CodeCall!
sudo rm -rf /




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users