Assembly 汇编(TASM):以字节为单位打印某些位的总和
我的目标是打印每个字节的第0位和第3位的总和。这是我目前的代码: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 ;---------------------------
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!