PDA

View Full Version : سوال: یک رشته رو از ورودی دریافت کنیم و اون رشته 30 کارکتری رو دقیقا وسط صفحه چاپ کنیم چه اون رشته سه کارا



مهندس -نرم افزار
جمعه 11 دی 1394, 15:48 عصر
سوال استاد زبان ماشین ما این بود که یک رشته رو از ورودی دریافت کنیم و اون رشته 30 کارکتری رو دقیقا وسط صفحه چاپ کنیم چه اون رشته سه کاراکتر داشته باشه وسط صفحه باشه چه 30 کارکتر داشته باشه وسط صفحه باشه و گفته ما باید طول رشته رو دریافت کنیم تقسیم به دو کنیم و اون رو در وسط صفحه قرار دهیم حالا من این کد رو نوشتم ولی اصلن جواب نمیده میشه کمکم کنید؟
++++++++++++++++++++++++++++++


این قسمت صفحه پاک میکنه
mov ah,06h
mov bh,00001111b
mov al,00h
mov cl,00h
mov ch,00h
mov dh,24
mov dl,79
int 10h
;----------;

این قسمت کارکتر دریافت و چاپ میکنه
mov ah,0ah
lea dx,str
int 21h

mov ah,09
lea dx,si
int 10h
;----------;
این قسمت طول رشته دریافتی رو گرفته و تقسیم بر دو میکنه
lea si,str
inc si
mov cl,[si]
mov al,2
sub ah,ah
div cl
inc si
این قسمت مکان نما رو به محل مورد نظر میبره
mov ah,02
mov bh,00h
mov dh,12
mov dl,40
sub dl,al
int 10h
که مشکل من توی همین قسمت بالایی هستش از جایی که طول رشته رو میگیره تا مکان نما رو به محل مورد نظر میبره

;----------;
add si,cx
mov [si],"$"
inc si
mov ah,09
lea dx,str
add dx,2
int 21h

;----------;
mov dh,0
mov ah,4ch
int 21h



str db 31,?,31 dup(?)
s db "enter:$"



ممنون میشم اگه بتونیم هر چه زودتر مشکلم رو بهم بگید حداقل تا قبل از دوشنبه 14 دی ماه با ذکر اینکه ما همه وقفه رو یاد نگرفتیم و تعداد معدودی از وقفها مثل پاک کردن صفحه 06 وقفه 10h و تغییر محل ماکان نما 02 وقفه 10hو نمایش کاراکتر 02وقفه 21hو دریافت کاراکتر 01 وقفه 21hو نمایش یک رشته 09 وقفه 21hو دریافت یک رشتهاز صفحه کلید وقفه 21h0Aووقفه تشخیص فشرده شدن یا نشدن کلید 01 وقفه 16hو وقفه تشخیص کلید فشرده شده 00hوقفه 16h

masoud.8086
جمعه 11 دی 1394, 22:15 عصر
فایل اصلاح شده موفق باشید


; multi-segment executable file template.

data segment
str db 31,30 dup("$")
col db 39
s db "enter:$"
tow db 2
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,06h
mov bh,00001111b
mov al,00h
mov cl,00h
mov ch,00h
mov dh,24
mov dl,79
int 10h
;----------;


mov ah,0ah
lea dx,str
int 21h


mov al,str[1]
cbw

div tow
sub col,al

mov ah,02
mov bh,00h
mov dh,12
mov dl,col

int 10h

mov ah,09
lea dx,str
add dx,2
int 21h




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

end start ; set entry point and stop the assembler.

مهندس -نرم افزار
سه شنبه 15 دی 1394, 23:48 عصر
سلام ممنون از مسعود من خودم هم روی این برنامه کار کردم و به روش خودم اصلاحش کردم که جواب میده



mov ah,06h
mov bh,00001111b
mov al,00h
mov cl,00h
mov ch,00h
mov dh,24
mov dl,79
int 10h
;----------;
mov ah,0ah
lea dx,str
int 21h

mov ah,09
lea dx,si
int 10h



;----------;
mov ax,0
lea si,str
inc si
mov cl,[si]
mov al,cl
sub ah,ah
div d1
sub a,al
inc si
mov ah,02
mov bh,00h
mov dh,12
mov dl,a

int 10h


;----------;
add si,cx
mov [si],"$"
inc si
mov ah,09
lea dx,str
add dx,2
int 21h

;----------;
mov dh,0
mov ah,4ch
int 21h



str db 31,?,31 dup(?)
s db "enter:$"
q db ?
d1 db 2
a db 39

Ali_emoxx
جمعه 18 دی 1394, 20:57 عصر
سلام اقا یه کمکی به بنده کنید
من همین برنامه رو میخوام یک
رشته رو از ورودی دریافت کنیم و اون رشته 30 کارکتری رو دقیقا وسط صفحه چاپ کنیم چه اون رشته سه کاراکتر داشته باشه وسط صفحه باشه چه 30 کارکتر داشته باشه فقط
با این تفاوت که حروف رشته را به حروف بزرگ تغیر داده شوددد ...................