PDA

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 عصر
از همگی ممنون. فقط کد اولی به من کمک کرد چون من از اسمبلی سر در نمیارم با الگوریتم ها نتونستم کاری کنم, و اینکه اگه میشد کد اول رو کاری کرد که اعداد رو از ورودی بگیره و بعد اون طوری که اول توضیح دادم چاپ کنه عالی میشد.

دوست عزیز خوب باید شروع به مطالعه کنید و الگوریتم ها گفته شد برای همین قسمت که شما بنویسید ! اگرنه نوشتنش کاری نداشت
شما نیاز به یادگیری پرش ها و دستور مقایسه دارید ، وقفه چاپ هم که بنده براتون نوشتم،شروع کنید به مشکل خوردین اینجا سوال کنید.

موفق باشید