ورود

View Full Version : اصلاح کد



kiuhnmgtrdcv
دوشنبه 22 تیر 1388, 20:16 عصر
من این برنامه رو نوشتم که یه مثلث به این شکل چاپ میکنه توی emu8086 تقریبا نتیجه قابل قبولی میگیرم ولی نمیدونم چرا وقتی link میکنم و خود فایل exe درست میکنم نتیجه حاصل با اون چیزی که میخوام فرف میکنه!
http://img2.pict.com/48/5e/27/1161619/0/1.jpg



.model small
.stack 64h
.data
l db 13,10,'$'
num dw 64
.code
main proc far

mov si,0
lst1: cmp si,5
jz len1

mov di,0
mov bx,si
sub bx,4
neg bx
lst2:cmp di,bx
jz lst3
mov dl,' '
mov ah,2
int 21h
inc di
jmp lst2

lst3:mov cx,0
mov bx,si
shl bx,1
add bx,1
lst4:cmp cx,bx
jz lst5
mov dl,'*'
mov ah,2
int 21h
inc cx
jmp lst4
lst5:mov ah,9
lea dx,l
int 21h
inc si
jmp lst1
len1:
mov ah,4ch
int 21h

endp
end main

tdkhakpur
دوشنبه 22 تیر 1388, 21:21 عصر
سلام
نتیجه چه جور میشه؟

kiuhnmgtrdcv
دوشنبه 22 تیر 1388, 22:28 عصر
توی emu8086
http://img2.pict.com/5f/e9/45/1162933/0/1.gif

لینک شده
http://img2.pict.com/79/d4/a4/1162944/0/2.gif

tdkhakpur
دوشنبه 22 تیر 1388, 23:24 عصر
سلام
کد زیر را اصلاح کنید


l db 13,10,'$'
.. اصلاح کنید به
l db 32, 32,'$'

kiuhnmgtrdcv
سه شنبه 23 تیر 1388, 11:04 صبح
سلام

l db 13,10,'$'

در حقیقت مثل endl در ++c هست من کد تغییر دادم ولی تاثیری نداشت

tdkhakpur
سه شنبه 23 تیر 1388, 15:47 عصر
سلام
به غیر از موارد فوق من اشکالی داخل برنامه شما نمی بینم.
ولی در کدهای فوق وقتی شما کدهای زیر 32 را برای کنسول می فرستید این کدها منجر به اجرای روتینهای اجرایی میشوند یعنی به نوعی آنها یک نوع دستور به حساب می آیند.

tdkhakpur
سه شنبه 23 تیر 1388, 16:09 عصر
سلام
این کار برنامه شما مرا هم به شک انداخت ببینید همانطور که گفتم برنامه شما اصلا ایراد ندارد من یک ساختار کلی به همراه چگونگی کامپایل را با یک bat فایل برای شما ارسال می کنم و برنامه شما هم درش هست مسیر bat فایل را درست کرده و بصورت زیر برنامه را کامپایل کنید.(داخل خط فرمان)


ce treangle اینتر

موفق باشید.

Open-Source
سه شنبه 23 تیر 1388, 18:47 عصر
این یه نمونه کد سالم:


; *
; ***
; *****
; *******
; *********

.model small

.data
t1 db ?
t2 db ?

.code
start:
mov ax,@data
mov ds,ax

mov t1,1
mov t2,20

;-------------------------------------------------
mov cx,20
up1:

push cx

;----------------- space
mov bl,t2
mov bh,0

mov cx,bx
up2:
mov ah,2
mov dl,' '
int 21h
loop up2
;------------------

pop cx

push cx

;---------------- start
mov bl,t1
mov bh,0

mov cx,bx
up3:
mov ah,2
mov dl,'*'
int 21h
loop up3
;----------------

add t1,2
dec t2

mov ah,2
mov dl,10
int 21h

pop cx

loop up1
;---------------------------------------------------------


;---------- end
mov ah,0
int 16h

mov ah,4ch
int 21h

end start

kiuhnmgtrdcv
سه شنبه 23 تیر 1388, 20:26 عصر
سلام
به غیر از موارد فوق من اشکالی داخل برنامه شما نمی بینم.
ولی در کدهای فوق وقتی شما کدهای زیر 32 را برای کنسول می فرستید این کدها منجر به اجرای روتینهای اجرایی میشوند یعنی به نوعی آنها یک نوع دستور به حساب می آیند.
من منظور شما را از کدهای زیر 32 نمیفهمم که یک نوع دستور به حساب می ایند لطفا راهنماییم کنید

kiuhnmgtrdcv
سه شنبه 23 تیر 1388, 20:36 عصر
من کد زیر به اسمبلی برگردوندم


#include<iostream.h>
void main()
{
int i,j,k ;
for(i=0; i<5 ;i++)
{
for(j=0;j<4-i;j++)
{
cout<<" " ;
}
for(k=0;k<2*i+1;k++)
{
cout<<"*";
}
cout <<endl;
}

}

tdkhakpur
سه شنبه 23 تیر 1388, 22:20 عصر
سلام

من منظور شما را از کدهای زیر 32 نمیفهمم که یک نوع دستور به حساب می ایند لطفا راهنماییم کنید
ببینید صفحه نمایش و یا هر نوع خروجی دیگر در اصل یک نوع device محسوب میشود لذا برای این نوع دستگاهها که از نوع بلوکی و یا داده ای هستند که با ارسال این بایتهای فرمان عمل خاصی انجام میدهند لذا اصولا همیشه این دستگاهها از کد های زیر 32 یعنی کدهای 0 تا 31 برای انجام عمل خاص استفاده می کنند.
مثلا با ارسال کد 10 میتواند دستگاه را وادار کرد که یک خط به پایین بپرد و یا با ارسال کد 12 به چاپگر میتوانید بگویید که صفحه حدید را برای چاپ در آن اماده کند و سایر کدهای دیگر...