2016-11-06 19 views
2

私の目標は、各バイトの0番目と3番目のビットの合計を出力することです。これは、これまでの私のコードです:アセンブリ(TASM):特定のビットの合計をバイト単位で出力する

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とそのオフセットがどのように機能するかを実際には理解していない。私の推測が正しいとすれば、誰でもこの例を使って何が起こっているのかを説明することができますか?

今のところ、私は入力行全体ではなく、最初の3バイトだけを印刷しようとしています。

ありがとうございます。

答えて

3
getByteBitSum [dataBuffer + 2] 

マクロ展開は、埋め込まれたスペース文字と難しさを持っています!
は書面でそれを解決:

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

*プリントラインのDataBuffer + 2 *ここで同じ問題に注意してください!今度はコンパイラがエラーを出さない。* + 2 *がなければマクロ展開もうまくいくからだ。一方、プログラムの出力には障害があります。 –

関連する問題