PDA

View Full Version : چند تا سوال ساده



fery
دوشنبه 04 تیر 1386, 23:42 عصر
چطوری میتونم بفهمم که بیت پنجم حافظه Data1 یک است ؟ و چطور می تونم یه پیغام رو چاپ کنم ؟

mehdi5106
سه شنبه 05 تیر 1386, 07:54 صبح
قسمت اول سئوال شما نا مفهوم هست.بیشتر توضیح بدین و در مورد سئوال دوم کد زیر مربوط به چاپ پیغام هست .البته روشهای دیگه ای هم هست که مثلا می تونی از یک آرایه استفاده کنی و کاراکتر به کاراکتر چاپ کنی.روش زیر فعلا آسانترین روش هست.

.model small
.stack 100
.data
mes db 'How Are You?','$'
.code
main proc far
mov ax,@data
mov ds,ax

mov ah,09h
lea dx,mes
int 21h

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

Younes
سه شنبه 05 تیر 1386, 13:27 عصر
با سلام
برای چک کردن اینکه یک بیت یک هست یا نه باید آنرا (یا یک کپی از آنرا) با یک الگویی که تمام بیتها صفر باشد بجز بیت مربوطه and کنی اگر حاصل صفر شد یعنی آن بیت صفر بوده اگر نه که یک بوده. یک مثال اینجا می گذارم امیدوارم کمک کند.

data1 db ?
and data,00010000B
jz l1
(البته علامت سوال باید بعد از db قرار بگیرد ولی نمی شود :عصبانی++: )

fery
سه شنبه 05 تیر 1386, 21:57 عصر
ممنون دوستان عزیز
در واقع سوال من اینه :
برنامه ای که بررسی کنه که آیا بیت 5 خانه DATA1 ، یک است ؟ اگه یک باشه یه پیغامی رو چاپ کنه اگه نباشه هم از برنامه خارج بشه .
با کمک شما دوستان تقریبا نوشتمش ولی ممنون میشم کاملشو برام بزارین .

Alay102
سه شنبه 05 تیر 1386, 23:26 عصر
.model small
.stack 100
.data
data1 db 20H
mes db 'How Are You?','$'
.code
main proc far
mov ax,@data
mov ds,ax

and data1,00100000b
jz exit
mov ah,09h
lea dx,mes
int 21h

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



موفق باشی ...

mehdi5106
چهارشنبه 06 تیر 1386, 04:51 صبح
می تونی متغیرتو 5 بار شیفت بدی اگه آخرین بار CF برابر یک بود آنگاه بیاد و پیغام رو نمایش بده.
اگر هم بخوای تعداد یک های متغیر تو بشماری باید هر بار که CF برابر یک هست به یک متغیر یکی اضافه کنی.
به همین سادگی...

fery
چهارشنبه 06 تیر 1386, 08:25 صبح
آها من منظورم این بود تو کتاب دیدم شیف داده ولی متوجه نشدم چرا !
پس با این حساب این برنامه هم می تونه درست باشه :

.model small
.stack 100
.data
data1 db 20H
mes db 'How Are You?','$'
.code
main proc Near
Mov DX,0
Move BX,0
Move AL,DATA1
Move CL,5
ROR AL,CL
JC CARRY1
JMP EXIT
CARRY1:
mov ah,09h
lea dx,mes
int 21h
exit: mov ax,4c00h
int 21h
main endp
end main

من نتونستم برای منظم شدن کدها رو تو تگ کد بنویسم ! ممنون میشم ایرادهای اینو برطرف کنین .
دوستان دست همگی درد نکنه موفق باشید .

mehdi5106
چهارشنبه 06 تیر 1386, 09:50 صبح
دوست عزیز اینم از برنامه مورد نظر شما:بیت به بیت دوران انجام میده اگه به بیتی برسه که یک باشه پیغامو بهت میده.

.model small
.stack 100
.data
a db 20H
mes db 'Found Bit','$'
.code
main proc far
mov ax,@data
mov ds,ax

mov bh,a
mov cl,8
l1:rcr bh,cl
jc ex
loop l1
jmp qu
ex:mov ah,09h
lea dx,mes
int 21h

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

fery
یک شنبه 10 تیر 1386, 21:40 عصر
ممنون میشم دوستان این برنامه رو اشکال زدایی و کامپایل کنن برام !
نمی دونم چرا من وقتی میخوام کامپایلش کنم کلی ارور میده .
به خط هایی که نقطه اولش هست همش ارور میده .
اگه میشه OBJ , EXE رو برام اتچ کنین .

PAGE 110,100
TITLE 'Rotate.ASM'

.MODEL SMALL
.stack 100
.data
mes db 'this is carry','$'
.code
.org 100h
begin: jmp start

data1 db 11111011b

start proc near
mov dx,0
mov bx,0
mov al,data1
mov cl,6
ror al,cl
jmp exit

carry1: mov ah,09h
lea dx,mes
int 21h
exit:
MOV AX,4C00H
INT 21H
start ENDP
END begin

Alay102
دوشنبه 11 تیر 1386, 00:48 صبح
Error به دلیل دستور .ORG 100 هست ، این دستور احتیاج به نقطه نداره !
دوست عزیز من فکر می کنم که برنامه شما از نظر کاربردی هم دچار مشکل هست ...

موفق باشی ...

mehdi5106
دوشنبه 11 تیر 1386, 06:05 صبح
اولا که دستور ORG نقطه نداره ، ثانیا حتما لازم نیست که تو برنامه قرار بدین و ثالثا برنامه ای که شما نوشتین CF رو بررسی نمی کنه پس پیغام چاپ نمی شه.

fery
شنبه 16 تیر 1386, 00:22 صبح
ممنون میشم برنامه ای که کار کنه رو کامپایل شدش رو با سورسش برام آپلود کنید .

usof_n
شنبه 03 شهریور 1386, 15:53 عصر
سلام یک کتاب برای اسمبلی معرفی کنید
که بتونم خیلی سریع و خوب یاد بگیرم

mehdi5106
یک شنبه 04 شهریور 1386, 10:44 صبح
به نظر من کتاب زبان ماشین و اسمبلی دکتر سیدرضی خوب باشه.لااقل از سایر کتابهای مشابه بهتر توضیح داده...