PDA

View Full Version : سوال: درخواست راهنمايي درخصوص كداسمبلي حاضر



hbs592
یک شنبه 17 مرداد 1389, 13:37 عصر
با سلام بنده اين كد را نوشته ام ؛
مي خواهم خروجي برنامه را ببينم ؛ لطفاً راهنمايي لازم را مبذول نمائيد:
PAGE 110,100
TITLE 'REVERSE.ASM' REVERSE THE LISTS
.STACK 200
.DATA
LIST_1 DB 10 DUP(?)
LIST_2 DB 10,9,8,7,6,5,4,3,2,1
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
LEA SI,LIST_2
LEA DI,LIST_1
MOV CX,9
LOOP1:;
INC SI
LOOP LOOP1
MOV CX,10
LOOP2:
MOV AL,[SI]
MOV [DI],AL
DEC SI
INC DI
DEC CX
JNZ LOOP2
;-=-=-=-=-=-=-=-=-=-=-=
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN

tdkhakpur
یک شنبه 17 مرداد 1389, 13:44 عصر
چیزی چاپ نکردید! چی رو میخواهید ببینید؟

hbs592
یک شنبه 17 مرداد 1389, 13:49 عصر
چیزی چاپ نکردید! چی رو میخواهید ببینید؟
مي دانم چيزي چاپ نكرده ام مي خواهم چاپ كنم تا ببينم

tdkhakpur
یک شنبه 17 مرداد 1389, 14:06 عصر
مي دانم چيزي چاپ نكرده ام مي خواهم چاپ كنم تا ببينم

خب چی رو میخوای چاپ کنی؟برنامه شما داده ای ندارد که بخواهید چاپش کنید!
کد زیر یک نمونه هست که چیزی را چاپ میکنه


stacksg segment para stack 'stack'
stacksg ends
datasg segment para 'data'
m db 'Demo','$'
NewLine db 10, 13, '$'
datasg ends
codes segment para 'code'
main proc
assume ss:stacksg, ds:datasg, cs:codes
mov ax, datasg
mov ds, ax
;------------ ur programm
mov cx, 10
lp1:
push cx
mov bl, cl ; color or char status
mov bh, 0 ; page no
lea bp, m
call PutStr
mov ah,09h
lea dx,NewLine
int 21h

pop cx
loop lp1
; waite for press any key
mov ah,8
int 21h
;------------ end of program
mov ax, 4c00h
int 21h
main endp
PutStr proc
putch_lp1: ;-----<------;
push bx ;
push bp ;
mov ah, 9 ;
mov al, byte ptr [bp] ;
mov cx, 1 ;
int 10h ;
call NextPos ;
pop bp ;
pop bx ;
inc bp ;
mov al, byte ptr [bp] ;
cmp al, '$' ;
jne putch_lp1 ;---->-------;
ret
PutStr endp
NextPos proc
mov ah, 3 ; get cur pos of cursor
mov bh, 0
int 10h
mov ah, 1 ; set cursor setting
int 10h
mov ah, 2 ; move cursor to new pos
add dl, 1
int 10h
ret
NextPos endp
codes ends
end main

hbs592
دوشنبه 18 مرداد 1389, 10:37 صبح
با سلام
مجدداً اعلام مي كنم كه برنامه IST_2 DB 10,9,8,7,6,5,4,3,2,1
دارد كه به ثبات DI به صورت عكس شده منتقل شده و حالا مي خواهم رشته عكس شده را چاپ كنم فقط بفرمائيد چطوري؟

tdkhakpur
دوشنبه 18 مرداد 1389, 13:50 عصر
مجدداً اعلام مي كنم كه برنامه IST_2 DB 10,9,8,7,6,5,4,3,2,1
دارد كه به ثبات DI به صورت عكس شده منتقل شده و حالا مي خواهم رشته عكس شده را چاپ كنم فقط بفرمائيد چطوري؟
خواسته شما خیلی مجهوله ولی باز میفرماییم!
هر چیزی را که میخواهید چاپ کنید باید ابتدائا به $ ختم شده باشد و بعد از آن به شکل زیر که نمونه هست برای چاپ رشته تان استفاده کنید.


text dw 'hello my friend' , $

mov ah, 9
lea dx, text
int 21h

بعد از اجرای کد فوق جمله موجود در text چاپ میشود

