GIDForums  

Go Back   GIDForums > Computer Programming Forums > Assembly Language
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 
 
Thread Tools Search this Thread Rate Thread
  #1  
Old 14-Oct-2009, 18:01
veronicak5678 veronicak5678 is offline
New Member
 
Join Date: Sep 2007
Posts: 27
veronicak5678 has a little shameless behaviour in the past

Counting Set Bits


I am trying to write a subprocedure that will count the number of buts set in a 16bit number, then send that number (bits set) back to the main procedure in AX. The main should display display the number of 1s and determine if the number is even or odd.

I am trying to count the 1s by shifting left and incrementing on carry. This doesn't seem to be working...

Code:
;=================================================== ; MAIN.ASM ;=================================================================== EXTERN GETDEC:FAR EXTERN NEWLINE:FAR EXTERN PUTSTRNG:FAR EXTERN PUTDEC:FAR EXTERN PUTBIN:FAR EXTERN PARITY:FAR ;=================================================================== .MODEL LARGE .STACK 512 ;=================================================================== ; D A T A S E G M E N T D E F I N I T I O N .DATA NUMBER DW ? PROMPT DB 'Enter a number: ' BINDISPLAY DB 'Number in binary: ' ONESDISPLAY DB 'Number of 1s: ' ODDDISPLAY DB 'The number of 1s is odd. ' EVENDISPLAY DB 'The number of 1s is even. ' ;=================================================================== ; C O D E S E G M E N T D E F I N I T I O N .CODE ASSUME DS:DGROUP ;=================================================================== MAIN PROC MOV AX, DGROUP ;SET DS-REGISTER TO POINT TO MOV DS, AX ;DATA SEGMENT MOV ES, AX ;AND ES ALSO BEGINNING: CALL NEWLINE MOV DI, OFFSET PROMPT MOV CX, SIZEOF PROMPT CALL PUTSTRNG CALL GETDEC CALL NEWLINE MOV DI, OFFSET BINDISPLAY MOV CX, SIZEOF BINDISPLAY CALL PUTSTRNG CALL PUTBIN PUSH AX CALL PARITY CALL NEWLINE CALL NEWLINE MOV DI, OFFSET ONESDISPLAY MOV CX, SIZEOF ONESDISPLAY CALL PUTSTRNG CALL PUTDEC MOV BX, 2 DIV BX CMP DX, 0 JNE ODDS MOV DI, OFFSET EVENDISPLAY MOV CX, SIZEOF EVENDISPLAY CALL PUTSTRNG JMP EXIT_PROGRAM ODDS: MOV DI, OFFSET ODDDISPLAY MOV CX, SIZEOF ODDDISPLAY CALL PUTSTRNG EXIT_PROGRAM: MOV AX, 4C00H INT 21H MAIN ENDP END MAIN


Code:
;=================================================================== ; PARITY.ASM ;=================================================================== .MODEL LARGE ;=================================================================== ; D A T A S E G M E N T D E F I N I T I O N .DATA ONES_COUNT DW 0 ;=================================================================== ; C O D E S E G M E N T D E F I N I T I O N .CODE ASSUME DS:DGROUP ;=================================================================== PARITY PROC FAR PUBLIC USES DX DS POP AX NUM_LOOP: CMP AX, 0 JE EXIT_PROGRAM SHL AX, 1 JC INCREMENT JMP NUM_LOOP INCREMENT: INC ONES_COUNT JMP NUM_LOOP EXIT_PROGRAM: MOV AX, ONES_COUNT PUSH AX RET PARITY ENDP END PARITY
 
 

Recent GIDBlogProblems with the Navy (Chiefs) by crystalattice

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
seg fault on ptr to ptr assignment! aijazbaig1 C Programming Language 7 30-Apr-2008 12:32
Copy Bits To a Byte boschow C Programming Language 1 24-Apr-2008 10:38
BMP image on matrix load nemo C++ Forum 21 18-Dec-2007 00:04
link error? pablowablo C++ Forum 14 19-Jun-2004 11:00
problems typecasting an int to a string holbrook C++ Forum 9 07-May-2004 19:59

Network Sites: GIDNetwork · GIDWebHosts · GIDSearch · Learning Journal by J de Silva, The

All times are GMT -6. The time now is 16:52.


vBulletin, Copyright © 2000 - 2009, Jelsoft Enterprises Ltd.