Tasm指向数据的指针

时间:2015-09-30 13:14:38

标签: assembly tasm

我需要逐个从输入字符串加载字符,但我无法,因为我的指针指向错误的位置。基本上我最大的问题是我不知道如何制作像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

我的程序应该重新打印输入,但它会打印各种微笑

1 个答案:

答案 0 :(得分:2)

Int 21/AH=0Ah的缓冲区有三个部分:size,length,string。大小是字符串的最大大小,必须初始化。

更改

buffer  db 16 dup(?)

buffer  db 16, 0, 16 dup(?)

请注意,字符串从buffer + 2开始。

偏移量的大小为16字节。如果要将偏移量存储到pp必须具有相同的大小。

更改

p db ?  ;pointer

p dw ?  ;pointer

循环由CX循环。尽可能晚地初始化它。你不知道,如果对函数(int 21h)的调用会破坏它。如果您只能加载CL,则可以使用CH取消CX({1}}的其他部分)。你不需要与xor ch, ch一起玩错误,有一个处理器指令(关键字:base plus index)。我的建议是:

p