Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编(TASM):以字节为单位打印某些位的总和_Assembly_Buffer_Offset_X86 16_Tasm - Fatal编程技术网

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

Assembly 汇编(TASM):以字节为单位打印某些位的总和,assembly,buffer,offset,x86-16,tasm,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 ;---------------------------

我的目标是打印每个字节的第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)需要右方括号

我的猜测是,我真的不明白
缓冲区及其偏移量是如何工作的。如果我的猜测是正确的,有人能用这个例子简单地解释一下它发生了什么吗

顺便说一句:现在我只想打印前3个字节,而不是整个输入行

多谢各位

由于嵌入了空格字符,宏扩展有困难
通过以下方式解决:

getByteBitSum [dataBuffer+2]   ;No more embedded spaces!
printLine dataBuffer+2注意这里的相同问题!这次编译器不会给出错误,因为没有*+2*宏扩展也可以。另一方面,程序的输出将出现故障。
getByteBitSum [dataBuffer+2]   ;No more embedded spaces!