PDA

View Full Version : سوال: کمک در نوشتن کد



sara_noori
شنبه 02 دی 1391, 11:59 صبح
من می خواهم کاربر یک عدد را وارد کند و آن عدد را درون یک متغیر بریزم تا بتونم مقایسه کنم
کد ریختم عدد در متغیر را نمی دونم اگه ممکن کمکم کنید
ممنون میشم

bhasoft
شنبه 02 دی 1391, 12:17 عصر
با سلام دوباره...
دوست عزیز من در تاپیک قبلی هم به شما گفتم اگه میخواین کدتونو بزارین تا کمک کنم.در ضمن من نمیدونم سطح شما در چه حدی هست؟شما با کدوم نرم افزار کار میکنین؟
masm-tasm?
emu8086?
??
من فعلا اینجام اگه کمکی خواستین در خدمتم...

sara_noori
شنبه 02 دی 1391, 12:38 عصر
من با نرم افزار emu8086 کار میکنم در این برنامه عدد را میگیرد اما هیچ مقایسه ای انجام نمی ده
; multi-segment executable file template.

data segment
; add your data here!
number dw ?
ABSOLUTE dw ?
pkey db "press any key...$"
m1 db 'enter your adad:$'
ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

; add your code here
lea dx,m1
mov ah,09
int 21h
mov ah,01
int 21h

IF: CMP number, 0
JGE ELSE ;IF(NUMBER >= 0) Go to ELSE

MOV BL, -1 ;CL = -1
MOV AX,number ;AX = NUMBER
IMUL BL ;AX = AX * (-1)

MOV ABSOLUTE, AX ;ABSULOTE = AX
JMP EXIT_PROGRAM

ELSE:

MOV AX, number ;AX = NUMBER
MOV ABSOLUTE, AX ;ABSULOTE = AX

EXIT_PROGRAM:

.EXIT
END

lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx

; 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.

bhasoft
شنبه 02 دی 1391, 13:19 عصر
اوکی.ببینین شما اول باید از پایه و دستورات اسمبلی اطلاع داشته باشی.مخصوصا تبدیل مبناها به هم... بعد اینکه استفاده از مثالهای آماده نرم افزار شمارو بیشتر گنگ میکنه... شما یه پروژه جدید باز کنین و از ابتدا خودتون دستی کد بنویسید... انوقت میبینین که اسمبلی شیرینترین زبان برنامه نویسی هستش...در ضمن اون پروژه ای که به شما دادم دقیقا توش هست که چطوری عددی رو بگیریم. ما اول یه کاراکتر از کاربر تو اون برنامه میگیریم و اون رو با 13 که معادل کد اسکی اینتر هست مقایسه میکنیم که ببینیم کاربر تو همون ابتدا اینتر نزده باشه.اگه به غیر از اینتر بود میایم از al یا در کل ax عدد 48 رو کم میکنیم تا اون چیزی که از کاربر گرفیتم رو به عدد مبنای 10 خودمون تبدیل کنیم... مثلا اگه 1 رو کاربر وارد کنه اسمبلی اون رو با این کد میشناسه => 49 یعنی کد عدد یک!!! ÷س ما به همین خاطر این رو 48تا کم میکنیم تا به عدد معمولی تبدیل بشه... درضمن ما به هیچ وجه نمیتونیم تو همون ابتدا از کاربر عدد بگیریم.چون اسمبلی همه چیز رو کاراکتر میدونه... پس اون کاراکتر 1 که با دستور mov ah,01h , int 21h اجرا شد اون چیزی که کاربر وارد کرده میره داخل al . پس ما به همین خاطر اون رو با 13 مقایسه کردیم.چون همه چی میره داخل al... حالا شمام نگاهی بکنید اگه مشکلی بود تو سایت بنده (http://www.kavoshsoftware.ir) پیغام بزارید تا جواب بدم. باتشکر

begin1:
mov ah,01h
int 21h
mov ah,0
cmp ax,13
je end1
sub ax,48
mov adad,ax
mov ax,sum
mov cx,10
mul cx
mov sum,ax
mov bx,adad
add sum,bx
jmp begin1
end1:

sara_noori
شنبه 02 دی 1391, 18:08 عصر
ممنون از لطفتون
اما این عدد را می گیره درون متغیر میریزه و دوباره عدد بعدی را می گیره من می خواهم یک عدد را که گرفت قدر مطلق آن را محاسبه کند

Delphi Coder
شنبه 09 دی 1391, 00:42 صبح
ممنون از لطفتون
اما این عدد را می گیره درون متغیر میریزه و دوباره عدد بعدی را می گیره من می خواهم یک عدد را که گرفت قدر مطلق آن را محاسبه کندشما در مورد برنامه ای که نوشتید توضیح بدید عدد رو کجا میگیره تا بعد محاسبه قدر مطلق رو بریم جلو.

reza-ravani
پنج شنبه 02 خرداد 1392, 13:56 عصر
salam man mikhastam rahnemaim konid

nemidonam kodom bakhsho bayad to in barname ke alan baraton mizaram taghir bedam

ke be jaye inke az samte chap be rast chap beshe

az bala be pain chap beshe

har kari kardam movafagh nashodam

lotfan rahnemaim konid kodom bakhsh bayad avaz beshe

mamnon misham avazesh konid


dastorat>>



mov ax, 0b800h

mov ds, ax





mov di, 0

mov bp, 2



shift:



lea bx, msg

mov cx, 08h

mov si, 0



print_in_screen:



mov dl, es:[bx+si]

mov ds:[di], dl

add si, 1

add di, 2



loop print_in_screen



mov ds:[bp],

add bp, 02h

mov di, bp

jmp shift


msg db " Iran"