assembly 如何在汇编语言masm中读取由符号分隔的字符串?

stszievb  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(157)

我最近看了一个关于如何用汇编语言masm 8086读字符串的教程。
我想把它写入名为'TEST.txt'的文件。
下面是正文
阿里|1000令吉
阿布|1500令吉
但我只能打印出这个
阿里|1000令吉
阿布|1500令吉
阿布|1500令吉
名称'Abu'和'RM1500'在txt文件中打印了两次。我还想问一下我是否可以像在java中一样使用split(“|”)读取汇编中的字符串。我将感谢任何人帮助我解决这个问题。

.MODEL SMALL
.STACK 100H
.DATA
FNAME DB 'TEST.TXT',0
HANDLE DW ?
MSG DB 'Ali|RM1000', 13, 10
MSG2 DB 'Abu|RM1500', 13, 10
BUFFER DB 25 DUP(?)
COUNT DB 10
.CODE 
MAIN PROC
MOV AX,@DATA
MOV DS,AX

;***************OPENING A NEW FILE***************;

; MOV AH,3CH
; MOV DX,OFFSET(FNAME)
; MOV CL,1
; INT 21H
; MOV HANDLE,AX

;***************CLOSEING A FILE***************;
; MOV AH,3EH
; MOV DX,HANDLE
; INT 21H

;***************OPENING AN EXISTING FILE***************;

MOV AH,3DH
MOV DX,OFFSET(FNAME)
MOV AL,1  ; 1 MEAN FOR WRITING PURPOSE 
INT 21H
MOV HANDLE,AX

MOV AH,40H
MOV BX,HANDLE
MOV CX,25
MOV DX, OFFSET(MSG)
INT 21H

MOV AH,40H
MOV BX,HANDLE
MOV CX,25
MOV DX, OFFSET(MSG2)
INT 21H

MOV AH,3EH
MOV DX,HANDLE
INT 21H

;***************OPENING READING FILE***************;
MOV AH,3DH
MOV DX,OFFSET(FNAME)
MOV AL,0  ; 1 MEAN FOR WRITING PURPOSE 
INT 21H
MOV HANDLE,AX

MOV AH,3FH
MOV BX,HANDLE
MOV DX,OFFSET(BUFFER)
MOV CX,10
INT 21H

;***************DISPLAYING 10 BYTES***************;
MOV SI,OFFSET(BUFFER)
L1:
MOV AH,2
MOV DL,[SI]
INT 21H
INC SI
DEC COUNT
JNZ L1

MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
ijnw1ujt

ijnw1ujt1#

MSG DB 'Ali|RM1000', 13, 10
MSG2 DB 'Abu|RM1500', 13, 10
BUFFER DB 25 DUP(?)

您正在打开一个现有文件进行输出,然后向其中写入25个字节,两次。文件的前50个字节将是:
第一个
句柄必须进入BX寄存器!
套用这些更正:

MOV DX, OFFSET(FNAME)
MOV AX, 3D01h         ; DOS.OpenFile
INT 21h               ; -> AX CF
JC  AnErrorOccured    ; What if ?
MOV HANDLE, AX        ; Probably a redundant store !

MOV DX, OFFSET(MSG)
MOV CX, 10 + 2        ; Length of the text including 13, 10
MOV BX, AX            ; HANDLE
MOV AH, 40h           ; DOS.WriteFile
INT 21h               ; -> AX CF
JC  AnErrorOccured    ; What if ?
CMP AX, CX
JNE AnErrorOccured    ; What if ?

MOV DX, OFFSET(MSG2)  ; No need to repeat setting CX and BX
MOV AH, 40h           ; DOS.WriteFile
INT 21h               ; -> AX CF
JC  AnErrorOccured    ; What if ?
CMP AX, CX
JNE AnErrorOccured    ; What if ?

MOV AH, 3Eh           ; DOS.CloseFile
INT 21h               ; -> AX CF
                      ; Don't care about CF

相关问题