汇编程序从txt文件中读取完整数字

时间:2014-11-18 18:34:55

标签: file assembly buffer

我被困在需要从文本文件的创建缓冲区中读取3个数字的位置。我尝试过读取每个字节,但如果数字大于9则没有运气。 我做的步骤:

  1. 打开文本文件
  2. 将文件内容读入已创建的缓冲区
  3. 将每个缓冲区字节放入不同的寄存器(axbxcxdx)。
  4. 问题是,它一次读取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]
    

1 个答案:

答案 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.然后将其推送到堆栈以供进一步使用。我会说,大脑是一件了不起的事。