gpt4 book ai didi

assembly - 通过bios中断获取要打印的字符串

转载 作者:行者123 更新时间:2023-12-05 01:08:20 24 4
gpt4 key购买 nike

我正在学习汇编,当然我正在试验经典的 0x10 bios 中断。我查看的资源显示使用 lodsb打印一个字符串,以便理解我试图模仿它的行为的操作码。这适用于 lodsb ,但不是我所拥有的。我究竟做错了什么?:

开始:
mov ah, 0Eh ;用于bios中断
mov si, text_string ;将源索引设置为 text_string 的开头

。重复:
;我试图模仿 lodsb 的行为来了解它是如何工作的:
mov al, [si] ; 将 si 处的字符放入 al 寄存器
add si, 1 ;增加源索引

cmp al, 0 ;如果字符为零(字符串的结尾)
je done ;结束执行

int 10h ;bios 中断将字符放在屏幕上
jmp .repeat

text_string db 'Hello, World!', 0

完毕:
回复

最佳答案

这样做通常不是一个好主意:

  • 假设所有寄存器都在中断调用(或任何调用,真的)中保留;或
  • 没有为给定的调用设置所有必需的寄存器。

  • 在第一个音符上,我会设置 ah0eh紧接在 int 10 之前.
    Int 10h/0eh需要 bhbl分别设置为页码和前景色。我也会在 int 10 之前立即这样做以确保它们为调用设置正确。

    顺便说一句,您需要确保 ds段寄存器是正确的,类似于:
    push cs
    pop ds

    因为看起来您正在将字符串放入代码段中。但是,由于 lodsb版本显然有效,我假设您已经了解了。

    而且,从(公认的褪色)内存来看,8086 有一个 inc si可能会节省少量空间的指令,并不是那么重要,但我是在每个字节都计算在内的时候伪造的:-)

    关于assembly - 通过bios中断获取要打印的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17309992/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com