hbs592
چهارشنبه 20 مرداد 1389, 10:49 صبح
با عرض معذرت

بالأخره متوجه نشدم چگونه مي توانم نتيجه برنامه را روي صفحه نمايش مشاهده كنم . اگر با كد برنامه مورد اشاره راهنمايي كنيد ممنون ميشم.
خواسته خيلي واضح و روشن است .
چند عدد كه داخل خود كد هست در داخل برنامه برعكس مي شود .حالا رشته عكس شده مي خواهم در صفحه؛ نمايش داده شود.كد خيلي پيچده اي نيست چند خط برنامه است.

tdkhakpur
چهارشنبه 20 مرداد 1389, 15:51 عصر
چند عدد كه داخل خود كد هست در داخل برنامه برعكس مي شود .حالا رشته عكس شده مي خواهم در صفحه؛ نمايش داده شود

1 - اینکه کد شما ایراد داره.
2- اینکه داخل داده هایتان رشته ای وجود ندارد که چاپ شود بلکه اعداد باید به رشته تبدیل و سپس چاپ شود.
3 - پیچیده نیست فقط وقت لازم داشت.


; This Macro Chenge HEX Or Binary To Decimal .........................
; NUMBER Is (WORD) .................................................. ..
; BUFFER is address of buffer
; digit is len of buffer or digit numbers
; RETURN : This Macro Return In buffer Decimal Number That It
; Has In His End 0
DECIMAL MACRO NUMBER, BUFFER, DIGIT
LOCAL E0, E1, LOOP__, EXIT_
MOV BX, DIGIT
MOV BYTE PTR BUFFER[BX], 0
MOV CX, BX
LOOP__:;----------------------------------;
DEC BX ;
MOV BYTE PTR BUFFER[BX], 32 ; clear the buffer
LOOP LOOP__;------------------------;
MOV BX, DIGIT
MOV AX, NUMBER
E0:
MOV DX, 0
MOV CX, 10
DIV CX
DEC BX
MOV BYTE PTR BUFFER[BX], DL ; BAGIMANDEH IN DX
ADD BYTE PTR BUFFER[BX], 30H
CMP BX, 0
JE EXIT_
CMP AX, 10
JNL E0
E1:
DEC BX
MOV BYTE PTR BUFFER[BX], AL
ADD BYTE PTR BUFFER[BX], 30H
EXIT_:
ENDM
;---------------------------------------------
stacksg segment para stack 'stack'
stacksg ends
datasg segment para 'data'
LIST_1 DB 10 DUP(?)
LIST_2 DB 10,9,8,7,6,5,4,3,2,1
TMP_BUFF db 20 dup('$')
NUM dw ?
datasg ends
codes segment para 'code'
main proc far
assume ss:stacksg, ds:datasg, cs:codes
mov ax, datasg
mov ds, ax
;------------ ur programm
; این قسمت داده هیا شما را برعکس میکند
LEA SI,LIST_2
LEA DI,LIST_1
ADD SI , 9
MOV CX,10
LOOP1:
MOV AL,[SI]
MOV [DI],AL
DEC SI
INC DI
LOOP LOOP1
;---PRINT DATA---------------------------
;این قسمت داده های برعکس شده را به عدد با فرمت رشته تبدیل و چاپ میکند
LEA DI,LIST_1
MOV CX,10
LOOP2:
PUSH CX
PUSH DI
MOV NUM, 0
MOV AL, BYTE PTR [DI]
MOV BYTE PTR NUM, AL
DECIMAL NUM, TMP_BUFF, 5 ; ماکرویی که عدد را به رشته تبدیل میکند
MOV BYTE PTR TMP_BUFF [5], '$' ; آخر رشته را به دلار ختم میکند تا چاپ شود
; اینجا داده های شما به چاپ می رود
MOV AH, 9
LEA DX, TMP_BUFF
INT 21H
POP DI
INC DI
POP CX
LOOP LOOP2
;------------ end of program
mov ax, 4c00h
int 21h
main endp
codes ends
end main

hbs592
یک شنبه 28 شهریور 1389, 11:13 صبح
بدین وسیله از شما دقیقاً به سؤالم که سؤال خیلیها بوده و هست جواب مناسب ارائه نمودید تشکر می کنم موفق باشید