PDA

View Full Version : در خواست کمک ایراد کد زیر کجایش؟



bigtime
پنج شنبه 15 اردیبهشت 1390, 21:35 عصر
.model small
stackseg segment stack 'stack'
db 64 dup (?)
stackseg ends
dataseg segment 'data'
data1 db 'MY NAME is amin'
org 30H
data2 db 14 dup(?)
dataseg ends
code1 segment 'code'
assume ds:dataseg,ss:stackseg,cs:codeseg
main proc far
mov ax,dataseg
mov ds,ax
mov cx,14
lea bx,data1
lea ax,data2
dec bx
dec ax
start: inc ax
inc bx
cmp [bx],5cH
jbe copy
sub [bx],20H
copy: mov dx,[bx]
mov [ax],dx
loop start
mov ah,4ch
int 21h
main endp
code1 ends
end main

tdkhakpur
جمعه 16 اردیبهشت 1390, 03:32 صبح
الگوریتم کارتان درسته فقط یه سری اشکال در مورد استفاده از دستورات دارید.
1- اینکه برای هر انتسابی که در مورد حافظه انجام میدید مشخص کنید که طول انتساب چگونه باید انجام بگیره تا خطا یا اخطار دستوری دریافت نکنید مثلا برای کد زیر باید بصورت رنگ شده استفاده کنید.


mov [bp], 20h; -->>> mov byte ptr [bp], 20h;

2- اما در مورد ایجاد اشاره گر حافظه برای مقدار دهی به محتوای خانه های حافظه ار bxو bp , siو di استفاده کنید در صورتی که شما در کدتان از ax استفاده کردید و برای این کدی که شما نوشتید آپ کدی وجود ندارد.
3 - همواره مقدار حلقه رو درست تنظیم کنید حتی یک واحد میتونه باعث بشه فکر کنید کل برنامه تان اشتباه هست
4 - بهترین راه برای برنامه نویسی سریع استفاده از ساختار خالی یا اسکلت خالی و بعد اعمال تغییر در آن هست مثلا این اسکلت میتونه یک برنامه خالی باشه و شما کدتان رو ما بین قسمت خط چین بنویسید.


datas segment
datas ends
stacks segment
dw 128 dup(0)
stacks ends
codes segment
begin:
assume ss:stacks, ds:datas, cs:codes
; set segment registers:
mov ax, datas
mov ds, ax
mov es, ax
;----------------------------------------
;----------------------------------------
mov ax, 4c00h ; exit to operating system.
int 21h
codes ends
end begin ; set entry point and stop the assembler.

و این هم همان کدی که نوشتید


datas segment
data1 db 'MY NAME is amin'
data2 db 15 dup(?), '$'
datas ends
stacks segment
dw 128 dup(0)
stacks ends
codes segment
begin:
assume ss:stacks, ds:datas, cs:codes
; set segment registers:
mov ax, datas
mov ds, ax
mov es, ax
;----------------------------------------
mov cx,14
lea bx, data1
lea bp, data2
start:
cmp byte ptr [bx],5cH
jbe copy
sub byte ptr [bx],20H
copy:
mov dx,[bx]
mov [bp],dx
inc bp
inc bx
loop start
; out string in to consol
lea dx, data2
mov ah, 9
int 21h
;----------------------------------------
mov ax, 4c00h ; exit to operating system.
int 21h
codes ends
end begin ; set entry point and stop the assembler.