【问题标题】:Assembler read full numbers from txt file汇编程序从 txt 文件中读取完整的数字
【发布时间】:2014-11-18 18:34:55
【问题描述】:

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

  1. 打开文本文件
  2. 将文件内容读入创建的缓冲区
  3. 将每个缓冲区字节放入不同的寄存器(axbxcxdx)。

问题是,它一次读取 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]

【问题讨论】:

    标签: file assembly buffer


    【解决方案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。然后将其推入堆栈以供进一步使用。我想说,大脑是一个了不起的东西。

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2018-07-22
      • 2017-08-12
      • 1970-01-01
      相关资源
      最近更新 更多