标签: x86-16

硬件中断列表

有没有硬件中断列表?我正在编写一个16位应用程序,我想检查一些INT,但是,我在谷歌找不到任何有用的东西,任何1可以提供一些关于它的文档吗?如果可能,有详细信息.

我很抱歉,如果它不是一个有效的请求,但它是我认为唯一适合这个问题的地方

提前致谢

x86 assembly 16-bit x86-16

3
推荐指数
1
解决办法
5131
查看次数

8086微处理器的堆栈溢出

当堆栈已满并且即使我向其中推入某些东西时,8086微处理器的行为如何?

stack-overflow assembly callstack microprocessors x86-16

3
推荐指数
2
解决办法
1848
查看次数

NASM中断x86参考?

我似乎找不到关于 Linux 系统上 NASM x86 中断的好参考。例如,它是什么int 0x60以及它与什么不同int 0x80

是否有手册列出了可以与int指令结合使用的所有中断号?

x86 nasm system-calls x86-16

3
推荐指数
1
解决办法
5875
查看次数

从小写转换为大写

我试图从小写转换为大写.我知道它很容易完成,

SUB AL, 20H
Run Code Online (Sandbox Code Playgroud)

但我得到了另一种解决方案,

AND AL, 0DFH
Run Code Online (Sandbox Code Playgroud)

请帮我理解这个.谢谢

assembly x86-16

3
推荐指数
1
解决办法
1万
查看次数

8086 汇编 Int 21h 和扩展 ASCII 字符

我需要一些作业帮助。我需要处理 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               \n
Run 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

assembly ascii dos codepages x86-16

3
推荐指数
1
解决办法
2861
查看次数

相对跳转超出范围 0020h 字节

我一直在尝试为“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)

assembly dos tasm x86-16

3
推荐指数
1
解决办法
7076
查看次数

跳出范围解决方案以及不同指令如何影响范围

我一直在努力解决"jmp超出范围"的错误,很多时候我需要从我的代码的不同部分运行一个subrutine,就像我在C++中的函数一样.

我得到了一个观点,我的代码的两端都需要跳到同一个地方,两者都没办法到达那里.

这是什么解决方案?

我也注意到了

PRINT 'something'

似乎占用了比使用更多的"空间":

CALL PTHIS
DB 13, 10, 'something', 0
Run Code Online (Sandbox Code Playgroud)

(如果我在两次跳跃之间放置一个PRINT,我会超出范围但是如果我用PTHIS替换它就没有问题)

为什么是这样?

assembly x86-16

3
推荐指数
1
解决办法
6381
查看次数

在创建目录时,Int 21h/ah = 39h返回AX = 3

我正在尝试在DOSBOX中创建一个新目录.我在Debian上,通过DOSBOX使用MASM.代码非常简单,但不起作用.

我已经用debug执行了它,它返回错误3(执行后AX = 0003h).根据这个,这个错误是因为该路径不存在.我的DOSBOX将C:驱动器安装在.asm代码所在的目录中.

我不明白为什么我会收到这个错误.如果我mkdir C:\nuevoDOSBOX命令行运行,它将创建目录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)

assembly masm dosbox create-directory x86-16

3
推荐指数
1
解决办法
399
查看次数

装配跳/分支/查找表而不是很多cmp/je?

我刚刚开始学习汇编,并且正在制作一个简单的启动加载器作为我的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)

x86 assembly intel nasm x86-16

3
推荐指数
1
解决办法
1274
查看次数

为什么程序集8086中不允许使用变量名"name"?

当我尝试声明一个名为"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)

assembly x86-16 emu8086

3
推荐指数
1
解决办法
219
查看次数