| | |
I need help
![]() |
•
•
Join Date: Apr 2005
Posts: 2
Reputation:
Solved Threads: 0
Hi guys
I want to write program in assembly language to read string from user and replace each symbol * in string to E but i do not know how i can replace * to E after read string>>>Iam begginer in this language
this is my code and i hope to help me >>>pl.help me iam wating your help
STACKSEG SEGMENT
DW 32 DUP(?)
STACKSEG ENDS
;============================
DATASEG SEGMENT
LF EQU 0AH
CR EQU 0DH
MSG DB 'Enter the firts string...$'
MSG1 DB CR,LF, 'The string is: $'
STR1 DB 9 DUP(?)
DATASEG ENDS
;===========================
CODESEG SEGMENT
BEGIN PROC FAR
ASSUME SS
TACKSEG,DS
ATASEG,CS:CODESEG
MOV AX,DATASEG
MOV DS,AX
MOV ES,AX
;Reading the messege
LEA DX,MSG
MOV AH,9
INT 21H
;===========================
MOV CX,0
CLD
LEA DI,STR1
MOV AH,1
REPEATE:
INT 21H
STOSB
INC DX
UNTIL:
CMP AL,0DH
JNE REPEATE
DEC DI
MOV AL,'$'
STOSB
;================================
CLD
MOV DX,CX
;Scan symbol * and replace it into E
LEA SI,STR1
;Looking for the * in string
MOV AL,'*'
REPNE SCASB
JE FOUND
FOUND:
MOV AL,'E'
STOSB
DEC DX
;=================================
;Print string1
LEA DX,MSG1
MOV AH,9
INT 21H
LEA SI,STR1
REP:
LODSB
MOV DL,AL
MOV AH,2
INT 21H
DEC CX
CMP CX,0
JE END_PROG
LOOP REP
;Return control for assembler
END_PROG:
MOV AH,4CH
INT 21H
BEGIN ENDP
CODESEG ENDS
END BEGIN
I want to write program in assembly language to read string from user and replace each symbol * in string to E but i do not know how i can replace * to E after read string>>>Iam begginer in this language
this is my code and i hope to help me >>>pl.help me iam wating your help
STACKSEG SEGMENT
DW 32 DUP(?)
STACKSEG ENDS
;============================
DATASEG SEGMENT
LF EQU 0AH
CR EQU 0DH
MSG DB 'Enter the firts string...$'
MSG1 DB CR,LF, 'The string is: $'
STR1 DB 9 DUP(?)
DATASEG ENDS
;===========================
CODESEG SEGMENT
BEGIN PROC FAR
ASSUME SS
TACKSEG,DS
ATASEG,CS:CODESEGMOV AX,DATASEG
MOV DS,AX
MOV ES,AX
;Reading the messege
LEA DX,MSG
MOV AH,9
INT 21H
;===========================
MOV CX,0
CLD
LEA DI,STR1
MOV AH,1
REPEATE:
INT 21H
STOSB
INC DX
UNTIL:
CMP AL,0DH
JNE REPEATE
DEC DI
MOV AL,'$'
STOSB
;================================
CLD
MOV DX,CX
;Scan symbol * and replace it into E
LEA SI,STR1
;Looking for the * in string
MOV AL,'*'
REPNE SCASB
JE FOUND
FOUND:
MOV AL,'E'
STOSB
DEC DX
;=================================
;Print string1
LEA DX,MSG1
MOV AH,9
INT 21H
LEA SI,STR1
REP:
LODSB
MOV DL,AL
MOV AH,2
INT 21H
DEC CX
CMP CX,0
JE END_PROG
LOOP REP
;Return control for assembler
END_PROG:
MOV AH,4CH
INT 21H
BEGIN ENDP
CODESEG ENDS
END BEGIN
•
•
Join Date: Apr 2005
Posts: 2
Reputation:
Solved Threads: 0
hi guys
i can replace each symbol * in string to E by using LODSB but i want do that using SCASB
------------------------------------------------------
STACKSEG SEGMENT
DW 32 DUP(?)
STACKSEG ENDS
;============================
DATASEG SEGMENT
LF EQU 0AH
CR EQU 0DH
MSG DB 'Enter the firts string...$'
MSG1 DB CR,LF,'THe string is: $'
STR1 DB 9 DUP(?)
STR2 DB 9 DUP(?)
DATASEG ENDS
;===========================
CODESEG SEGMENT
BEGIN PROC FAR
ASSUME SS
TACKSEG,DS
ATASEG,CS:CODESEG
MOV AX,DATASEG
MOV DS,AX
MOV ES,AX
;Reading the messege
LEA DX,MSG
MOV AH,9
INT 21H
;===========================
MOV CX,1
CLD
LEA DI,STR1
MOV AH,1
REPEATE:
INT 21H
STOSB
INC CX
UNTIL:
CMP AL,0DH
JNE REPEATE
DEC DI
MOV AL,'$'
STOSB
MOV DX,CX
;----------------------------------------------------
;FINd * and replace it
LEA SI,STR1
LEA DI,STR2
REP:
LODSB
CMP AL,'*'
JE STORE
STOSB
LOOP REP
STORE:
MOV AL,'E'
STOSB
CMP CX,0
JNE REP
;----------------------------------------------------
MOV CX,DX
LEA DX,MSG1
MOV AH,9
INT 21H
;Copy the character of string
LEA SI,STR2
REP1:
LODSB
MOV DL,AL
MOV AH,2
INT 21H
LOOP REP1
;Return control for assembler
MOV AH,4CH
INT 21H
BEGIN ENDP
CODESEG ENDS
END BEGIN
--------------------------------------------------
-------------------------------------------------
--------------------------------------------------
another way
but i can do that using SCASB :cry: :cry: :cry: :cry:
STACKSEG SEGMENT
DW 32 DUP(?)
STACKSEG ENDS
;============================
DATASEG SEGMENT
LF EQU 0AH
CR EQU 0DH
MSG DB 'Enter the firts string...$'
MSG1 DB CR,LF,'The string is: $'
STR1 DB 9 DUP(?)
STR2 DB 9 DUP(?)
DATASEG ENDS
;===========================
CODESEG SEGMENT
BEGIN PROC FAR
ASSUME SS
TACKSEG,DS
ATASEG,CS:CODESEG
MOV AX,DATASEG
MOV DS,AX
MOV ES,AX
;Reading the messege
LEA DX,MSG
MOV AH,9
INT 21H
;===========================
MOV CX,0
CLD
LEA DI,STR1
MOV AH,1
REPEATE:
INT 21H
STOSB
INC CX
UNTIL:
CMP AL,0DH
JNE REPEATE
DEC DI
MOV AL,'$'
STOSB
MOV DX,CX
;------------------------------------------------
CLD
LEA DI,STR1
MOV AL,'*'
TOP:
REPNE SCASB
JE REPLACE
REPLACE:
MOV AL,'E'
STOSB
CMP CX,0
JNE TOP
;----------------------------------------------------
MOV CX,DX
LEA DX,MSG1
MOV AH,9
INT 21H
;Copy the character of string
LEA SI,STR1
REP1:
LODSB
MOV DL,AL
MOV AH,2
INT 21H
LOOP REP1
;Return control for assembler
MOV AH,4CH
INT 21H
BEGIN ENDP
CODESEG ENDS
END BEGIN
i can replace each symbol * in string to E by using LODSB but i want do that using SCASB
------------------------------------------------------
STACKSEG SEGMENT
DW 32 DUP(?)
STACKSEG ENDS
;============================
DATASEG SEGMENT
LF EQU 0AH
CR EQU 0DH
MSG DB 'Enter the firts string...$'
MSG1 DB CR,LF,'THe string is: $'
STR1 DB 9 DUP(?)
STR2 DB 9 DUP(?)
DATASEG ENDS
;===========================
CODESEG SEGMENT
BEGIN PROC FAR
ASSUME SS
TACKSEG,DS
ATASEG,CS:CODESEGMOV AX,DATASEG
MOV DS,AX
MOV ES,AX
;Reading the messege
LEA DX,MSG
MOV AH,9
INT 21H
;===========================
MOV CX,1
CLD
LEA DI,STR1
MOV AH,1
REPEATE:
INT 21H
STOSB
INC CX
UNTIL:
CMP AL,0DH
JNE REPEATE
DEC DI
MOV AL,'$'
STOSB
MOV DX,CX
;----------------------------------------------------
;FINd * and replace it
LEA SI,STR1
LEA DI,STR2
REP:
LODSB
CMP AL,'*'
JE STORE
STOSB
LOOP REP
STORE:
MOV AL,'E'
STOSB
CMP CX,0
JNE REP
;----------------------------------------------------
MOV CX,DX
LEA DX,MSG1
MOV AH,9
INT 21H
;Copy the character of string
LEA SI,STR2
REP1:
LODSB
MOV DL,AL
MOV AH,2
INT 21H
LOOP REP1
;Return control for assembler
MOV AH,4CH
INT 21H
BEGIN ENDP
CODESEG ENDS
END BEGIN
--------------------------------------------------
-------------------------------------------------
--------------------------------------------------
another way
but i can do that using SCASB :cry: :cry: :cry: :cry:
STACKSEG SEGMENT
DW 32 DUP(?)
STACKSEG ENDS
;============================
DATASEG SEGMENT
LF EQU 0AH
CR EQU 0DH
MSG DB 'Enter the firts string...$'
MSG1 DB CR,LF,'The string is: $'
STR1 DB 9 DUP(?)
STR2 DB 9 DUP(?)
DATASEG ENDS
;===========================
CODESEG SEGMENT
BEGIN PROC FAR
ASSUME SS
TACKSEG,DS
ATASEG,CS:CODESEGMOV AX,DATASEG
MOV DS,AX
MOV ES,AX
;Reading the messege
LEA DX,MSG
MOV AH,9
INT 21H
;===========================
MOV CX,0
CLD
LEA DI,STR1
MOV AH,1
REPEATE:
INT 21H
STOSB
INC CX
UNTIL:
CMP AL,0DH
JNE REPEATE
DEC DI
MOV AL,'$'
STOSB
MOV DX,CX
;------------------------------------------------
CLD
LEA DI,STR1
MOV AL,'*'
TOP:
REPNE SCASB
JE REPLACE
REPLACE:
MOV AL,'E'
STOSB
CMP CX,0
JNE TOP
;----------------------------------------------------
MOV CX,DX
LEA DX,MSG1
MOV AH,9
INT 21H
;Copy the character of string
LEA SI,STR1
REP1:
LODSB
MOV DL,AL
MOV AH,2
INT 21H
LOOP REP1
;Return control for assembler
MOV AH,4CH
INT 21H
BEGIN ENDP
CODESEG ENDS
END BEGIN
![]() |
Other Threads in the Assembly Forum
- Previous Thread: Just bought an assembly book and having problems with basic stuff.
- Next Thread: FPU + external C file - how to return double
| Thread Tools | Search this Thread |





