View Full Version : سوال: دریافت یک عدد و چاپ آن با خود آن عدد
hamid.v
سه شنبه 26 اردیبهشت 1391, 22:14 عصر
سلام به تمامی دوستان
من یه مشکلی داشتم خواستم از اساتید کمک بگیرم, یه برنامه ای میخواستم که عدد رو از ورودی بگیره و همون عدد رو با اعداد کوچکترش چاپ کنه و مثل خود اون عدد در بیاد برای بهتر فهمیدن منظورم از یک عکس استفاده کردم در پایین پیوست کردم. اگه امکانش برای دوستان هست یه کمکی یا اگه بشه برنامه کاملش رو بدن که عالی میشه چون من اصلا از اسمبلی سر در نمیارم.
با تشکر
87107
xman_1365_x
سه شنبه 26 اردیبهشت 1391, 23:19 عصر
یک تیبل برای اعداد ایجاد میکنید و نمایش میدین به همین سادگی
عدد چهار رو برای نمونه نوشتم ادامش با شما
msg macro message
lea dx, message
mov ah, 9
int 21h ; output string at ds:dx
endm
data segment
cret equ 13
newl equ 10
tab equ 09
enter equ 13,10
dollar equ '$'
pkey db "press any key...$"
Four db " 4 ",enter
db " 4 4 ",enter
db " 4 4 ",enter
db "4444444",enter
db " 4 ",enter
db " 4 ",enter,dollar
ends
stack segment stack
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
msg four
msg pkey
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
end
موفق باشی
MostafaMohammadi
چهارشنبه 27 اردیبهشت 1391, 00:44 صبح
الگوریتم اش خیلی ساده است،
شروع برنامه
یک کاراکتر از صفحه کلید بگیر.
با کاراکتر یک مقایسه کن اگر برابر بود، بپر به لیبل یک (لیبل یک: کاراکتر یک را چاپ کن.)
با کاراکتر دو مقایسه کن اگر برابر بود، بپر به لیبل دو (لیبل دو: کاراکتر دو را چاپ کن.)
با کاراکتر سه مقایسه کن اگر برابر بود، بپر به لیبل سه (لیبل سه: کاراکتر سه را چاپ کن.)
با کاراکتر چهار مقایسه کن اگر برابر بود، بپر به لیبل چهار (لیبل چهار: کاراکتر چهار را چاپ کن.)
با کاراکتر پنج مقایسه کن اگر برابر بود، بپر به لیبل پنج (لیبل پنج: کاراکتر پنج را چاپ کن.)
با کاراکتر شش مقایسه کن اگر برابر بود، بپر به لیبل شش (لیبل شش: کاراکتر شش را چاپ کن.)
با کاراکتر هفت مقایسه کن اگر برابر بود، بپر به لیبل هفت (لیبل هفت: کاراکتر هفت را چاپ کن.)
با کاراکتر هشت مقایسه کن اگر برابر بود، بپر به لیبل هشت (لیبل هشت: کاراکتر هشت را چاپ کن.)
با کاراکتر نه مقایسه کن اگر برابر بود، بپر به لیبل نه (لیبل نه: کاراکتر یک را چاپ کن.)
با کاراکتر صفر مقایسه کن اگر برابر بود، بپر به لیبل صفر (لیبل صفر: کاراکتر صفررا چاپ کن.)
پایان برنامه
این یه بدنه برنامه اسمبلی:
; ------------------------------
; | 1- Introducing the program |
; ------------------------------
TITLE 'NUMBERS.ASM' Gets a number and prints it.
;
; ---------------------------------
; | 2- Defining the stack segment |
; ---------------------------------
SSEG SEGMENT STACK
DW 32h DUP(0)
SSEG ENDS
;
; --------------------------------
; | 3- Defining the data segment |
; --------------------------------
DSEG SEGMENT
;متغییر هات رو اینجا تعریف کن
DSEG ENDS
;
; --------------------------------
; | 4- Defining the code segment |
; --------------------------------
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
START PROC FAR
MOV AX, DSEG
MOV DS, AX
;
; --------------------
; | 5- Main program |
; --------------------
;کدهای برنامه ات رو اینجا بنویس
;
; --------------------------
; | 6- End of the program |
; --------------------------
MOV AX, 4C00h
INT 21h
START ENDP
CSEG ENDS
END START
END
با استفاده از سرویس 01h، دستور int 21h می تونی از کیبورد یه کاراکتر بگیری.
با استفاده از دستور CMP می تونی اون کاراکتر رو با مقادیر مورد نظر ات مقایسه کنی.
با استفاده از دستور JE می تونی در صورت مساوی بودن دو operand به یه Label خاص اش بپری.
با استفاده از سرویس 0Eh، دستور int 21h می تونی کاراکتر ها رو روی صفحه نمایش چاپ کنی.
برای کاراکتر ها هم از اینها استفاده کن:
1 2222 333333 44 555555 666 7777777 88888 00000
111 222222 3333 444 55 66 777 88 88 99999 00 00
11 222 3333 44 4 555555 666666 777 88888 99 99 00 00
11 2222 333 44444444 5555 66 66 777 88 88 999999 00 00
1111 2222222 333333 444 555555 66666 777 88888 99 00000
999
شروع کن به نوشتن هر جا به اشکال برخوردی، مطرح کن.
xman_1365_x
چهارشنبه 27 اردیبهشت 1391, 05:51 صبح
الگوریتم بهینه تر
input number
check = number/2;
if (check = 4) goto lable1
if (check = 3) goto lable2
if (check = 2) goto lable3
if (check = 1) goto lable4
if (check = 0) goto lable5
lable1:
if (number=9) msg 9
else msg 8
jump end_program
lable2:
msg 6
jump end_program
lable3:
if (number=5) msg 5
else msg 4
jump end_program
lable4:
if (number=3) msg 3
else msg 2
jump end_program
lable5:
if (number=1) msg 1
else msg0
end_program:
hamid.v
چهارشنبه 27 اردیبهشت 1391, 09:05 صبح
از همگی ممنون. فقط کد اولی به من کمک کرد چون من از اسمبلی سر در نمیارم با الگوریتم ها نتونستم کاری کنم, و اینکه اگه میشد کد اول رو کاری کرد که اعداد رو از ورودی بگیره و بعد اون طوری که اول توضیح دادم چاپ کنه عالی میشد.
xman_1365_x
چهارشنبه 27 اردیبهشت 1391, 14:19 عصر
از همگی ممنون. فقط کد اولی به من کمک کرد چون من از اسمبلی سر در نمیارم با الگوریتم ها نتونستم کاری کنم, و اینکه اگه میشد کد اول رو کاری کرد که اعداد رو از ورودی بگیره و بعد اون طوری که اول توضیح دادم چاپ کنه عالی میشد.
دوست عزیز خوب باید شروع به مطالعه کنید و الگوریتم ها گفته شد برای همین قسمت که شما بنویسید ! اگرنه نوشتنش کاری نداشت
شما نیاز به یادگیری پرش ها و دستور مقایسه دارید ، وقفه چاپ هم که بنده براتون نوشتم،شروع کنید به مشکل خوردین اینجا سوال کنید.
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.