我需要逐个从输入字符串加载字符,但我无法,因为我的指针指向错误的位置。基本上我最大的问题是我不知道如何制作像mov dl, buffer+bl
这样的东西。这是代码:
.model small
.stack 200h
.data
buffer db 16 dup(?)
p db ? ;pointer
.code
pr1:
mov ax, @data
mov ds, ax
;read input
mov dx, offset buffer
mov ah, 0Ah
int 21h
;cycle set up
mov bl, 02h
mov cl, buffer+01h
;new line
mov ah, 02h
mov dl, 10
int 21h
;cycle for each symbol
ciklas:
mov p, offset buffer
add p, bl
mov dl, [p]
int 21h
inc bl
loop ciklas
mov ah, 4ch
mov al, 00h
int 21h
end pr1
我的程序应该重新打印输入,但它会打印各种微笑
答案 0 :(得分:2)
Int 21/AH=0Ah
的缓冲区有三个部分:size,length,string。大小是字符串的最大大小,必须初始化。
更改
buffer db 16 dup(?)
到
buffer db 16, 0, 16 dup(?)
请注意,字符串从buffer + 2
开始。
偏移量的大小为16字节。如果要将偏移量存储到p
,p
必须具有相同的大小。
更改
p db ? ;pointer
到
p dw ? ;pointer
循环由CX
循环。尽可能晚地初始化它。你不知道,如果对函数(int 21h
)的调用会破坏它。如果您只能加载CL
,则可以使用CH
取消CX
({1}}的其他部分)。你不需要与xor ch, ch
一起玩错误,有一个处理器指令(关键字:base plus index)。我的建议是:
p