gpt4 book ai didi

assembly - 中断10小时不工作

转载 作者:行者123 更新时间:2023-12-03 09:24:54 25 4
gpt4 key购买 nike

我在下面的程序中遇到段错误。
这是为了将光标设置在屏幕的左上角。但为什么我在这个程序上遇到段错误?感谢您的回复。

section .text
global main
main:
mov ah, 2
mov bh, 1
mov dh, 0
mov dl, 0
int 10h

我认为问题是我正在工作的保护模式。这是一个 16 位指令,我正在 32 位机器上尝试这个!我说得对吗?

我正在 32 位 Linux Ubuntu 发行版中运行此程序。处理器是AMD C-60。

最佳答案

BIOS 中断是 16 位代码。您的操作系统已将 CPU 置于 32 位保护模式。硬件允许切换回 16 位实模式(有一些障碍需要跳过),但操作系统不允许。如果这样做的话,就不会受到很大的“保护”。它受到美国的“保护”,我的 friend !

我认为您可能想要研究的是“vt100”终端仿真。按理说,“健壮”的程序会查阅“termcaps”文件,以确保 vt100 仿真在尝试使用它之前可用。我的经验是,它“通常”在“桌面 Linux”盒子上可用,所以我只是假设它在那里。 (我认为)最糟糕的情况是,如果我们假设错误,屏幕上就会出现垃圾。

这个例子并没有完全达到你想要的效果。它保存当前光标位置(上帝知道在哪里),将光标移动到新位置,打印一条消息,然后返回到原始光标位置。您需要查找“home 光标”命令(“ESC [h”?lookitup)。只需将其写入标准输出,与“hello world”相同。您还可以获得颜色和其他东西。

; nasm -f elf32 mygem.asm
; ld -o mygem mygem.o -melf_i386

global _start

section .data
savecursor db 1Bh, '[s'
.len equ $ - savecursor

unsavecursor db 1Bh, '[u'
.len equ $ - unsavecursor

getcursor db 1Bh, '[6n'
.len equ $ - getcursor

setcursor db 1Bh, '[10;20H'
.len equ $ - setcursor

msg db "Hello, new cursor position!"
.len equ $ - msg

section .text
_start:

mov ecx, savecursor
mov edx, savecursor.len
call write_stdout


mov ecx, setcursor
mov edx, setcursor.len
call write_stdout

mov ecx, msg
mov edx, msg.len
call write_stdout

mov ecx, unsavecursor
mov edx, unsavecursor.len
call write_stdout

exit:
mov eax, 1
xor ebx, ebx
int 80h

;------------------------
write_stdout:
push eax
push ebx
mov eax, 4
mov ebx, 1
int 80h
pop ebx
pop eax
ret
;---------------------

关于assembly - 中断10小时不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23088845/

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