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