PDA

View Full Version : سوال: تبدیل حروف کوچک یک رشته به حروف بزرگ



karshenasi
جمعه 04 تیر 1389, 19:12 عصر
سلام
برنامه زیر یک رشته میگیرد و آن را به حروف بزرگ تبدیل میکند
ولی در درک و تحلیل آن مشکل دارم
کسی میتونه کمکم کنه ؟




SSEG SEGMENT 'STACK'
DW 32H DUP(0)
SSEG ENDS

DSEG SEGMENT 'DATA'
PARALIST LABEL BYTE
MAXLEN DB 100
ACTLEN DB ?
KBDATA DB 20 DUP(0)
DSEG ENDS

CSEG SEGMENT 'CODE'
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
MAIN PROC NEAR
MOV AX,DSEG
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET PARALIST
INT 21H
LEA DI,KBDATA
AGAIN:CMP BYTE PTR[DI],'a'
JB NEXT
CMP BYTE PTR[DI],'z'
JA NEXT
SUB BYTE PTR[DI],20H
NEXT: INC DI
DEC ACTLEN
JNZ AGAIN
MOV BYTE PTR[DI],'$'
MOV AH,9
MOV DX,OFFSET KBDATA
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
CSEG ENDS
END MAIN

karshenasi
شنبه 05 تیر 1389, 17:33 عصر
:ناراحت::ناراحت::ناراحت::نار حت::ناراحت::ناراحت::ناراحت:: اراحت::ناراحت::ناراحت:

Delphi Coder
شنبه 05 تیر 1389, 19:27 عصر
سلام.
با استفاده از تابع 0Ah از وقفه 21h رشته رو از ورودی گرفته بعد کاراکتر به کاراکتر رفته جلو تا به آخر برسه هر کاراکتری که حروف کوچک بوده 32 تا از کد اسکی اون کم کرده تا تبدیل بشه به حروف بزرگ. نهایتا ته رشته یه $ اضافه کرده چون برای چاپش از تابع 9 وقفه 21 استفاده شده و بعد رشته رو چاپ کرده. همین.
اگه یکم سوالتونو واضح تر بپرسید راحتتر میشه پاسخ داد. اینکه بگید دقیقا با کدوم قسمتش مشکل دارید یا متوجه نشدید. چون الان من خودم نمیدونم توضیحاتی که دادم کافی هست براتون یا نه.

delphi5
جمعه 17 شهریور 1391, 15:05 عصر
سلام
برنامه زیر یک رشته میگیرد و آن را به حروف بزرگ تبدیل میکند
ولی در درک و تحلیل آن مشکل دارم
کسی میتونه کمکم کنه ؟




SSEG SEGMENT 'STACK'
DW 32H DUP(0)
SSEG ENDS

DSEG SEGMENT 'DATA'
PARALIST LABEL BYTE
MAXLEN DB 100
ACTLEN DB ?
KBDATA DB 20 DUP(0)
DSEG ENDS

CSEG SEGMENT 'CODE'
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
MAIN PROC NEAR
MOV AX,DSEG
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET PARALIST
INT 21H
LEA DI,KBDATA
AGAIN:CMP BYTE PTR[DI],'a'
JB NEXT
CMP BYTE PTR[DI],'z'
JA NEXT
SUB BYTE PTR[DI],20H
NEXT: INC DI
DEC ACTLEN
JNZ AGAIN
MOV BYTE PTR[DI],'$'
MOV AH,9
MOV DX,OFFSET KBDATA
INT 21H
MOV AX,4C00H
INT 21H
MAIN ENDP
CSEG ENDS
END MAIN





سلام
من توی اسمبلی مبتدی هستم
دستورات رو میدونم اما هیچ درکی از این تیکه برنامه ندارم
کسی میتونه کمکم کنه ؟
ممنون

xman_1365_x
شنبه 18 شهریور 1391, 12:43 عصر
دستورات رو میدونم اما هیچ درکی از این تیکه برنامه ندارم
کسی میتونه کمکم کنه ؟

یکبار نوشتم اما متاسفانه اینترنت قطع شد،خلاصه میگم
برنامه یک بافر از ورودی میگیره(وقفه 21 تابع A) با فرض اینکه ورودی حروف کوچک و بزرگ باشه ،در یک حلقه از ابتدا تا انتها حروف کوچک رو به بزرگ تبدیل میکنه که باید کد اسکی حروف رو به باینری بنویسید تا متوجه بشید چه بیتی رو تغییر میده،در آخر هم یک دالر به انتهای بافر اضافه میکنه و با وقفه 21 تابع 9 خروجی رو نمایش میده
موفق باشی