有没有硬件中断列表?我正在编写一个16位应用程序,我想检查一些INT,但是,我在谷歌找不到任何有用的东西,任何1可以提供一些关于它的文档吗?如果可能,有详细信息.
我很抱歉,如果它不是一个有效的请求,但它是我认为唯一适合这个问题的地方
提前致谢
当堆栈已满并且即使我向其中推入某些东西时,8086微处理器的行为如何?
我似乎找不到关于 Linux 系统上 NASM x86 中断的好参考。例如,它是什么int 0x60以及它与什么不同int 0x80?
是否有手册列出了可以与int指令结合使用的所有中断号?
我试图从小写转换为大写.我知道它很容易完成,
SUB AL, 20H
Run Code Online (Sandbox Code Playgroud)
但我得到了另一种解决方案,
AND AL, 0DFH
Run Code Online (Sandbox Code Playgroud)
请帮我理解这个.谢谢
我需要一些作业帮助。我需要处理 ASCII 格式的纯文本文件并返回每个代码存在多少个字符(有多少个 a、有多少个 b 等)。现在它几乎完美地工作了。
\n\n我现在遇到的问题是,如果文件上有扩展 ASCII 字符,当我使用 3fh 服务中断时,它不能很好地读取它们。
\n\n例如,如果文件具有 \xc3\xa9(ascii 代码 130),则它将读取 \xc3\x9f(ascii 代码 225)。恐怕我错误地使用了中断,但我不知道该怎么做,所以这里的一点帮助将不胜感激。调试也没有帮助,因为中断执行得很好,没有错误,它只是返回缓冲区中的错误值。
\n\n这是我用来读取文件的确切代码。我有前一个中断的句柄。
\n\n xor ax,ax\n lea dx, buffer \n mov ah,3fh \n mov bx,handle \n mov cx,4096 \n int 21h \nRun Code Online (Sandbox Code Playgroud)\n\n谢谢!
\n\n编辑
\n\n我发现了问题,但不知道如何解决。结果,读取为 225 的字符不是 \xc3\xa9,而是 \xc3\xa1。根据我找到的每个 ASCII 表,\xc3\xa1 的代码应该是 160...但在 Unicode 中它是 225...这很奇怪,因为我特别告诉记事本将其保存为 ANSI,而不是 ASCII。 ..
\n我一直在尝试为“shell”编写一个基本的com文件。我只需稍加修改就能在NASM中汇编相同的代码。
然而这段代码不会在TASM中汇编!我得到了这样的错误:相对跳转超出范围我在谷歌上查了一下以了解跳转。然而,除了将这个跳跃分成相对较短的跳跃的想法之外,我找不到太多东西。有更简洁的选择吗?
这是代码:
.model tiny
CR equ 13d
LF equ 10d
TAB equ 09d
.data
prompt db CR,LF,"Input : ",0
tab_max db 7 dup('_'),0
input db 128 dup(0) ; Input Buffer Of 80 Bytes
str_ver db CR,LF,CR,LF,CR," ",\
"Version : 1.0",CR,LF,0
str_help db CR,LF,CR,LF,CR," ",\
"Type VER For Version !!!",\
CR,LF,CR," ",\
"Type CLS To Clear Screen !!!",\
CR,LF,CR," ",\
"Type HELP To Display This Message !!!",\
CR,LF,0
str_welcome db "Welcome To My Operating System …Run Code Online (Sandbox Code Playgroud) 我一直在努力解决"jmp超出范围"的错误,很多时候我需要从我的代码的不同部分运行一个subrutine,就像我在C++中的函数一样.
我得到了一个观点,我的代码的两端都需要跳到同一个地方,两者都没办法到达那里.
这是什么解决方案?
我也注意到了
PRINT 'something'
似乎占用了比使用更多的"空间":
CALL PTHIS
DB 13, 10, 'something', 0
Run Code Online (Sandbox Code Playgroud)
(如果我在两次跳跃之间放置一个PRINT,我会超出范围但是如果我用PTHIS替换它就没有问题)
为什么是这样?
我正在尝试在DOSBOX中创建一个新目录.我在Debian上,通过DOSBOX使用MASM.代码非常简单,但不起作用.
我已经用debug执行了它,它返回错误3(执行后AX = 0003h).根据这个,这个错误是因为该路径不存在.我的DOSBOX将C:驱动器安装在.asm代码所在的目录中.
我不明白为什么我会收到这个错误.如果我mkdir C:\nuevo从DOSBOX命令行运行,它将创建目录nuevo没有问题
.model small
.stack
.code
mov dx, offset filepath
mov ah, 39h
int 21h
mov ah, 4ch
int 21h
ret
filepath db "C:\nuevo", 0
end
Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习汇编,并且正在制作一个简单的启动加载器作为我的OS类的一部分.我正在努力使我的代码更有效率,即我不认为我到目前为止所做的是实现我想要的特别好的方法.也就是说,我一直在努力寻找任何在线资源,记录跳转/分支/查找表,我认为这是最有效的方法.
为了解释我想要实现的目标,我正在调用一个函数,该函数在dx寄存器中返回一个值,从0到4.目前我正在cmp逐个使用指令来比较值并进行条件je跳转价值是一样的.如果我用更高级别的语言编写这个,我基本上会if一个接一个地做多个语句,而不是使用更有效的switch语句.
所以这就是我现在正在做的事情:
cmp dx, 1
je .F_1
cmp dx, 2
je .F_2
cmp dx, 3
je .F_3
cmp dx, 4
je .F_4
cmp dx, 0
je .F_5
jmp RangeError_Handler
.F1:
mov si, msg1
jmp F_Exit
.F2:
mov si, msg2
jmp F_Exit
... ; .F3 and .F4 follow the pattern
.F5: ; special case
mov si, msg_error
call PrintLn
hlt
F_Exit:
call PrintLn
... ; and do something else
msg1: …Run Code Online (Sandbox Code Playgroud) 当我尝试声明一个名为"name"的变量时,它不起作用,它给了我一个错误,这一个there are errors.有以下解释
(22) wrong parameters: MOV BL, name
(22) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: name
Run Code Online (Sandbox Code Playgroud)
这是我的代码
; multi-segment executable file template.
data segment
; add your data here!
pkey db "press any key...$"
name db "myname"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
MOV BL, …Run Code Online (Sandbox Code Playgroud)