ورود

View Full Version : حرفه ای: تعداد 1 های عدد 16 بیتی با اسمبلی



Collector
جمعه 03 خرداد 1392, 19:41 عصر
سلام
در این برنامه میخوام تعداد یک های از یک ثبات تا یک ثبات دیگر(مثلا از si تا di) را حساب کنم ولی فقط میتونم یک ثبات را این کار بکنم
با حلقه هم هر کاری کردم نشد

سوال:

برنامه ای به زبان اسمبلی بنویسید که تعداد بیت های دارای ارزش یک در حافظه از آدرس esi تا آدرس edi را شمرده
و در ثبات eax قرار دهد


PAGE 110,100
TITLE 'rol_exam.asm' a rotate example
;-----------------------------------------------

; Defining Segment of Program
; ----------------------------
CODESG SEGMENT PARA 'CODE'
ASSUME SS:CODESG,DS:CODESG,CS:CODESG
ORG 100H
START: JMP MAIN ;1-Jump to instuctions
;-----------------------------------------------
PEYGHAM DB 0AH,0DH, 'number of 1 is:','$'
;-----------------------------------------------

MAIN PROC NEAR
MOV Bx,0 ;2-BL=0
MOV Cx,16 ;3-Number of rotate
MOV Ax,0010100011100100B ;4-Initial AL
AGAIN: ROL Ax,1 ;5-Rotate left 1 time AL
JNC NEXT ;6-If not carry go NEXT
INC Bx ;7-Else increment BL
NEXT:LOOP AGAIN ;8-Loop to AGAIN 8 times

MOV AH,09H ;9-Service 9H to display
LEA DX,PEYGHAM ;10-DX=PEYGHAM
INT 21H ;11-Active interrupt 21H
;
MOV AH,02H ;12-Service 2H to display
MOV Dx,bx ;13-ASCII code IN DL
ADD Dx,30H ;14-Change DL to ASCII
INT 21H ;15-Active interrupt 21H
; Come back to operating system
; -----------------------------
MOV AX,4C00H ;16- End of
INT 21H ;17- processing
MAIN ENDP ; End of procedure
CODESG ENDS ; End of segment
END START ; End of program

Delphi Coder
سه شنبه 07 خرداد 1392, 04:44 صبح
این قسمت چاپ عددش فقط در صورتی درست کار میکنه که تعداد بیتهای 1 از عدد 10 کوچکتر باشه. هر عددی که هست باید درست تبدیل و چاپ بشه از طریق تقسیم های متوالی به 10. باقی مانده ها از آخر نوشته میشه و تا زمانی خارج قسمت صفر نشده ادامه پیدا میکنه در آخر هم خود خارج قسمت نوشته میشه.
از SI تا DI در داخل یک حلقه دیگه بایت به بایت در یک رجیستر 8 بیتی قرار بدید و برید جلو تا زمانی که si=di بشه. و در نهایت عدد به دست اومده رو به شکلی که گفتم چاپ کنید.