mov dx bx si,20H

;* * * * * * * * * * * * * * * version 2.9 * * * * * * * * * * * * * * *
Correct TAKE file problems under Concurrent CP/M [mjh]
; [34c] Make DMA initialization and buffer allocation global
; [34b] Add LOCAL TYPE command
; [34a] Fix bugs in directory listing file sizes
;* * * * * * * * * * * * * * * version 2.8 * * * * * * * * * * * * * * *
; [32d] Add routines to get disk parameters for space calculation
; [32a] Add routines to get and set default disk and user numbers
;* * * * * * * * * * * * * * * version 2.7 * * * * * * * * * * * * * * *
Clear FCB prior to opening or creating a file.
Add TAKE command file processing.
; RonB, 04/08/84
;* * * * * * * * * * * * * * * version 2.6 * * * * * * * * * * * * * * *
[24a] Add terminal session logging
; RonB, 03/15/84
; * * * * * * * * * * * * * * *
version 2.4
* * * * * * * * * * * * * * *
[20e] Add regular console status check, in addition to direct I/O check.
; RonB,03/02/84
[19c] Give "bdos" mnemonic for vector 224.
; * * * * * * * * * * * * * * *
version 2.1
* * * * * * * * * * * * * * *
[7] Do tab expansion and suppress nulls while in telnet mode.
; RonB,12/24/83
; * * * * * * * * * * * * * * *
version 2.0
* * * * * * * * * * * * * * *
; BDOS command codes
bdos equ 224
reset EQU 00H
conin EQU 01H
conout EQU 02H
rdrin EQU 03H
punout EQU 04H
lstout EQU 05H
dconio EQU 06H
gtiob EQU 07H
prstr EQU 09H
consta EQU 0BH
resetd EQU 0DH
stdrv EQU 0EH
opnfil EQU 0FH
clsfil EQU 10H
sfirst EQU 11H
snext EQU 12H
delf EQU 13H
readf EQU 14H
writef EQU 15H
makef EQU 16H
gtdrv EQU 19H
gtalv EQU 1BH
gtrov EQU 1DH
statr EQU 1EH
gtdpb EQU 1FH
stusr EQU 20H
readr EQU 21H
writer EQU 22H
cflsz EQU 23H
dmaset EQU 1AH
dmabas EQU 33H
allocm EQU 37H
freem EQU 39H
;[29b] begin
; TAKE command file processing data area.
tkfcb db 0,'KERMIT
INI',0,0,0,0
;FCB with default name
tkbuf rb 80h
;Input buffer
tkptr dw 0
;Buffer pointer
tkflg db 1
;Initially enable file input
tkusr rb 1
;User area at TAKE time [35]
tkdrv rb 1
;Default drive at TAKE time [35]
; Messages and storage for directory operations
dirm01 db 'Drive $'
;[32d] begin
dirm02 db ', User $'
dirm03 db '
dirm04 db ' : $'
;directory column separator
dirm05 db ' files, $'
dirm06 db 'K listed$'
dirm07 db '
;displayed at start of each row
eram01 db tab,'Delete? $'
eram02 db tab,'...not deleted$'
eram03 db tab,'...deleted$'
eram04 db ' $'
;displayed at start of each row
erahlp db cr,lf,'Respond with ''Y'' to delete this file,'
db cr,lf,'
''N'' to bypass this file,'
db cr,lf,'
or ''ESC'' to return to the Kermit-86> prompt.$'
spcm01 db 'K (out of $'
spcm02 db 'K) remaining on drive $'
morm01 db '--more--$'
morm02 db 'Return: next line, Space: next page, ^X: next file, ^Z: quit$'
membuf rb 5
;memory control block
dirbuf rb 16
dindex dw 0
;index to first entry in row
dlngth dw 0
;length of directory list
dircnt dw 0
;files in directory list
dirsiz dw 0
;kbytes in directory list
;Kbytes remaining on disk
;Kbytes available if disk was empty
;drive maximum allocation blocks
;drive Kbytes Per Block
;[32d] end
;Resume coding segment.
tkst: cmp tkptr, 0 ;Is file open yet?
call tkopn
;If open failure
call getusr
;get user area
mov tkusr, al ;and save it
call getdrv
;get default drive
mov tkdrv, al ;and save that too
tkst1: mov bx, tkptr ;Do we need a new record?
cmp bx, offset tkbuf+80h
call tkread
mov bx, tkptr
tkst2: cmp byte ptr [bx], 1Ah ;Are we at end of file?
;If not, say we have a character.
tkst3: call tkcls
otherwise end the file
tkin: call tkst
;If no file input,
get it from the console.
mov bx, tkptr
mov al, [bx] ;Get character from command file record.
cmp al, lf
mov dl, al
;Echo it to the display.
tkopn: mov dx,Open the command file
call fcbzer
;zero fcb trailer
mov cl, opnfil
mov tkptr, offset tkbuf+80If success, show we need a read
tkopn1: mov tkflg, 0 ;On failure, turn off file input flag.
; [35] start
To overcome the read/close checksum failure problems with concurrent
CP/M, the user area and default drive at the time of opening the TAKE
file must be temporarily restored.
Code in the "tkopn" code saves the
default drive and user areas at that time, and the following two routines
set it back (tkstud) and restore the current default (tkrsud).
tmpusr rb 1
; current default USER area
tmpdrv rb 1
; current default drive
tkstud: call getusr
;get current user number
mov tmpusr, al ;and save it
call getdrv
;get current default drive
mov tmpdrv, al ;and save that too
mov dl, tkusr ;reset to USER area at TAKE time
call setusr
mov dl, tkdrv ;reset to default drive at TAKE time
call setdrv
tkrsud: mov dl, tmpusr ;restore default USER area
call setusr
mov dl, tmpdrv ;restore default drive
call setdrv
; [35] end
tkread: mov dx,Set dma to our location.
call setdma
call tkstud
;set user and drive as at TAKE open
mov dx, offset tkfcb
;Read a record.
;save error status
; [35] start
call tkrsud
;restore default drive/user area
;restore error status
; [35] end
mov tkbuf, 1Ah ;If failure, load buffer with EOF.
tkrd1: mov tkptr, offset tkbuf ;Reinitialize buffer pointer.
call inidma
;Reset dma to normal.
tkcls: call tkstud
;set user/def. drive as at TAKE time [35]
mov dx,Close command file.
call closf
call tkrsud
; restore default user area/drive
mov tkflg, 0 ;Turn off file input flag.
;[29b] end
; Local directory operation
dirutl: call getwld
;fill buffer with matching names
;on failure a message has already been printed
cmp dircnt,0
locd3: mov dirsiz,0
mov ax,dircnt
;calculate number of entries in each column
; = ((count-1)/4)+1
mov dlngth,ax
call tcrlf
mov dx, offset dirm01 ;print header: Drive X, User nn:
call tcrmsg
mov dl,fcb
;display the drive letter
add dl,'A'-1
mov dx, offset dirm02
mov al,defusr ;display the user number
mov dl,':'
mov dindex,0 ;table entry in first column
mov cx,dlngth
locd4a: push cx
mov dx, offset dirm07 ;Start new row
call tcrmsg
mov si,dindex
locd4b: push si
mov ds,word ptr membuf
;change entry number to table offset
;skip user number
;Eight characters in filename
locd5b: lodsb
;get a filename character
loop locd5b
mov dl,'.'
;separate filename and type with a period
;Three characters in file type
locd5c: lodsb
;get a file type character
loop locd5c
;get file size
add dirsiz,ax ;add filesize to listing size
mov di, offset dirm03 ;message for file size (____K)
locd5d: mov byte ptr [di],' ' ;first blank out the last size
loop locd5d
locd5e: mov dx,0
;fill in current size
add dl,'0'
mov [di],dl
jne locd5e
mov dx, offset dirm03 ;print size message
;follow all but last column with separator
mov dx, offset dirm04 ;print column separator
locd5f: pop si
add si,dlngth
cmp si,dircnt
loop locd4b
locd6: inc dindex
jmp locd4a
locd8: call tcrlf
;end the last row
call tcrlf
;add a blank row
mov ax,dircnt ;display file count
mov dx, offset dirm05
mov ax,dirsiz ;display total file size
mov dx, offset dirm06
; Erase utility function
erautl: call getwld
;On error a message has already been printed
mov dindex,0
loce3: mov si,dindex
cmp si,dircnt
loce4: mov cl,4
mov di, offset fcb+1 ;FCB already has drive code
mov ds, word ptr membuf
mov dx, offset eram04 ;Start new row
call tcrmsg
mov dx, offset fcb
call tfile
mov dx, offset eram01 ;'Delete? '
loce5a: call dbinst
;clear out all typeahead
jmp loce5b
jmps loce5a
loce5b: call dbin
;get response
;NUL is ignored
;CR bypasses file
cmp al,' '
;any nonprintable char aborts
cmp al,7Fh
;echo the printable response
cmp al,'?'
;request for help?
jne loce5c
mov dx, offset erahlp ;help message
call tcmsgc
loce5c: or al,'a'-'A'
;convert to lower case
cmp al,'y'
loce5d: mov dx, offset eram02 ;'
...not deleted'
loce6: cmp byte ptr fcb+14,0 ;make file read-write if necessary
mov dx, offset fcb
call setatr
loce6a: mov dx, offset fcb
;delete file
call delete
mov dx, offset eram03
...deleted'
loce7: inc dindex
loce8: mov dx, offset eram02 ;'
...not deleted' when aborting
loce9: call tcrlf
; Type utility function
typutl: call getwld
;On error a message has already been printed
mov dindex,0
loct3: mov si,dindex
;Get next filename in table
cmp si,dircnt
loct4: mov dlngth,1
mov di, offset fcb+1
mov ds, word ptr membuf
call tcrlf
;Display the filename
mov dx, offset fcb
call tfile
call tcrlf
mov dx, offset fcb
call openf
;Open the file
jmp loct6b
loct5: mov dx, offset fcb
;Read a record
mov bx,offset dma
loct5a: mov dl,[bx]
;Get a character
cmp dl,1Ah
and dl,7Fh
;Print the character
jne loct5b
inc dlngth
;Count lf characters
cmp dlngth,22
;If more than 22, then pause for input
jmp loct5c
loct5b: pop bx
cmp bx,offset dma+128
jmps loct5
loct5c: pop bx
jmps loct6a
loct6: mov ax,dindex
;EOF in file
cmp ax,dircnt
jae loct6a
call tcrlf
jmp loct6a
loct6a: mov dx, offset fcb
;Close file
call closf
call tcrlf
loct6b: inc dindex
;Move on to next file
loct9: jmp rskp
more: call revon
mov dx,offset morm01 ;Show --more-- message
call revoff
more1: call dbin
;Get response
; ignore nulls
call clrlin
mov dl,tab
;This is to fool CP/M so it
gets tab stops right
and al,7Fh
cmp al,'?'
;? gives help
call revon
mov dx,offset morm02 ;Show help message
call revoff
jmps more1
more2: cmp al,cr
;cr, lf go to next line
mov dlngth,0
;Everything else resets line count
cmp al,0Fh
;^O, ^X go to next file
cmp al,18h
cmp al,03h
;^C, ^Z, q quit
cmp al,1Ah
or al,'a'-'A'
cmp al,'q'
more4: jmp rskp
;Next line, page
more5: mov ax,dircnt
mov dindex,ax
more6: ret
;Next file
; Space remaining utility
spcutl: call getprm
;Get the disk parameters for calculation
call tcrlf
mov ax,remK
;Display the number of Kbytes remaining
mov dx, offset spcm01
mov ax,maxK
;And the total number on the drive.
mov dx, offset spcm02
mov dl,fcb
;Finally say which drive it is.
add dl,'A'-1
mov dl,':'
call tcrlf
; get and save disk parameters which relate to block allocation and size
getprm: mov newdrv,0 ;initialize flag
mov dl,fcb
;specified drive must be the default
; which is true if drive was not specified
cmp dl,defdrv ; or if specified drive matches the default
mov newdrv,0FFh ;otherwise show that we changed default
call getrov
;make sure the desired drive is write enabled
; or else the data may be inaccurate
call rstdsk
;if read-only, reset all drives
gprm1: call setdrv
;select the new drive as default
gprm2: push es
call getdpb
;get address of DPB in ES:BX
mov cl,es:2[bx] ;get Block Shift Factor
mov KPB,ax
;save Kbytes Per Block
mov cx,es:5[bx] ;get DSM maximum block number
mov DSM,cx
;save for file size and allocation calculation
;number of blocks includes block 0
mov maxK,ax
;Maximum number of Kbytes
mov remK,ax
;Kbytes remaining
mov ax,es:7[bx] ;subtract directory allocation from maxK
sub maxK,ax
call getalv
;get address of allocation vector in ES:BX
mov ax,DSM
;compute length of vector = (DSM/8)+1
;Count allocated blocks:
gprm3: mov dl,es:[bx] ;for each byte in vector,
for each bit in byte,
gprm4: test dl,1
if bit is set, then block is allocated
gprm5: shr dl,1
loop gprm4
loop gprm3
;convert allocated blocks to Kbytes
sub remK,ax
;subtract allocated Kbytes from remK
cmp newdrv,0 ;reset default drive if we changed it
mov dl,defdrv
call setdrv
gprm6: ret
; This subroutine fills the previously allocated memory buffer with a sorted
; list of filenames matching the wild name in fcb.
On failure, if there were
; no files, it prints an appropriate error message and simply returns.
; success, it returns to the skip location with the number of entries
; in the list in dircnt.
Each buffer entry is 16 bytes long and contains
; the user number at offset 0, the filename (with all attribute bits stripped)
; at offset 1-11, the allocated size in Kbytes at offset 12-13, and the
; read-only and system flags at offsets 14 and 15.
getwld: mov byte ptr fcb+12,'?' ;Match any extent
mov byte ptr fcb+13,'?'
mov byte ptr fcb+14,'?'
call getprm
;get disk parameters for size calculation
mov dircnt,0 ;zero file count and total space occupied
mov dx, offset fcb
call gtjfn
;get first filename
cmp al,0FFh
mov dx, offset erms15 ;unable to find file
call tcrmsg
mov dx, offset fcb
call tfile
gwld2: mov cl,5
;find file directory entry
mov si, offset dma
;pointer to filename (incl. user number)
mov di, offset dirbuf
mov ax,9[si] ;get read-only and system flags
and ax,8080h ;keep only attribute bits
mov 14[di],ax ;save flags at end of buffer
gwld2a: lodsb
and al,7Fh
;get rid of all attribute bits
loop gwld2a
;look at allocation area
;initialize block count
cmp DSM,256
;if <256 blocks, then each takes a byte
;8 blocks, one word each
gwld2b: cmp word ptr [si],0
loop gwld2b
jmps gwld2e
gwld2c: mov cx,16
;16 blocks, one byte each
gwld2d: cmp byte ptr [si],0
loop gwld2d
gwld2e: mul KPB
;convert blocks to kbytes
;save this FCB's allocation
mov ax,dircnt
cmp ax,word ptr membuf+2 ;don't exceed buffer length
mov dx,offset erms27 ; if memory exceeded, print warning
call tcmsgc
and use what info we have
gwld2f: mov si,go back to start of filename
mov es,find correct location in sorted file list
mov cx,dircnt ;number of entries already in list
jcxz gwld3e
gwld3a: push cx
repe cmpsb
;table entry greater than this file, insert
;table entry less than this file, keep looking
;else table entry same as file
add es:[di],ax ; ...add this FCB's allocation to size
gwld3b: pop di
jmp gwld3f
;go get next filename
gwld3c: pop di
;haven't found insert location yet
loop gwld3a
jmp gwld3e
;if greater than all entries, insert at end
gwld3d: pop di
;insertion point
;filename pointer
;number of entries following insertion point
;each entry occupies 16 bytes
;point to last byte of table
;move last part down 16 bytes
;save filename segment
;make all action in table segment
;decrement pointers after each move
;restore filename segment
;insertion point
;filename pointer
gwld3e: mov cx,16
;insert filename in table
inc dircnt
;count new entry
gwld3f: mov dx, offset fcb ;look for another matching filename
call gnjfn
cmp al,0FFh
;go process next filename
gwld4: push ds
; General output utility routines
tmsgcr: call tmsg
;Print the string
call tcrlf
;Print a CRLF.
tcrmsg: push dx
;Don't trash our string.
call tcrlf
;Print a CRLF.
;Restore our string.
;Print the string
tcmsgc: push dx
;Don't trash our string.
call tcrlf
;Print a CRLF.
;Restore our string.
;Print the string
call tcrlf
;Print a CRLF.
tcrlf: mov dl,cr
;print a crlf
tmsg: push bx
;Don't clobber my ACs.
mov cl, prstr ;Ask BDOS for string printing.
;What a way to call the BDOS.
tfile: mov bx, dx
;Print filename in [dx]'s FCB ;[24a] begin
mov dl, [bx] ;If explicit drive number, display it.
add dl, 'A'-1
mov dl, ':'
tfil1: mov cx, 11
;Now display 11 chars of filename
tfil2: push cx
;With period before file type
mov dl, '.'
tfil3: inc bx
mov dl, [bx]
cmp dl, ' '
;Don't include spaces
tfil4: pop cx
loop tfil2
;[24a] end
bout: mov cl, conout ;Ask BDOS for character printing.
bin: cmp tkflg, 0 ;Check for command file input. ;[29b] begin
;[29b] end
bin1: mov cl, conin ;Get a char from the console.
binst: cmp tkflg, 0 ;Check for command file input. ;[29b] begin
;[29b] end
binst1: mov cl, consta ;Console input status check ;[20e] begin
;Result 0 if no character ready
;Return SKIP if character ready
bins2: ret
;[20e] end
dbout: cmp dl, 0
;Skip null fillers.
call logchr
;Log the cha[24a]
call dotab
;Do any necessary tab expansion.
; No more chars to output.
dbout2: mov cl, dconio ;Put a char to the console.
dbout3: ret
dbin: push dx
mov cl, dconio ;Get a char from the console without
mov dl, 0FFH ; interference.
dbinst: push dx
mov cl, dconio ;Check the console's input status.
mov dl, 0FEH
;Result 0 if[20e] begin
;Return SKIP if character ready
dbins2: ret
;[20e] end
;Log the terminal output character
logchr: cmp logfil, 0 ;Only log if file is open ;[24a] begin
mov bx, bufpnt ;Store the character in the buffer.
mov [bx], dl
cmp bx, offset dma+80h ;Have we filled a buffer?
;If so, write it to file.
mov dx, offset lfcb
call soutr
mov bx, offset dma
logch1: mov bufpnt, bx
logch9: ret
;Return to output routine ;[24a] end
;Halt this program.
haltf: mov cl, reset ;End this program.
;One never knows!
;Reset the disk system to log in drives
;[32a] begin
rstdsk: mov cl,resetd
call inidma
;Concurrent CP/M also resets DMA address
;Get and set the default disk drive
getdrv: mov cl,gtdrv
;returns drive in al (A=0 through P=15)
setdrv: mov cl,stdrv ;new drive number (A=0 through P=15) in dl
;Get and set the default user number
getusr: mov cl,stusr
mov dl,0FFh
;returns user in al (0-15)
setusr: mov cl,stusr ;new user number (0-15) in dl
;[32a] end
; Get the address of the disk allocation vector
;[32d] begin
getalv: mov cl,gtalv
; Get the disk read-only vector
getrov: mov cl,gtrov
; Set file attributes according to FCB in dx
setatr: mov cl,statr
; Get the address of the DPB
getdpb: mov cl,gtdpb
; Allocate a block of memory.
MCB address is in dx.
allmem: mov cl,allocm
; Free a previously allocated block of memory.
MCB address is in dx.
fremem: mov cl,freem
;[32d] end
; Get the first file in a wild card search.
gtjfn: mov cl, sfirst
; Get the next file in a wild card search.
gnjfn: mov cl, snext
; Close the file pointed to by the FCB in DX.
closf: mov cl, clsfil
; Open the file pointed to by the FCB in DX.
openf: call fcbzer
;clear the fcb trailer
mov cl, opnfil
; Create the file pointed to by the FCB in DX.
create: call fcbzer
;clear the fcb trailer
mov cl, makef
fcbzer: push bx
;Clear the end of the FCB ;[29c] begin
prior to opening or creating a file.
mov bx, dx
add bx, 12
mov cl, 23
fcbz1: mov [bx], ch
loop fcbz1
;[29c] end
; Write a record to the file pointed to by the FCB in DX.
soutr: mov cl, writef
; Read a record from the file pointed to by the FCB in DX.
sinr: mov cl, readf
; Delete the file pointed to by the FCB in DX.
delete: mov cl, delf
; Sets dma to the default buffer.
Functions that change this must call this
; function to reset it before continuing
inidma: push dx
mov dx, offset dma
call setdma
; Sets the DMA to the offset pointed to in DX and the base in DS.
setdma: mov cl, dmaset
mov dx, ds
mov cl, dmabas
; Do random access read, write, or file size checks, FCB is in dx
rinr: mov cl, readr
routr: mov cl, writer
sizef: mov cl, cflsz
; Jumping to this location is like retskp.
It assumes the instruction
after the call is a jmp addr.
rskp: pop bp
; Jumping here is the same as a ret.汇编语言基础求教_百度知道
汇编语言基础求教
SS,0 MOV CL,&#39;INFO2 DB 0AH;,是在知道上找到的一段程序 没太看明白,&#39,LEN1[SI] CMP AH?)这个语句是什么意思呢,DS: MOV AXINFO1 DB 0AH,AL MOV SI?如果是为什么要用两个呢:&#39;$&#39?)
INFO1 DB 0AH,0DH,20H; :STACKSTART,0NEXT;,0 MOV DI;***程序结束*** MOV AH;input string1?初学者真心求教,09H INT 21H LEA DX?是换行吗,&#39;INFO3 DB 0AH; MOV JUDG+1?LEN1 DB ,AX ,AL JNZ NO MOV CH,0DH,09H
,STR2 MOV AH;***输入字符串**** LEA DX?
DB 100 DUP(;***判断字符串*** MOV AL?如果说是申请100个字节的空间,&#39,0AH ;$&#39,那第一个问号的作用是什么呀。DATA SEGMENTSTR1 DB 100LEN1 DB ?两个DB的作用各是什么呢,DATA MOV DS;,LEN2 ,&#39。源程序在这: LEA DX:DATA,0DH,在这问一下 谢谢解答? DB 100 DUP(,0DH;S&#39:&#39:&#39,&#39?)STR2 DB 100LEN2 DB ; MOV JUDG+2;DATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS,&#39,LEN1 :CODE,STR1 MOV AH;字符串2的长度 CMP AH,INFO1 MOV AH:&#39? DB 100 DUP(,&#39,&#39;input string1,&#39;输入字符串1 INT 21H LEA DX,LEN2[DI] JNZ NO LOOP NEXT MOV JUDG;***输出判断结果***FINI,&#39;input string2; MOV JUDG+1: INC SI INC DI MOV AH;$&#39; JMP FININO;string1=string2,INFO3 MOV AH;N&#39;JUDG DB 20H,INFO2 MOV AH,20H,&#39,4CH ;字符串1的长度 MOV AH;这段语句中的 0AH 和 0DH是什么意思呀,0AH : MOV JUDG;$&#39;Y&#39,09H INT 21H LEA DX,&#39;输入字符串2 INT 21H ;E&#39;O&#39;输出判断结果
url=0mu8uyXqY-HYup5XSPUGop-FPETa-wUf_nIIwOaDXxWAkwbpgHdVMjPVRC40s7lFXx9P-eVkRgfqaUgxFDrJra" target="_blank">http。。.com/link.baidu源代码粘贴到上面乱了:///link://zhidao.baidu?url=0mu8uyXqY-HYup5XSPUGop-FPETa-wUf_nIIwOaDXxWAkwbpgHdVMjPVRC40s7lFXx9P-eVkRgfqaUgxFDrJra谢谢各位了。直接给出网页
就是这个源程序 1,这是个输入缓存区?)应该这样看,第一个‘,0Dh是两个控制字符,由21H中断0AH功能调用设置;DUP(,他们的作用不同?’是实际串长度。理论上? DB&nbsp,100为限长,回车符将光标置于当前行首。2,换行符将光标置于下一行;100LEN1 DB&100&nbsp,因为不是所有平台/应用都遵循相同的标准。具体应用视情景而定,STR1 DB&。后面的空间是保存输入的位置!由21H中断0AH功能调用设置,0Ah
提问者评价
非常感谢您的指导~
其他类似问题
为您推荐:
其他2条回答
依次递增0AH和0BH都是16进制的数字,,A是10,F代表15,浅显易懂,db 100 dup就是申请100字节.db是段内开辟内存的语句,代表开辟一个字节。建议初学者还是学王爽的 汇编语言这本书比较好
INFO1 DB 0AH,0DH,&#39;input string1:&#39;,&#39;$&#39;这句中0AH和0DH不是对应ascll码表中的意思LF和CR嘛?这两个的意思不是换行嘛?LEN1 DB ?
DB 100 DUP(?)这句中为什么要用两个DB请求内存呢?谢谢你的指点
看看我的百度空间吧,有许多汇编语言的程序。
汇编语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 mov dx offset string 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信