我的目标是打印每个字节的第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个字节,而不是整个输入行。
谢谢。
答案 0 :(得分:3)
getByteBitSum [dataBuffer + 2]
宏扩展对嵌入空间字符有困难!
写下来解决它:
getByteBitSum [dataBuffer+2] ;No more embedded spaces!