汇编(TASM):以字节为单位打印某些位的总和

时间:2016-11-06 13:35:33

标签: assembly buffer offset x86-16 tasm

我的目标是打印每个字节的第0和第3位的总和。到目前为止,这是我的代码:

printLine macro line
    mov ah, 09
    mov dx, offset line
    int 21h
endm
;-----------------------------
readLine macro buffer
    mov ah, 0Ah
    mov dx, offset buffer
    int 21h
endm
;-----------------------------
getByteBitSum macro theByte
    mov al, byte ptr theByte
    mov cl, byte ptr theByte
    shr al, 3
    and al, 01
    and cl, 01
    add al, cl
endm
;-----------------------------
;-----------------------------
;-----------------------------
.model small
    ASSUME CS:code, DS:data, SS:stack
;-----------------------------
data segment para public 'DATA'
    message_1:
        db 'Enter a line'

    newLine:
        db 0Dh, 0Ah, '$'

    message_2:
        db 'You entered ',0Dh, 0Ah, '$'

    dataBuffer:
        db 20, 00, 20 dup (00)
data ends
;-----------------------------
code segment para public 'CODE'
    start:

    mov ax, seg data
    mov ds, ax

    printLine message_1

    readLine dataBuffer
    printLine newLine

    printLine message_2
    printLine newLine

    mov bx, 0000
    mov bl, byte ptr[dataBuffer + 1]
    mov word ptr [dataBuffer + bx + 3], 240Ah

    printLine dataBuffer + 2
    printLine newLine

    getByteBitSum [dataBuffer + 2]
    printLine newLine

    getByteBitSum [dataBuffer + 3]
    printLine newLine

    getByteBitSum [dataBuffer + 4]
    printLine newLine

    mov ah, 4ch
    int 21h
code ends
;-----------------------------
stack seg para stack 'STACK'
    dw 400h dup ('**')
stack ends
;-----------------------------
    end start

我得到的错误是:

  

GETBYTEBITSUM(1)需要右方括号
  GETBYTEBITSUM(2)需要右方括号
  GETBYTEBITSUM(1)需要右方括号
  GETBYTEBITSUM(2)需要右方括号

我的猜测是,我真的不明白buffer及其偏移是如何起作用的。如果我的猜想是正确的,那么任何人都可以使用这个例子简单地解释它发生了什么吗?

BTW:截至目前,我只是尝试打印前3个字节,而不是整个输入行。

谢谢。

1 个答案:

答案 0 :(得分:3)

getByteBitSum [dataBuffer + 2]

宏扩展对嵌入空间字符有困难!
写下来解决它:

getByteBitSum [dataBuffer+2]   ;No more embedded spaces!