如何使代码输出两条信息
How do I make the code to output both pieces of information
我已经尝试让它工作几个小时了,但似乎没有什么可以使输出以一行或两行的形式出现。我已经用字符串进行了之前的第二个循环,将 a 更改为 b,甚至一点一点地切换顺序。
代码:
[org 0x7c00]
mov ah, 0x0e
mov bx, varName
printString:
mov al, [bx]
cmp al, 0
je end
int 0x10
inc bx
jmp printString
end:
jmp $
varName:
db "Hello World", 0
mov bh, 0x0e
mov bl, 'Z'
int 0x10
loop:
dec bl
cmp bl, 'A' - 1
je exit
int 0x10
jmp loop
exit:
jmp $
times 510-($-$$) db 0
dw 0xaa55
当前输出:Hello World
我尝试同时删除两者,一次删除一个,并且它按预期工作运行。
注意:我正在使用 qemu、asm、vim 并且一直在使用 vscode 来帮助解决任何书写错误
changed a's to b's
不要这样做! 如果一个 api 声明它期望 AH
寄存器中的功能编号,那么它肯定无济于事尝试在 BH
寄存器中传递它。
从某种意义上说,你很幸运 jmp $
没有让你执行那个虚假的第二部分。
要执行代码的两个部分,您可以将 jmp $
(这是一个无限循环)替换为正常跳转到第二部分的第一条指令:
...
end:
jmp Part2
varName:
db "Hello World", 0
Part2:
mov ah, 0x0E ; BIOS.Teletype
mov al, 'Z'
...
或者,将数据移动到第二部分下方。这样就不需要跳转了:
...
end:
mov ah, 0x0E ; BIOS.Teletype
mov al, 'Z'
...
varName:
db "Hello World", 0
...
由于这是一个引导扇区程序,您可以查看 ,我在其中列出了一些在引导扇区程序中很重要的内容,但您当前的程序仍然缺失。例如您没有设置任何段寄存器,并且省略了 BIOS.Teletype 函数的 DisplayPage 参数。
我已经尝试让它工作几个小时了,但似乎没有什么可以使输出以一行或两行的形式出现。我已经用字符串进行了之前的第二个循环,将 a 更改为 b,甚至一点一点地切换顺序。
代码:
[org 0x7c00]
mov ah, 0x0e
mov bx, varName
printString:
mov al, [bx]
cmp al, 0
je end
int 0x10
inc bx
jmp printString
end:
jmp $
varName:
db "Hello World", 0
mov bh, 0x0e
mov bl, 'Z'
int 0x10
loop:
dec bl
cmp bl, 'A' - 1
je exit
int 0x10
jmp loop
exit:
jmp $
times 510-($-$$) db 0
dw 0xaa55
当前输出:Hello World
我尝试同时删除两者,一次删除一个,并且它按预期工作运行。
注意:我正在使用 qemu、asm、vim 并且一直在使用 vscode 来帮助解决任何书写错误
changed a's to b's
不要这样做! 如果一个 api 声明它期望 AH
寄存器中的功能编号,那么它肯定无济于事尝试在 BH
寄存器中传递它。
从某种意义上说,你很幸运 jmp $
没有让你执行那个虚假的第二部分。
要执行代码的两个部分,您可以将 jmp $
(这是一个无限循环)替换为正常跳转到第二部分的第一条指令:
...
end:
jmp Part2
varName:
db "Hello World", 0
Part2:
mov ah, 0x0E ; BIOS.Teletype
mov al, 'Z'
...
或者,将数据移动到第二部分下方。这样就不需要跳转了:
...
end:
mov ah, 0x0E ; BIOS.Teletype
mov al, 'Z'
...
varName:
db "Hello World", 0
...
由于这是一个引导扇区程序,您可以查看