【发布时间】:2026-02-10 05:05:01
【问题描述】:
我正在为我的 MikeOS 端口编写一些代码。它是用 NASM x86 16 位汇编编写的。我正在尝试更改我制作的变量以具有不同的值。它编译时没有错误,但是当我调用 os_print_string 时,它会打印一些奇怪的 ASCII 字符。代码如下:
BITS 16
ORG 32768
%INCLUDE "mikedev.inc"
start:
mov si, test2 ; give si test 2 value
mov [test1], si ; give test 1 si's value
mov si, test1 ;now give test1's value to si
call os_print_string ; and print
test2 db "adsfasdfasdf", 0
test1 db "asdf", 0
我知道这段代码是多余的。我只需要一个关于如何更改变量值的解释。提前谢谢!
-瑞恩
【问题讨论】:
-
您所做的是获取
test2的地址并将其存储在test1的前两个字节中(即第一个"ad"曾经所在的位置)。您不能在运行时更改test1的地址。您可以做的是将内容(即所有字符)从test2复制到test1。请记住,test1没有足够的空间来容纳来自test2的所有字符。 -
回复迈克尔:感谢您的评论,但我想我可能不够清楚。我为 MikeOS 制作的这个项目是一种脚本语言。我试图弄清楚如何将一个变量的值分配给另一个变量(即字符串 a = b;)。
-
在这种情况下,您可能不会按照当前代码中的方式实现字符串。
test1和test2更类似于 C 中的char * const,即不能更改为指向其他任何地方的指针。
标签: variables assembly operating-system nasm interrupt