PDA

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



woeful
دوشنبه 09 فروردین 1389, 12:13 عصر
سلام

من این کد رو از داخل کتاب آموزشی نوشتم همه قسمت هاشو میفهمم ولی یه قسمتشو نمیفهمم که در کد زیر به رنگ قزمز لطف کنید بگید اون کد چکار میکنه؟؟!!!!


;Ability of thiS program.
;1-Clear screen.
;2-Set pointer.
;3-Get string.
;4-Convert to lower case.
;5-Display on screen
.MODEL SMALL
.STACK
.DATA
BUFFER DB 22,?,22 DUP(?)
ORG 18H
DATAREA DB CR,LF,22 DUP(?),'$'
CR EQU 0DH
LF EQU 0AH
;_____________________

.CODE
MAIN:
MOV AX,@DATA
MOV DS,AX
CALL CLEAR
CALL SET_POINTER
CALL GET_DATA
CALL CONVERT
CALL DISPLAY
MOV AH,4CH
INT 21H

;_________Clear________
CLEAR:
MOV AX,0600H
MOV BH,07H
MOV CX,0000
MOV DX,184FH
INT 10H
RET
;______________________
SET_POINTER:
MOV AH,02
MOV BH,00
MOV CX,1
MOV DX,3
INT 10H
RET
;______Display__________
DISPLAY:
MOV AH,09
MOV DX,OFFSET DATAREA
INT 21H
RET
;______Get data_________
GET_DATA:
MOV AH,0AH
MOV DX,OFFSET BUFFER
INT 21H
RET
;______Convet to lower case______
CONVERT:
MOV BX,OFFSET BUFFER
MOV CL,[BX]+1
SUB CH,CH
MOV DI,CX
MOV BYTE PTR[BX+DI]+2,20H
MOV SI,OFFSET DATAREA+2
AGAIN: MOV AL,[BX]+2
CMP AL,'A'
JB NEXT
CMP AL,'Z'
JA NEXT
OR AL,00100000B
NEXT: MOV [SI],AL
INC BX
INC SI
LOOP AGAIN
RET
END MAIN

karim_medusa
دوشنبه 09 فروردین 1389, 16:03 عصر
دو خط قرمز باعث میشه یک Space (کد اسکی 20 در مبنای هگز) به انتهای Buffer قرار گیرد.
البته با حذف این دو خط باز برنامه اجرا میشه حالا چرا این space اضافه کرده رو سر در نیاوردم.

حال اگر دو خط قرمز رو به این صورت تغییر بدیم

MOV DI,CX
MOV BYTE PTR[BX+DI]+2,21H

ADD CX,01

یک علامت ! به انتها اضافه می کند