PDA

View Full Version : آرایه



Hussein39
پنج شنبه 27 خرداد 1389, 11:29 صبح
سلام دوستان
ممکنه در رابطه با این برنامه راهنماییم کنید که منظورش چیه:
یک آرایه 4 کلمه ای تعریف کنید و یک متغییر 16 بیتی نیز برای اشاره به ابتدای آن در نظر بگیرید، دستوراتی که محتوای اشاره گر را در یک Index reg قرار داده و محتوای آرایه را به صورت عکس در خانه های دیگر از حافظه قرار دهد را تعیین کنید(با اسمبلر)
g اسمبلر منظورش همون Debuهست.
با تشکر

tdkhakpur
جمعه 28 خرداد 1389, 12:05 عصر
برنامه نویسی خواسته شما بصورت زیر میشود و منظور بر عکس کردن داده های یک آرایه هست


array dw 4 dup(?)
indx dw ?
lea ax, array
mov index, ax
mov cx, 2
mov bx, index
mov bp, index
add bp, 6
lp1:
mov ax, word ptr[bx]
mov dx, word ptr[bp]
mov word ptr[bx], dx
mov word ptr[bp], ax
add bx, 2
dex bp, 2
loop lp1

Hussein39
شنبه 29 خرداد 1389, 23:31 عصر
خیلی ممنون tdkhakpur (http://www.barnamenevis.org/forum/member.php?u=99732)
ممکنه تو این سوال هم کمکم کنید:
برنامه ای بنویسید که یک پنجره ایجاد کرده و متنی را در آن نمایش دهد و سپس با زدن هر کلید ان پنجره رو به بالا scroll نماید.
منظورش رو از پنجره متوجه نمی شم (برنامه ها رو معمولا تو emu8086 می نویسیم)؟
واسه scroll کردن از تابع خاصی استفاده می کنم؟
با تشکر

tdkhakpur
یک شنبه 30 خرداد 1389, 10:24 صبح
واسه scroll کردن از تابع خاصی استفاده می کنم؟


توابع وقفه 10h را نگاهی بیندازید برای scroll تابعی خاص وجود دارد.

Hussein39
چهارشنبه 02 تیر 1389, 00:40 صبح
سلام دوستان من این کد رو نوشتم نمی دونم چرا نمی تونم scroll کنم در ضمن چطور می تونم تشخیص بدم که کلید enter زده شده.




data segment

pkey db "Hussein39$"
ends



code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ah,2

;position
mov dh, 10
mov dl, 20
mov bh, 0
mov ah, 2
int 10h


;entering char
mov ah,9
mov dx,offset pkey
int 21h

mov cx,5
l:
;scrolling
mov ah,07h
mov al,5
mov bh,21h
int 10h
loop l
; output string at ds:dx



mov ax, 4c00h ; exit to operating system.
int 21h
ends

end start ; set entry point and stop the assembler.


با تشکر

tdkhakpur
چهارشنبه 02 تیر 1389, 01:23 صبح
; multi-segment executable file template.
data segment
; add your data here!
pkey db "Hussein39$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
assume cs:code; ds: data; ss:stack
mov ax, data
mov ds, ax
mov es, ax
mov ah,2
;position
mov dh, 10
mov dl, 20
mov bh, 0
mov ah, 2
int 10h

;entering char
mov ah,9
mov dx,offset pkey
int 21h
mov cx,5
l:
push cx
;scrolling down
mov ah, 07h
mov al, 1
mov cl, 0
mov ch, 0
mov dl, 40
mov dh, 20
mov bh, 00000000b; 21h
int 10h
; press any key
mov ah, 0
int 16h
pop cx
loop l
; output string at ds:dx

mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler

Hussein39
چهارشنبه 02 تیر 1389, 09:30 صبح
آقا بازم دستتون درد نکنه خیلی ممنون
یه برنامه دیگه دارم که می گه یک فایل رو به را با استفاده از یک کلید 40 بایتی رمز گزاری کنید کد با بایت های متناظر خوانده شده از یک فایل xor می شود و نتیجه در یک فایل دیگر ذخیره می گردد. من این برنامه زیر رو نوشتم فکر کنم منظورش رو از نظر کلید 40 بایتی رسوندم ولی مشکلی که داره می ره تو loop.


.data
.code
main proc
mov ax,@data
mov ds,ax
mov cx,40

top:
mov ah,6h
mov dl,1h
int 21h
jz quit
l:
xor al,33h
loop l
mov ah,2
mov dl,al
int 21h
jmp top

quit:

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

Hussein39
چهارشنبه 02 تیر 1389, 10:50 صبح
خیلی ممنون دستت درد نکنه
یه سوال که میگه برنامه ای که یک فایل را دریافت کند و با استفاده از یک کلید 40 بایتی آنرا رمز نگاری کند که بایت های متناظر خوانده شده از یک فایل xor می شود و نتیجه در یک فایل دیگر ذخیره می شود.
من تونستم کد زیر رو بنویسم:متعجب: ولی نمی دونم درسته یا نه و مشکلی که داره اینکه که میره تو loop :عصبانی++:


.stack 100h
.data
.code
main proc
mov ax,@data
mov ds,ax
mov cx,40

top:
mov ah,6h
mov dl,1h
int 21h
jz quit
l:
xor al,33h
loop l
mov ah,2
mov dl,al
int 21h
jmp top

quit:

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


واسه ورود فایل اینطوری استفاده کردم که encryption.exe <file1.txt> s.txt
با تشکر

tdkhakpur
چهارشنبه 02 تیر 1389, 12:19 عصر
ولی نمی دونم درسته یا نه و مشکلی که داره اینکه که میره تو loop :عصبانی++:

الگوریتم بررسی نشد ولی مطمئن هستید jz بعد از هدف 21h درست عمل میکند؟


mov ah,6h
mov dl,1h
int 21h
jz quit // اینجا

Hussein39
چهارشنبه 02 تیر 1389, 13:21 عصر
خوب باید یه جوری خارج بشه، منظورتون رو نفهمیدم، در مورد کلید 40 بایتی درست ایا عمل می کنه؟؟

tdkhakpur
چهارشنبه 02 تیر 1389, 13:47 عصر
جناب Hussein39 (http://barnamenevis.org/forum/member.php?u=77284) این کدهایی که ارسال کردید معنیش چی هست؟
اصلا بحثی که شما مطرخ میکنید با کد ارسالی شما سازگاری ندارد استفاده از وردی و خروجی کنسول و یا چاپ کاراکتر چه ارتباطی با فایل دارد؟

Hussein39
چهارشنبه 02 تیر 1389, 15:04 عصر
اصل برنامه می گه: برنامه ای بنوسید که یک فایل به شکل زیر رمز کند( با استفاده از یک کلید 40 بایتی)(Encryption Key) کد با بایت های متناظر خوانده شده از یک فایل xor می شود و نتیجه در یک فایل دیگر ذخیره می شود.
تو برنامه زیر من امدم برای کد کردن یک فایل و قرار دادن نتیجه کد شده در یک فایل خروجی از کد زیر استفاده کردم که متناظر eof هست که zf می شه 1



mov ah,6h
mov dl,1h
int 21h


که اصل کد اینه البته برای رمز کردن با استفاده از کلید یک بایتی:



.stack 100h

.code
main proc
mov ax,@data
mov ds,ax

top:
mov ah,6h
mov dl,0ffh
int 21h
jz quit
xor al,33h
mov ah,2
mov dl,al
int 21h
jmp top
quit:
mov ax,4c00h
int 21h
endp main
end main



که اینجا امدم با یک کلید( 33h) یک بایتی ، xor کردم
خوب حالا این کد چطور یک فایل رو رمز می کنه برای این کار اول کمپایلش می کنیم(مثلا با نامencryption.exe) و فایل exe اش رو مثلا می اندازیم تو پارتیشن c، یک فایل با پسوند txt باز می کنیم و متن مورد نظر رو می نویسیم و کنار فایل exe قرار می دیم بعد با استفاده از cmd به در ایو c می ریم و فایل رو رمز نگاری می کنیم به صورت زیر:

C:\>encryption.exe <a.txt> s.txt

در اینجا فایل ورودی a.txt و فایل خروجی s.txt
حالا واسه کلید 40 بایتی نمی دونم چیکار باید بکنم اگه می شه برنامه اش رو واسم بزارین
با تشکر:قلب: