¡¡Àý£ºÇë°Ñ40¸ö×ÖĸaµÄ×Ö·û´®´ÓÔ´»º³åÇø´«Ë͵½Ä¿µÄ»º³åÇø¡£

¡¡¡¡¡¡TITLE myfile - move string from source buffer to dest buffer
¡¡¡¡¡¡;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
¡¡¡¡¡¡data ¡¡¡¡¡¡ segment ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;define data segment
¡¡¡¡¡¡¡¡source_buffer db ¡¡40 dup('a')
¡¡¡¡¡¡data ends
¡¡¡¡¡¡;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
¡¡¡¡¡¡extra ¡¡¡¡¡¡segment ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;define extra segment
¡¡¡¡¡¡dest_buffer ¡¡¡¡db¡¡ 40 dup(?)
¡¡¡¡¡¡extra ¡¡¡¡¡¡ends
¡¡¡¡¡¡;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
¡¡¡¡¡¡code ¡¡¡¡¡¡ segment ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;define code segment
¡¡¡¡¡¡;-----------------------------------------------------------------
¡¡¡¡¡¡main ¡¡¡¡¡¡proc far ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;main part of program
¡¡¡¡¡¡assume cs:code,ds:data,es:extra
start: ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;starting execution address

;set up stack for return
¡¡¡¡¡¡push ¡¡¡¡¡¡ds ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;save old data segment
¡¡¡¡¡¡sub ¡¡¡¡¡¡ ax,ax ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;put zero in AX
¡¡¡¡¡¡push ¡¡¡¡¡¡ax ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;save it on stack

;set DS register to current data segment
¡¡¡¡¡¡mov ¡¡¡¡¡¡ ax,data ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;data segment addr
¡¡¡¡¡¡mov ¡¡¡¡¡¡ ds,ax ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ; into DS register


;set ES register to current extra segment
¡¡¡¡ mov ¡¡¡¡¡¡¡¡ax,extra ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;extra segment addr
¡¡¡¡ mov ¡¡¡¡¡¡¡¡es,ax ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;into ES register


;MAIN PART OF PROGRAM GOES HERE
¡¡¡¡ lea ¡¡¡¡¡¡¡¡si,source_buffer ¡¡¡¡¡¡¡¡;put offset addr of source
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡; buffer in SI
¡¡¡¡ lea ¡¡¡¡¡¡¡¡di,dest_buffer ¡¡¡¡¡¡¡¡¡¡;put offset addr of dest
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡; buffer in DI
¡¡¡¡ cld ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;set DF flag to forward
¡¡¡¡ mov ¡¡¡¡¡¡¡¡cx,40 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;put count in CX
¡¡¡¡ rep ¡¡¡¡¡¡¡¡movsb ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;move entire string
¡¡¡¡ ret ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;return to DOS
main ¡¡¡¡endp ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;end of main part of program

¡¡¡¡;------------------------------------------------------------------
code ends ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;end of code segment
¡¡¡¡;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
¡¡¡¡end ¡¡¡¡¡¡¡¡start ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡;end assembly


±í4.4.1


C>EDIT MYFILE.ASM<CR>


C>MASM MYFILE.ASM<CR>
¡¡Microsoft (R) Macro Assembler Version 5.00
¡¡Copyright (C) Microsoft Corp 1981-1985£¬1987.All rights reserved.
¡¡Object filename [MYFILE.OBJ]: <CR>
¡¡Source listing [NUL.LST]: MYFILE.LST<CR>
¡¡Cross-reference [NUL.CRF]: <CR>

¡¡¡¡51646 + 44778 Bytes symbol space free
¡¡¡¡0 Warning Errors
¡¡¡¡0 Severe Errors
¡¡
C>LINK MYFILE.OBJ<CR>

¡¡Microsoft (R) Overlay Linker Version 3.60Copyright (C)
¡¡Microsoft Corp 1983-1987. All rights reserved.
¡¡Run File [MYFILE.EXE]: <CR>
¡¡List File [NUL.MAP]: <CR>
¡¡Libraries [.LIB]: <CR>
¡¡LINK : warning L4021: no stack segment

C>MYFILE<CR>

¡¡ ÉϱíÖеIJÙ×÷ÔÚÔËÐлã±à³ÌÐòʱ£¬Éú³ÉÁË.OBJÎļþºÍ.LSTÎļþ£¬Ã»ÓÐÉú³É.CRF½»²æÒýÓÃ±í¡£½»²æÒýÓñíÁгöÁ˳ÌÐò¶¨ÒåµÄËùÓзûºÅ¼°ÆäËùÔÚµÄÐкż°ÒýÓÃʱµÄÐкţ¬Óû§Ò»°ãÔÚµ÷ÊÔ´ó³ÌÐòʱÐèÒª½»²æÒýÓÃ±í¡£

¡¡¡¡ÏÂÃæÊÇMYFILE.REFÎļþ£º

¡¡ Microsoft Cross-Reference Version 5.00 Wed Mar 04 00:34:07 1998
¡¡¡¡Symbol Cross-Reference (# definition, + modification) Cref-1
¡¡¡¡CODE . . . . . . . . . . . . . .17# 21 50
¡¡¡¡DATA . . . . . . . . . . . . . . 3# 8 21 31
¡¡¡¡DEST_BUFFER. . . . . . . . . ...11# 41
¡¡¡¡EXTRA. . . . . . . . . . . . . .10# 15 21 35
¡¡¡¡MAIN . . . . . . . . . . . . . .19# 48
¡¡¡¡SOURCE_BUFFER. . . . . . . . . . 4# 39
¡¡¡¡START. . . . . . . . . . . . . .23# 53

¡¡ 7 Symbols

¡¡¡¡Á¬½ÓÓ³ÏóMYFILE.MAPÎļþ£º
¡¡¡¡LINK : warning L4021: no stack segment
¡¡¡¡¡¡Start Stop Length Name Class
¡¡¡¡¡¡00000H 00027H 00028H DATA
¡¡¡¡¡¡00030H 00057H 00028H EXTRA
¡¡¡¡¡¡00060H 0007CH 0001DH CODE
¡¡¡¡ Program entry point at 0006:0000