سوال در مورد ماکرو اسمبلی

scooter2005

Member
دو تا سوال داشتم :
یکی اینکه ماکرویی بنویسید که 3 پارامتر a , b , min را گرفته کوچکترین از بین a , b را در min بریزد و همه هم یک بایتی


کد:
min macro a,b,min
mov al,a
cmp a,b
jbe L1
jmp L2
L1: شرط مقایسه
mov min,al
L2:


دوم اینکه ماکرویی بنویسید که 4 پارامتر a,b,c,max را گرفته بزرگترین آنها را در max بریزد همه دو بایتی

کد:
max macro a,b,c,max
mov ax,a
mov bx,b
cmp bx,ax
cmp c,bx
jae L1:
jmp L2
mov max,ax


ممنون اگر اشتباهاتش رو بگیرید و درست کنید













 

the_king

مدیرکل انجمن
دو تا سوال داشتم :
یکی اینکه ماکرویی بنویسید که 3 پارامتر a , b , min را گرفته کوچکترین از بین a , b را در min بریزد و همه هم یک بایتی

کد:
min macro a,b,min
mov al,a
cmp a,b
jbe L1
jmp L2
L1: شرط مقایسه
mov min,al
L2:

1) نامی که برای ماکرو انتخاب می کنید نبایستی برای نام مورد دیگری مثلا نام پارامتر بکار برود :
کد:
[B]min[/B] macro a,b,[B]min[/B]

مثلا نام ماکرو را minimum قرار دهید :
کد:
[B]minimum[/B] macro a,b,[B]min[/B]

2) مقایسه یک آدرس مستقیم حافظه با آدرس حافظه دیگر نمی تواند در اسمبلی 8086 بصورت یک دستور CMP انجام
شود، مثلا نمی توانید مقدار a و b را در یک دستور CMP مقایسه کنید، تنها یکی از دو پارامتر می توانند حافظه ای مانند
a باشند، نه هر دوی آنها :
کد:
cmp a,b
بایستی یکی از دو مقدار a و b را به یک Register مانند al انتقال داده و سپس مقدار al را با مقدار دیگر مقایسه کنید :
کد:
cmp al, b

3) دستور پرش به L2 با منطق کار مطابقت ندارد :
کد:
jmp L2

کد صحیح ماکرو چنین خواهد بود :
کد:
minimum MACRO a, b, min
	mov	AL, a
	CMP	AL, b
	JBE	l1
	MOV	AL, b
	l1:
	MOV	min, AL
ENDM
 

the_king

مدیرکل انجمن
ماکرویی بنویسید که 4 پارامتر a,b,c,max را گرفته بزرگترین آنها را در max بریزد همه دو بایتی

کد:
max macro a,b,c,max
mov ax,a
mov bx,b
cmp bx,ax
cmp c,bx
jae L1:
jmp L2
mov max,ax

ممنون اگر اشتباهاتش رو بگیرید و درست کنید

1) نامی که برای ماکرو انتخاب می کنید نبایستی برای نام مورد دیگری مثلا نام پارامتر بکار برود :
کد:
[B]max[/B] macro a,b,c,[B]max[/B]

مثلا نام ماکرو را maximum قرار دهید :
کد:
[B]maximum[/B] macro a,b,c,[B]max[/B]

2) مقایسه پی در پی توسط CMP تنها نتیجه آخرین مقایسه را حفظ خواهد کرد و مقایسه های قبلی
فراموش خواهند شد و بلا استفاده هستند :
کد:
[B]cmp[/B] bx,ax
[B]cmp[/B] c,bx

3) نام c به عنوان یک عبارت در زبان اسمبلی تعریف شده که در مشخص کردن نوع ارسال پارامتر های توابع بکار می رود،
به همین دلیل نبایستی از آن برای نامگذاری پارامتر های ماکرو یا متغیر ها استفاده کرد.
به همین جهت در کاربرد عملی بجای متغیر های a و b و c از نام هایی نظیر aa و bb و cc استفاده کنید.

کد صحیح ماکرو چنین خواهد بود :
کد:
maximum MACRO aa, bb, cc, max
	mov	AX, aa
	CMP	AX, bb
	JAE	l1
	MOV	AX, bb
	l1:
	CMP	AX, cc
	JAE	l2
	MOV	AX, cc
	l2:
	MOV	max, AX
ENDM
 

جدیدترین ارسال ها

بالا