چند سوال در مورد آرایه ها در اسمبلی(masm)؟؟؟؟

SajadCG

کاربر فعال
سلام.
سوال من در مورد کار کردن با آرایه ها در اسمبلی است:

1.چطور باید برنامه نوشت که 5 عدد را گرفته و در آرایه ذخیره کند و بعد جمع این اعداد را چاپ کند؟؟؟؟
من این برنامه را نوشتم ولی علائم عجیب غریب چاپ میکنه!!!!مشکلش از کجاست؟؟؟؟
.model small
.stack 500
.data
;*********************************************
list db 5 dup(?)
;***************************************
.code
Main PROC far
.startup
mov bx,0
loop1:
;get
mov ah,01
int 21h
sub al,48
mov byte ptr list[bx],al
inc bx
cmp bx,5
jne loop1
mov cx,5
mov bx,0
mov al,0
lop1:
add al,list[bx]
inc bx
cmp bx,5
jne lop1

mov ah,02
mov dl,al
int 21h​


2.حالا این برنامه را چور تغییر بدم که بزرگترین عدد وارد شده را نماش بده؟؟؟؟؟

لطفا راهنمائی کنید.:wink:
 

the_king

مدیرکل انجمن
سلام.
سوال من در مورد کار کردن با آرایه ها در اسمبلی است:

1.چطور باید برنامه نوشت که 5 عدد را گرفته و در آرایه ذخیره کند و بعد جمع این اعداد را چاپ کند؟؟؟؟
من این برنامه را نوشتم ولی علائم عجیب غریب چاپ میکنه!!!!مشکلش از کجاست؟؟؟؟
حلقه هایی که نوشتید ایرادی ندارند، فقط توجه داشته باشید که CX را بدون استفاده مقدار دهی کرده اید،
اگر بخواهید در شمارش حلقه از CX که مقدارش 5 شده استفاده کنید بجای دو سطر cmp bx,5 و jne loop1 ،
یک سطر loop loop1 کفایت می کند و نیازی به بررسی BX نیست، دستور loop خودش مقدار CX را کم خواهد کرد
و هر زمانی که صفر شد از حلقه خارج می شود.

مشکل در نحوه نمایش عددی است که در AL جمع کرده اید.
هیچ وقفه ای نداریم که عدد موجود در AL رو در مبنای دسیمال نمایش بده. فرضا اگر در AL عدد 23 قرار گرفته باشه
شما دارید کاراکتری با کد ASCII ئه 23 رو نمایش می دهید که طبیعتا شکلش عجیب و غریبه. شما باید عدد 23
رو بر 10 تقسیم کنید تا یکان و دهگان جدا بشه، بعد هر کدوم از یکان و دهگان را با 48 یا به عبارتی 30h جمع کنید
تا به کاراکتر های '0' الی '9' تبدیل شوند و سپس این دو کاراکتر را نشان دهید.

برای نمایش دادن عدد موجود در AL به این پست مراجعه کنید :
نوشتن تقويم ( اسمبلي )

2.حالا این برنامه را چور تغییر بدم که بزرگترین عدد وارد شده را نماش بده؟؟؟؟؟

لطفا راهنمائی کنید.:wink:

اول فرض می کنیم که اولین عدد ماکزیمم است و در AL قرارش می دهیم. بعد مقدار AL را با 4 عدد بعدی
مقایسه اش می کنیم تا اگر بین آنها عدد بزرگتری بود جایگزین مقدار فعلی AL شود.
کد:
 mov bx,0
 mov al,list[bx]
 mov cx, 4
 lop2:
 inc bx
 cmp al,list[bx]
 jae  nxt1
 cmp al,list[bx]
 nxt1:
 loop lop2
 

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

بالا