PDA

View Full Version : سوال: مشکل برنامه معکوس کردن رشته



Altech
سه شنبه 29 دی 1388, 15:53 عصر
سلام . من این برنامه رو نوشتم . ولی موقع اجرا شدن خروجی رو چاپ نمی کنه . یعنی تعداد زیادی علامت نامعلوم چاپ می کنه . در حالی که من آخر برنامه $ رو به رشته اضافه کردم.
ممنون میشم کمکم کنین .
این هم برنامه :


Page 60, 132
TITLE Reverse characters(EXE)
;----------------------------------------------------------------------------------------
.MODEL SMALL
.STACK 64
;----------------------------------------------------------------------------------------
.DATA
PARALIST LABEL BYTE
MAXLEN DB 100
ACTULEN DB ?
KBNAME DB 101 Dup(' ')
PROMPT DB 'Name?$'
;----------------------------------------------------------------------------------------
.CODE
REVERSE PROC FAR
MOV AX, @data
MOV DS, AX
MOV ES, AX

MOV AH, 09H
LEA DX, PROMPT
INT 21H

MOV AH, 0AH
LEA DX, PARALIST
INT 21H

CMP ACTULEN, 00
JE E_N_D

LEA BX, KBNAME
MOV SI, BX
MOV CX, ACTULEN

A10:
INC SI
LOOP A10

DO_REVERSE:
CMP BX, SI
JAE DONE
MOV AL, [BX]
MOV AH, [SI]
MOV [SI], AL
MOV [BX], AH
INC BX
DEC SI
JMP DO_REVERSE

DONE:
MOV BX, ACTULEN
MOV KBNAME[ BX ], '$'
MOV AH, 09H
LEA DX, KBNAME
INT 21H

E_N_D:
MOV AX, 4C00H
INT 21H

REVERSE ENDP
END REVERSE

tdkhakpur
سه شنبه 29 دی 1388, 21:45 عصر
اشکالات شما علامت گذاری شد.


; Page 60, 132
;TITLE Reverse characters(EXE)
;----------------------------------------------------------------------------------------
.MODEL SMALL
.STACK 64
;----------------------------------------------------------------------------------------
.DATA
PARALIST LABEL BYTE
MAXLEN DB 100
ACTULEN DB ?
KBNAME DB 101 Dup('$') ; اصلاح
PROMPT DB 'Name?$'
;----------------------------------------------------------------------------------------
.CODE
REVERSE PROC FAR
MOV AX, @data
MOV DS, AX
MOV ES, AX
MOV AH, 09H
LEA DX, PROMPT
INT 21H
MOV AH, 0AH
LEA DX, PARALIST
INT 21H
CMP ACTULEN, 00
JE E_N_D
LEA BX, KBNAME
MOV SI, BX
mov cx, 0 ; اضافه شود
MOV Cl, ACTULEN ; اصلاح شود
A10:
INC SI
LOOP A10
DO_REVERSE:
CMP BX, SI
JAE DONE
MOV AL, [BX]
MOV AH, [SI]
MOV [SI], AL
MOV [BX], AH
INC BX
DEC SI
JMP DO_REVERSE
DONE:
MOV BX, 0 ; اضافه شود
MOV Bl, ACTULEN ; اصلاح شود
; MOV KBNAME[ BX ], '$' ; حذف شود
MOV AH, 09H
LEA DX, KBNAME
INT 21H
E_N_D:
MOV AX, 4C00H
INT 21H
REVERSE ENDP
END REVERSE

$ M 3 H R D A D $
سه شنبه 29 دی 1388, 23:53 عصر
سلام دوستای عزیزم
2 تا برنامه نوشته داشتم گفتم بزارم :



.MODEL SMALL
.STACK 64
.DATA
STR1 DB "Enter String : $"
STR DB 100 DUP(?)
REV DB 100 DUP(?)
REVstr DB "REV. String : $"
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
;--------------set monitor
MOV AH,0H
MOV AL,03H
INT 10H
;--------------clear screan
MOV AH,06H
MOV AL,0
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV BH,00001001B
INT 10H
;-------------Transfer the cursor1
MOV AH,02H
MOV DH,4
MOV DL,18
MOV BH,00H
INT 10H

;-------------Print text
MOV AH,09H ;;PRINT STRING
LEA DX,STR1 ;;MOV OFFSET STRING
INT 21H

;--------------clear screan
MOV AH,06H
MOV AL,0
MOV CH,4
MOV CL,32
MOV DH,4
MOV DL,79
MOV BH,00001010B
INT 10H
;-------------Change Str
MOV BX,0
L1:MOV AH,01H
INT 21H
CMP AL,13
JZ L2
MOV STR[BX],AL
INC BX
JMP L1
L2:
DEC BX
MOV CX,BX
INC CX
MOV SI,BX
MOV BX,0
L3:
MOV AL,STR[SI]
MOV REV[BX],AL
INC BX
DEC SI
LOOP L3
MOV REV[BX],'$'
;-------------Transfer the cursor
MOV AH,02H
MOV DH,7
MOV DL,18
MOV BH,00H
INT 10H
;--------------Print text

MOV AH,09H ;;PRINT STRING
LEA DX,REVstr ;;MOV OFFSET STRING
INT 21H
;-------------clear screan

MOV AH,06H
MOV AL,0
MOV CH,7
MOV CL,31
MOV DH,7
MOV DL,79
MOV BH,00001100B
INT 10H
;--------------Print REV
MOV AH,09H ;;PRINT STRING
LEA DX,REV ;;MOV OFFSET STRING
INT 21H


;--------------wait for press any key...
MOV AH,07H
INT 21H

;---------------Exit Dos
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN



اینم با پوش و پاپ :که زیاد روش آب و تاب ندادم عجله ای نوشتم


.MODEL SMALL
.STACK 64
.DATA
STRING DB "ENTER STRING : $"
STR DB 100 DUP(?)
.CODE
MAIN PROC FAR

MOV AX,@DATA
MOV DS,AX
MOV ES,AX
;---
MOV AH,09H
LEA DX,STRING
INT 21H

MOV BX,0
L1:MOV AH,01H
INT 21H
CMP AL,13
JZ L2
MOV STR[BX],AL
INC BX
JMP L1
L2:

MOV STR[BX],'$'


MOV BX,0
L3:
CMP STR[BX],'$'
JE L4
MOV AL,STR[BX]
PUSH AX
INC BX
JMP L3
L4:
MOV CX,BX
XOR BX,BX
L5:
POP AX
MOV STR[BX],AL
INC BX
LOOP L5

MOV STR[BX],'$'



MOV AH,06H ;;SERVIC NUMBER
MOV AL,0
MOV CX,0
MOV DH,24
MOV DL,79
MOV BH,00001001B ;;COLOR ATTRIBUTE
INT 10H

MOV AH,02H
MOV BL,0
MOV DH,0
MOV DL,0
INT 10H

MOV AH,09H
LEA DX,STR
INT 21H


;----
MOV AH,00H
INT 16H
;----
MOV AX,4C00H
INT 21H
;----
MAIN ENDP
END MAIN