Tasm 指向数据的指针
Tasm pointer to data
我需要从输入字符串中一个一个地加载字符,但是我不能,因为我的指针似乎指向了错误的位置。本质上我最大的问题是我不知道如何制作像 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
我的程序应该重新打印输入,但它却打印了各种微笑
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
,你可以用xor ch, ch
使CH
(CX
的另一部分)无效。你不需要对 p
的错误大惊小怪,有一个处理器指令可以做到这一点(关键字:base plus index)。我的建议:
;cycle for each symbol
xor ch, ch
mov cl, buffer+01h
xor bx, bx ; BX = 0
ciklas:
mov dl, [buffer + 2 + bx]
mov ah, 02h
int 21h
inc bx
loop ciklas
我需要从输入字符串中一个一个地加载字符,但是我不能,因为我的指针似乎指向了错误的位置。本质上我最大的问题是我不知道如何制作像 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
我的程序应该重新打印输入,但它却打印了各种微笑
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
,你可以用xor ch, ch
使CH
(CX
的另一部分)无效。你不需要对 p
的错误大惊小怪,有一个处理器指令可以做到这一点(关键字:base plus index)。我的建议:
;cycle for each symbol
xor ch, ch
mov cl, buffer+01h
xor bx, bx ; BX = 0
ciklas:
mov dl, [buffer + 2 + bx]
mov ah, 02h
int 21h
inc bx
loop ciklas