小编h0m*_*0m3的帖子

BIOS int 10h在QEMU上打印垃圾

编写在QEMU中作为引导加载程序运行的x86实模式汇编程序时遇到问题.我正在尝试通过BIOS中断0x10打印文本.我的代码是:

print:
    pusha
.loop:
    mov AL, [SI]
    cmp AL, 0
    je .end
    call printChar
    inc SI
    jmp .loop
.end:
    popa
    ret

printChar:
    pusha
    mov AH, 0x0E
    mov BH, 0
    mov BL, 0x0F
    int 0x10
    popa
    ret
Run Code Online (Sandbox Code Playgroud)

[ORG 0x7c00]用作原点.我测试了printChar标签,并在AL中用一些字母调用它,它工作正常.当我尝试将内存地址加载到这样的消息时:

loadMsg      db "Loading",0
mov SI, loadMessage
call print
Run Code Online (Sandbox Code Playgroud)

我在QEMU仿真器上输出像'U'这样的垃圾作为输出.昨天,我编写了一个与此类似的代码,完全没有问题.是什么导致了我的问题以及如何解决?

assembly bios nasm bootloader x86-16

2
推荐指数
1
解决办法
662
查看次数

从C中的字符串开头删除char的成本较低的方法是什么?

我必须创建一个非常便宜的算法(处理器和内存)来char从C中删除第一个字符串(char数组).

我目前正在使用:

char *newvalue = strdup(value+1);
free(value);
value = newvalue;
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一些较便宜的方法可以做到这一点.字符串value是动态分配的.

c string strdup dynamic-memory-allocation

0
推荐指数
1
解决办法
117
查看次数