راهنمایی اسمبلی

aida-joon

New Member
من با تلاش زیاد تونستم بلاخره برنامه بنویسم .روی برنامه های دیگه هم کار میکنم.اما اگه جایی به مشکل برخوردم کمک میکنید؟؟؟؟؟؟؟؟
تو برنامه زیر اکر جای stack عوض کنم و در آخر با .stack بزارم حرف T تو 2 سطر متوالی چاپ میشه.اطفا علتش رو توضیح بدید.این برنامه برای چاپ ستاره است:




.model small
.stack 100h
.data
msg db 13,10,"$"
msg1 db 13,10, "press any key to continue...","$"
A dw ?
.code
main proc far

mov ax,@data
mov ds,ax

mov A,1
mov cx,25
for1:
push cx
mov cx,A
for2:
mov ah,02h
mov dl,'*'
int 21h

loop for2
mov ah,09h
lea dx,msg
int 21h
pop cx
inc A
loop for1
mov ah,09h
lea dx,msg1
int 21h
mov ah,08h
int 21h
finish:
mov ah,4ch
int 21h

main endp
end main
 

the_king

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

استفاده کنید تا کد تان در میان تگ های [CODE] قرار بگیرد و به درستی مشاهده شود.

شما کد تان را بصورت ترکیبی از شیوه های قدیمی مثل proc و data@ و شیوه های جدید مثل data. و code.
نوشته اید که در هنگام کامپایل شدن با مشکل مواجه می شود.

در ضمن دستور MOV A, 1 قابل اجرا شدن نیست، چون A به یک آدرس از حافظه ترجمه می شود و چنین آدرسی
نمی تواند در یک دستور با مقدار دهی فوری مثل عدد 1 ترکیب شود. بایستی چنین دستور هایی را به دو
دستور متوالی بشکنید، مثلا :
کد:
MOV    AX, 1
MOV    A, AX

به کد کامل برنامه و تغییراتی که در آن داده شده توجه کنید :
کد:
.MODEL	SMALL
.DATA 
	msg	DB 13, 10, "$"
	msg1	DB 13, 10, "press any key to continue...","$"
	A	dw 1
.CODE
.STARTUP
	MOV	CX, 25
for1:
	PUSH	CX
	MOV	CX, A
for2:
	MOV	AH, 02h
	MOV	DL, '*'
	INT	21h
	LOOP	for2
	MOV	AH ,09h
	LEA	DX, msg
	INT	21h
	POP	CX
	INC	A
	LOOP	for1 
	MOV	AH, 09h
	LEA	DX, msg1
	INT	21h
	MOV	AH, 08h
	INT	21h
finish:
	.EXIT
.STACK
END
 

جدیدترین ارسال ها

بالا