ورود

View Full Version : ورودی و خروجی اعداد



roxen13
جمعه 26 آبان 1385, 19:28 عصر
من در ورود و چاپ اعداد مشکل دارم.
کد زیر را برای این کار نوشتم. ملی درست کار نمی کند. مپلا" عدد 12345 یا هر عدد دیگر را می گیرد و 15656 را چاپ می کند.


.model small
.stack 64
.data
msg1 db "please enter first num:",'$'
msg2 db "the num is:",'$'
str label byte
max db 20
len db ?
buffer db 20 dup(' ')
dolar db '$'
string db 6 dup(' '),'$'
.code
main proc far
mov ax,@data
mov ds,ax
;--------------
lea dx,msg1
mov ah,9h ;chape payam1
int 21h
;--------------
mov ah,0ah
lea dx,str ;khandane reshte
int 21h
;--------------
lea bx,buffer
mov ax,0
mov si,0 ; shomarande
l1: ;tabdile reshte be addad

cmp [bx],'$'
jz l2
mov cx,10
mul cx
mov cl,[bx]
and cx,000fh
add ax,cx
inc si
inc bx
jmp l1

l2:
lea bx,string
add bx,5
mov cx,10
l3:
mov dx,0
div cx
add dl,30h
mov [bx],dl
dec bx
cmp ax,0
jne l3
mov ah,2h
mov dh,12
mov dl,30
mov bh,0
int 10h
lea dx,msg2
mov ah,9h
int 21h
lea dx,string
mov ah,9h
int 21h
MOV AH,00H
INT 16H

mov ax,4c00h
int 21h
main endp
end main

می شه لطفا" اشکال برنامه را بگید

Younes
یک شنبه 28 آبان 1385, 12:43 عصر
تنها اشکال برنامه شما اینست که در خط با برچسب l1 باید بصورت زیر عمل کنید:
cmp byte ptr [bx],'$'
یعنی بجای [bx] باید از byte ptr آن استفاده کنید زیرا در اینحالت یک کلمه را با '$'مقایسه می کند که موجب اشتباه می گردد.

roxen13
سه شنبه 30 آبان 1385, 18:25 عصر
از راهنماییتون خیلی ممنون .
ولی باز هم برنامه درست کار نمی کنه.
مثلا" وارد می کنم 12
خروجی 0 می ده

Younes
چهارشنبه 01 آذر 1385, 09:31 صبح
اما من برنامه شمارا کپی کرده و اجرا کردم و کاملا درست اجرا شد (البته بعد از اعمال تغییر).
به هر صورت بهترین راه برای مشخص کردن اشکال اجرای برنامه در debug است.
موفق باشید.

roxen13
چهارشنبه 01 آذر 1385, 20:02 عصر
می شه ازتون خواهش کنم کد برنامه ای که اجرا کردید را بگذارید. چون برای خودم هم عجیبه.
خیلی ممنون.

roxen13
پنج شنبه 02 آذر 1385, 22:23 عصر
می شه لطفا" کدی را که اجرا کردید بگذارید . برای خودم هم عجیبه

roxen13
جمعه 03 آذر 1385, 17:30 عصر
این تازه قسمتی از برنامه بود .مسئله به این صورت است که 2 عدد از ورودی دریاقت می کند و ب م م آنها را حساب می کند. ولی حالا من تو همون قسمت اولش موندم.
لطفا" کمک کنید.

Younes
شنبه 04 آذر 1385, 08:48 صبح
با سلام
من که گفتم فقط یک byte ptr قبل از [bx] در خط L1 اضافه کردم ( برای اینکه یک بایت از آدرس [bx] را با $ مقایسه کند) برنامه کاملا درست کارمیکند مگر اینکه شما عددی بزرگتر از 64K به آن بدهید که در اینصورت چون در یک کلمه جا نمی شود برنامه پاسخ اشتباه می دهد. برای رفع این اشکال هم باید از متغیرهای دو کلمه ای استفاده نمایید.

roxen13
شنبه 04 آذر 1385, 17:16 عصر
سلام
بله متوجه شدم. ولی آخه چرا وقتی من byte ptr را اضافه می کنم باز هم برنامه جواب نمی دهد.
مثلا" وارد می کنم 5 خروجی 0 چاپ می شود

Younes
یک شنبه 05 آذر 1385, 10:34 صبح
با سلام
با این اشکالی که دارید و اگر حدس من در مورد دلیل اشکال شما درست باشدبنظر می رسد که شما خود نویسنده برنامه که نیستید هیچ لیست برنامه را هم نگاه نکرده اید.
من حدس می زنم که شما وقتی ورودی به برنامه می دهید انتهای آن علامت $ را تایپ نمی کنید و چون برنامه با این علامت متوجه انتهای عدد می شود دچار اشتباه شده و پاسخ غلط می دهد. پس بعد از عدد ورودی حتما علامت $ را تایپ کنید.

roxen13
یک شنبه 05 آذر 1385, 11:57 صبح
سلام
خیلی از کمکتون ممنون.
من همیشه فکر می کردم که اسمبلرخودش آخر رشته '$' را می گذارد.چون ما درmsg1 و msg2 آخر پیام '$' را می گذاریم ولی چاپ نمی شود . پس چه خوب شد متوجه اشتباهم شدم و از شما خیلی خیلی ممنونم.

Younes
یک شنبه 05 آذر 1385, 13:21 عصر
موفق باشید