我被困在需要从文本文件的创建缓冲区中读取3个数字的位置。我尝试过读取每个字节,但如果数字大于9则没有运气。 我做的步骤:
ax
,bx
,cx
,dx
)。问题是,它一次读取1个字节(mov ax, buffer[0]
):如果我的文本文件是(10 10 1),则读取1然后是0然后是空格符号(ascii 20),依此类推。我是否应该循环转换并将每个字节添加到一个寄存器,而不检测空间符号?或者是否有可能一次读取整数?这是代码:
.model small
bufferLen equ 16
.stack 100h
.data
duom db "duom.txt", 0
fident dw 0
buffer db bufferLen dup (?)
.code
start:
mov dx, @data
mov ds, dx
mov bx, 81h
tikrinam: ; not important
mov ax, es:[bx]
inc bx
cmp al, 13
je openf
cmp al, 20h
je tikrinam
cmp ax, "?/"
jne openf
mov ax, es:[bx]
cmp ah, 13
je abouthlp
jmp openf
abouthlp:
mov dx, offset about
mov ah, 09h
int 21h
jmp ending
openf:
mov ah, 3Dh
mov al, 0
mov dx, offset duom
int 21h
mov [fident], ax
readf:
mov ah, 3Fh
mov bx, [fident]
mov cx, bufferLen
mov dx, offset buffer
int 21h
mov al, buffer[0]
mov bl, buffer[1]
mov cl, buffer[2]
答案 0 :(得分:1)
如果有人遇到同样的问题,我找到了解决方案:
changeNumbers:
push ax
mov ax, 0
cmp cl, 0
je change
temp1:
mov ch, 0
mov cl, buffer[si]
inc si
cmp cl, 32
je changeNumbers
cmp cl, 0
je changeNumbers
sub cl, 48
mul abc
add ax, cx
jmp temp1
基本上我所做的是读取每个字节,如果数字> 9,则将cx
添加到ax
并将其乘以10.然后将其推送到堆栈以供进一步使用。我会说,大脑是一件了不起的事。