MSG DB ‘Yap$’
MSG2 DB ‘Grainne$’
MOV CX, 3
LEA si, MSG
LEA di, MSG2
recur:
MOV AL, [si]
MOV [di], AL
INC si
INC di
DEC CX
JNZ recur
mov al, ‘$’
MOV AH, 09
LEA DX, MSG2
INT 21H
INT 20H
Another way of doing this code at the same time conscious about memory usage daw[coded by Niel]
MSG DB ‘Yap$’
MSG2 DB ‘Grainne$’
mov cx, 3 ; counter for REP instruction
lea si, MSG ; string to be copied
lea di, MSG2 ; where to copy
cld ; clear directrion flag
rep movsb ; store byte from si to di
mov al, ‘$’ ; the NULL terminator. remember?
mov [di], al ; terminate the new string
mov ah, 09 ; print function
lea dx, MSG2 ; string to be printed
int 21h ; call DOS
int 20h ; exit to DOS I tried opening command rather than cmd for my assembly code, but still I’ve waited for a long time and failed to assemble my code. I was told by Niel that it might be because of other issues, for the code assembled properly in his machine. What other issues it might be, I’ll still know about them. As for now, I was told that the output of my assembly code is ‘Yapinne’. I still need to modify this code, because I intend to display ‘Grainne Yap’. I’ll just keep you posted soon!
put the declarations of string after the code..
MOV CX, 3
LEA si, MSG
LEA di, MSG2
recur:
MOV AL, [si]
MOV [di], AL
INC si
INC di
DEC CX
JNZ recur
mov al, '$'
MOV AH, 09
LEA DX, MSG2
INT 21H
INT 20H
MSG DB 'Yap$'
MSG2 DB 'Grainne$'
or do it this way:
jmp start
MSG DB 'Yap$'
MSG2 DB 'Grainne$'
start:
MOV CX, 3
LEA si, MSG
LEA di, MSG2
recur:
MOV AL, [si]
MOV [di], AL
INC si
INC di
DEC CX
JNZ recur
mov al, '$'
MOV AH, 09
LEA DX, MSG2
INT 21H
INT 20H
add the following codes - "jmp start" and "start:"
jmp start
MSG DB 'Yap$'
MSG2 DB 'Grainne$'
start:
MOV CX, 3
LEA si, MSG
LEA di, MSG2
recur:
MOV AL, [si]
MOV [di], AL
INC si
INC di
DEC CX
JNZ recur
mov al, '$'
MOV AH, 09
LEA DX, MSG2
INT 21H
INT 20H
or place the declaration after the codes:
MOV CX, 3
LEA si, MSG
LEA di, MSG2
recur:
MOV AL, [si]
MOV [di], AL
INC si
INC di
DEC CX
JNZ recur
mov al, '$'
MOV AH, 09
LEA DX, MSG2
INT 21H
INT 20H
MSG DB 'Yap$'
MSG2 DB 'Grainne$'
Sir Ugin! Thank you! Ara ya entende ya yo…
Posted by phengpheng at July 21, 2006, 2:36 pmAll comments are moderated. Your comments will not appear here unless approved by the blog owner. Thank you.
:D just make di point to where you want to start concatenating. in the second example, your friend "niel" just properly terminated after copying so that MSG2 (which is"Grainne") became a properly terminated string "Yap". =) which isn't what you wanted to achieve.
i modified his listing a little to _really_ do concatenation.
—–
msg db "Yap$"
msg2 db "Grainne$"
lea di, msg2 ; di to msg2
add di, 7 ; go to terminator
mov al, " " ; al is a space
mov [di], al ; replace terminator with a space
inc di ; go to next index
; start concatenation
mov cx, 3
lea si, msg
cld
rep movsb
mov al, "$"
mov [di], al
mov ah, 09
mov dx, offset msg2
int 21h ; call DOS
int 20h ; exit to DOS
—–
output:
Grainne Yap
Posted by yue at July 20, 2006, 5:53 am