کمک در کامل کردن برنامه
سلام دوستان خوبید ، منو دوستم چندتا برنامه به اسمبلی نوشتیم که البته ایراد دارن ، ما مخوایم فقط بمون کمک کنین ، نه ک برنامه رو واسمون کامل بنویسید ، ما اون چیزی رو ک بلد بودیم نوشتیم ، واسه حل مشکلان مونده از شما کمک میخوایم .
ضمن اینکه اولین پست من در این سایته ، امیدوارم منو تو جمع خودتون بپزیرید.
====================================
مثلا این سول 1: برنامه ای که محتویات یک فایل را خوانده و تعداد حروف بزرگ را شمارش و در انتهای فایل ذخیره کند.
اگه جملاتمون تو فایل کوتاه باشه بصورت رندم جواب درست میده اما اکثرا غلط میده :
[PASCAL]data segment
f db 'd:\filetest2.txt'
fh1 dw ?
n db ' '
str db ' $'
i db ?
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov n,'0'
mov ah,3dh
mov al,2
lea dx,f
int 21h
mov fh1,ax
mov i,0
l1:
mov ah,42h
mov al,00
mov bx,fh1
mov cx,00h
mov dx,i
int 21h
;------
mov ah,3fh
mov bx,fh1
mov cx,1
lea dx,str
int 21h
;---------------------
cmp str,65
jae l2
jmp ex
l2:
cmp str,90
jbe l3
jmp ex
l3:
inc n
aaa
jmp ex
ex:
inc i
cmp i,10
jbe l1
;-------
mov ah,42h
mov al,2
mov bx,fh1
mov cx,00h
mov dx,00
int 21h
;------
mov ah,40h
mov bx,fh1
mov cx,1
lea dx,n
int 21h
;--------
mov ah,3eh
mov bx,fh1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
[/PASCAL]
=========================================================================
یا این سوال 2: برنامه ای که محتوای دو فایل با حداکثر 100 کاراکتر را خوانده و کلماتی که بیش از 5 حرف دارند در یک فایل جدید ذخیره نماید :
ما اینو نوشتیم ک بازم اگه جملات زیاد باشه میمونه توش تو فایلم ذخیره نمیکنه
[PASCAL]data segment
f1 db 'd:\filetest3.txt'
fh1 dw ?
str1 db ' $'
str2 db ' $'
i dw ?
j dw ?
n dw -1
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ah,3dh
mov al,00
lea dx,f1
int 21h
mov fh1,ax
mov i,0
l1:
mov ah,42h
mov al,00
mov bx,fh1
mov cx,00h
mov dx,i
int 21h
mov ah,3fh
mov bx,fh1
mov cx,1
lea dx,str1
int 21h
inc n
l3:cmp str1,' '
je l4
jmp continue
l4:cmp n,5
jae l5
jmp l6
l6:mov n,-1
jmp continue
l5:
mov di,i
sub di,n
mov j,di
add di,n
label:
mov ah,42h
mov al,00
mov bx,fh1
mov cx,00h
mov dx,j
int 21h
mov ah,3fh
mov bx,fh1
mov cx,1
lea dx,str2
int 21h
mov dl,str2
mov ah,02h
int 21h
inc j
cmp j,di
jbe label
mov n,-1
jmp continue
continue:
inc i
cmp i,25
jbe l1
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
[/PASCAL]
---------------------------------------------------------------------------
یا این یکی سوال 3 : برنامه ک دنبال یه کلمه بگرده تو یک فایل و تعداد تکرار اون کلمه رو در پایان همون فایل درج کنه ، مثلا ما کلمه GREEN رو گزاتیم ، بازم مشکل بالایی ها رو داره :
[PASCAL]data segment
f db 'd:\filetest4.txt'
fh1 dw ?
str db 5 dup (' ')
n db ' '
i dw ?
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov n,'0'
mov ah,3dh
mov al,2
lea dx,f
int 21h
mov fh1,ax
mov i,0
l1:
mov ah,42h
mov al,00
mov bx,fh1
mov cx,00h
mov dx,i
int 21h
;------
mov ah,3fh
mov bx,fh1
mov cx,5
lea dx,str
int 21h
;---------------------
cmp str[0],'G'
je l2
jmp continue
l2:
cmp str[1],'R'
je l3
jmp continue
l3:
cmp str[2],'E'
je l4
jmp continue
l4:
cmp str[3],'E'
je l5
jmp continue
l5:
cmp str[4],'N'
je l6
jmp continue
l6:
inc n
aaa
jmp continue
continue:
inc i
cmp i,29
jbe l1
jmp exit
exit:
mov ah,42h
mov al,2
mov bx,fh1
mov cx,00h
mov dx,00
int 21h
;------
mov ah,40h
mov bx,fh1
mov cx,1
lea dx,n
int 21h
;--------
mov ah,3eh
mov bx,fh1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
[/PASCAL]
==========================================================================
و این هم آخرین سوال 4: برنامه ای که کلماتی را که دو کاراکتر پشت سرهم در یک فایل دارد جدا نموده و در یک فایل جدید ذخیره کند. مثلا aali ,pool , sodd ک اینم باز وقتی جملاتمون تو فایل زیاد میشه میمونیم :
[PASCAL]
data segment
f1 db 'd:\filetest5.txt'
fh1 dw ?
str1 db 2 dup ' $'
str2 db ' $'
i dw ?
j dw ?
n dw -1
temp db 0
kom dw ?
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov ah,3dh
mov al,02
lea dx,f1
int 21h
mov fh1,ax
mov i,0
l1:
mov ah,42h
mov al,00
mov bx,fh1
mov cx,00h
mov dx,i
int 21h
mov ah,3fh
mov bx,fh1
mov cx,2
lea dx,str1
int 21h
inc n
mov di,0
lea si,str1[di]
lea di,str1[di+1]
cmpsb
je l2
jmp l3
l2: mov temp,1
jmp l3
l3:cmp str1[0],32
je l4
jmp continue
l4:cmp temp,1
je l5
jmp l6
l6:mov n,-1
jmp continue
l5:
mov di,i
sub di,n
mov j,di
add di,n
label:
mov ah,42h
mov al,00
mov bx,fh1
mov cx,00h
mov dx,j
int 21h
mov ah,3fh
mov bx,fh1
mov cx,2
lea dx,str2
int 21h
mov dl,str2
mov ah,02h
int 21h
inc j
cmp j,di
jbe label
mov n,-1
mov temp,0
jmp continue
continue:
inc i
cmp i,25
jbe l1
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.[/PASCAL]
از emu8086 استفاده میکنیم.
(آخرین ویرایش در این ارسال: ۰۱-تير-۱۳۹۰, ۰۰:۲۲:۴۱، توسط nilo_nazanin.)
|