الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]كيف يمكنني ايجاد العدد الأكبر في مصفوفه من خمس خانات

بدأه tezok في 16 يناير 2010 · 8 رد · 1,993 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

عاجل جدا من الأخوه كيف يمكنني ايجاد العدد الأكبر في مصفوفه من خمس خانات

ثم طباعة العدد حاولت بكل الطرق و لم افلح (لا استطيع القراءه من المصفوفه)

تم تعديل هذه المشاركة بواسطة Xacker في 23 يناير 2010 في 16:27

#2

ضع محاولاتك لتصويبها

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

.286

.MODEL SMALL

.STACH 100H

.DATA

DB ARR 51,-6,40,8,20,-3

DB VMAX ?

.CODE

MOV AX,@DATA

MOV DS,AX

XOR AX,AX

PUSH CX

MOV CX,6

MOV BX,0

MOV AX,ARR[bX]

MOV VMAX,AX

NEXT: CMP AX,VMAX

JA GNV

RESUME: INC BX

MOV AX,ARR[bX]

LOOP NEXT

JMP EXIT

GNV: MOV VMAX,AX

JMP RESUME

EXIT:

MOV AX,4C00H

INT 21H

END

GETMAXNUMINARR.ASM

تم تعديل هذه المشاركة بواسطة tezok في 16 يناير 2010 في 14:21

#4
.model small

.stack

.data
	arr		db	51,-6,40,8,20,-3
	vmax	db	0
	buff	db	3 dup (0)

.code
main	proc	far
	mov	ax,@data
	mov	ds,ax

	lea	si,arr		;load addr of ARR into SI register
	xor	bx,bx		;BX = counter
	xor	ax,ax

	mov	al,byte ptr [si+bx]
	mov vmax,al
	inc	bx

@loop:
	cmp	bx,6
	je	exit
	mov	al,byte ptr [si+bx]
	cmp	vmax,al
	jge	next
	 mov	vmax,al
next:
	inc	bx
	jmp	@loop
exit:
	;print vmax
	lea	bx,buff
	mov al,vmax
	call dwtoa
	mov ah,9
	lea dx,buff
	int	21h

	mov	ax,4c00h
	int	21h
main	endp
dwtoa proc 	near

 	mov dx,ax
 	mov di,bx
 	test al,al
 	jnz 	sign
zero:
 	mov word ptr [di],30h
 	jmp 	dtaexit
sign:
 	jns pos
 	mov [di],"-"
 	neg al
 	inc di
pos:
 	mov cx,10
 	mov si,di

 	.while (ax > 0)
 	xor dx,dx
 	div cx
 	add dl,30h
 	mov [di],dl
 	inc di
 	.endw

 	mov [di],"$"

 	.while (si < di)
 	sub di,1
 	mov al,[si]
 	mov ah,[di]
 	mov [di],al
 	mov [si],ah
 	add si,1
 	.endw

dtaexit:
 	ret

dwtoa endp
end main

نفس البرنامج يمكنك تعديل السطر

jge next

إلى

jle next

ليعطيك أصغر رقم في السلسلة.

تذكرة:

jg ومشتقاتها / jl ومشتقاتها، تعتمد على SF (أي أنها تتعامل مع signed values)

تنبيه:

قمت بالتعديل على إجرائية dwtoa بحيث تقوم بفحص AL لترى إن كان الرقم موجب أم سالب باستخدام JS (Jump if Signed) وليس AX شرط أن تكون الأرقام في السلسلة في حدود بايت واحد أي [-127,127].

استخدام الإجرائية

; ax = hex value to change into ascii
; bx = buffer for output
call dwtoa

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

جميل اخي Xacker

كنت اود مساعدة العضو كتب الكود لكن به مشاكل وقد استفدت من مشاركتك

فقط لم افهم لما هدا الكود ما هو دوره ؟

الا يمكن طباعة النتيجة مباشرة ؟

dwtoa proc      near

        mov dx,ax
        mov di,bx
        test al,al
        jnz     sign
zero:
        mov word ptr [di],30h
        jmp     dtaexit
sign:
        jns pos
        mov [di],"-"
        neg al
        inc di
pos:
        mov cx,10
        mov si,di

        .while (ax > 0)
        xor dx,dx
        div cx
        add dl,30h
        mov [di],dl
        inc di
        .endw

        mov [di],"$"

        .while (si < di)
        sub di,1
        mov al,[si]
        mov ah,[di]
        mov [di],al
        mov [si],ah
        add si,1
        .endw

dtaexit:
        ret

dwtoa endp
#6
soufianosse كتب:

فقط لم افهم لما هدا الكود ما هو دوره ؟

الكود يقوم بتحويل قيمة HEX إلى قيمة ASCII بحيث تصبح قابلة للطباعة كسلسلة نصّية. كما أنه يحدد فيما إذا كان العدد مؤشر أو غير مؤشر (signed / unsigned) لكي يضيف إشارة ناقص في بدايته ضمن الـ buffer.

soufianosse كتب:

الا يمكن طباعة النتيجة مباشرة ؟

لنفرض أن العدد الأكبر هو العدد 9 (مثلاً)

بالتالي ستكون قيمته في الذاكرة 09h .. هل لو قمت بطباعته سيظهر "9" على الخرج؟ لا حتماً.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7
Xacker كتب:

الكود يقوم بتحويل قيمة HEX إلى قيمة ASCII

ممكن خوارزمية التحويل ؟

#8

الكتلة كاملة هو الكود الخاص بإجرائية dwtoa

أما الجزء الرئيسي في التحويل

 mov cx,10
 mov si,di

 .while (ax > 0)
 xor dx,dx
 div cx
 add dl,30h
 mov [di],dl
 inc di
 .endw

تم تعديل هذه المشاركة بواسطة Xacker في 24 يناير 2010 في 17:01

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

اوكي شكرا لك يا X :lol:

مواضيع مشابهة